diff --git a/README.md b/README.md index 6da1654e..c7d3ef10 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ #### A real-time map-based reporting system for campus infrastructure issues, built to improve visibility, accountability, and resolution efficiency. [![status](https://img.shields.io/badge/status-active-brightgreen.svg?style=flat)](https://github.com/xodivorce/infra-xodivorce-in/) -[![version](https://img.shields.io/badge/version-v1.0.1-yellow.svg?style=flat)](https://github.com/xodivorce/infra-xodivorce-in/) +[![version](https://img.shields.io/badge/version-v1.0.2-yellow.svg?style=flat)](https://github.com/xodivorce/infra-xodivorce-in/) [![PRs](https://img.shields.io/badge/PRs-welcome-blue.svg?style=flat)](https://github.com/xodivorce/infra-xodivorce-in/) > **🥰 Like this project? Please consider giving it a Star (🌟) on GitHub to show us your appreciation. Thank you!** diff --git a/schema/drop_table.sql b/schema/drop_table.sql index e85d053b..78e9c3a9 100644 --- a/schema/drop_table.sql +++ b/schema/drop_table.sql @@ -3,7 +3,6 @@ SET FOREIGN_KEY_CHECKS = 0; DROP TABLE IF EXISTS `translations`, `password_resets`, - `videos`, `contributors`, `users`, `languages`; diff --git a/src/.env.example b/src/.env.example index ca58781c..6a5b7ae5 100644 --- a/src/.env.example +++ b/src/.env.example @@ -18,3 +18,15 @@ MAIL_FROM_NAME = "Your Mail From Name Here" MAIL_TO = "Your Mail To Address Here" MAX_VISIBLE_CONTRIBUTORS = "Your Maximum Visible Contributors Here. Use: 11(default)" PROJECT_START_YEAR = "Your Project Start Year Here. Use: 2025(default)" + + +HELPDESK_EMAIL= "Your Helpdesk Email Here" +HELPDESK_PHONE= "Your Helpdesk Phone Here" +MANAGEMENT_EMAIL= "Your Management Email Here" +MANAGEMENT_PHONE= "Your Management Phone Here" +HEALTH_EMAIL= "Your Health Email Here" +HEALTH_PHONE= "Your Health Phone Here" +LIBRARY_EMAIL= "Your Library Email Here" +LIBRARY_PHONE= "Your Library Phone Here" +SECURITY_EMAIL= "Your Security Email Here" +SECURITY_PHONE= "Your Security Phone Here" \ No newline at end of file diff --git a/src/assets/_navbar.php b/src/assets/_navbar.php index 7c281a09..24c4d1b1 100644 --- a/src/assets/_navbar.php +++ b/src/assets/_navbar.php @@ -1,83 +1,39 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/assets/_sidebar.php b/src/assets/_sidebar.php index 9d1b326c..e1f984fd 100644 --- a/src/assets/_sidebar.php +++ b/src/assets/_sidebar.php @@ -1,302 +1,71 @@ - \ No newline at end of file + + + + + Overview + + + + + + + Reports + + + + + + + + + + + Status Board + + + + + + + Activity Logs + + + + + + + + System Admin + + + + + + \ No newline at end of file diff --git a/src/assets/admin/_activity_logs.php b/src/assets/admin/_activity_logs.php new file mode 100644 index 00000000..6aa77255 --- /dev/null +++ b/src/assets/admin/_activity_logs.php @@ -0,0 +1,244 @@ +
+
+

Activity Logs

+

Recent system and user activities

+
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TimestampActorActionRelated EntitySeverity
2025-12-27 14:32:15admin@systemUpdated service configurationAPI Gateway - US-East + Info +
2025-12-27 14:28:43SystemService health check failedDatabase - EU-West + Warning +
2025-12-27 14:15:22john.doe@company.comGenerated monthly reportReport #1247 + Info +
2025-12-27 13:58:09SystemCritical alert triggeredLoad Balancer - APAC + Critical +
2025-12-27 13:45:31admin@systemModified user permissionsUser: jane.smith@company.com + Info +
2025-12-27 13:22:17SystemBackup completed successfullyAll Services + Info +
2025-12-27 12:58:44mark.wilson@company.comUpdated service statusCDN - US-West + Info +
2025-12-27 12:31:05SystemHigh memory usage detectedCache Server - EU-Central + Warning +
+
+
+ + + + +
\ No newline at end of file diff --git a/src/assets/admin/_admin.php b/src/assets/admin/_admin.php new file mode 100644 index 00000000..bc4934e3 --- /dev/null +++ b/src/assets/admin/_admin.php @@ -0,0 +1,438 @@ +
+
+

Admin Panel

+

System management and administrative controls

+
+ +
+
+
+
+

Total Users

+

1,247

+
+
+ + + + +
+
+

Active: 1,189 | Suspended: 58

+
+ +
+
+
+

Pending Reports

+

34

+
+
+ + + + +
+
+

High: 8 | Medium: 15 | Low: 11

+
+ +
+
+
+

Active Incidents

+

7

+
+
+ + + + +
+
+

Critical: 2 | Warning: 5

+
+ +
+
+
+

System Health

+

98.5%

+
+
+ + + +
+
+

All services operational

+
+
+ +
+
+

User Management

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ User ID + Name + Email + Role + Status + Actions
#1001John Andersonjohn.anderson@company.com + Admin + + Active + + + +
#1002Sarah Mitchellsarah.mitchell@company.com + Moderator + + Active + + + +
#1003Michael Chenmichael.chen@company.com + User + + Active + + + +
#1004Emily Rodriguezemily.rodriguez@company.com + + User + + Suspended + + + +
#1005David Thompsondavid.thompson@company.com + Moderator + + Active + + + +
+
+
+ +
+
+

Report Moderation

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Report ID + Title + Submitted By + Priority + Status + Actions
#2045Database Connection Issuesalex.kim@company.com + High + + Pending + + + + +
#2044API Response Time Degradationmaria.santos@company.com + Medium + + Pending + + + + +
#2043UI Rendering Bugjames.wilson@company.com + Low + + Pending + + + + +
#2042Memory Leak in Productionlisa.park@company.com + High + + Pending + + + + +
+
+
+ +
+
+

System Controls

+
+
+
+
+

Maintenance Mode

+

Enable maintenance mode to perform system updates

+
+ +
+ +
+ + + + + +
+
+
+ + + + +
diff --git a/src/assets/admin/_status_board.php b/src/assets/admin/_status_board.php new file mode 100644 index 00000000..2d363618 --- /dev/null +++ b/src/assets/admin/_status_board.php @@ -0,0 +1,296 @@ +
+ +
+
+

Status Board

+

Live infrastructure and service health

+
+
+
+
+ Operational +
+
+
+ Degraded +
+
+
+ Outage +
+
+
+ + +
+
+
+
+ Overall System +
+
+
Operational
+
+ +
+
+ Services Operational +
+
+
12/14
+
+ +
+
+ Active Incidents +
+
+
2
+
+ +
+
+ Regions Affected +
+
+
0/8
+
+
+
+ + +
+

Services Status

+
+
+
+
+
+

Power Grid

+
+ Operational +
+

Running normally

+

Last updated: 2 minutes ago

+
+ +
+
+
+
+

Water Supply

+
+ Operational +
+

Running normally

+

Last updated: 5 minutes ago

+
+ +
+
+
+
+

Network Infrastructure

+
+ Degraded +
+

Partial outage in Zone C

+

Last updated: 1 minute ago

+
+ +
+
+
+
+

Road Network

+
+ Operational +
+

All routes clear

+

Last updated: 3 minutes ago

+
+ +
+
+
+
+

Public Transit

+
+ Outage +
+

Service suspended on Line 5

+

Last updated: 8 minutes ago

+
+ +
+
+
+
+

Emergency Services

+
+ Operational +
+

All systems nominal

+

Last updated: 1 minute ago

+
+
+
+ + +
+

Regional Status

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Region / AreaAffected ServicesStatusLast Update
North DistrictNone + +
+ Operational +
+
2 minutes ago
South DistrictNone + +
+ Operational +
+
4 minutes ago
East DistrictNetwork, Transit + +
+ Degraded +
+
1 minute ago
West DistrictNone + +
+ Operational +
+
3 minutes ago
Central DistrictNone + +
+ Operational +
+
5 minutes ago
+
+
+
+ + +
+

Active Incidents

+
+
+
+

Network connectivity issues in Zone C

+ High +
+
+ Investigating + 15 minutes ago +
+
+ +
+
+

Transit Line 5 service disruption

+ Critical +
+
+ Identified + 32 minutes ago +
+
+
+
+ + + + + + +
\ No newline at end of file diff --git a/src/assets/favicon/apple-touch-icon.png b/src/assets/favicon/apple-touch-icon.png index ac558202..c9a27d8d 100644 Binary files a/src/assets/favicon/apple-touch-icon.png and b/src/assets/favicon/apple-touch-icon.png differ diff --git a/src/assets/favicon/favicon-96x96.png b/src/assets/favicon/favicon-96x96.png index 96409391..ca6d25af 100644 Binary files a/src/assets/favicon/favicon-96x96.png and b/src/assets/favicon/favicon-96x96.png differ diff --git a/src/assets/favicon/favicon.ico b/src/assets/favicon/favicon.ico index 8b28947a..46727890 100644 Binary files a/src/assets/favicon/favicon.ico and b/src/assets/favicon/favicon.ico differ diff --git a/src/assets/favicon/favicon.svg b/src/assets/favicon/favicon.svg index ed73a70e..3759c8e8 100644 --- a/src/assets/favicon/favicon.svg +++ b/src/assets/favicon/favicon.svg @@ -1,9 +1,3 @@ - - - - - - -
+
+

${activity.message}

+
+ ${ + activity.timestamp + } + ${activity.status} +
+
+ `; + + return div; +} + +function getBadgeClass(status) { + const classes = { + new: "bg-blue-900/40 text-blue-400", + "in-progress": "bg-yellow-900/40 text-yellow-400", + resolved: "bg-green-900/40 text-green-400", + closed: "bg-gray-800 text-gray-400", + }; + return classes[status] || "bg-gray-800 text-gray-400"; +} + +// Initialize dashboard on page load +document.addEventListener("DOMContentLoaded", () => { + loadDashboardMetrics(); + setTimeout(() => loadRecentActivity(), 500); +}); diff --git a/src/assets/users/_overview.php b/src/assets/users/_overview.php new file mode 100644 index 00000000..23531bfc --- /dev/null +++ b/src/assets/users/_overview.php @@ -0,0 +1,96 @@ +
+ +
+ +
+
+

Total Reports

+

128

+

All submissions overview

+
+
+ + + +
+
+ +
+
+

Active Issues

+

42

+

In progress / Open

+
+
+ + + +
+
+ +
+
+

Resolved

+

86

+

Successfully closed

+
+
+ + + +
+
+
+ +
+
+

Recent Activity

+ +
+ +
+ +
+
+ +
+
+
+

+ Issue #1231 Resolved +

+ 2h ago +
+

Water leakage in park • 23/v/kpc-cst/33

+
+
+ +
+
+ +
+
+
+

Issue 1234 submitted

+ 5h ago +
+

Pothole on Main Street • 23/v/kpc-cst/36

+
+
+ +
+
+ +
+
+
+

Status: In Progress

+ 1d ago +
+

Broken Street Light • 23/v/kpc-cst/37

+
+
+ +
+
+
\ No newline at end of file diff --git a/src/assets/users/_reports.php b/src/assets/users/_reports.php new file mode 100644 index 00000000..376a149f --- /dev/null +++ b/src/assets/users/_reports.php @@ -0,0 +1,511 @@ + $limit + ? implode(' ', array_slice($w, 0, $limit)) . '…' + : $text; +} +?> + +
+ +
+
+

Campus Reports

+

Manage facility and infrastructure issues

+
+ +
+ +
+
+
+ + + + +
+ +
+
+ + + + +
+ +
+ + + + +
+
+
+
+ +
+
+
+
+ #1234 +

Pothole on Main Street

+
+ Open +
+ +
+ + + + + Main St. & 4th Ave +
+ +
+
+

Category

+

Road Damage

+
+
+

Priority

+

High

+
+
+ +
+
+ + + + Dec 15, 2024 +
+ +
+
+ +
+
+
+ #1233 +

Broken street light

+
+ In + Progress +
+ +
+ + + + + Sector 7 Park +
+ +
+
+

Category

+

Street Lighting

+
+
+

Priority

+

Medium

+
+
+ +
+
+ + + + Dec 14, 2024 +
+ +
+
+ +
+
+
+ #1232 +

Water leakage in park

+
+ Resolved +
+ +
+ + + + + Central Park Zone B +
+ +
+
+

Category

+

Water Supply

+
+
+

Priority

+

Low

+
+
+ +
+
+ + + + Dec 12, 2024 +
+ +
+
+
+ + + +
+ + \ No newline at end of file diff --git a/src/core/home/home_config.php b/src/core/home/home_config.php deleted file mode 100644 index f8a7e548..00000000 --- a/src/core/home/home_config.php +++ /dev/null @@ -1,94 +0,0 @@ - 'Zero', - 1 => 'One', - 2 => 'Two', - 3 => 'Three', - 4 => 'Four', - 5 => 'Five', - 6 => 'Six', - 7 => 'Seven', - 8 => 'Eight', - 9 => 'Nine', - 10 => 'Ten', - 11 => 'Eleven', - 12 => 'Twelve', - 13 => 'Thirteen', - 14 => 'Fourteen', - 15 => 'Fifteen', - 16 => 'Sixteen', - 17 => 'Seventeen', - 18 => 'Eighteen', - 19 => 'Nineteen', - 20 => 'Twenty', - 30 => 'Thirty', - 40 => 'Forty', - 50 => 'Fifty', - 60 => 'Sixty', - 70 => 'Seventy', - 80 => 'Eighty', - 90 => 'Ninety' - ]; - - if ($num <= 20) return $words[$num]; - if ($num < 100) { - $tens = intval($num / 10) * 10; - $ones = $num % 10; - return $words[$tens] . ($ones ? ' ' . $words[$ones] : ''); - } - return strval($num); -} - -function timeAgo($datetime) -{ - $now = new DateTime(); - $time = new DateTime($datetime); - $diff = $now->diff($time); - $isFuture = $time > $now; - - if ($diff->y >= 10) return 'A decade ago'; - if ($diff->y > 0) return ($diff->y == 1 ? 'A' : numberToWords($diff->y)) . ' year' . ($diff->y > 1 ? 's' : '') . ' ago'; - if ($diff->m > 0) return ($diff->m == 1 ? 'A' : numberToWords($diff->m)) . ' month' . ($diff->m > 1 ? 's' : '') . ' ago'; - if ($diff->d >= 7) { - $weeks = floor($diff->d / 7); - return ($weeks == 1 ? 'A' : numberToWords($weeks)) . ' week' . ($weeks > 1 ? 's' : '') . ' ago'; - } - if ($diff->d > 1) return numberToWords($diff->d) . ' days ago'; - if ($diff->d == 1) return $isFuture ? 'The next day' : 'The previous day'; - if ($diff->h > 0) return numberToWords($diff->h) . ' hour' . ($diff->h > 1 ? 's' : '') . ' ago'; - if ($diff->i > 0) return numberToWords($diff->i) . ' minute' . ($diff->i > 1 ? 's' : '') . ' ago'; - if ($diff->s > 0) return numberToWords($diff->s) . ' second' . ($diff->s > 1 ? 's' : '') . ' ago'; - return 'Just now'; -} - -function formatDuration($duration) -{ - $parts = explode(':', $duration); - if (count($parts) == 2) { - $minutes = intval($parts[0]); - $seconds = intval($parts[1]); - if ($minutes > 0 && $seconds > 0) return $minutes . 'm ' . $seconds . 's'; - if ($minutes > 0) return $minutes . 'm'; - return $seconds . ' s'; - } elseif (count($parts) == 3) { - $hours = intval($parts[0]); - $minutes = intval($parts[1]); - $seconds = intval($parts[2]); - $result = ''; - if ($hours > 0) $result .= $hours . 'h'; - if ($minutes > 0) $result .= ($result ? ' ' : '') . $minutes . 'm'; - if ($seconds > 0) $result .= ($result ? ' ' : '') . $seconds . 's'; - return $result; - } - return $duration; -} - -function formatViews($num) -{ - if ($num >= 1000000000) return round($num / 1000000000, 1) . 'B'; - if ($num >= 1000000) return round($num / 1000000, 1) . 'M'; - if ($num >= 1000) return round($num / 1000, 1) . 'k'; - return $num; -} diff --git a/src/core/init.php b/src/core/init.php index 7ed54167..749392c2 100644 --- a/src/core/init.php +++ b/src/core/init.php @@ -1,6 +1,7 @@ load(); +?> \ No newline at end of file diff --git a/src/core/languages/php/sign-in-language_config.php b/src/core/languages/php/sign-in-language_config.php deleted file mode 100644 index 6bb35d5b..00000000 --- a/src/core/languages/php/sign-in-language_config.php +++ /dev/null @@ -1,726 +0,0 @@ - [ - 'sign_in' => 'Sign in', - 'continue_to' => 'to continue to', - 'email_placeholder' => 'Email or username', - 'forgot_email' => 'Forgot the email?', - 'guest_mode' => 'Not your desktop? Use Private Browsing windows to sign in.', - 'learn_more' => 'Learn more about the Guest mode', - 'create_account' => 'Create an account', - 'next' => 'Confirm', - 'help' => 'Support', - 'privacy' => 'Privacy Policy', - 'terms' => 'Terms of Service', - 'bug' => 'Found a bug? Help us fix it' - ], - - 'English (United States)' => [ - 'sign_in' => 'Log in', - 'continue_to' => 'to continue to', - 'email_placeholder' => 'Email or username', - 'forgot_email' => 'Forgot your email?', - 'guest_mode' => 'Not your personal computer? Use Incognito mode to sign in.', - 'learn_more' => 'Learn more about using Guest mode', - 'create_account' => 'Create account', - 'next' => 'Continue', - 'help' => 'Help', - 'privacy' => 'Privacy', - 'terms' => 'Terms', - 'bug' => 'Spotted a bug? Help us fix it' - ], - - 'Español (España)' => [ - 'sign_in' => 'Iniciar sesión', - 'continue_to' => 'para continuar a', - 'email_placeholder' => 'Correo electrónico o usuario', - 'forgot_email' => '¿Olvidaste el correo?', - 'guest_mode' => '¿No es tu escritorio? Usa ventanas de navegación privada para iniciar sesión.', - 'learn_more' => 'Más información sobre el modo invitado', - 'create_account' => 'Crear una cuenta', - 'next' => 'Confirmar', - 'help' => 'Soporte', - 'privacy' => 'Política de privacidad', - 'terms' => 'Términos de servicio', - 'bug' => "¿Encontraste un error?\nAyúdanos a solucionarlo" - ], - - 'Español (Latinoamérica)' => [ - 'sign_in' => 'Iniciar sesión', - 'continue_to' => 'para continuar a', - 'email_placeholder' => 'Correo electrónico o usuario', - 'forgot_email' => '¿Olvidaste tu correo?', - 'guest_mode' => '¿No es tu computadora? Usa ventanas de navegación privada para iniciar sesión.', - 'learn_more' => 'Más información sobre el modo invitado', - 'create_account' => 'Crear una cuenta', - 'next' => 'Confirmar', - 'help' => 'Soporte', - 'privacy' => 'Política de privacidad', - 'terms' => 'Términos de servicio', - 'bug' => "¿Encontraste un error?\nAyúdanos a solucionarlo" - ], - - 'Français (Canada)' => [ - 'sign_in' => 'Se connecter', - 'continue_to' => 'pour continuer vers', - 'email_placeholder' => 'Courriel ou nom d’utilisateur', - 'forgot_email' => 'Courriel oublié ?', - 'guest_mode' => 'Ce n’est pas votre bureau ? Utilisez des fenêtres de navigation privée pour vous connecter.', - 'learn_more' => 'En savoir plus sur le mode invité', - 'create_account' => 'Créer un compte', - 'next' => 'Confirmer', - 'help' => 'Support', - 'privacy' => 'Politique de confidentialité', - 'terms' => 'Conditions d’utilisation', - 'bug' => "Vous avez trouvé un bogue?\nAidez-nous à le corriger" - ], - - 'Français (France)' => [ - 'sign_in' => 'Se connecter', - 'continue_to' => 'pour continuer vers', - 'email_placeholder' => 'Courriel ou nom d’utilisateur', - 'forgot_email' => 'Courriel oublié ?', - 'guest_mode' => 'Ce n’est pas votre bureau ? Utilisez des fenêtres de navigation privée pour vous connecter.', - 'learn_more' => 'En savoir plus sur le mode invité', - 'create_account' => 'Créer un compte', - 'next' => 'Confirmer', - 'help' => 'Support', - 'privacy' => 'Politique de confidentialité', - 'terms' => 'Conditions d’utilisation', - 'bug' => "Vous avez trouvé un bogue?\nAidez-nous à le corriger" - ], - - 'Deutsch' => [ - 'sign_in' => 'Anmelden', - 'continue_to' => 'um fortzufahren zu', - 'email_placeholder' => 'E-Mail oder Benutzername', - 'forgot_email' => 'E-Mail vergessen?', - 'guest_mode' => 'Nicht dein Desktop? Verwende Privatfenster zum Anmelden.', - 'learn_more' => 'Mehr über den Gastmodus erfahren', - 'create_account' => 'Ein Konto erstellen', - 'next' => 'Bestätigen', - 'help' => 'Support', - 'privacy' => 'Datenschutzrichtlinie', - 'terms' => 'Nutzungsbedingungen', - 'bug' => "Fehler gefunden?\nHelfen Sie uns, ihn zu beheben" - ], - - 'Gaeilge' => [ - 'sign_in' => 'Sínigh isteach', - 'continue_to' => 'chun leanúint ar aghaidh chuig', - 'email_placeholder' => 'Ríomhphost nó ainm úsáideora', - 'forgot_email' => 'Ar dhearmad tú do ríomhphost?', - 'guest_mode' => 'Ní do dheasc é seo? Úsáid fuinneoga brabhsála príobháideacha chun síniú isteach.', - 'learn_more' => 'Foghlaim níos mó faoi mhodh an aíochtaí', - 'create_account' => 'Cuir cuntas ar bun', - 'next' => 'Dearbhaigh', - 'help' => 'Tacaíocht', - 'privacy' => 'Polasaí Príobháideachta', - 'terms' => 'Téarmaí Seirbhíse', - 'bug' => "Ar aimsigh tú fabht?\nCabhraigh linn é a cheartú" - ], - - 'Indonesian' => [ - 'sign_in' => 'Masuk', - 'continue_to' => 'untuk melanjutkan ke', - 'email_placeholder' => 'Email atau nama pengguna', - 'forgot_email' => 'Lupa email?', - 'guest_mode' => 'Bukan desktop Anda? Gunakan jendela Penjelajahan Pribadi untuk masuk.', - 'learn_more' => 'Pelajari lebih lanjut tentang mode Tamu', - 'create_account' => 'Buat akun', - 'next' => 'Konfirmasi', - 'help' => 'Bantuan', - 'privacy' => 'Kebijakan Privasi', - 'terms' => 'Syarat Layanan', - 'bug' => "Menemukan bug? Bantu kami memperbaikinya" - - ], - - 'Italiano' => [ - 'sign_in' => 'Accedi', - 'continue_to' => 'per continuare a', - 'email_placeholder' => 'Email o nome utente', - 'forgot_email' => 'Hai dimenticato l’email?', - 'guest_mode' => 'Non è il tuo desktop? Usa finestre di navigazione privata per accedere.', - 'learn_more' => 'Ulteriori informazioni sulla modalità ospite', - 'create_account' => 'Crea un account', - 'next' => 'Conferma', - 'help' => 'Supporto', - 'privacy' => 'Informativa sulla privacy', - 'terms' => 'Termini di servizio', - 'bug' => "Hai trovato un bug? Aiutaci a risolverlo" - - ], - - 'Melayu' => [ - 'sign_in' => 'Log masuk', - 'continue_to' => 'untuk terus ke', - 'email_placeholder' => 'Emel atau nama pengguna', - 'forgot_email' => 'Lupa emel?', - 'guest_mode' => 'Bukan desktop anda? Gunakan tetingkap Penyemakan Imbas Peribadi untuk log masuk.', - 'learn_more' => 'Ketahui lebih lanjut mengenai mod Tetamu', - 'create_account' => 'Buat akaun', - 'next' => 'Sahkan', - 'help' => 'Sokongan', - 'privacy' => 'Dasar Privasi', - 'terms' => 'Terma Perkhidmatan', - 'bug' => "Jumpa pepijat? Bantu kami membetulkannya" - ], - - 'Nederlands' => [ - 'sign_in' => 'Inloggen', - 'continue_to' => 'om door te gaan naar', - 'email_placeholder' => 'E-mail of gebruikersnaam', - 'forgot_email' => 'E-mail vergeten?', - 'guest_mode' => 'Niet jouw desktop? Gebruik privévensters om in te loggen.', - 'learn_more' => 'Meer informatie over de gastmodus', - 'create_account' => 'Maak een account aan', - 'next' => 'Bevestigen', - 'help' => 'Ondersteuning', - 'privacy' => 'Privacybeleid', - 'terms' => 'Gebruiksvoorwaarden', - 'bug' => "Bug gevonden? Help ons dit op te lossen" - ], - - 'Norsk' => [ - 'sign_in' => 'Logg inn', - 'continue_to' => 'for å fortsette til', - 'email_placeholder' => 'E-post eller brukernavn', - 'forgot_email' => 'Glemt e-post?', - 'guest_mode' => 'Ikke din desktop? Bruk privat vindu for å logge inn.', - 'learn_more' => 'Lær mer om gjestemodus', - 'create_account' => 'Opprett en konto', - 'next' => 'Bekreft', - 'help' => 'Støtte', - 'privacy' => 'Personvern', - 'terms' => 'Vilkår for bruk', - 'bug' => "Fant du en feil? Hjelp oss å fikse den", - ], - - "O‘zbek" => [ - 'sign_in' => 'Kirish', - 'continue_to' => 'davom ettirish uchun', - 'email_placeholder' => 'Email yoki foydalanuvchi nomi', - 'forgot_email' => 'Emailni unutdingizmi?', - 'guest_mode' => 'Sizning desktopingiz emasmi? Maxfiy brauzer oynasidan foydalaning.', - 'learn_more' => 'Mehmon rejimi haqida batafsil ma’lumot', - 'create_account' => 'Hisob yaratish', - 'next' => 'Tasdiqlash', - 'help' => 'Yordam', - 'privacy' => 'Maxfiylik siyosati', - 'terms' => 'Xizmat shartlari', - 'bug' => "Xato topdingizmi? Uni tuzatishda yordam bering", - ], - - 'Português (Brasil)' => [ - 'sign_in' => 'Entrar', - 'continue_to' => 'para continuar para', - 'email_placeholder' => 'Email ou nome de usuário', - 'forgot_email' => 'Esqueceu o email?', - 'guest_mode' => 'Não é seu desktop? Use janelas de navegação privada para entrar.', - 'learn_more' => 'Saiba mais sobre o modo convidado', - 'create_account' => 'Criar uma conta', - 'next' => 'Confirmar', - 'help' => 'Suporte', - 'privacy' => 'Política de Privacidade', - 'terms' => 'Termos de Serviço', - 'bug' => "Encontrou um bug? Ajude-nos a corrigi-lo", - ], - - 'Português (Portugal)' => [ - 'sign_in' => 'Iniciar sessão', - 'continue_to' => 'para continuar para', - 'email_placeholder' => 'Email ou nome de utilizador', - 'forgot_email' => 'Esqueceu o email?', - 'guest_mode' => 'Não é o seu desktop? Utilize janelas de navegação privada para iniciar sessão.', - 'learn_more' => 'Saiba mais sobre o modo convidado', - 'create_account' => 'Criar uma conta', - 'next' => 'Confirmar', - 'help' => 'Suporte', - 'privacy' => 'Política de Privacidade', - 'terms' => 'Termos de Serviço', - 'bug' => "Encontrou um bug? Ajude-nos a corrigi-lo", - ], - - 'Română' => [ - 'sign_in' => 'Conectare', - 'continue_to' => 'pentru a continua către', - 'email_placeholder' => 'Email sau nume de utilizator', - 'forgot_email' => 'Ai uitat emailul?', - 'guest_mode' => 'Nu este desktopul tău? Folosește ferestre private pentru a te conecta.', - 'learn_more' => 'Aflați mai multe despre modul oaspete', - 'create_account' => 'Creează un cont', - 'next' => 'Confirmă', - 'help' => 'Suport', - 'privacy' => 'Politica de confidențialitate', - 'terms' => 'Termeni de serviciu', - 'bug' => "Ai găsit un bug? Ajută-ne să îl reparăm", - ], - - 'Svenska' => [ - 'sign_in' => 'Logga in', - 'continue_to' => 'för att fortsätta till', - 'email_placeholder' => 'E-post eller användarnamn', - 'forgot_email' => 'Glömt e-post?', - 'guest_mode' => 'Inte din desktop? Använd privata fönster för att logga in.', - 'learn_more' => 'Läs mer om gästläget', - 'create_account' => 'Skapa ett konto', - 'next' => 'Bekräfta', - 'help' => 'Support', - 'privacy' => 'Sekretesspolicy', - 'terms' => 'Användarvillkor', - 'bug' => "Hittade du en bugg? Hjälp oss att åtgärda den", - ], - - 'Tiếng Việt' => [ - 'sign_in' => 'Đăng nhập', - 'continue_to' => 'để tiếp tục tới', - 'email_placeholder' => 'Email hoặc tên người dùng', - 'forgot_email' => 'Quên email?', - 'guest_mode' => 'Không phải desktop của bạn? Sử dụng cửa sổ ẩn danh để đăng nhập.', - 'learn_more' => 'Tìm hiểu thêm về chế độ khách', - 'create_account' => 'Tạo tài khoản', - 'next' => 'Xác nhận', - 'help' => 'Hỗ trợ', - 'privacy' => 'Chính sách bảo mật', - 'terms' => 'Điều khoản dịch vụ', - 'bug' => "Bạn phát hiện lỗi? Giúp chúng tôi sửa nó" - ], - - 'Türkçe' => [ - 'sign_in' => 'Oturum aç', - 'continue_to' => 'devam etmek için', - 'email_placeholder' => 'E-posta veya kullanıcı adı', - 'forgot_email' => 'E-postayı unuttunuz mu?', - 'guest_mode' => 'Masaüstünüz mü değil? Özel tarama pencerelerini kullanarak oturum açın.', - 'learn_more' => 'Misafir modu hakkında daha fazla bilgi edinin', - 'create_account' => 'Hesap oluştur', - 'next' => 'Onayla', - 'help' => 'Destek', - 'privacy' => 'Gizlilik Politikası', - 'terms' => 'Hizmet Şartları', - 'bug' => "Bir hata mı buldunuz? Düzeltmemize yardımcı olun", - ], - - 'Ελληνικά' => [ - 'sign_in' => 'Σύνδεση', - 'continue_to' => 'για να συνεχίσετε στο', - 'email_placeholder' => 'Email ή όνομα χρήστη', - 'forgot_email' => 'Ξεχάσατε το email;', - 'guest_mode' => 'Δεν είναι ο υπολογιστής σας; Χρησιμοποιήστε παράθυρα ιδιωτικής περιήγησης για σύνδεση.', - 'learn_more' => 'Μάθετε περισσότερα για τη λειτουργία επισκέπτη', - 'create_account' => 'Δημιουργία λογαριασμού', - 'next' => 'Επιβεβαίωση', - 'help' => 'Υποστήριξη', - 'privacy' => 'Πολιτική Απορρήτου', - 'terms' => 'Όροι Υπηρεσίας', - 'bug' => "Βρήκατε σφάλμα; Βοηθήστε μας να το διορθώσουμε" - ], - - 'қазақ тілі' => [ - 'sign_in' => 'Кіру', - 'continue_to' => 'жалғастыру үшін', - 'email_placeholder' => 'Электрондық пошта немесе пайдаланушы аты', - 'forgot_email' => 'Электрондық поштаны ұмыттыңыз ба?', - 'guest_mode' => 'Сіздің жұмыс үстеліңіз емес пе? Жеке терезелерді қолданып кіріңіз.', - 'learn_more' => 'Қонақ режимі туралы көбірек біліңіз', - 'create_account' => 'Тіркелгі жасау', - 'next' => 'Растау', - 'help' => 'Қолдау', - 'privacy' => 'Құпиялылық саясаты', - 'terms' => 'Қызмет көрсету шарттары', - 'bug' => "Қате таптыңыз ба? Оны түзетуге көмектесіңіз" - ], - - 'монгол' => [ - 'sign_in' => 'Нэвтрэх', - 'continue_to' => 'үргэлжлүүлэх', - 'email_placeholder' => 'Имэйл эсвэл хэрэглэгчийн нэр', - 'forgot_email' => 'Имэйл мартсан уу?', - 'guest_mode' => 'Таны ширээний компьютер биш үү? Хувийн цонх ашиглан нэвтэрнэ үү.', - 'learn_more' => 'Зочны горимын талаар дэлгэрэнгүй', - 'create_account' => 'Данс үүсгэх', - 'next' => 'Баталгаажуулах', - 'help' => 'Тусламж', - 'privacy' => 'Нууцлалын бодлого', - 'terms' => 'Үйлчилгээний нөхцөл', - 'bug' => "Алдаа илэрсэн үү? Үүнийг засахад туслаач", - ], - - 'Русский' => [ - 'sign_in' => 'Войти', - 'continue_to' => 'чтобы продолжить на', - 'email_placeholder' => 'Электронная почта или имя пользователя', - 'forgot_email' => 'Забыли электронную почту?', - 'guest_mode' => 'Это не ваш рабочий стол? Используйте приватные окна для входа.', - 'learn_more' => 'Подробнее о режиме гостя', - 'create_account' => 'Создать аккаунт', - 'next' => 'Подтвердить', - 'help' => 'Поддержка', - 'privacy' => 'Политика конфиденциальности', - 'terms' => 'Условия обслуживания', - 'bug' => "Нашли ошибку?\nПомогите нам её исправить", - ], - - 'Українська' => [ - 'sign_in' => 'Увійти', - 'continue_to' => 'щоб продовжити на', - 'email_placeholder' => 'Електронна пошта або ім’я користувача', - 'forgot_email' => 'Забули електронну пошту?', - 'guest_mode' => 'Це не ваш робочий стіл? Використовуйте приватні вікна для входу.', - 'learn_more' => 'Дізнатися більше про режим гостя', - 'create_account' => 'Створити обліковий запис', - 'next' => 'Підтвердити', - 'help' => 'Підтримка', - 'privacy' => 'Політика конфіденційності', - 'terms' => 'Умови обслуговування', - 'bug' => "Знайшли помилку?\nДопоможіть нам її виправити" - ], - - 'ქართული' => [ - 'sign_in' => 'შესვლა', - 'continue_to' => 'საგრძელებლად', - 'email_placeholder' => 'ელ.ფოსტა ან მომხმარებლის სახელი', - 'forgot_email' => 'ელ.ფოსტა დაგავიწყდა?', - 'guest_mode' => 'ეს შენი დესკტოპი არ არის? გამოიყენეთ კერძო ბრაუზერის ფანჯრები შესასვლელად.', - 'learn_more' => 'გაიგე მეტი სტუმრის რეჟიმის შესახებ', - 'create_account' => 'ანგარიშის შექმნა', - 'next' => 'დადასტურება', - 'help' => 'მხარდაჭერა', - 'privacy' => "კონფიდენციალურობის\nპოლიტიკა", - 'terms' => 'სერვისის პირობები', - 'bug' => "იპოვნეთ შეცდომა?\nდაგვეხმარეთ მისი გამოსწორებაში" - ], - - 'հայերեն' => [ - 'sign_in' => 'Մուտք գործել', - 'continue_to' => 'շարունակելու համար դեպի', - 'email_placeholder' => 'Էլ.փոստ կամ օգտվողի անուն', - 'forgot_email' => 'Մոռացե՞լ եք էլ.փոստը', - 'guest_mode' => 'ԴՁեր աշխատասեղանի մոտ չե՞ք: Օգտագործեք մասնավոր զննարկիչ մուտք գործելու համար:', - 'learn_more' => 'Իմանալ ավելին «Հյուրի» ռեժիմի մասին', - 'create_account' => 'Ստեղծել հաշիվ', - 'next' => 'Հաստատել', - 'help' => 'Աջակցություն', - 'privacy' => "Գաղտնիության\nքաղաքականություն", - 'terms' => "Ծառայության\nպայմաններ", - 'bug' => "Սխալ գտա՞ք։\nՕգնեք մեզ այն շտկել" - ], - - 'اردو‎' => [ - 'sign_in' => 'لاگ ان', - 'continue_to' => 'جاری رکھنے کے لیے', - 'email_placeholder' => 'ای میل یا صارف نام', - 'forgot_email' => 'ای میل بھول گئے؟', - 'guest_mode' => 'یہ آپ کا ڈیسک ٹاپ نہیں ہے؟ سائن ان کرنے کے لیے پرائیویٹ براؤزنگ ونڈوز استعمال کریں۔', - 'learn_more' => 'مہمان موڈ کے بارے میں مزید جانیں', - 'create_account' => 'اکاؤنٹ بنائیں', - 'next' => 'تصدیق کریں', - 'help' => 'مدد', - 'privacy' => 'پرائیویسی پالیسی', - 'terms' => 'سروس کی شرائط', - 'bug' => "کیا آپ نے کوئی خرابی دیکھی؟ ہماری مدد کریں اسے درست کرنے میں" - ], - - 'العربية‎' => [ - 'sign_in' => 'تسجيل الدخول', - 'continue_to' => 'للإستمرار إلى', - 'email_placeholder' => 'البريد الإلكتروني أو اسم المستخدم', - 'forgot_email' => 'نسيت البريد الإلكتروني؟', - 'guest_mode' => 'ليس سطح المكتب الخاص بك؟ استخدم نوافذ التصفح الخاصة لتسجيل الدخول.', - 'learn_more' => 'تعرف على المزيد حول وضع الضيف', - 'create_account' => 'إنشاء حساب', - 'next' => 'تأكيد', - 'help' => 'الدعم', - 'privacy' => 'سياسة الخصوصية', - 'terms' => 'شروط الخدمة', - 'bug' => "هل وجدت خطأً؟ ساعدنا في إصلاحه" - ], - - 'हिन्दी' => [ - 'sign_in' => 'साइन इन', - 'continue_to' => 'जारी रखने के लिए', - 'email_placeholder' => 'ईमेल या उपयोगकर्ता नाम', - 'forgot_email' => 'ईमेल भूल गए?', - 'guest_mode' => 'यह आपका डेस्कटॉप नहीं है? साइन इन करने के लिए प्राइवेट ब्राउज़िंग विंडो का उपयोग करें।', - 'learn_more' => 'गेस्ट मोड के बारे में और जानें', - 'create_account' => 'खाता बनाएं', - 'next' => 'पुष्टि करें', - 'help' => 'सहायता', - 'privacy' => 'गोपनीयता नीति', - 'terms' => 'सेवा की शर्तें', - 'bug' => "क्या आपको कोई बग मिला? हमारी मदद करें इसे ठीक करने में" - ], - - 'অসমীয়া' => [ - 'sign_in' => 'সাইন ইন', - 'continue_to' => 'অগ্ৰগতি কৰিবলৈ', - 'email_placeholder' => 'ইমেইল বা ব্যৱহাৰকাৰীৰ নাম', - 'forgot_email' => 'ইমেইল পাহৰি গ’ল?', - 'guest_mode' => 'এয়া আপোনাৰ ডেস্কটপ নহয়? সাইন ইন কৰিবলৈ ব্যক্তিগত ব্ৰাউজিং উইণ্ডো ব্যৱহাৰ কৰক।', - 'learn_more' => 'গেষ্ট মোডৰ বিষয়ে বেছি জানক', - 'create_account' => 'একাউণ্ট বনাওক', - 'next' => 'নিশ্চিত কৰক', - 'help' => 'সহায়', - 'privacy' => 'গোপনীয়তা নীতি', - 'terms' => 'সেৱাৰ চৰ্তাৱলী', - 'bug' => "আপুনি কোনো ত্ৰুটি পাইলেনে? আমাক ইয়াক ঠিক কৰিবলৈ সহায় কৰক" - ], - - 'বাংলা (India)' => [ - 'sign_in' => 'সাইন ইন', - 'continue_to' => 'চালিয়ে যেতে', - 'email_placeholder' => 'ইমেল বা ব্যবহারকারীর নাম', - 'forgot_email' => 'ইমেল ভুলে গেছেন?', - 'guest_mode' => 'এটি আপনার ডেস্কটপ নয়? সাইন ইন করার জন্য প্রাইভেট ব্রাউজিং উইন্ডো ব্যবহার করুন।', - 'learn_more' => 'গেস্ট মোড সম্পর্কে আরও জানুন', - 'create_account' => 'একাউন্ট তৈরি করুন', - 'next' => 'নিশ্চিত করুন', - 'help' => 'সাহায্য', - 'privacy' => 'গোপনীয়তা নীতি', - 'terms' => 'সার্ভিসের শর্তাবলী', - 'bug' => "কোনও ত্ৰুটি দেখেছেন? আমাদের সেটি ঠিক করতে সাহায্য করুন" - ], - - 'বাংলা (Bangladesh)' => [ - 'sign_in' => 'সাইন ইন', - 'continue_to' => 'চালিয়ে যেতে', - 'email_placeholder' => 'ইমেল বা ব্যবহারকারীর নাম', - 'forgot_email' => 'ইমেল ভুলে গেছেন?', - 'guest_mode' => 'এটি আপনার ডেস্কটপ নয়? সাইন ইন করার জন্য প্রাইভেট ব্রাউজিং উইন্ডো ব্যবহার করুন।', - 'learn_more' => 'গেস্ট মোড সম্পর্কে আরও জানুন', - 'create_account' => 'একাউন্ট তৈরি করুন', - 'next' => 'নিশ্চিত করুন', - 'help' => 'সাহায্য', - 'privacy' => 'গোপনীয়তা নীতি', - 'terms' => 'সার্ভিসের শর্তাবলী', - 'bug' => "কোনও ত্ৰুটি দেখেছেন? আমাদের সেটি ঠিক করতে সাহায্য করুন" - ], - - 'ਪੰਜਾਬੀ' => [ - 'sign_in' => 'ਸਾਈਨ ਇਨ', - 'continue_to' => 'ਜਾਰੀ ਰੱਖਣ ਲਈ', - 'email_placeholder' => 'ਈਮੇਲ ਜਾਂ ਉਪਭੋਗਤਾ ਨਾਮ', - 'forgot_email' => 'ਈਮੇਲ ਭੁੱਲ ਗਏ?', - 'guest_mode' => 'ਇਹ ਤੁਹਾਡਾ ਡੈਸਕਟਾਪ ਨਹੀਂ ਹੈ? ਸਾਈਨ ਇਨ ਕਰਨ ਲਈ ਪ੍ਰਾਈਵੇਟ ਬ੍ਰਾਉਜ਼ਿੰਗ ਵਰਤੋਂ।', - 'learn_more' => 'ਗੈਸਟ ਮੋਡ ਬਾਰੇ ਹੋਰ ਜਾਣੋ', - 'create_account' => 'ਖਾਤਾ ਬਣਾਓ', - 'next' => 'ਪੁਸ਼ਟੀ ਕਰੋ', - 'help' => 'ਮਦਦ', - 'privacy' => 'ਪ੍ਰਾਈਵੇਸੀ', - 'terms' => 'ਸ਼ਰਤਾਂ', - 'bug' => "ਕੀ ਤੁਸੀਂ ਕੋਈ ਬੱਗ ਲੱਭਿਆ? ਸਾਡੇ ਨੂੰ ਇਸਨੂੰ ਠੀਕ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰੋ" - ], - - 'ગુજરાતી' => [ - 'sign_in' => 'સાઇન ઇન', - 'continue_to' => 'ચાલુ રાખવા માટે', - 'email_placeholder' => 'ઇમેલ અથવા વપરાશકર્તા નામ', - 'forgot_email' => 'ઇમેલ ભૂલી ગયા?', - 'guest_mode' => 'આ તમારું ડેસ્કટોપ નથી? સાઇન ઇન કરવા માટે પ્રાઇવેટ બ્રાઉઝિંગ વાપરો.', - 'learn_more' => 'ગેસ્ટ મોડ વિશે વધુ જાણો', - 'create_account' => 'એકાઉન્ટ બનાવો', - 'next' => 'સંદેશની પુષ્ટિ કરો', - 'help' => 'મદદ', - 'privacy' => 'ગોપનીયતા', - 'terms' => 'શરતો', - 'bug' => "શું તમને કોઈ ભૂલ મળી? અમને તેને સુધારવામાં મદદ કરો" - ], - - 'ଓଡ଼ିଆ' => [ - 'sign_in' => 'ସାଇନ୍ ଇନ୍', - 'continue_to' => 'ଚାଲୁ ରଖିବା ପାଇଁ', - 'email_placeholder' => 'ଇମେଲ୍ କିମ୍ବା ବ୍ୟବହାରକାରୀ ନାମ', - 'forgot_email' => 'ଇମେଲ୍ ଭୁଲିଗଲେ?', - 'guest_mode' => 'ଏହା ଆପଣଙ୍କର ଡେସ୍କଟପ୍ ନୁହେଁ? ସାଇନ୍ ଇନ୍ କରିବା ପାଇଁ ପ୍ରାଇଭେଟ୍ ବ୍ରାଉଜିଂ ୱିଣ୍ଡୋ ବ୍ୟବହାର କରନ୍ତୁ।', - 'learn_more' => 'ଗେଷ୍ଟ୍ ମୋଡ୍ ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ', - 'create_account' => 'ଏକ ଖାତା ତିଆରି କରନ୍ତୁ', - 'next' => 'ନିଶ୍ଚିତ କରନ୍ତୁ', - 'help' => 'ସହାୟତା', - 'privacy' => 'ଗୋପନୀୟତା', - 'terms' => 'ସେବା ନୀତି', - 'bug' => "ଆପଣ କିଛି ତ୍ରୁଟି ଦେଖିଛନ୍ତି? ଆମକୁ ଏହା ଠିକ କରିବାରେ ସାହାଯ୍ୟ କରନ୍ତୁ" - ], - - 'தமிழ்' => [ - 'sign_in' => 'சைன் இன்', - 'continue_to' => 'தொடர திரும்ப', - 'email_placeholder' => 'மின்னஞ்சல் அல்லது பயனர் பெயர்', - 'forgot_email' => 'மின்னஞ்சல் மறந்துவிட்டீர்களா?', - 'guest_mode' => 'இது உங்கள் டெஸ்க்டாப் அல்லவா? சைன் இன் செய்ய தனிப்பட்ட பிரௌசிங் பயன்படுத்தவும்.', - 'learn_more' => 'கெஸ்ட் மோடு பற்றி மேலும் அறிக', - 'create_account' => 'கணக்கு உருவாக்கவும்', - 'next' => 'தொடரவும்', - 'help' => 'உதவி', - 'privacy' => 'தனியுரிமை', - 'terms' => 'சேவை நிபந்தனைகள்', - 'bug' => "பிழை கண்டறிந்தீர்களா? அதை சரி செய்ய எங்களுக்கு உதவுங்கள்" - ], - - 'తెలుగు' => [ - 'sign_in' => 'సైన్ ఇన్', - 'continue_to' => 'కొనసాగడానికి', - 'email_placeholder' => 'ఇమెయిల్ లేదా యూజర్ పేరు', - 'forgot_email' => 'ఇమెయిల్ మర్చిపోయారా?', - 'guest_mode' => 'ఇది మీ డెస్క్‌టాప్ కాదు? సైన్ ఇన్ చేసేందుకు ప్రైవేట్ బ్రౌజింగ్ విండో ఉపయోగించండి.', - 'learn_more' => 'అతిథి మోడ్ గురించి మరింత తెలుసుకోండి', - 'create_account' => 'ఖాతా సృష్టించండి', - 'next' => 'తదుపరి', - 'help' => 'సహాయం', - 'privacy' => 'గోప్యతా విధానం', - 'terms' => 'సేవా నిబంధనలు', - 'bug' => "దోషం కనపడిందా? దాన్ని సరిచేయడంలో మాకు సహాయపడండి" - ], - - 'ಕನ್ನಡ' => [ - 'sign_in' => 'ಸೈನ್ ಇನ್', - 'continue_to' => 'ಮುಂದುವರಿಸಲು', - 'email_placeholder' => 'ಇಮೇಲ್ ಅಥವಾ ಬಳಕೆದಾರ ಹೆಸರು', - 'forgot_email' => 'ಇಮೇಲ್ ಮರೆತಿದ್ದೀರಾ?', - 'guest_mode' => 'ಇದು ನಿಮ್ಮ ಡೆಸ್ಕ್‌ಟಾಪ್ ಅಲ್ಲವೇ? ಸೈನ್ ಇನ್ ಮಾಡಲು ಪ್ರೈವೇಟ್ ಬ್ರೌಸಿಂಗ್ ಬಳಸಿ.', - 'learn_more' => 'ಅತಿಥಿ ಮೋಡ್ ಬಗ್ಗೆ ಹೆಚ್ಚು ತಿಳಿಯಿರಿ', - 'create_account' => 'ಖಾತೆ ರಚಿಸಿ', - 'next' => 'ಮುಂದುವರಿಸಿ', - 'help' => 'ಸಹಾಯ', - 'privacy' => 'ಗೊಪ್ಯತೆ', - 'terms' => 'ಸೇವೆ ನಿಯಮಗಳು', - 'bug' => "ನೀವು ಒಂದು ದೋಷ ಕಂಡಿದ್ದೀರಾ? ಇದನ್ನು ಸರಿಪಡಿಸಲು ನಮಗೆ ಸಹಾಯ ಮಾಡಿ" - ], - - 'മലയാളം' => [ - 'sign_in' => 'സൈൻ ഇൻ', - 'continue_to' => 'തുടരാൻ', - 'email_placeholder' => 'ഇമെയിൽ അല്ലെങ്കിൽ ഉപയോക്തൃനാമം', - 'forgot_email' => 'ഇമെയിൽ മറന്നോ?', - 'guest_mode' => 'ഇത് നിങ്ങളുടെ ഡെസ്ക്ടോപ്പ് അല്ലേ? സൈൻ ഇൻ ചെയ്യാൻ പ്രൈവറ്റ് ബ്രൗസിംഗ് ഉപയോഗിക്കുക.', - 'learn_more' => 'ഗസ്റ്റ് മോഡ് ഉപയോഗത്തെ കുറിച്ച് കൂടുതൽ അറിയുക', - 'create_account' => 'അക്കൗണ്ട് സൃഷ്‌ടിക്കുക', - 'next' => 'തുടരുക', - 'help' => 'സഹായം', - 'privacy' => 'സ്വകാര്യത', - 'terms' => 'നിയമങ്ങൾ', - 'bug' => "ഒരു പിശക് കണ്ടോ? ദയവായി അത് ശരിയാക്കാൻ ഞങ്ങളെ സഹായിക്കുക" - ], - - 'سنڌي' => [ - 'sign_in' => 'سائن ان', - 'continue_to' => 'جاري رکڻ لاءِ', - 'email_placeholder' => 'ايميل يا يوزر نالو', - 'forgot_email' => 'ايميل وساري وياسين؟', - 'guest_mode' => 'ڇا هي توهان جو ڪمپيوٽر ناهي؟ سائن ان ڪرڻ لاءِ پرائيويٽ برائوزنگ استعمال ڪريو.', - 'learn_more' => 'گيسٽ موڊ بابت وڌيڪ ڄاڻو', - 'create_account' => 'اڪائونٽ ٺاهيو', - 'next' => 'اڳتي وڌو', - 'help' => 'مدد', - 'privacy' => 'رازداري', - 'terms' => 'شرطن', - 'bug' => 'ڇا توهان کي ڪو بگ مليو؟ ان کي درست ڪرڻ ۾ اسان جي مدد ڪريو' - ], - - 'मराठी' => [ - 'sign_in' => 'साइन इन', - 'continue_to' => 'सुरू ठेवण्यासाठी', - 'email_placeholder' => 'ईमेल किंवा वापरकर्तानाव', - 'forgot_email' => 'ईमेल विसरलात?', - 'guest_mode' => 'हे तुमचे डेस्कटॉप नाही? साइन इन करण्यासाठी प्रायव्हेट ब्राउझिंग वापरा.', - 'learn_more' => 'गेस्ट मोडबद्दल अधिक जाणून घ्या', - 'create_account' => 'खाते तयार करा', - 'next' => 'सुरू ठेवा', - 'help' => 'सहाय्य', - 'privacy' => 'गोपनीयता', - 'terms' => 'अटी', - 'bug' => 'तुम्हाला एखादी बग सापडली का? ती दुरुस्त करण्यात आमची मदत करा' - ], - - 'नेपाली' => [ - 'sign_in' => 'साइन इन', - 'continue_to' => 'जारी राख्न', - 'email_placeholder' => 'इमेल वा प्रयोगकर्ता नाम', - 'forgot_email' => 'इमेल बिर्सनुभयो?', - 'guest_mode' => 'यो तपाईंको डेस्कटप होइन? साइन इन गर्न प्राइभेट ब्राउजिङ प्रयोग गर्नुहोस्।', - 'learn_more' => 'गेस्ट मोडको बारेमा जान्नुहोस्', - 'create_account' => 'खाता सिर्जना गर्नुहोस्', - 'next' => 'जारी राख्नुहोस्', - 'help' => 'सहायता', - 'privacy' => 'गोपनीयता', - 'terms' => 'सर्तहरू', - 'bug' => 'के तपाईँले कुनै बग फेला पार्नुभयो? कृपया यसलाई सच्याउन हामीलाई मद्दत गर्नुहोस्' - ], - - 'ไทย' => [ - 'sign_in' => 'เข้าสู่ระบบ', - 'continue_to' => 'ดำเนินการต่อไปยัง', - 'email_placeholder' => 'อีเมลหรือชื่อผู้ใช้', - 'forgot_email' => 'ลืมอีเมลใช่ไหม?', - 'guest_mode' => 'นี่ไม่ใช่เดสก์ท็อปของคุณ? ใช้หน้าต่างการท่องเว็บส่วนตัวเพื่อลงชื่อเข้าใช้', - 'learn_more' => 'เรียนรู้เพิ่มเติมเกี่ยวกับโหมดผู้เยี่ยมชม', - 'create_account' => 'สร้างบัญชี', - 'next' => 'ดำเนินการต่อ', - 'help' => 'ช่วยเหลือ', - 'privacy' => 'ความเป็นส่วนตัว', - 'terms' => 'ข้อกำหนด', - 'bug' => 'พบข้อผิดพลาด? โปรดช่วยเราแก้ไข' - ], - - '한국어' => [ - 'sign_in' => '로그인', - 'continue_to' => '계속 진행', - 'email_placeholder' => '이메일 또는 사용자 이름', - 'forgot_email' => '이메일을 잊으셨나요?', - 'guest_mode' => '데스크톱이 아닌가요? 개인 정보 보호 브라우징 창을 사용하여 로그인하세요.', - 'learn_more' => '게스트 모드에 대해 자세히 알아보기', - 'create_account' => '계정 만들기', - 'next' => '계속', - 'help' => '도움말', - 'privacy' => '개인정보', - 'terms' => '약관', - 'bug' => '버그를 발견하셨나요? 수정하는 데 도움을 주세요' - ], - - '日本語' => [ - 'sign_in' => 'サインイン', - 'continue_to' => '次へ進む', - 'email_placeholder' => 'メールアドレスまたはユーザー名', - 'forgot_email' => 'メールアドレスをお忘れですか?', - 'guest_mode' => 'デスクトップではありませんか?プライベートブラウジングウィンドウでサインインしてください。', - 'learn_more' => 'ゲストモードについて詳しく', - 'create_account' => 'アカウント作成', - 'next' => '続行', - 'help' => 'ヘルプ', - 'privacy' => 'プライバシー', - 'terms' => '利用規約', - 'bug' => 'バグを見つけましたか?修正にご協力ください' - ], - - '简体中文' => [ - 'sign_in' => '登录', - 'continue_to' => '继续至', - 'email_placeholder' => '邮箱或用户名', - 'forgot_email' => '忘记邮箱?', - 'guest_mode' => '不是您的桌面?请使用隐私浏览窗口登录。', - 'learn_more' => '了解更多访客模式信息', - 'create_account' => '创建账户', - 'next' => '继续', - 'help' => '帮助', - 'privacy' => '隐私', - 'terms' => '条款', - 'bug' => '发现错误了吗?请帮助我们修复它' - ], - - '繁體中文' => [ - 'sign_in' => '登入', - 'continue_to' => '繼續至', - 'email_placeholder' => '電子郵件或用戶名', - 'forgot_email' => '忘記電子郵件?', - 'guest_mode' => '不是您的桌面?請使用隱私瀏覽視窗登入。', - 'learn_more' => '了解更多訪客模式資訊', - 'create_account' => '建立帳號', - 'next' => '繼續', - 'help' => '幫助', - 'privacy' => '隱私', - 'terms' => '條款', - 'bug' => '發現錯誤了嗎?請幫助我們修復它' - ], -]; diff --git a/src/core/router.php b/src/core/router.php new file mode 100644 index 00000000..41c81ac1 --- /dev/null +++ b/src/core/router.php @@ -0,0 +1,64 @@ + [ + 'role' => 'user', + 'label' => 'Overview', + 'icon' => 'home', + 'file' => './assets/users/_overview.php', + 'nav' => true, + ], + 'reports' => [ + 'role' => 'user', + 'label' => 'Reports', + 'icon' => 'file-text', + 'file' => './assets/users/_reports.php', + 'nav' => true, + ], + 'status-board' => [ + 'role' => 'admin', + 'label' => 'Status Board', + 'icon' => 'activity', + 'file' => './assets/admin/_status_board.php', + 'nav' => true, + ], + 'activity-logs' => [ + 'role' => 'admin', + 'label' => 'Activity Logs', + 'icon' => 'clock', + 'file' => './assets/admin/_activity_logs.php', + 'nav' => true, + ], + 'admin' => [ + 'role' => 'admin', + 'label' => 'Admin', + 'icon' => 'settings', + 'file' => './assets/admin/_admin.php', + 'nav' => true, + ], +]; + +if (!isset($routes[$page])) { + $page = $is_admin ? 'status-board' : 'overview'; +} + +$routeRole = $routes[$page]['role']; + +if ( + ($routeRole === 'admin' && !$is_admin) || + ($routeRole === 'user' && $is_admin) +) { + $page = $is_admin ? 'status-board' : 'overview'; +} + +$current_route = $routes[$page]; +?> \ No newline at end of file diff --git a/src/core/test/test_user.php b/src/core/test/test_user.php deleted file mode 100644 index 335c173a..00000000 --- a/src/core/test/test_user.php +++ /dev/null @@ -1,168 +0,0 @@ -prepare("SELECT username, email, password_hash FROM users WHERE id = ? LIMIT 1"); - if ($stmt) { - $stmt->bind_param("i", $user_id); - $stmt->execute(); - $stmt->bind_result($db_username, $db_email, $db_password_hash); - $stmt->fetch(); - if (!empty($db_username)) - $username = $db_username; - if (!empty($db_email)) - $email = $db_email; - $password_hash = $db_password_hash; - $stmt->close(); - } else { - die("Database error: " . htmlspecialchars($conn->error)); - } -} -?> - - - - - - Account Test Page - - - - - - -
-
-
-

Account Info — Test

-
- Status: - - - -
-
- -
-
-
Username
-
-
- -
-
Email
-
-
- -
-
Password
-
- -
- - -
-

Plaintext available from session for testing purposes - only.

- -
Plaintext not stored, password hashed(secure).
- -
-
- -
-
Password Hash
-
-
-
- -
-
User ID
-
-
- -
-
Session Data
-
- -
-
-
- -
-
- -
- -
- -
-
- - - - - \ No newline at end of file diff --git a/src/home.php b/src/home.php deleted file mode 100644 index 6be40b40..00000000 --- a/src/home.php +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <?php echo htmlspecialchars(!empty($_ENV['DOMAIN']) ? $_ENV['DOMAIN'] : 'UNKNOWN DOMAIN'); ?> - - - - - - - - - - - - -
-
- - query($sql); - - if ($result->num_rows > 0): - while ($row = $result->fetch_assoc()): - ?> - -
- -
- video thumbnail - - - -
- -
- channel -
-

-

-

- views • - -

-
-
-
- - No videos found.

"; - endif; - ?> - -
-
- - - - - - - - \ No newline at end of file diff --git a/src/index.php b/src/index.php index b809808b..3dba8c52 100644 --- a/src/index.php +++ b/src/index.php @@ -1,9 +1,7 @@ \ No newline at end of file diff --git a/src/pages/account.php b/src/pages/account.php new file mode 100644 index 00000000..5dd3d5fc --- /dev/null +++ b/src/pages/account.php @@ -0,0 +1,393 @@ +prepare("SELECT username, email, is_admin FROM users WHERE id = ? LIMIT 1"); +if ($stmt) { + $stmt->bind_param("i", $user_id); + $stmt->execute(); + $stmt->bind_result($db_username, $db_email, $db_is_admin); + if ($stmt->fetch()) { + $username = $db_username; + $email = $db_email; + $is_admin = ((int) $db_is_admin === 1); + } + $stmt->close(); +} + +$email_initial = strtoupper(substr($email, 0, 1)); + +$helpdesk_email = $_ENV['HELPDESK_EMAIL']; +$helpdesk_phone = $_ENV['HELPDESK_PHONE']; + +$management_email = $_ENV['MANAGEMENT_EMAIL']; +$management_phone = $_ENV['MANAGEMENT_PHONE']; + +$health_email = $_ENV['HEALTH_EMAIL']; +$health_phone = $_ENV['HEALTH_PHONE']; + +$library_email = $_ENV['LIBRARY_EMAIL']; +$library_phone = $_ENV['LIBRARY_PHONE']; + +$security_email = $_ENV['SECURITY_EMAIL']; +$security_phone = $_ENV['SECURITY_PHONE']; +?> + + + + + + + + + + + + + + + + + + + + + + <?php echo htmlspecialchars(($_ENV['DOMAIN']) . ' - Account'); ?> + + + + + + +
+ + +
+ +
+
+ +
+ +
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+ +
+

+ +

+ +
+ + + + + + + Verified + +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+

Your Identification

+

View the University credentials & access details +

+
+
+ + + +
+
+ +
+ +
+ +
+
+
+ + + +
+
+ +
+
+ +
+
+ +
+ +
+
+
+ + + +
+
+ +
+
+ +
+
+ +
+
+ +
+

Account Status

+

+ Activated +

+
+ + + + + +
+ +
+
+

CAMPUS ROLE

+

+ +

+
+ + + +
+
+ +
+
+
+
+ + +
+ + + +
+
+

+ IT Helpdesk Support

+
+

+

+
+
+
+ +
+
+ + + +
+
+

+ Management Support

+
+

+

+
+
+
+ +
+
+ + + +
+
+

+ Health & Food Support

+
+

+

+
+
+
+ +
+
+ + + +
+
+

+ Library & Books Support

+
+

+

+
+
+
+ +
+
+ + + +
+
+

+ Campus Security Support

+
+

+

+
+
+
+ +
+
+ +
+ + + + + + \ No newline at end of file diff --git a/src/create_account_info.php b/src/pages/create_account_info.php similarity index 91% rename from src/create_account_info.php rename to src/pages/create_account_info.php index 98865ff1..2fdc9cdd 100644 --- a/src/create_account_info.php +++ b/src/pages/create_account_info.php @@ -2,9 +2,9 @@ session_start(); // Initialize the application -include './core/init.php'; -include './core/connection.php'; -include './core/languages/language_config.php'; +include './../core/init.php'; +include './../core/connection.php'; +include './../core/languages/language_config.php'; // Suppress all PHP errors in production environment ini_set('display_errors', 0); @@ -54,15 +54,15 @@ if (empty($current_texts) && !empty($languages)) { - - - - - - + + + + + + - + @@ -73,7 +73,7 @@ if (empty($current_texts) && !empty($languages)) { <?php echo htmlspecialchars(!empty($_ENV['DOMAIN']) ? $_ENV['DOMAIN'] : 'UNKNOWN DOMAIN'); ?> - + @@ -84,7 +84,7 @@ if (empty($current_texts) && !empty($languages)) {
- xovae-logo

@@ -195,6 +195,6 @@ if (empty($current_texts) && !empty($languages)) { - + \ No newline at end of file diff --git a/src/create_account_password.php b/src/pages/create_account_password.php similarity index 90% rename from src/create_account_password.php rename to src/pages/create_account_password.php index 6d2b795e..4fbb2236 100644 --- a/src/create_account_password.php +++ b/src/pages/create_account_password.php @@ -2,9 +2,9 @@ session_start(); // Initialize the application -include './core/init.php'; -include './core/connection.php'; -include './core/languages/language_config.php'; +include './../core/init.php'; +include './../core/connection.php'; +include './../core/languages/language_config.php'; // Suppress all PHP errors in production environment ini_set('display_errors', 0); @@ -69,7 +69,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && empty($error) && isset($_POST['pass if ($stmt) { $stmt->bind_param("ssiss", $username, $email, $age, $gender, $password_hash); if ($stmt->execute()) { - include './core/auth/mail/create_account_config.php'; + include './../core/auth/mail/create_account_config.php'; sendAccountCreationMail($email, $username); unset($_SESSION['signup']); @@ -99,15 +99,15 @@ if (empty($current_texts) && !empty($languages)) { - - - - - - + + + + + + - + @@ -118,7 +118,7 @@ if (empty($current_texts) && !empty($languages)) { <?php echo htmlspecialchars(!empty($_ENV['DOMAIN']) ? $_ENV['DOMAIN'] : 'UNKNOWN DOMAIN'); ?> - + @@ -128,7 +128,7 @@ if (empty($current_texts) && !empty($languages)) {
- xovae-logo

@@ -218,6 +218,6 @@ if (empty($current_texts) && !empty($languages)) { - + \ No newline at end of file diff --git a/src/pages/dashboard.php b/src/pages/dashboard.php new file mode 100644 index 00000000..7c69d634 --- /dev/null +++ b/src/pages/dashboard.php @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?php echo htmlspecialchars($_ENV['DOMAIN'] . ' - Dashboard'); ?> + + + + + + + + + +
+ + + + +
+
+ +
+
+ +
+ + + + + \ No newline at end of file diff --git a/src/pages/error/404.php b/src/pages/error/404.php new file mode 100644 index 00000000..88eb92fc --- /dev/null +++ b/src/pages/error/404.php @@ -0,0 +1,406 @@ + + + + + + + + + + Service Paused - <?php echo htmlspecialchars($_ENV['DOMAIN']); ?> + + + + + + + + + + + + + + + + + +
+
+
404 errorpage not found
+ + + + +
+ + + + +
+ + + + +
sorry about that! + + + +
+
+ + + \ No newline at end of file diff --git a/src/feedback.php b/src/pages/feedback.php similarity index 91% rename from src/feedback.php rename to src/pages/feedback.php index ac9e85be..8174c733 100644 --- a/src/feedback.php +++ b/src/pages/feedback.php @@ -16,15 +16,15 @@ include './core/init.php'; - - - - - - + + + + + + - + @@ -35,14 +35,14 @@ include './core/init.php'; <?php echo htmlspecialchars(!empty($_ENV['DOMAIN']) ? $_ENV['DOMAIN'] : 'UNKNOWN DOMAIN'); ?> - + - - - + + +
- xovae-logo + xovae-logo

Language Support

diff --git a/src/forgot_email.php b/src/pages/forgot_email.php similarity index 88% rename from src/forgot_email.php rename to src/pages/forgot_email.php index b2bf310d..25fe1fd3 100644 --- a/src/forgot_email.php +++ b/src/pages/forgot_email.php @@ -3,16 +3,16 @@ session_start(); // Initialize the application -include './core/init.php'; +include './../core/init.php'; // Suppress all PHP errors in production environment ini_set('display_errors', 0); ini_set('display_startup_errors', 0); error_reporting(0); -include './core/connection.php'; -include './core/languages/language_config.php'; -include './core/forgot/mail/forgot_email_config.php'; +include './../core/connection.php'; +include './../core/languages/language_config.php'; +include './../core/forgot/mail/forgot_email_config.php'; // Handle language selection if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['language']) && in_array($_POST['language'], $languages, true)) { @@ -89,15 +89,15 @@ if (!empty($_SESSION['forgot_success'])) { - - - - - - + + + + + + - + @@ -108,7 +108,7 @@ if (!empty($_SESSION['forgot_success'])) { <?php echo htmlspecialchars(!empty($_ENV['DOMAIN']) ? $_ENV['DOMAIN'] : 'UNKNOWN DOMAIN'); ?> - + @@ -118,7 +118,7 @@ if (!empty($_SESSION['forgot_success'])) {

- xovae-logo

@@ -208,6 +208,7 @@ if (!empty($_SESSION['forgot_success'])) { - + + \ No newline at end of file diff --git a/src/forgot_password.php b/src/pages/forgot_password.php similarity index 94% rename from src/forgot_password.php rename to src/pages/forgot_password.php index ff3f61a3..ceb7c0db 100644 --- a/src/forgot_password.php +++ b/src/pages/forgot_password.php @@ -3,10 +3,10 @@ session_start(); // Initialize the application -include './core/init.php'; -include './core/connection.php'; -include './core/languages/language_config.php'; -include './core/auth/mail/forgot_password_config.php'; // sendPasswordResetSuccessMail() - success mail +include './../core/init.php'; +include './../core/connection.php'; +include './../core/languages/language_config.php'; +include './../core/auth/mail/forgot_password_config.php'; // sendPasswordResetSuccessMail() - success mail // Suppress all PHP errors in production environment ini_set('display_errors', 0); @@ -297,15 +297,15 @@ if ( - - - - - - + + + + + + - + @@ -316,7 +316,7 @@ if ( <?php echo htmlspecialchars(!empty($_ENV['DOMAIN']) ? $_ENV['DOMAIN'] : 'UNKNOWN DOMAIN'); ?> - + @@ -326,7 +326,7 @@ if (
- xovae-logo

@@ -436,6 +436,6 @@ if ( - + \ No newline at end of file diff --git a/src/sign_in_email.php b/src/pages/sign_in_email.php similarity index 88% rename from src/sign_in_email.php rename to src/pages/sign_in_email.php index f4a2b338..65d756c4 100644 --- a/src/sign_in_email.php +++ b/src/pages/sign_in_email.php @@ -2,9 +2,9 @@ session_start(); // Initialize the application -include './core/init.php'; -include './core/connection.php'; -include './core/languages/language_config.php'; +include './../core/init.php'; +include './../core/connection.php'; +include './../core/languages/language_config.php'; // Suppress all PHP errors in production environment ini_set('display_errors', 0); @@ -34,7 +34,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['input'])) { $stmt->fetch(); $_SESSION['signin_email'] = $email; - header('Location: sign_in_password.php'); + header('Location: ./sign_in_password.php'); exit; } else { $error = t('account_not_found'); @@ -69,15 +69,15 @@ if (empty($current_texts) && !empty($languages)) { - - - - - - + + + + + + - + @@ -88,7 +88,7 @@ if (empty($current_texts) && !empty($languages)) { <?php echo htmlspecialchars(!empty($_ENV['DOMAIN']) ? $_ENV['DOMAIN'] : 'UNKNOWN DOMAIN'); ?> - + @@ -99,7 +99,7 @@ if (empty($current_texts) && !empty($languages)) {
- xovae-logo

@@ -189,6 +189,6 @@ if (empty($current_texts) && !empty($languages)) { - + \ No newline at end of file diff --git a/src/sign_in_password.php b/src/pages/sign_in_password.php similarity index 90% rename from src/sign_in_password.php rename to src/pages/sign_in_password.php index 4550388e..4c66c569 100644 --- a/src/sign_in_password.php +++ b/src/pages/sign_in_password.php @@ -2,11 +2,10 @@ session_start(); // Initialize the application -include './core/init.php'; -include './core/connection.php'; -include './core/languages/language_config.php'; -include './core/auth/mail/forgot_password_config.php'; - +include './../core/init.php'; +include './../core/connection.php'; +include './../core/languages/language_config.php'; +include './../core/auth/mail/forgot_password_config.php'; // Suppress all PHP errors in production environment ini_set('display_errors', 0); ini_set('display_startup_errors', 0); @@ -124,7 +123,7 @@ if ( if (empty($password)) { $error = t('empty_password_error'); } else { - $stmt = $conn->prepare("SELECT id, password_hash FROM users WHERE email = ? LIMIT 1"); + $stmt = $conn->prepare(" SELECT id, password_hash, is_admin FROM users WHERE email = ? LIMIT 1 "); if (!$stmt) { $error = t('database_prepare_failed'); @@ -134,13 +133,14 @@ if ( $stmt->store_result(); if ($stmt->num_rows > 0) { - $stmt->bind_result($user_id, $hashed_password); + $stmt->bind_result($user_id, $hashed_password, $is_admin); $stmt->fetch(); if (password_verify($password, $hashed_password)) { $_SESSION['user_id'] = $user_id; $_SESSION['logged_in'] = true; $_SESSION['user_email'] = $email; + $_SESSION['is_admin'] = (bool) $is_admin; // Fetch username for display $user_stmt = $conn->prepare("SELECT username FROM users WHERE id = ? LIMIT 1"); @@ -152,7 +152,7 @@ if ( $user_stmt->close(); unset($_SESSION['signin_email']); - header('Location: home.php'); + header('Location: ./../index.php'); exit; } else { $error = t('incorrect_password'); @@ -184,16 +184,15 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['language']) && in_arr - - - - - - + + + + + + - - + @@ -203,7 +202,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['language']) && in_arr <?php echo htmlspecialchars(!empty($_ENV['DOMAIN']) ? $_ENV['DOMAIN'] : 'UNKNOWN DOMAIN'); ?> - + @@ -214,7 +213,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['language']) && in_arr
- xovae-logo

@@ -312,6 +311,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['language']) && in_arr - + \ No newline at end of file diff --git a/src/src/output.css b/src/src/output.css index c04658b1..cf9a07fa 100644 --- a/src/src/output.css +++ b/src/src/output.css @@ -7,25 +7,76 @@ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --color-red-200: oklch(88.5% 0.062 18.334); + --color-red-300: oklch(80.8% 0.114 19.571); --color-red-400: oklch(70.4% 0.191 22.216); --color-red-500: oklch(63.7% 0.237 25.331); --color-red-600: oklch(57.7% 0.245 27.325); --color-red-700: oklch(50.5% 0.213 27.518); - --color-yellow-300: oklch(90.5% 0.182 98.111); + --color-red-800: oklch(44.4% 0.177 26.899); + --color-red-900: oklch(39.6% 0.141 25.723); + --color-orange-300: oklch(83.7% 0.128 66.29); + --color-orange-400: oklch(75% 0.183 55.934); + --color-orange-500: oklch(70.5% 0.213 47.604); + --color-amber-400: oklch(82.8% 0.189 84.429); + --color-amber-500: oklch(76.9% 0.188 70.08); + --color-yellow-200: oklch(94.5% 0.129 101.54); + --color-yellow-400: oklch(85.2% 0.199 91.936); + --color-yellow-500: oklch(79.5% 0.184 86.047); + --color-yellow-700: oklch(55.4% 0.135 66.442); + --color-yellow-800: oklch(47.6% 0.114 61.907); + --color-yellow-900: oklch(42.1% 0.095 57.708); + --color-green-200: oklch(92.5% 0.084 155.995); + --color-green-300: oklch(87.1% 0.15 154.449); --color-green-400: oklch(79.2% 0.209 151.711); - --color-pink-700: oklch(52.5% 0.223 3.958); + --color-green-500: oklch(72.3% 0.219 149.579); + --color-green-700: oklch(52.7% 0.154 150.069); + --color-green-900: oklch(39.3% 0.095 152.535); + --color-emerald-400: oklch(76.5% 0.177 163.223); + --color-emerald-500: oklch(69.6% 0.17 162.48); + --color-emerald-900: oklch(37.8% 0.077 168.94); + --color-cyan-400: oklch(78.9% 0.154 211.53); + --color-cyan-500: oklch(71.5% 0.143 215.221); + --color-blue-200: oklch(88.2% 0.059 254.128); + --color-blue-300: oklch(80.9% 0.105 251.813); + --color-blue-400: oklch(70.7% 0.165 254.624); + --color-blue-500: oklch(62.3% 0.214 259.815); + --color-blue-600: oklch(54.6% 0.245 262.881); + --color-blue-700: oklch(48.8% 0.243 264.376); + --color-blue-800: oklch(42.4% 0.199 265.638); + --color-blue-900: oklch(37.9% 0.146 265.522); + --color-purple-200: oklch(90.2% 0.063 306.703); + --color-purple-400: oklch(71.4% 0.203 305.504); + --color-purple-500: oklch(62.7% 0.265 303.9); + --color-purple-600: oklch(55.8% 0.288 302.321); + --color-purple-800: oklch(43.8% 0.218 303.724); + --color-purple-900: oklch(38.1% 0.176 304.987); + --color-pink-400: oklch(71.8% 0.202 349.761); + --color-pink-500: oklch(65.6% 0.241 354.308); + --color-pink-600: oklch(59.2% 0.249 0.584); --color-gray-100: oklch(96.7% 0.003 264.542); --color-gray-200: oklch(92.8% 0.006 264.531); --color-gray-400: oklch(70.7% 0.022 261.325); + --color-gray-500: oklch(55.1% 0.027 264.364); + --color-gray-600: oklch(44.6% 0.03 256.802); + --color-gray-800: oklch(27.8% 0.033 256.848); + --color-neutral-200: oklch(92.2% 0 0); + --color-neutral-300: oklch(87% 0 0); + --color-neutral-400: oklch(70.8% 0 0); + --color-neutral-500: oklch(55.6% 0 0); --color-neutral-600: oklch(43.9% 0 0); --color-neutral-700: oklch(37.1% 0 0); --color-neutral-800: oklch(26.9% 0 0); --color-neutral-900: oklch(20.5% 0 0); + --color-neutral-950: oklch(14.5% 0 0); --color-black: #000; --color-white: #fff; --spacing: 0.25rem; + --container-2xl: 42rem; --container-4xl: 56rem; --container-5xl: 64rem; + --container-6xl: 72rem; + --container-7xl: 80rem; --text-xs: 0.75rem; --text-xs--line-height: calc(1 / 0.75); --text-sm: 0.875rem; @@ -34,25 +85,44 @@ --text-base--line-height: calc(1.5 / 1); --text-lg: 1.125rem; --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); --text-2xl: 1.5rem; --text-2xl--line-height: calc(2 / 1.5); --text-3xl: 1.875rem; --text-3xl--line-height: calc(2.25 / 1.875); - --font-weight-light: 300; + --text-4xl: 2.25rem; + --text-4xl--line-height: calc(2.5 / 2.25); + --text-5xl: 3rem; + --text-5xl--line-height: 1; + --text-6xl: 3.75rem; + --text-6xl--line-height: 1; --font-weight-normal: 400; --font-weight-medium: 500; + --font-weight-semibold: 600; --font-weight-bold: 700; - --tracking-normal: 0em; + --tracking-tight: -0.025em; --tracking-wide: 0.025em; + --tracking-wider: 0.05em; + --tracking-widest: 0.1em; --radius-md: 0.375rem; --radius-lg: 0.5rem; --radius-xl: 0.75rem; --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-4xl: 2rem; + --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15); + --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15); --ease-out: cubic-bezier(0, 0, 0.2, 1); --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); + --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; + --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; --blur-sm: 8px; + --blur-md: 12px; + --blur-lg: 16px; + --blur-xl: 24px; + --blur-2xl: 40px; + --blur-3xl: 64px; --default-transition-duration: 150ms; --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); --default-font-family: var(--font-sans); @@ -212,6 +282,17 @@ .visible { visibility: visible; } + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; + } .absolute { position: absolute; } @@ -224,47 +305,62 @@ .static { position: static; } + .sticky { + position: sticky; + } .inset-0 { inset: calc(var(--spacing) * 0); } + .inset-y-0 { + inset-block: calc(var(--spacing) * 0); + } .top-0 { top: calc(var(--spacing) * 0); } - .top-1\/2 { - top: calc(1/2 * 100%); + .top-2\.5 { + top: calc(var(--spacing) * 2.5); } - .top-\[1\.4rem\] { - top: 1.4rem; + .top-3 { + top: calc(var(--spacing) * 3); } - .top-\[3\.6rem\] { - top: 3.6rem; + .top-4 { + top: calc(var(--spacing) * 4); } - .right-0 { - right: calc(var(--spacing) * 0); + .right-1 { + right: calc(var(--spacing) * 1); } - .right-2 { - right: calc(var(--spacing) * 2); + .right-3 { + right: calc(var(--spacing) * 3); } - .bottom-2 { - bottom: calc(var(--spacing) * 2); + .bottom-1 { + bottom: calc(var(--spacing) * 1); } .left-0 { left: calc(var(--spacing) * 0); } - .left-7 { - left: calc(var(--spacing) * 7); + .left-3 { + left: calc(var(--spacing) * 3); } - .left-\[-4\.2rem\] { - left: -4.2rem; + .left-4 { + left: calc(var(--spacing) * 4); } .z-10 { z-index: 10; } + .z-20 { + z-index: 20; + } .z-50 { z-index: 50; } - .z-\[9999\] { - z-index: 9999; + .order-1 { + order: 1; + } + .order-2 { + order: 2; + } + .col-span-1 { + grid-column: span 1 / span 1; } .col-span-6 { grid-column: span 6 / span 6; @@ -287,60 +383,54 @@ max-width: 96rem; } } - .m-0 { - margin: calc(var(--spacing) * 0); - } - .mx-\[0\.625rem\] { - margin-inline: 0.625rem; - } .mx-auto { margin-inline: auto; } - .my-1 { - margin-block: calc(var(--spacing) * 1); - } - .my-\[0\.3125rem\] { - margin-block: 0.3125rem; - } - .-mt-2 { - margin-top: calc(var(--spacing) * -2); - } .-mt-4 { margin-top: calc(var(--spacing) * -4); } + .-mt-12 { + margin-top: calc(var(--spacing) * -12); + } .mt-0 { margin-top: calc(var(--spacing) * 0); } + .mt-0\.5 { + margin-top: calc(var(--spacing) * 0.5); + } .mt-1 { margin-top: calc(var(--spacing) * 1); } .mt-2 { margin-top: calc(var(--spacing) * 2); } + .mt-4 { + margin-top: calc(var(--spacing) * 4); + } .mt-6 { margin-top: calc(var(--spacing) * 6); } - .mt-8 { - margin-top: calc(var(--spacing) * 8); - } - .-mr-1 { - margin-right: calc(var(--spacing) * -1); + .mr-1\.5 { + margin-right: calc(var(--spacing) * 1.5); } .mr-2 { margin-right: calc(var(--spacing) * 2); } - .mr-\[0\.375rem\] { - margin-right: 0.375rem; - } - .mr-auto { - margin-right: auto; + .mr-3 { + margin-right: calc(var(--spacing) * 3); } .mb-1 { margin-bottom: calc(var(--spacing) * 1); } + .mb-1\.5 { + margin-bottom: calc(var(--spacing) * 1.5); + } .mb-2 { margin-bottom: calc(var(--spacing) * 2); } + .mb-3 { + margin-bottom: calc(var(--spacing) * 3); + } .mb-4 { margin-bottom: calc(var(--spacing) * 4); } @@ -350,32 +440,8 @@ .mb-8 { margin-bottom: calc(var(--spacing) * 8); } - .-ml-2 { - margin-left: calc(var(--spacing) * -2); - } - .ml-0\.5 { - margin-left: calc(var(--spacing) * 0.5); - } - .ml-2 { - margin-left: calc(var(--spacing) * 2); - } - .ml-7 { - margin-left: calc(var(--spacing) * 7); - } - .ml-8 { - margin-left: calc(var(--spacing) * 8); - } - .ml-\[0\.1rem\] { - margin-left: 0.1rem; - } - .ml-\[0\.625rem\] { - margin-left: 0.625rem; - } - .ml-\[1\%\] { - margin-left: 1%; - } - .ml-auto { - margin-left: auto; + .ml-1 { + margin-left: calc(var(--spacing) * 1); } .block { display: block; @@ -398,71 +464,146 @@ .inline-block { display: inline-block; } + .inline-flex { + display: inline-flex; + } .table { display: table; } + .h-0\.5 { + height: calc(var(--spacing) * 0.5); + } + .h-1\.5 { + height: calc(var(--spacing) * 1.5); + } + .h-2 { + height: calc(var(--spacing) * 2); + } + .h-3 { + height: calc(var(--spacing) * 3); + } + .h-4 { + height: calc(var(--spacing) * 4); + } .h-5 { height: calc(var(--spacing) * 5); } + .h-6 { + height: calc(var(--spacing) * 6); + } .h-8 { height: calc(var(--spacing) * 8); } .h-10 { height: calc(var(--spacing) * 10); } + .h-12 { + height: calc(var(--spacing) * 12); + } .h-14 { height: calc(var(--spacing) * 14); } - .h-\[0\.0625rem\] { - height: 0.0625rem; + .h-16 { + height: calc(var(--spacing) * 16); } - .h-\[1\.1rem\] { - height: 1.1rem; + .h-28 { + height: calc(var(--spacing) * 28); } - .h-\[1\.2rem\] { - height: 1.2rem; - } - .h-\[1\.3rem\] { - height: 1.3rem; - } - .h-\[1\.5rem\] { - height: 1.5rem; - } - .h-\[3\.8em\] { - height: 3.8em; - } - .h-\[calc\(100vh-3\.6rem\)\] { - height: calc(100vh - 3.6rem); - } - .h-auto { - height: auto; + .h-\[140px\] { + height: 140px; } .h-full { height: 100%; } + .h-screen { + height: 100vh; + } .min-h-\[400px\] { min-height: 400px; } + .min-h-full { + min-height: 100%; + } .min-h-screen { min-height: 100vh; } + .w-1\.5 { + width: calc(var(--spacing) * 1.5); + } + .w-1\/2 { + width: calc(1/2 * 100%); + } + .w-1\/3 { + width: calc(1/3 * 100%); + } + .w-1\/4 { + width: calc(1/4 * 100%); + } + .w-2 { + width: calc(var(--spacing) * 2); + } + .w-3 { + width: calc(var(--spacing) * 3); + } + .w-3\/4 { + width: calc(3/4 * 100%); + } + .w-4 { + width: calc(var(--spacing) * 4); + } + .w-5 { + width: calc(var(--spacing) * 5); + } + .w-6 { + width: calc(var(--spacing) * 6); + } + .w-8 { + width: calc(var(--spacing) * 8); + } .w-10 { width: calc(var(--spacing) * 10); } + .w-11 { + width: calc(var(--spacing) * 11); + } + .w-12 { + width: calc(var(--spacing) * 12); + } + .w-16 { + width: calc(var(--spacing) * 16); + } + .w-20 { + width: calc(var(--spacing) * 20); + } + .w-24 { + width: calc(var(--spacing) * 24); + } + .w-28 { + width: calc(var(--spacing) * 28); + } + .w-32 { + width: calc(var(--spacing) * 32); + } .w-36 { width: calc(var(--spacing) * 36); } - .w-\[0\.0625rem\] { - width: 0.0625rem; + .w-40 { + width: calc(var(--spacing) * 40); } - .w-\[1\.5rem\] { - width: 1.5rem; + .w-44 { + width: calc(var(--spacing) * 44); } - .w-\[14\.375rem\] { - width: 14.375rem; + .w-48 { + width: calc(var(--spacing) * 48); } - .w-\[99\%\] { - width: 99%; + .w-52 { + width: calc(var(--spacing) * 52); + } + .w-56 { + width: calc(var(--spacing) * 56); + } + .w-64 { + width: calc(var(--spacing) * 64); } .w-auto { width: auto; @@ -476,21 +617,26 @@ .max-w-5xl { max-width: var(--container-5xl); } - .max-w-\[41rem\] { - max-width: 41rem; + .max-w-6xl { + max-width: var(--container-6xl); } - .max-w-full { - max-width: 100%; + .max-w-7xl { + max-width: var(--container-7xl); } .min-w-0 { min-width: calc(var(--spacing) * 0); } + .min-w-\[200px\] { + min-width: 200px; + } .flex-1 { flex: 1; } - .-translate-y-1\/2 { - --tw-translate-y: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); + .flex-shrink-0 { + flex-shrink: 0; + } + .shrink-0 { + flex-shrink: 0; } .-translate-y-full { --tw-translate-y: -100%; @@ -511,6 +657,12 @@ .transform { transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); } + .animate-pulse { + animation: var(--animate-pulse); + } + .cursor-default { + cursor: default; + } .cursor-not-allowed { cursor: not-allowed; } @@ -520,9 +672,15 @@ .resize { resize: both; } + .appearance-none { + appearance: none; + } .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } + .grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } .grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); } @@ -538,6 +696,12 @@ .items-center { align-items: center; } + .items-end { + align-items: flex-end; + } + .items-start { + align-items: flex-start; + } .justify-between { justify-content: space-between; } @@ -547,8 +711,17 @@ .justify-end { justify-content: flex-end; } - .justify-start { - justify-content: flex-start; + .gap-0\.5 { + gap: calc(var(--spacing) * 0.5); + } + .gap-1 { + gap: calc(var(--spacing) * 1); + } + .gap-1\.5 { + gap: calc(var(--spacing) * 1.5); + } + .gap-2 { + gap: calc(var(--spacing) * 2); } .gap-3 { gap: calc(var(--spacing) * 3); @@ -556,12 +729,12 @@ .gap-4 { gap: calc(var(--spacing) * 4); } + .gap-5 { + gap: calc(var(--spacing) * 5); + } .gap-6 { gap: calc(var(--spacing) * 6); } - .gap-\[0\.9375rem\] { - gap: 0.9375rem; - } .space-y-2 { :where(& > :not(:last-child)) { --tw-space-y-reverse: 0; @@ -569,6 +742,41 @@ margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); } } + .space-y-3 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-4 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-6 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-x-3 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse))); + } + } + .space-x-4 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse))); + } + } .space-x-6 { :where(& > :not(:last-child)) { --tw-space-x-reverse: 0; @@ -576,6 +784,28 @@ margin-inline-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-x-reverse))); } } + .divide-y { + :where(& > :not(:last-child)) { + --tw-divide-y-reverse: 0; + border-bottom-style: var(--tw-border-style); + border-top-style: var(--tw-border-style); + border-top-width: calc(1px * var(--tw-divide-y-reverse)); + border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + } + } + .divide-neutral-700 { + :where(& > :not(:last-child)) { + border-color: var(--color-neutral-700); + } + } + .divide-neutral-700\/50 { + :where(& > :not(:last-child)) { + border-color: color-mix(in srgb, oklch(37.1% 0 0) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-neutral-700) 50%, transparent); + } + } + } .self-start { align-self: flex-start; } @@ -587,8 +817,8 @@ .overflow-hidden { overflow: hidden; } - .overflow-x-hidden { - overflow-x: hidden; + .overflow-x-auto { + overflow-x: auto; } .overflow-y-auto { overflow-y: auto; @@ -608,47 +838,232 @@ .rounded-full { border-radius: calc(infinity * 1px); } + .rounded-lg { + border-radius: var(--radius-lg); + } .rounded-md { border-radius: var(--radius-md); } .rounded-xl { border-radius: var(--radius-xl); } + .rounded-b-2xl { + border-bottom-right-radius: var(--radius-2xl); + border-bottom-left-radius: var(--radius-2xl); + } .border { border-style: var(--tw-border-style); border-width: 1px; } - .border-0 { - border-style: var(--tw-border-style); - border-width: 0px; - } .border-2 { border-style: var(--tw-border-style); border-width: 2px; } + .border-4 { + border-style: var(--tw-border-style); + border-width: 4px; + } + .border-t { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + .border-r { + border-right-style: var(--tw-border-style); + border-right-width: 1px; + } + .border-b { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + } + .border-dashed { + --tw-border-style: dashed; + border-style: dashed; + } .border-none { --tw-border-style: none; border-style: none; } + .border-blue-500\/20 { + border-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent); + } + } + .border-blue-500\/40 { + border-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 40%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-blue-500) 40%, transparent); + } + } + .border-blue-600\/20 { + border-color: color-mix(in srgb, oklch(54.6% 0.245 262.881) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-blue-600) 20%, transparent); + } + } + .border-blue-700\/50 { + border-color: color-mix(in srgb, oklch(48.8% 0.243 264.376) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-blue-700) 50%, transparent); + } + } + .border-green-500\/20 { + border-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-green-500) 20%, transparent); + } + } + .border-green-500\/50 { + border-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-green-500) 50%, transparent); + } + } + .border-green-700\/50 { + border-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-green-700) 50%, transparent); + } + } .border-neutral-600 { border-color: var(--color-neutral-600); } .border-neutral-700 { border-color: var(--color-neutral-700); } + .border-neutral-700\/50 { + border-color: color-mix(in srgb, oklch(37.1% 0 0) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-neutral-700) 50%, transparent); + } + } .border-neutral-800 { border-color: var(--color-neutral-800); } .border-neutral-900 { border-color: var(--color-neutral-900); } + .border-orange-500\/20 { + border-color: color-mix(in srgb, oklch(70.5% 0.213 47.604) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-orange-500) 20%, transparent); + } + } + .border-red-500\/20 { + border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-red-500) 20%, transparent); + } + } + .border-transparent { + border-color: transparent; + } + .border-yellow-500\/20 { + border-color: color-mix(in srgb, oklch(79.5% 0.184 86.047) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-yellow-500) 20%, transparent); + } + } + .border-yellow-700 { + border-color: var(--color-yellow-700); + } + .border-yellow-700\/50 { + border-color: color-mix(in srgb, oklch(55.4% 0.135 66.442) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-yellow-700) 50%, transparent); + } + } + .bg-amber-500\/10 { + background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-amber-500) 10%, transparent); + } + } .bg-black { background-color: var(--color-black); } - .bg-black\/50 { - background-color: color-mix(in srgb, #000 50%, transparent); + .bg-black\/40 { + background-color: color-mix(in srgb, #000 40%, transparent); @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 50%, transparent); + background-color: color-mix(in oklab, var(--color-black) 40%, transparent); + } + } + .bg-blue-400 { + background-color: var(--color-blue-400); + } + .bg-blue-500\/10 { + background-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-blue-500) 10%, transparent); + } + } + .bg-blue-600 { + background-color: var(--color-blue-600); + } + .bg-blue-600\/10 { + background-color: color-mix(in srgb, oklch(54.6% 0.245 262.881) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-blue-600) 10%, transparent); + } + } + .bg-blue-900 { + background-color: var(--color-blue-900); + } + .bg-blue-900\/30 { + background-color: color-mix(in srgb, oklch(37.9% 0.146 265.522) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-blue-900) 30%, transparent); + } + } + .bg-blue-900\/40 { + background-color: color-mix(in srgb, oklch(37.9% 0.146 265.522) 40%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-blue-900) 40%, transparent); + } + } + .bg-emerald-500\/10 { + background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent); + } + } + .bg-gray-600 { + background-color: var(--color-gray-600); + } + .bg-gray-800 { + background-color: var(--color-gray-800); + } + .bg-green-400 { + background-color: var(--color-green-400); + } + .bg-green-500 { + background-color: var(--color-green-500); + } + .bg-green-500\/10 { + background-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-green-500) 10%, transparent); + } + } + .bg-green-500\/20 { + background-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-green-500) 20%, transparent); + } + } + .bg-green-900 { + background-color: var(--color-green-900); + } + .bg-green-900\/30 { + background-color: color-mix(in srgb, oklch(39.3% 0.095 152.535) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-green-900) 30%, transparent); + } + } + .bg-green-900\/40 { + background-color: color-mix(in srgb, oklch(39.3% 0.095 152.535) 40%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-green-900) 40%, transparent); } } .bg-neutral-700 { @@ -657,39 +1072,190 @@ .bg-neutral-800 { background-color: var(--color-neutral-800); } + .bg-neutral-800\/30 { + background-color: color-mix(in srgb, oklch(26.9% 0 0) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-800) 30%, transparent); + } + } + .bg-neutral-800\/50 { + background-color: color-mix(in srgb, oklch(26.9% 0 0) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-800) 50%, transparent); + } + } .bg-neutral-900 { background-color: var(--color-neutral-900); } - .bg-red-600 { - background-color: var(--color-red-600); + .bg-neutral-900\/30 { + background-color: color-mix(in srgb, oklch(20.5% 0 0) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-900) 30%, transparent); + } + } + .bg-neutral-900\/50 { + background-color: color-mix(in srgb, oklch(20.5% 0 0) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-900) 50%, transparent); + } + } + .bg-neutral-900\/60 { + background-color: color-mix(in srgb, oklch(20.5% 0 0) 60%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-900) 60%, transparent); + } + } + .bg-neutral-900\/80 { + background-color: color-mix(in srgb, oklch(20.5% 0 0) 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-900) 80%, transparent); + } + } + .bg-neutral-900\/95 { + background-color: color-mix(in srgb, oklch(20.5% 0 0) 95%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-900) 95%, transparent); + } + } + .bg-orange-500\/10 { + background-color: color-mix(in srgb, oklch(70.5% 0.213 47.604) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-orange-500) 10%, transparent); + } + } + .bg-purple-500\/10 { + background-color: color-mix(in srgb, oklch(62.7% 0.265 303.9) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-purple-500) 10%, transparent); + } + } + .bg-purple-900 { + background-color: var(--color-purple-900); + } + .bg-red-400 { + background-color: var(--color-red-400); + } + .bg-red-500 { + background-color: var(--color-red-500); + } + .bg-red-500\/10 { + background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-red-500) 10%, transparent); + } + } + .bg-red-900 { + background-color: var(--color-red-900); } .bg-transparent { background-color: transparent; } + .bg-white { + background-color: var(--color-white); + } + .bg-yellow-400 { + background-color: var(--color-yellow-400); + } + .bg-yellow-500 { + background-color: var(--color-yellow-500); + } + .bg-yellow-500\/10 { + background-color: color-mix(in srgb, oklch(79.5% 0.184 86.047) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-yellow-500) 10%, transparent); + } + } + .bg-yellow-900 { + background-color: var(--color-yellow-900); + } + .bg-yellow-900\/30 { + background-color: color-mix(in srgb, oklch(42.1% 0.095 57.708) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-yellow-900) 30%, transparent); + } + } + .bg-yellow-900\/40 { + background-color: color-mix(in srgb, oklch(42.1% 0.095 57.708) 40%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-yellow-900) 40%, transparent); + } + } + .bg-gradient-to-r { + --tw-gradient-position: to right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + .bg-gradient-to-tr { + --tw-gradient-position: to top right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + .from-blue-500 { + --tw-gradient-from: var(--color-blue-500); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .from-neutral-800 { + --tw-gradient-from: var(--color-neutral-800); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .via-neutral-600 { + --tw-gradient-via: var(--color-neutral-600); + --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-via-stops); + } + .via-neutral-700 { + --tw-gradient-via: var(--color-neutral-700); + --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-via-stops); + } + .to-neutral-600 { + --tw-gradient-to: var(--color-neutral-600); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + .to-transparent { + --tw-gradient-to: transparent; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } .object-cover { object-fit: cover; } .p-0 { padding: calc(var(--spacing) * 0); } + .p-1 { + padding: calc(var(--spacing) * 1); + } + .p-2 { + padding: calc(var(--spacing) * 2); + } + .p-2\.5 { + padding: calc(var(--spacing) * 2.5); + } + .p-3 { + padding: calc(var(--spacing) * 3); + } + .p-3\.5 { + padding: calc(var(--spacing) * 3.5); + } .p-4 { padding: calc(var(--spacing) * 4); } + .p-5 { + padding: calc(var(--spacing) * 5); + } .p-6 { padding: calc(var(--spacing) * 6); } - .p-7 { - padding: calc(var(--spacing) * 7); - } .p-8 { padding: calc(var(--spacing) * 8); } - .px-1 { - padding-inline: calc(var(--spacing) * 1); + .p-12 { + padding: calc(var(--spacing) * 12); } .px-2 { padding-inline: calc(var(--spacing) * 2); } + .px-2\.5 { + padding-inline: calc(var(--spacing) * 2.5); + } .px-3 { padding-inline: calc(var(--spacing) * 3); } @@ -702,18 +1268,15 @@ .px-6 { padding-inline: calc(var(--spacing) * 6); } - .px-7 { - padding-inline: calc(var(--spacing) * 7); - } - .px-8 { - padding-inline: calc(var(--spacing) * 8); - } .py-0\.5 { padding-block: calc(var(--spacing) * 0.5); } .py-1 { padding-block: calc(var(--spacing) * 1); } + .py-1\.5 { + padding-block: calc(var(--spacing) * 1.5); + } .py-2 { padding-block: calc(var(--spacing) * 2); } @@ -726,44 +1289,44 @@ .py-3\.5 { padding-block: calc(var(--spacing) * 3.5); } - .py-\[0\.5rem\] { - padding-block: 0.5rem; + .py-4 { + padding-block: calc(var(--spacing) * 4); } - .py-\[0\.15rem\] { - padding-block: 0.15rem; + .py-6 { + padding-block: calc(var(--spacing) * 6); } - .py-\[0\.525rem\] { - padding-block: 0.525rem; + .pt-1 { + padding-top: calc(var(--spacing) * 1); } - .py-\[0\.526rem\] { - padding-block: 0.526rem; - } - .pt-\[0\.3125rem\] { - padding-top: 0.3125rem; + .pt-2 { + padding-top: calc(var(--spacing) * 2); } .pr-2 { padding-right: calc(var(--spacing) * 2); } - .pr-\[0\.25rem\] { - padding-right: 0.25rem; + .pr-4 { + padding-right: calc(var(--spacing) * 4); } - .pr-\[0\.9375rem\] { - padding-right: 0.9375rem; + .pb-0 { + padding-bottom: calc(var(--spacing) * 0); } - .pb-1 { - padding-bottom: calc(var(--spacing) * 1); + .pb-2 { + padding-bottom: calc(var(--spacing) * 2); } - .pb-\[25\%\] { - padding-bottom: 25%; + .pb-4 { + padding-bottom: calc(var(--spacing) * 4); } - .pl-5 { - padding-left: calc(var(--spacing) * 5); + .pb-12 { + padding-bottom: calc(var(--spacing) * 12); } - .pl-\[0\.75rem\] { - padding-left: 0.75rem; + .pl-3 { + padding-left: calc(var(--spacing) * 3); } - .pl-\[0\.9375rem\] { - padding-left: 0.9375rem; + .pl-9 { + padding-left: calc(var(--spacing) * 9); + } + .pl-10 { + padding-left: calc(var(--spacing) * 10); } .text-center { text-align: center; @@ -771,6 +1334,12 @@ .text-left { text-align: left; } + .text-right { + text-align: right; + } + .font-mono { + font-family: var(--font-mono); + } .font-youtube { font-family: var(--font-youtube); } @@ -782,6 +1351,10 @@ font-size: var(--text-3xl); line-height: var(--tw-leading, var(--text-3xl--line-height)); } + .text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } .text-base { font-size: var(--text-base); line-height: var(--tw-leading, var(--text-base--line-height)); @@ -794,27 +1367,21 @@ font-size: var(--text-sm); line-height: var(--tw-leading, var(--text-sm--line-height)); } + .text-xl { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } .text-xs { font-size: var(--text-xs); line-height: var(--tw-leading, var(--text-xs--line-height)); } - .text-\[0\.6rem\] { - font-size: 0.6rem; - } - .text-\[1\.3rem\] { - font-size: 1.3rem; - } - .text-\[1rem\] { - font-size: 1rem; + .text-\[10px\] { + font-size: 10px; } .font-bold { --tw-font-weight: var(--font-weight-bold); font-weight: var(--font-weight-bold); } - .font-light { - --tw-font-weight: var(--font-weight-light); - font-weight: var(--font-weight-light); - } .font-medium { --tw-font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium); @@ -823,19 +1390,47 @@ --tw-font-weight: var(--font-weight-normal); font-weight: var(--font-weight-normal); } + .font-semibold { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + .tracking-tight { + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + } .tracking-wide { --tw-tracking: var(--tracking-wide); letter-spacing: var(--tracking-wide); } + .tracking-wider { + --tw-tracking: var(--tracking-wider); + letter-spacing: var(--tracking-wider); + } + .tracking-widest { + --tw-tracking: var(--tracking-widest); + letter-spacing: var(--tracking-widest); + } .break-all { word-break: break-all; } - .text-ellipsis { - text-overflow: ellipsis; - } .whitespace-nowrap { white-space: nowrap; } + .text-amber-400 { + color: var(--color-amber-400); + } + .text-blue-200 { + color: var(--color-blue-200); + } + .text-blue-400 { + color: var(--color-blue-400); + } + .text-blue-500 { + color: var(--color-blue-500); + } + .text-emerald-400 { + color: var(--color-emerald-400); + } .text-gray-100 { color: var(--color-gray-100); } @@ -845,11 +1440,44 @@ .text-gray-400 { color: var(--color-gray-400); } + .text-gray-500 { + color: var(--color-gray-500); + } + .text-green-200 { + color: var(--color-green-200); + } .text-green-400 { color: var(--color-green-400); } - .text-pink-700 { - color: var(--color-pink-700); + .text-green-500 { + color: var(--color-green-500); + } + .text-neutral-200 { + color: var(--color-neutral-200); + } + .text-neutral-300 { + color: var(--color-neutral-300); + } + .text-neutral-400 { + color: var(--color-neutral-400); + } + .text-neutral-500 { + color: var(--color-neutral-500); + } + .text-neutral-600 { + color: var(--color-neutral-600); + } + .text-orange-400 { + color: var(--color-orange-400); + } + .text-purple-200 { + color: var(--color-purple-200); + } + .text-purple-400 { + color: var(--color-purple-400); + } + .text-red-200 { + color: var(--color-red-200); } .text-red-400 { color: var(--color-red-400); @@ -860,8 +1488,14 @@ .text-white { color: var(--color-white); } - .text-yellow-300 { - color: var(--color-yellow-300); + .text-yellow-200 { + color: var(--color-yellow-200); + } + .text-yellow-400 { + color: var(--color-yellow-400); + } + .text-yellow-500 { + color: var(--color-yellow-500); } .lowercase { text-transform: lowercase; @@ -869,14 +1503,20 @@ .uppercase { text-transform: uppercase; } - .no-underline { - text-decoration-line: none; + .antialiased { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .placeholder-gray-200 { &::placeholder { color: var(--color-gray-200); } } + .placeholder-neutral-500 { + &::placeholder { + color: var(--color-neutral-500); + } + } .opacity-0 { opacity: 0%; } @@ -886,6 +1526,9 @@ .opacity-60 { opacity: 60%; } + .opacity-70 { + opacity: 70%; + } .opacity-90 { opacity: 90%; } @@ -896,10 +1539,32 @@ --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } - .shadow-black\/40 { - --tw-shadow-color: color-mix(in srgb, #000 40%, transparent); + .shadow-\[0_0_15px_rgba\(59\,130\,246\,0\.1\)\] { + --tw-shadow: 0 0 15px var(--tw-shadow-color, rgba(59,130,246,0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-lg { + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-sm { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-xl { + --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-blue-900\/20 { + --tw-shadow-color: color-mix(in srgb, oklch(37.9% 0.146 265.522) 20%, transparent); @supports (color: color-mix(in lab, red, red)) { - --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent); + --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-blue-900) 20%, transparent) var(--tw-shadow-alpha), transparent); + } + } + .shadow-green-500\/50 { + --tw-shadow-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-green-500) 50%, transparent) var(--tw-shadow-alpha), transparent); } } .outline { @@ -910,9 +1575,34 @@ --tw-blur: blur(var(--blur-sm)); filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); } + .drop-shadow-\[0_0_6px_rgba\(34\,197\,94\,0\.45\)\] { + --tw-drop-shadow-size: drop-shadow(0 0 6px var(--tw-drop-shadow-color, rgba(34,197,94,0.45))); + --tw-drop-shadow: var(--tw-drop-shadow-size); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .drop-shadow-lg { + --tw-drop-shadow-size: drop-shadow(0 4px 4px var(--tw-drop-shadow-color, rgb(0 0 0 / 0.15))); + --tw-drop-shadow: drop-shadow(var(--drop-shadow-lg)); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } .filter { filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); } + .backdrop-blur-md { + --tw-backdrop-blur: blur(var(--blur-md)); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + } + .backdrop-blur-sm { + --tw-backdrop-blur: blur(var(--blur-sm)); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + } + .backdrop-blur-xl { + --tw-backdrop-blur: blur(var(--blur-xl)); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + } .transition { transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); @@ -923,6 +1613,11 @@ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); } + .transition-colors { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } .transition-opacity { transition-property: opacity; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); @@ -941,6 +1636,10 @@ --tw-duration: 300ms; transition-duration: 300ms; } + .duration-700 { + --tw-duration: 700ms; + transition-duration: 700ms; + } .ease-in-out { --tw-ease: var(--ease-in-out); transition-timing-function: var(--ease-in-out); @@ -949,13 +1648,134 @@ --tw-ease: var(--ease-out); transition-timing-function: var(--ease-out); } - .outline-none { - --tw-outline-style: none; - outline-style: none; - } .\[hostname\:port\] { hostname: port; } + .group-hover\:-translate-x-1 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + --tw-translate-x: calc(var(--spacing) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + .group-hover\:scale-110 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + --tw-scale-x: 110%; + --tw-scale-y: 110%; + --tw-scale-z: 110%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + } + } + .group-hover\:rotate-90 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + rotate: 90deg; + } + } + } + .group-hover\:border-neutral-700 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + border-color: var(--color-neutral-700); + } + } + } + .group-hover\:bg-blue-500\/20 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + background-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent); + } + } + } + } + .group-hover\:bg-green-500\/20 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + background-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-green-500) 20%, transparent); + } + } + } + } + .group-hover\:bg-yellow-500\/20 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + background-color: color-mix(in srgb, oklch(79.5% 0.184 86.047) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-yellow-500) 20%, transparent); + } + } + } + } + .group-hover\:text-amber-400 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: var(--color-amber-400); + } + } + } + .group-hover\:text-blue-400 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: var(--color-blue-400); + } + } + } + .group-hover\:text-emerald-400 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: var(--color-emerald-400); + } + } + } + .group-hover\:text-green-400 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: var(--color-green-400); + } + } + } + .group-hover\:text-neutral-300 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: var(--color-neutral-300); + } + } + } + .group-hover\:text-purple-400 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: var(--color-purple-400); + } + } + } + .group-hover\:text-red-400 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: var(--color-red-400); + } + } + } + .group-hover\:text-white { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: var(--color-white); + } + } + } + .group-hover\:text-yellow-400 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + color: var(--color-yellow-400); + } + } + } .group-hover\:opacity-100 { &:is(:where(.group):hover *) { @media (hover: hover) { @@ -963,76 +1783,266 @@ } } } - .group-\[\.small-sidebar\]\:\!hidden { - &:is(:where(.group):is(.small-sidebar) *) { - display: none !important; + .peer-checked\:bg-blue-600 { + &:is(:where(.peer):checked ~ *) { + background-color: var(--color-blue-600); } } - .group-\[\.small-sidebar\]\:hidden { - &:is(:where(.group):is(.small-sidebar) *) { - display: none; + .peer-checked\:bg-neutral-800 { + &:is(:where(.peer):checked ~ *) { + background-color: var(--color-neutral-800); } } - .group-\[\.small-sidebar\]\:w-\[4\.375rem\] { - &:is(:where(.group):is(.small-sidebar) *) { - width: 4.375rem; + .peer-checked\:text-white { + &:is(:where(.peer):checked ~ *) { + color: var(--color-white); } } - .group-\[\.small-sidebar\]\:w-full { - &:is(:where(.group):is(.small-sidebar) *) { - width: 100%; + .peer-checked\:shadow-sm { + &:is(:where(.peer):checked ~ *) { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } } - .group-\[\.small-sidebar\]\:justify-center { - &:is(:where(.group):is(.small-sidebar) *) { - justify-content: center; + .peer-focus\:ring-2 { + &:is(:where(.peer):focus ~ *) { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } } - .group-\[\.small-sidebar\]\:overflow-y-hidden { - &:is(:where(.group):is(.small-sidebar) *) { - overflow-y: hidden; + .peer-focus\:ring-blue-500 { + &:is(:where(.peer):focus ~ *) { + --tw-ring-color: var(--color-blue-500); } } - .group-\[\.small-sidebar\]\:p-\[0\.75rem\] { - &:is(:where(.group):is(.small-sidebar) *) { - padding: 0.75rem; + .peer-focus\:outline-none { + &:is(:where(.peer):focus ~ *) { + --tw-outline-style: none; + outline-style: none; } } - .placeholder\:font-light { - &::placeholder { - --tw-font-weight: var(--font-weight-light); - font-weight: var(--font-weight-light); + .selection\:bg-blue-500\/30 { + & *::selection { + background-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-blue-500) 30%, transparent); + } } - } - .placeholder\:tracking-normal { - &::placeholder { - --tw-tracking: var(--tracking-normal); - letter-spacing: var(--tracking-normal); - } - } - .placeholder\:text-gray-400 { - &::placeholder { - color: var(--color-gray-400); - } - } - .hover\:rounded-\[0\.625rem\] { - &:hover { - @media (hover: hover) { - border-radius: 0.625rem; + &::selection { + background-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-blue-500) 30%, transparent); } } } - .hover\:rounded-lg { - &:hover { - @media (hover: hover) { - border-radius: var(--radius-lg); + .after\:absolute { + &::after { + content: var(--tw-content); + position: absolute; + } + } + .after\:top-\[2px\] { + &::after { + content: var(--tw-content); + top: 2px; + } + } + .after\:left-\[2px\] { + &::after { + content: var(--tw-content); + left: 2px; + } + } + .after\:h-5 { + &::after { + content: var(--tw-content); + height: calc(var(--spacing) * 5); + } + } + .after\:w-5 { + &::after { + content: var(--tw-content); + width: calc(var(--spacing) * 5); + } + } + .after\:rounded-full { + &::after { + content: var(--tw-content); + border-radius: calc(infinity * 1px); + } + } + .after\:border { + &::after { + content: var(--tw-content); + border-style: var(--tw-border-style); + border-width: 1px; + } + } + .after\:border-neutral-300 { + &::after { + content: var(--tw-content); + border-color: var(--color-neutral-300); + } + } + .after\:bg-white { + &::after { + content: var(--tw-content); + background-color: var(--color-white); + } + } + .after\:transition-all { + &::after { + content: var(--tw-content); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + } + .after\:content-\[\'\'\] { + &::after { + content: var(--tw-content); + --tw-content: ''; + content: var(--tw-content); + } + } + .peer-checked\:after\:translate-x-full { + &:is(:where(.peer):checked ~ *) { + &::after { + content: var(--tw-content); + --tw-translate-x: 100%; + translate: var(--tw-translate-x) var(--tw-translate-y); } } } - .hover\:bg-\[\#332631\] { + .peer-checked\:after\:border-white { + &:is(:where(.peer):checked ~ *) { + &::after { + content: var(--tw-content); + border-color: var(--color-white); + } + } + } + .hover\:border-amber-500\/30 { &:hover { @media (hover: hover) { - background-color: #332631; + border-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-amber-500) 30%, transparent); + } + } + } + } + .hover\:border-blue-500\/20 { + &:hover { + @media (hover: hover) { + border-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent); + } + } + } + } + .hover\:border-blue-500\/30 { + &:hover { + @media (hover: hover) { + border-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-blue-500) 30%, transparent); + } + } + } + } + .hover\:border-blue-500\/50 { + &:hover { + @media (hover: hover) { + border-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-blue-500) 50%, transparent); + } + } + } + } + .hover\:border-emerald-500\/30 { + &:hover { + @media (hover: hover) { + border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-emerald-500) 30%, transparent); + } + } + } + } + .hover\:border-green-500\/20 { + &:hover { + @media (hover: hover) { + border-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-green-500) 20%, transparent); + } + } + } + } + .hover\:border-green-500\/30 { + &:hover { + @media (hover: hover) { + border-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-green-500) 30%, transparent); + } + } + } + } + .hover\:border-neutral-600 { + &:hover { + @media (hover: hover) { + border-color: var(--color-neutral-600); + } + } + } + .hover\:border-purple-500\/30 { + &:hover { + @media (hover: hover) { + border-color: color-mix(in srgb, oklch(62.7% 0.265 303.9) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-purple-500) 30%, transparent); + } + } + } + } + .hover\:border-red-500\/30 { + &:hover { + @media (hover: hover) { + border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-red-500) 30%, transparent); + } + } + } + } + .hover\:border-yellow-500\/30 { + &:hover { + @media (hover: hover) { + border-color: color-mix(in srgb, oklch(79.5% 0.184 86.047) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-yellow-500) 30%, transparent); + } + } + } + } + .hover\:bg-blue-500\/20 { + &:hover { + @media (hover: hover) { + background-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent); + } + } + } + } + .hover\:bg-blue-700 { + &:hover { + @media (hover: hover) { + background-color: var(--color-blue-700); } } } @@ -1043,6 +2053,36 @@ } } } + .hover\:bg-neutral-700\/30 { + &:hover { + @media (hover: hover) { + background-color: color-mix(in srgb, oklch(37.1% 0 0) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-700) 30%, transparent); + } + } + } + } + .hover\:bg-neutral-800\/50 { + &:hover { + @media (hover: hover) { + background-color: color-mix(in srgb, oklch(26.9% 0 0) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-800) 50%, transparent); + } + } + } + } + .hover\:bg-neutral-800\/60 { + &:hover { + @media (hover: hover) { + background-color: color-mix(in srgb, oklch(26.9% 0 0) 60%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-800) 60%, transparent); + } + } + } + } .hover\:bg-neutral-900 { &:hover { @media (hover: hover) { @@ -1050,10 +2090,44 @@ } } } - .hover\:bg-red-700 { + .hover\:bg-neutral-900\/50 { &:hover { @media (hover: hover) { - background-color: var(--color-red-700); + background-color: color-mix(in srgb, oklch(20.5% 0 0) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-900) 50%, transparent); + } + } + } + } + .hover\:bg-red-500\/80 { + &:hover { + @media (hover: hover) { + background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-red-500) 80%, transparent); + } + } + } + } + .hover\:bg-yellow-800 { + &:hover { + @media (hover: hover) { + background-color: var(--color-yellow-800); + } + } + } + .hover\:text-blue-300 { + &:hover { + @media (hover: hover) { + color: var(--color-blue-300); + } + } + } + .hover\:text-blue-400 { + &:hover { + @media (hover: hover) { + color: var(--color-blue-400); } } } @@ -1064,6 +2138,34 @@ } } } + .hover\:text-green-300 { + &:hover { + @media (hover: hover) { + color: var(--color-green-300); + } + } + } + .hover\:text-orange-300 { + &:hover { + @media (hover: hover) { + color: var(--color-orange-300); + } + } + } + .hover\:text-red-300 { + &:hover { + @media (hover: hover) { + color: var(--color-red-300); + } + } + } + .hover\:text-white { + &:hover { + @media (hover: hover) { + color: var(--color-white); + } + } + } .hover\:underline { &:hover { @media (hover: hover) { @@ -1071,63 +2173,88 @@ } } } + .hover\:shadow-\[0_0_15px_rgba\(59\,130\,246\,0\.3\)\] { + &:hover { + @media (hover: hover) { + --tw-shadow: 0 0 15px var(--tw-shadow-color, rgba(59,130,246,0.3)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + .hover\:shadow-lg { + &:hover { + @media (hover: hover) { + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + .hover\:shadow-red-500\/20 { + &:hover { + @media (hover: hover) { + --tw-shadow-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-red-500) 20%, transparent) var(--tw-shadow-alpha), transparent); + } + } + } + } + .focus\:border-blue-500 { + &:focus { + border-color: var(--color-blue-500); + } + } + .focus\:ring-2 { + &:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus\:ring-blue-500 { + &:focus { + --tw-ring-color: var(--color-blue-500); + } + } + .focus\:ring-blue-500\/50 { + &:focus { + --tw-ring-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-blue-500) 50%, transparent); + } + } + } .focus\:outline-none { &:focus { --tw-outline-style: none; outline-style: none; } } - .active\:bg-neutral-900 { + .active\:scale-95 { &:active { - background-color: var(--color-neutral-900); + --tw-scale-x: 95%; + --tw-scale-y: 95%; + --tw-scale-z: 95%; + scale: var(--tw-scale-x) var(--tw-scale-y); } } - .max-\[1100px\]\:justify-start { - @media (width < 1100px) { - justify-content: flex-start; + .disabled\:opacity-50 { + &:disabled { + opacity: 50%; } } - .max-\[750px\]\:hidden { - @media (width < 750px) { - display: none; + .sm\:order-1 { + @media (width >= 40rem) { + order: 1; } } - .max-\[750px\]\:inline-flex { - @media (width < 750px) { - display: inline-flex; + .sm\:order-2 { + @media (width >= 40rem) { + order: 2; } } - .max-\[56\.25rem\]\:h-\[1\.3rem\] { - @media (width < 56.25rem) { - height: 1.3rem; - } - } - .max-\[56\.25rem\]\:h-\[1\.125rem\] { - @media (width < 56.25rem) { - height: 1.125rem; - } - } - .max-\[56\.25rem\]\:w-\[1\.3rem\] { - @media (width < 56.25rem) { - width: 1.3rem; - } - } - .max-\[56\.25rem\]\:w-\[99\%\] { - @media (width < 56.25rem) { - width: 99%; - } - } - .max-\[56\.25rem\]\:text-sm { - @media (width < 56.25rem) { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - } - .max-\[31\.25rem\]\:group-\[\.small-sidebar\]\:hidden { - @media (width < 31.25rem) { - &:is(:where(.group):is(.small-sidebar) *) { - display: none; - } + .sm\:my-8 { + @media (width >= 40rem) { + margin-block: calc(var(--spacing) * 8); } } .sm\:h-11 { @@ -1140,6 +2267,26 @@ width: calc(var(--spacing) * 11); } } + .sm\:w-64 { + @media (width >= 40rem) { + width: calc(var(--spacing) * 64); + } + } + .sm\:w-auto { + @media (width >= 40rem) { + width: auto; + } + } + .sm\:w-full { + @media (width >= 40rem) { + width: 100%; + } + } + .sm\:max-w-2xl { + @media (width >= 40rem) { + max-width: var(--container-2xl); + } + } .sm\:grid-cols-2 { @media (width >= 40rem) { grid-template-columns: repeat(2, minmax(0, 1fr)); @@ -1150,6 +2297,21 @@ flex-direction: row; } } + .sm\:items-center { + @media (width >= 40rem) { + align-items: center; + } + } + .sm\:items-start { + @media (width >= 40rem) { + align-items: flex-start; + } + } + .sm\:justify-between { + @media (width >= 40rem) { + justify-content: space-between; + } + } .sm\:space-y-0 { @media (width >= 40rem) { :where(& > :not(:last-child)) { @@ -1159,35 +2321,160 @@ } } } + .sm\:p-0 { + @media (width >= 40rem) { + padding: calc(var(--spacing) * 0); + } + } + .sm\:px-6 { + @media (width >= 40rem) { + padding-inline: calc(var(--spacing) * 6); + } + } + .sm\:text-left { + @media (width >= 40rem) { + text-align: left; + } + } .sm\:text-sm { @media (width >= 40rem) { font-size: var(--text-sm); line-height: var(--tw-leading, var(--text-sm--line-height)); } } + .md\:top-6 { + @media (width >= 48rem) { + top: calc(var(--spacing) * 6); + } + } + .md\:right-3 { + @media (width >= 48rem) { + right: calc(var(--spacing) * 3); + } + } + .md\:bottom-3 { + @media (width >= 48rem) { + bottom: calc(var(--spacing) * 3); + } + } + .md\:left-6 { + @media (width >= 48rem) { + left: calc(var(--spacing) * 6); + } + } + .md\:col-span-2 { + @media (width >= 48rem) { + grid-column: span 2 / span 2; + } + } + .md\:-mt-20 { + @media (width >= 48rem) { + margin-top: calc(var(--spacing) * -20); + } + } + .md\:mt-0 { + @media (width >= 48rem) { + margin-top: calc(var(--spacing) * 0); + } + } + .md\:mb-12 { + @media (width >= 48rem) { + margin-bottom: calc(var(--spacing) * 12); + } + } + .md\:block { + @media (width >= 48rem) { + display: block; + } + } + .md\:hidden { + @media (width >= 48rem) { + display: none; + } + } + .md\:h-2 { + @media (width >= 48rem) { + height: calc(var(--spacing) * 2); + } + } + .md\:h-3\.5 { + @media (width >= 48rem) { + height: calc(var(--spacing) * 3.5); + } + } + .md\:h-6 { + @media (width >= 48rem) { + height: calc(var(--spacing) * 6); + } + } .md\:h-12 { @media (width >= 48rem) { height: calc(var(--spacing) * 12); } } + .md\:h-44 { + @media (width >= 48rem) { + height: calc(var(--spacing) * 44); + } + } + .md\:h-\[150px\] { + @media (width >= 48rem) { + height: 150px; + } + } + .md\:w-2 { + @media (width >= 48rem) { + width: calc(var(--spacing) * 2); + } + } + .md\:w-3\.5 { + @media (width >= 48rem) { + width: calc(var(--spacing) * 3.5); + } + } + .md\:w-6 { + @media (width >= 48rem) { + width: calc(var(--spacing) * 6); + } + } .md\:w-12 { @media (width >= 48rem) { width: calc(var(--spacing) * 12); } } + .md\:w-44 { + @media (width >= 48rem) { + width: calc(var(--spacing) * 44); + } + } + .md\:w-auto { + @media (width >= 48rem) { + width: auto; + } + } .md\:grid-cols-2 { @media (width >= 48rem) { grid-template-columns: repeat(2, minmax(0, 1fr)); } } + .md\:grid-cols-3 { + @media (width >= 48rem) { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + .md\:grid-cols-4 { + @media (width >= 48rem) { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } .md\:flex-row { @media (width >= 48rem) { flex-direction: row; } } - .md\:items-center { + .md\:items-end { @media (width >= 48rem) { - align-items: center; + align-items: flex-end; } } .md\:items-start { @@ -1195,9 +2482,41 @@ align-items: flex-start; } } - .md\:justify-between { + .md\:justify-start { @media (width >= 48rem) { - justify-content: space-between; + justify-content: flex-start; + } + } + .md\:gap-3 { + @media (width >= 48rem) { + gap: calc(var(--spacing) * 3); + } + } + .md\:gap-8 { + @media (width >= 48rem) { + gap: calc(var(--spacing) * 8); + } + } + .md\:border-\[3px\] { + @media (width >= 48rem) { + border-style: var(--tw-border-style); + border-width: 3px; + } + } + .md\:border-\[6px\] { + @media (width >= 48rem) { + border-style: var(--tw-border-style); + border-width: 6px; + } + } + .md\:p-1\.5 { + @media (width >= 48rem) { + padding: calc(var(--spacing) * 1.5); + } + } + .md\:p-8 { + @media (width >= 48rem) { + padding: calc(var(--spacing) * 8); } } .md\:p-12 { @@ -1205,37 +2524,98 @@ padding: calc(var(--spacing) * 12); } } + .md\:pb-4 { + @media (width >= 48rem) { + padding-bottom: calc(var(--spacing) * 4); + } + } .md\:text-left { @media (width >= 48rem) { text-align: left; } } + .md\:text-3xl { + @media (width >= 48rem) { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + .md\:text-5xl { + @media (width >= 48rem) { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)); + } + } + .md\:text-6xl { + @media (width >= 48rem) { + font-size: var(--text-6xl); + line-height: var(--tw-leading, var(--text-6xl--line-height)); + } + } .md\:text-base { @media (width >= 48rem) { font-size: var(--text-base); line-height: var(--tw-leading, var(--text-base--line-height)); } } + .md\:text-xl { + @media (width >= 48rem) { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + } + .md\:text-xs { + @media (width >= 48rem) { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + } + .md\:break-normal { + @media (width >= 48rem) { + overflow-wrap: normal; + word-break: normal; + } + } .lg\:mt-10 { @media (width >= 64rem) { margin-top: calc(var(--spacing) * 10); } } - .lg\:grid-cols-3 { + .lg\:grid-cols-2 { @media (width >= 64rem) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + .lg\:grid-cols-4 { + @media (width >= 64rem) { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } + .lg\:flex-row { + @media (width >= 64rem) { + flex-direction: row; + } + } + .lg\:px-8 { + @media (width >= 64rem) { + padding-inline: calc(var(--spacing) * 8); + } + } + .lg\:pb-0 { + @media (width >= 64rem) { + padding-bottom: calc(var(--spacing) * 0); + } + } + .xl\:col-span-2 { + @media (width >= 80rem) { + grid-column: span 2 / span 2; + } + } + .xl\:grid-cols-3 { + @media (width >= 80rem) { grid-template-columns: repeat(3, minmax(0, 1fr)); } } - .\[\&\.active\]\:rounded-\[0\.625rem\] { - &.active { - border-radius: 0.625rem; - } - } - .\[\&\.active\]\:bg-neutral-900 { - &.active { - background-color: var(--color-neutral-900); - } - } } @layer base { @font-face { @@ -1309,11 +2689,58 @@ inherits: false; initial-value: 0; } +@property --tw-divide-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} @property --tw-border-style { syntax: "*"; inherits: false; initial-value: solid; } +@property --tw-gradient-position { + syntax: "*"; + inherits: false; +} +@property --tw-gradient-from { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-via { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-to { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-stops { + syntax: "*"; + inherits: false; +} +@property --tw-gradient-via-stops { + syntax: "*"; + inherits: false; +} +@property --tw-gradient-from-position { + syntax: ""; + inherits: false; + initial-value: 0%; +} +@property --tw-gradient-via-position { + syntax: ""; + inherits: false; + initial-value: 50%; +} +@property --tw-gradient-to-position { + syntax: ""; + inherits: false; + initial-value: 100%; +} @property --tw-font-weight { syntax: "*"; inherits: false; @@ -1445,6 +2872,42 @@ syntax: "*"; inherits: false; } +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false; +} @property --tw-duration { syntax: "*"; inherits: false; @@ -1453,6 +2916,22 @@ syntax: "*"; inherits: false; } +@property --tw-content { + syntax: "*"; + initial-value: ""; + inherits: false; +} +@keyframes ping { + 75%, 100% { + transform: scale(2); + opacity: 0; + } +} +@keyframes pulse { + 50% { + opacity: 0.5; + } +} @layer properties { @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { *, ::before, ::after, ::backdrop { @@ -1469,7 +2948,17 @@ --tw-skew-y: initial; --tw-space-y-reverse: 0; --tw-space-x-reverse: 0; + --tw-divide-y-reverse: 0; --tw-border-style: solid; + --tw-gradient-position: initial; + --tw-gradient-from: #0000; + --tw-gradient-via: #0000; + --tw-gradient-to: #0000; + --tw-gradient-stops: initial; + --tw-gradient-via-stops: initial; + --tw-gradient-from-position: 0%; + --tw-gradient-via-position: 50%; + --tw-gradient-to-position: 100%; --tw-font-weight: initial; --tw-tracking: initial; --tw-shadow: 0 0 #0000; @@ -1500,8 +2989,18 @@ --tw-drop-shadow-color: initial; --tw-drop-shadow-alpha: 100%; --tw-drop-shadow-size: initial; + --tw-backdrop-blur: initial; + --tw-backdrop-brightness: initial; + --tw-backdrop-contrast: initial; + --tw-backdrop-grayscale: initial; + --tw-backdrop-hue-rotate: initial; + --tw-backdrop-invert: initial; + --tw-backdrop-opacity: initial; + --tw-backdrop-saturate: initial; + --tw-backdrop-sepia: initial; --tw-duration: initial; --tw-ease: initial; + --tw-content: ""; } } }