Spaces:
Sleeping
Sleeping
| @import 'tailwindcss'; | |
| @import 'tw-animate-css'; | |
| @source '../views'; | |
| @source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; | |
| @custom-variant dark (&:is(.dark *)); | |
| @theme { | |
| --font-sans: | |
| 'Inter', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', | |
| 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; | |
| --radius-lg: var(--radius); | |
| --radius-md: calc(var(--radius) - 2px); | |
| --radius-sm: calc(var(--radius) - 4px); | |
| --color-background: var(--background); | |
| --color-foreground: var(--foreground); | |
| --color-card: var(--card); | |
| --color-card-foreground: var(--card-foreground); | |
| --color-popover: var(--popover); | |
| --color-popover-foreground: var(--popover-foreground); | |
| --color-primary: var(--primary); | |
| --color-primary-foreground: var(--primary-foreground); | |
| --color-secondary: var(--secondary); | |
| --color-secondary-foreground: var(--secondary-foreground); | |
| --color-muted: var(--muted); | |
| --color-muted-foreground: var(--muted-foreground); | |
| --color-accent: var(--accent); | |
| --color-accent-foreground: var(--accent-foreground); | |
| --color-destructive: var(--destructive); | |
| --color-destructive-foreground: var(--destructive-foreground); | |
| --color-border: var(--border); | |
| --color-input: var(--input); | |
| --color-ring: var(--ring); | |
| --color-chart-1: var(--chart-1); | |
| --color-chart-2: var(--chart-2); | |
| --color-chart-3: var(--chart-3); | |
| --color-chart-4: var(--chart-4); | |
| --color-chart-5: var(--chart-5); | |
| --color-sidebar: var(--sidebar); | |
| --color-sidebar-foreground: var(--sidebar-foreground); | |
| --color-sidebar-primary: var(--sidebar-primary); | |
| --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); | |
| --color-sidebar-accent: var(--sidebar-accent); | |
| --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); | |
| --color-sidebar-border: var(--sidebar-border); | |
| --color-sidebar-ring: var(--sidebar-ring); | |
| } | |
| :root { | |
| --background: oklch(1 0 0); | |
| --foreground: oklch(0.145 0 0); | |
| --card: oklch(1 0 0); | |
| --card-foreground: oklch(0.145 0 0); | |
| --popover: oklch(1 0 0); | |
| --popover-foreground: oklch(0.145 0 0); | |
| --primary: oklch(0.205 0 0); | |
| --primary-foreground: oklch(0.985 0 0); | |
| --secondary: oklch(0.97 0 0); | |
| --secondary-foreground: oklch(0.205 0 0); | |
| --muted: oklch(0.97 0 0); | |
| --muted-foreground: oklch(0.556 0 0); | |
| --accent: oklch(0.97 0 0); | |
| --accent-foreground: oklch(0.205 0 0); | |
| --destructive: oklch(0.577 0.245 27.325); | |
| --destructive-foreground: oklch(0.577 0.245 27.325); | |
| --border: oklch(0.922 0 0); | |
| --input: oklch(0.922 0 0); | |
| --ring: oklch(0.87 0 0); | |
| --chart-1: oklch(0.646 0.222 41.116); | |
| --chart-2: oklch(0.6 0.118 184.704); | |
| --chart-3: oklch(0.398 0.07 227.392); | |
| --chart-4: oklch(0.828 0.189 84.429); | |
| --chart-5: oklch(0.769 0.188 70.08); | |
| --radius: 0.625rem; | |
| --sidebar: oklch(0.985 0 0); | |
| --sidebar-foreground: oklch(0.145 0 0); | |
| --sidebar-primary: oklch(0.205 0 0); | |
| --sidebar-primary-foreground: oklch(0.985 0 0); | |
| --sidebar-accent: oklch(0.97 0 0); | |
| --sidebar-accent-foreground: oklch(0.205 0 0); | |
| --sidebar-border: oklch(0.922 0 0); | |
| --sidebar-ring: oklch(0.87 0 0); | |
| --app-bg: #fafbff; | |
| --app-sidebar-bg: #ffffff; | |
| --app-surface: #ffffff; | |
| --app-surface-soft: #eef4ff; | |
| --app-surface-muted: rgba(217, 217, 217, 0.32); | |
| --app-border: rgba(0, 0, 0, 0.14); | |
| --app-border-soft: rgba(0, 0, 0, 0.08); | |
| --app-border-strong: #739af1; | |
| --app-text: #0a0a0a; | |
| --app-muted: #737373; | |
| --app-primary: #2764eb; | |
| --app-primary-soft: #ccdcff; | |
| --app-primary-foreground: #ffffff; | |
| --app-danger: #ef4444; | |
| --app-success: var(--app-primary); | |
| --app-placeholder: rgba(115, 115, 115, 0.42); | |
| --app-toggle-bg: rgba(255, 255, 255, 0.9); | |
| --app-shadow: 1px 1px 4.5px rgba(39, 100, 235, 0.36); | |
| --app-composer-shadow: 0 10px 24px rgba(39, 100, 235, 0.28); | |
| --welcome-shell-bg: var(--app-bg); | |
| --welcome-title: var(--app-text); | |
| --welcome-subtitle: var(--app-muted); | |
| --welcome-accent: var(--app-primary); | |
| --welcome-accent-foreground: var(--app-primary-foreground); | |
| --welcome-accent-soft: var(--app-primary-soft); | |
| --welcome-toggle-bg: var(--app-toggle-bg); | |
| --welcome-card-bg: var(--app-surface); | |
| --welcome-card-border: var(--app-border); | |
| --welcome-card-active-border: var(--app-border-strong); | |
| --welcome-card-active-shadow: var(--app-shadow); | |
| --welcome-icon-muted-bg: var(--app-surface-muted); | |
| --welcome-icon-muted-border: var(--app-border-soft); | |
| --welcome-icon-active-border: color-mix( | |
| in oklab, | |
| var(--app-primary) 26%, | |
| transparent | |
| ); | |
| --register-shell-bg: var(--welcome-shell-bg); | |
| --register-card-bg: var(--welcome-card-bg); | |
| --register-card-border: var(--welcome-card-active-border); | |
| --register-card-shadow: var(--welcome-card-active-shadow); | |
| --register-input-bg: color-mix( | |
| in oklab, | |
| var(--app-primary) 13%, | |
| var(--app-surface) | |
| ); | |
| --register-input-border: var(--app-border-soft); | |
| --register-button-border: var(--app-border-soft); | |
| --register-placeholder: var(--welcome-subtitle); | |
| --register-danger: var(--app-danger); | |
| --student-bg: var(--app-bg); | |
| --student-sidebar-bg: var(--app-sidebar-bg); | |
| --student-surface: var(--app-surface); | |
| --student-surface-soft: var(--app-surface-soft); | |
| --student-border: var(--app-border); | |
| --student-border-strong: var(--app-border-strong); | |
| --student-text: var(--app-text); | |
| --student-muted: var(--app-muted); | |
| --student-primary: var(--app-primary); | |
| --student-primary-soft: var(--app-primary-soft); | |
| --student-primary-foreground: var(--app-primary-foreground); | |
| --student-danger: var(--app-danger); | |
| --student-success: var(--app-success); | |
| --student-placeholder: var(--app-placeholder); | |
| --student-shadow: 0 24px 70px rgba(15, 23, 42, 0.08); | |
| --student-sidebar-shadow: 1px 0 0 rgba(15, 23, 42, 0.08); | |
| --student-composer-shadow: var(--app-composer-shadow); | |
| --lecturer-bg: var(--app-bg); | |
| --lecturer-sidebar-bg: var(--app-sidebar-bg); | |
| --lecturer-surface: var(--app-surface); | |
| --lecturer-surface-soft: var(--app-surface-soft); | |
| --lecturer-border: var(--app-border); | |
| --lecturer-border-soft: var(--app-border-soft); | |
| --lecturer-border-strong: var(--app-border-strong); | |
| --lecturer-text: var(--app-text); | |
| --lecturer-muted: var(--app-muted); | |
| --lecturer-primary: var(--app-primary); | |
| --lecturer-primary-soft: var(--app-primary-soft); | |
| --lecturer-primary-foreground: var(--app-primary-foreground); | |
| --lecturer-danger: var(--app-danger); | |
| --lecturer-success: var(--app-success); | |
| --lecturer-shadow: 0 18px 42px rgba(15, 23, 42, 0.08); | |
| --lecturer-sidebar-shadow: 1px 0 0 rgba(15, 23, 42, 0.08); | |
| } | |
| .dark { | |
| --background: #1f1f1f; | |
| --foreground: #f4f4f5; | |
| --card: #171717; | |
| --card-foreground: #f4f4f5; | |
| --popover: #171717; | |
| --popover-foreground: #f4f4f5; | |
| --primary: #3478ff; | |
| --primary-foreground: #ffffff; | |
| --secondary: #262626; | |
| --secondary-foreground: #f4f4f5; | |
| --muted: #262626; | |
| --muted-foreground: #737373; | |
| --accent: #262626; | |
| --accent-foreground: #f4f4f5; | |
| --destructive: oklch(0.396 0.141 25.723); | |
| --destructive-foreground: oklch(0.637 0.237 25.331); | |
| --border: rgba(255, 255, 255, 0.12); | |
| --input: rgba(255, 255, 255, 0.12); | |
| --ring: #3478ff; | |
| --chart-1: oklch(0.488 0.243 264.376); | |
| --chart-2: oklch(0.696 0.17 162.48); | |
| --chart-3: oklch(0.769 0.188 70.08); | |
| --chart-4: oklch(0.627 0.265 303.9); | |
| --chart-5: oklch(0.645 0.246 16.439); | |
| --sidebar: #171717; | |
| --sidebar-foreground: #f4f4f5; | |
| --sidebar-primary: #3478ff; | |
| --sidebar-primary-foreground: #ffffff; | |
| --sidebar-accent: #262626; | |
| --sidebar-accent-foreground: #f4f4f5; | |
| --sidebar-border: rgba(255, 255, 255, 0.12); | |
| --sidebar-ring: #3478ff; | |
| --app-bg: #1f1f1f; | |
| --app-sidebar-bg: #171717; | |
| --app-surface: #171717; | |
| --app-surface-soft: #262626; | |
| --app-surface-muted: rgba(255, 255, 255, 0.08); | |
| --app-border: rgba(255, 255, 255, 0.12); | |
| --app-border-soft: rgba(255, 255, 255, 0.1); | |
| --app-border-strong: #3478ff; | |
| --app-text: #f4f4f5; | |
| --app-muted: #737373; | |
| --app-primary: #3478ff; | |
| --app-primary-soft: #c8d7ff; | |
| --app-primary-foreground: #ffffff; | |
| --app-danger: #ff4545; | |
| --app-success: var(--app-primary); | |
| --app-placeholder: rgba(244, 244, 245, 0.42); | |
| --app-toggle-bg: #171717; | |
| --app-shadow: 0 0 20px rgba(52, 120, 255, 0.34); | |
| --app-composer-shadow: 0 0 28px rgba(52, 120, 255, 0.36); | |
| --welcome-shell-bg: var(--app-bg); | |
| --welcome-title: var(--app-text); | |
| --welcome-subtitle: var(--app-muted); | |
| --welcome-accent: var(--app-primary); | |
| --welcome-accent-foreground: var(--app-primary-foreground); | |
| --welcome-accent-soft: var(--app-primary-soft); | |
| --welcome-toggle-bg: var(--app-toggle-bg); | |
| --welcome-card-bg: var(--app-surface); | |
| --welcome-card-border: var(--app-border); | |
| --welcome-card-active-border: var(--app-border-strong); | |
| --welcome-card-active-shadow: var(--app-shadow); | |
| --welcome-icon-muted-bg: var(--app-surface-muted); | |
| --welcome-icon-muted-border: var(--app-border-soft); | |
| --welcome-icon-active-border: color-mix( | |
| in oklab, | |
| var(--app-primary) 42%, | |
| transparent | |
| ); | |
| --register-shell-bg: var(--welcome-shell-bg); | |
| --register-card-bg: var(--welcome-card-bg); | |
| --register-card-border: var(--welcome-card-active-border); | |
| --register-card-shadow: var(--welcome-card-active-shadow); | |
| --register-input-bg: var(--app-surface); | |
| --register-input-border: var(--app-border); | |
| --register-button-border: var(--app-border); | |
| --register-placeholder: var(--welcome-subtitle); | |
| --register-danger: var(--app-danger); | |
| --student-bg: var(--app-bg); | |
| --student-sidebar-bg: var(--app-sidebar-bg); | |
| --student-surface: var(--app-surface); | |
| --student-surface-soft: var(--app-surface-soft); | |
| --student-border: var(--app-border); | |
| --student-border-strong: var(--app-border-strong); | |
| --student-text: var(--app-text); | |
| --student-muted: var(--app-muted); | |
| --student-primary: var(--app-primary); | |
| --student-primary-soft: var(--app-primary-soft); | |
| --student-primary-foreground: var(--app-primary-foreground); | |
| --student-danger: var(--app-danger); | |
| --student-success: var(--app-success); | |
| --student-placeholder: var(--app-placeholder); | |
| --student-shadow: 0 24px 70px rgba(0, 0, 0, 0.18); | |
| --student-sidebar-shadow: 1px 0 0 var(--app-border); | |
| --student-composer-shadow: var(--app-composer-shadow); | |
| --lecturer-bg: var(--app-bg); | |
| --lecturer-sidebar-bg: var(--app-sidebar-bg); | |
| --lecturer-surface: var(--app-surface); | |
| --lecturer-surface-soft: var(--app-surface-soft); | |
| --lecturer-border: var(--app-border); | |
| --lecturer-border-soft: var(--app-border-soft); | |
| --lecturer-border-strong: var(--app-border-strong); | |
| --lecturer-text: var(--app-text); | |
| --lecturer-muted: var(--app-muted); | |
| --lecturer-primary: var(--app-primary); | |
| --lecturer-primary-soft: color-mix( | |
| in oklab, | |
| var(--app-primary) 22%, | |
| var(--app-surface) | |
| ); | |
| --lecturer-primary-foreground: var(--app-primary-foreground); | |
| --lecturer-danger: var(--app-danger); | |
| --lecturer-success: var(--app-success); | |
| --lecturer-shadow: 0 18px 42px rgba(0, 0, 0, 0.2); | |
| --lecturer-sidebar-shadow: 1px 0 0 var(--app-border); | |
| } | |
| @layer base { | |
| * { | |
| @apply border-border; | |
| } | |
| body { | |
| @apply bg-background text-foreground; | |
| } | |
| button:not(:disabled), | |
| [role='button']:not([aria-disabled='true']), | |
| [data-slot='button']:not([aria-disabled='true']) { | |
| @apply cursor-pointer; | |
| } | |
| button:disabled, | |
| [aria-disabled='true'] { | |
| @apply cursor-not-allowed; | |
| } | |
| } | |
| @keyframes app-loading-dot { | |
| 0%, | |
| 80%, | |
| 100% { | |
| opacity: 0.24; | |
| transform: translateY(0); | |
| } | |
| 40% { | |
| opacity: 1; | |
| transform: translateY(-0.12rem); | |
| } | |
| } | |
| @media (prefers-reduced-motion: reduce) { | |
| .app-loading-dot { | |
| animation: none ; | |
| opacity: 1; | |
| transform: none; | |
| } | |
| } | |
| @layer components { | |
| .app-loading-indicator { | |
| @apply inline-flex items-center justify-center gap-2 whitespace-nowrap; | |
| } | |
| .app-loading-spinner { | |
| @apply shrink-0; | |
| } | |
| .app-loading-dots { | |
| @apply inline-flex min-w-[1.05em] items-center justify-start; | |
| } | |
| .app-loading-dot { | |
| animation: app-loading-dot 1.2s infinite ease-in-out both; | |
| line-height: 1; | |
| } | |
| .app-loading-dot:nth-child(2) { | |
| animation-delay: 0.16s; | |
| } | |
| .app-loading-dot:nth-child(3) { | |
| animation-delay: 0.32s; | |
| } | |
| .welcome-shell { | |
| @apply relative flex min-h-svh items-center justify-center px-4 py-8 sm:px-6; | |
| background-color: var(--welcome-shell-bg); | |
| } | |
| .welcome-content { | |
| @apply w-full max-w-[561px] space-y-7; | |
| } | |
| .welcome-theme-toggle { | |
| @apply absolute top-4 right-4 h-10 w-10 rounded-[10px] shadow-none backdrop-blur sm:top-8 sm:right-8; | |
| background-color: var(--welcome-toggle-bg); | |
| border-color: var(--welcome-card-active-border); | |
| color: var(--welcome-accent); | |
| } | |
| .welcome-logo { | |
| @apply mx-auto flex h-[77px] w-[77px] items-center justify-center rounded-[15px] border border-white; | |
| background-color: var(--welcome-accent); | |
| color: var(--welcome-accent-foreground); | |
| } | |
| .welcome-title { | |
| @apply text-center text-[34px] leading-tight font-bold tracking-[0.01em] sm:text-[40px]; | |
| color: var(--welcome-title); | |
| } | |
| .welcome-subtitle { | |
| @apply text-center text-[15px] leading-normal sm:text-[20px]; | |
| color: var(--welcome-subtitle); | |
| } | |
| .welcome-entries { | |
| @apply space-y-3; | |
| } | |
| .welcome-entry-card { | |
| @apply gap-0 overflow-hidden rounded-[17px] border py-0 transition-[border-color,box-shadow]; | |
| background-color: var(--welcome-card-bg); | |
| border-color: var(--welcome-card-border); | |
| box-shadow: none; | |
| } | |
| .welcome-entry-card:hover, | |
| .welcome-entry-card:focus-within { | |
| border-color: var(--welcome-card-active-border); | |
| box-shadow: var(--welcome-card-active-shadow); | |
| } | |
| .welcome-entry-link { | |
| @apply flex h-[90px] items-center justify-between gap-3 px-3.5 py-2.5 outline-none focus-visible:ring-2 sm:px-4; | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--welcome-accent) 35%, | |
| transparent | |
| ); | |
| } | |
| .welcome-entry-icon { | |
| @apply flex h-[52px] w-[52px] shrink-0 items-center justify-center rounded-[10px] border transition-colors; | |
| background-color: var(--welcome-icon-muted-bg); | |
| border-color: var(--welcome-icon-muted-border); | |
| color: var(--welcome-subtitle); | |
| } | |
| .welcome-entry-card:hover .welcome-entry-icon, | |
| .welcome-entry-card:focus-within .welcome-entry-icon { | |
| background-color: var(--welcome-accent-soft); | |
| border-color: var(--welcome-icon-active-border); | |
| color: var(--welcome-accent); | |
| } | |
| .welcome-entry-title { | |
| @apply truncate text-left text-lg leading-tight font-semibold; | |
| color: var(--welcome-title); | |
| } | |
| .welcome-entry-description { | |
| @apply mt-1 truncate text-left text-[13px] leading-tight; | |
| color: var(--welcome-subtitle); | |
| } | |
| .welcome-entry-arrow { | |
| @apply h-4 w-4 shrink-0 transition-transform group-hover:translate-x-0.5; | |
| color: var(--welcome-title); | |
| } | |
| .welcome-register { | |
| @apply text-center text-[13px]; | |
| color: var(--welcome-subtitle); | |
| } | |
| .welcome-register-link { | |
| @apply font-medium underline-offset-4 hover:underline focus-visible:ring-2 focus-visible:outline-none; | |
| color: var(--welcome-accent); | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--welcome-accent) 35%, | |
| transparent | |
| ); | |
| } | |
| .register-shell { | |
| @apply relative flex min-h-svh items-center justify-center px-4 py-8 sm:px-6; | |
| background-color: var(--register-shell-bg); | |
| } | |
| .register-choice-content { | |
| @apply w-full max-w-[561px]; | |
| } | |
| .register-choice-back { | |
| @apply mb-3; | |
| } | |
| .register-choice-options { | |
| @apply space-y-3; | |
| } | |
| .register-choice-card[data-highlighted='true'] { | |
| border-color: var(--welcome-card-active-border); | |
| box-shadow: var(--welcome-card-active-shadow); | |
| } | |
| .register-choice-card[data-highlighted='true'] .welcome-entry-icon { | |
| background-color: var(--welcome-accent-soft); | |
| border-color: var(--welcome-icon-active-border); | |
| color: var(--welcome-accent); | |
| } | |
| .register-card { | |
| @apply w-full max-w-[460px] gap-0 rounded-[17px] border py-0; | |
| background-color: var(--register-card-bg) ; | |
| border-color: var(--register-card-border) ; | |
| box-shadow: var(--register-card-shadow) ; | |
| } | |
| .register-card-content { | |
| @apply px-5 py-6 sm:px-[38px] sm:py-7; | |
| } | |
| .register-back-link { | |
| @apply inline-flex text-sm font-semibold underline-offset-4 transition-colors hover:underline focus-visible:ring-2 focus-visible:outline-none; | |
| color: var(--welcome-subtitle); | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--welcome-accent) 35%, | |
| transparent | |
| ); | |
| } | |
| .register-heading { | |
| @apply mt-2 text-center text-2xl leading-tight font-semibold; | |
| color: var(--welcome-title); | |
| } | |
| .register-form { | |
| @apply mt-7 flex flex-col gap-4; | |
| } | |
| .register-field { | |
| @apply grid gap-1.5; | |
| } | |
| .register-label { | |
| @apply text-base leading-none font-medium; | |
| color: var(--welcome-title); | |
| } | |
| .register-input { | |
| @apply h-[43px] rounded-[6px] px-3.5 text-sm shadow-none; | |
| background-color: var(--register-input-bg) ; | |
| border-color: var(--register-input-border) ; | |
| color: var(--welcome-title) ; | |
| } | |
| .register-input::placeholder { | |
| color: var(--register-placeholder); | |
| opacity: 1; | |
| } | |
| .register-input:focus-visible { | |
| border-color: var(--register-card-border) ; | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--welcome-accent) 35%, | |
| transparent | |
| ); | |
| } | |
| .register-input[aria-invalid='true'] { | |
| border-color: var(--register-danger) ; | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--register-danger) 28%, | |
| transparent | |
| ); | |
| } | |
| .register-error { | |
| @apply text-xs leading-snug; | |
| color: var(--register-danger); | |
| } | |
| .register-submit { | |
| @apply mt-1 h-[43px] w-full rounded-[6px] border text-base font-semibold shadow-none; | |
| background-color: var(--welcome-accent) ; | |
| border-color: var(--register-button-border) ; | |
| color: var(--welcome-accent-foreground) ; | |
| } | |
| .register-submit:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--welcome-accent) 88%, | |
| var(--register-card-bg) | |
| ) ; | |
| } | |
| .login-card { | |
| @apply max-w-[460px]; | |
| } | |
| .login-card-content { | |
| @apply px-5 py-7 sm:px-[38px] sm:py-8; | |
| } | |
| .login-heading { | |
| @apply mt-2; | |
| } | |
| .login-form { | |
| @apply mt-8 flex flex-col gap-4; | |
| } | |
| .login-remember { | |
| @apply flex items-center gap-3; | |
| } | |
| .login-remember-label { | |
| @apply text-sm leading-none font-normal; | |
| color: var(--welcome-subtitle); | |
| } | |
| .login-submit { | |
| @apply mt-2; | |
| } | |
| .login-register-text { | |
| @apply mt-4; | |
| } | |
| .login-status { | |
| @apply mt-4 text-center text-sm font-medium; | |
| color: var(--app-success); | |
| } | |
| .login-error { | |
| color: var(--register-danger); | |
| } | |
| .student-dashboard-shell { | |
| @apply h-svh min-h-svh overflow-hidden; | |
| background-color: var(--student-bg); | |
| color: var(--student-text); | |
| } | |
| .student-sidebar { | |
| border-color: var(--student-border) ; | |
| } | |
| .student-sidebar [data-sidebar='sidebar'] { | |
| background-color: var(--student-sidebar-bg); | |
| border-color: var(--student-border); | |
| box-shadow: var(--student-sidebar-shadow); | |
| } | |
| .student-sidebar-top { | |
| @apply border-b; | |
| border-color: var(--student-border); | |
| display: flex ; | |
| height: 72px ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| gap: 0 ; | |
| padding: 0 20px ; | |
| } | |
| .student-logo-action { | |
| @apply flex size-8 shrink-0 items-center justify-center rounded-[8px] transition-transform outline-none focus-visible:ring-2; | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--student-primary) 45%, | |
| transparent | |
| ); | |
| } | |
| .student-logo-action:hover { | |
| @apply scale-[1.03]; | |
| } | |
| .student-logo-mark { | |
| @apply flex size-8 items-center justify-center rounded-[8px]; | |
| background-color: var(--student-primary); | |
| color: var(--student-primary-foreground); | |
| } | |
| .student-sidebar-trigger { | |
| @apply rounded-[8px] shadow-none; | |
| color: var(--student-text); | |
| width: 32px ; | |
| height: 32px ; | |
| } | |
| .student-sidebar-trigger:hover { | |
| background-color: var(--student-surface-soft); | |
| color: var(--student-text); | |
| } | |
| .student-sidebar-content { | |
| gap: 0 ; | |
| } | |
| .student-history-group { | |
| padding: 0 ; | |
| } | |
| .student-history-label { | |
| @apply border-b text-xs font-medium; | |
| border-color: var(--student-border); | |
| color: var(--student-text); | |
| display: flex ; | |
| height: 44px ; | |
| align-items: center ; | |
| gap: 6px ; | |
| border-radius: 0 ; | |
| padding: 0 20px ; | |
| margin: 0 ; | |
| width: 100% ; | |
| background-color: transparent ; | |
| cursor: pointer; | |
| } | |
| .student-history-label:hover { | |
| background-color: var(--student-surface-soft) ; | |
| } | |
| .student-history-chevron { | |
| @apply ml-auto size-3 transition-transform; | |
| } | |
| .student-history-label[aria-expanded='false'] .student-history-chevron { | |
| transform: rotate(-90deg); | |
| } | |
| .student-history-list { | |
| gap: 4px ; | |
| padding: 12px 20px ; | |
| } | |
| .student-history-menu-item { | |
| @apply relative; | |
| } | |
| .student-history-menu-button { | |
| @apply rounded-[8px] text-left shadow-none; | |
| color: var(--student-muted); | |
| height: auto ; | |
| min-height: 42px ; | |
| padding: 8px 34px 8px 4px ; | |
| align-items: flex-start ; | |
| } | |
| .student-history-menu-button:hover, | |
| .student-history-menu-button[data-active='true'] { | |
| background-color: var(--student-surface-soft); | |
| color: var(--student-text); | |
| } | |
| .student-history-delete { | |
| @apply absolute top-1/2 right-2 flex size-6 -translate-y-1/2 items-center justify-center rounded-[6px] opacity-0 transition-opacity; | |
| color: var(--student-danger); | |
| } | |
| .student-history-menu-item:hover .student-history-delete, | |
| .student-history-menu-button[data-active='true'] + .student-history-delete { | |
| @apply opacity-100; | |
| } | |
| .student-history-delete:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--student-danger) 12%, | |
| transparent | |
| ); | |
| } | |
| .student-delete-dialog { | |
| @apply gap-5 rounded-[16px] border p-6 shadow-none sm:max-w-[440px]; | |
| background-color: var(--student-surface); | |
| border-color: var(--student-border); | |
| box-shadow: var(--student-shadow); | |
| color: var(--student-text); | |
| } | |
| .student-delete-dialog-body { | |
| @apply flex flex-col gap-3; | |
| } | |
| .student-delete-copy { | |
| @apply text-sm leading-relaxed; | |
| color: var(--student-muted); | |
| } | |
| .student-delete-copy strong { | |
| color: var(--student-text); | |
| } | |
| .student-delete-error { | |
| @apply rounded-[10px] border px-4 py-3 text-sm font-medium; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--student-danger) 8%, | |
| var(--student-surface) | |
| ); | |
| border-color: color-mix( | |
| in oklab, | |
| var(--student-danger) 24%, | |
| transparent | |
| ); | |
| color: var(--student-danger); | |
| } | |
| .student-delete-dialog-footer { | |
| @apply gap-3 pt-1; | |
| } | |
| .student-delete-cancel { | |
| @apply h-10 rounded-[8px] px-5 text-sm font-semibold shadow-none; | |
| background-color: var(--student-surface) ; | |
| border-color: var(--student-border) ; | |
| color: var(--student-text) ; | |
| } | |
| .student-delete-cancel:hover { | |
| background-color: var(--student-surface-soft) ; | |
| } | |
| .student-delete-confirm { | |
| @apply h-10 rounded-[8px] px-5 text-sm font-semibold shadow-none; | |
| background-color: var(--student-danger) ; | |
| color: var(--student-primary-foreground) ; | |
| } | |
| .student-delete-confirm:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--student-danger) 86%, | |
| #000 | |
| ) ; | |
| } | |
| .student-history-menu-icon { | |
| @apply hidden; | |
| color: var(--student-text); | |
| } | |
| .student-history-copy, | |
| .student-user-copy { | |
| @apply min-w-0; | |
| } | |
| .student-history-title { | |
| @apply block truncate text-sm leading-tight font-medium; | |
| color: var(--student-text); | |
| } | |
| .student-history-meta { | |
| @apply mt-1 block truncate text-xs leading-tight; | |
| color: var(--student-muted); | |
| } | |
| .student-sidebar-footer { | |
| @apply mt-auto border-t; | |
| border-color: var(--student-border); | |
| padding: 16px 20px ; | |
| } | |
| .student-user-menu-button { | |
| @apply mb-2 w-fit gap-2 rounded-[6px] shadow-none cursor-default; | |
| background-color: var(--student-surface-soft); | |
| color: var(--student-text); | |
| height: auto ; | |
| padding: 6px 8px ; | |
| } | |
| .student-user-menu-button:hover { | |
| background-color: var(--student-surface-soft); | |
| color: var(--student-text); | |
| } | |
| .student-user-avatar { | |
| @apply size-6 text-[8px]; | |
| background-color: var(--student-surface); | |
| color: var(--student-text); | |
| } | |
| .student-user-name { | |
| @apply block truncate text-xs leading-tight font-semibold; | |
| color: var(--student-text); | |
| } | |
| .student-user-role { | |
| @apply block truncate text-[11px] leading-tight; | |
| color: var(--student-muted); | |
| } | |
| .student-logout-button { | |
| @apply justify-start gap-1 rounded-none text-[11px] font-normal shadow-none; | |
| color: var(--student-danger); | |
| height: auto ; | |
| padding: 10px 16px ; | |
| } | |
| .student-logout-button:hover { | |
| background-color: transparent; | |
| color: var(--student-danger); | |
| } | |
| .group[data-collapsible='icon'] .student-sidebar-top { | |
| justify-content: center ; | |
| padding: 0 ; | |
| } | |
| .group[data-collapsible='icon'] .student-sidebar-trigger { | |
| display: none ; | |
| } | |
| .group[data-collapsible='icon'] .student-history-list { | |
| padding: 12px 8px ; | |
| } | |
| .group[data-collapsible='icon'] .student-history-label { | |
| display: none ; | |
| } | |
| .group[data-collapsible='icon'] .student-history-menu-button, | |
| .group[data-collapsible='icon'] .student-user-menu-button, | |
| .group[data-collapsible='icon'] .student-logout-button { | |
| @apply mx-auto flex items-center justify-center rounded-[8px]; | |
| background-color: transparent; | |
| width: 32px ; | |
| height: 32px ; | |
| min-height: 32px ; | |
| padding: 0 ; | |
| } | |
| .group[data-collapsible='icon'] .student-history-menu-icon { | |
| @apply block; | |
| } | |
| .group[data-collapsible='icon'] .student-history-copy, | |
| .group[data-collapsible='icon'] .student-user-copy, | |
| .group[data-collapsible='icon'] .student-logout-button span { | |
| @apply hidden; | |
| } | |
| .group[data-collapsible='icon'] .student-sidebar-footer { | |
| @apply px-2; | |
| } | |
| .student-workspace { | |
| @apply flex h-svh min-w-0 flex-1 flex-col overflow-hidden; | |
| background-color: var(--student-bg); | |
| color: var(--student-text); | |
| } | |
| .student-topbar { | |
| @apply sticky top-0 z-20 flex h-[72px] shrink-0 items-center justify-between border-b px-5 sm:px-6; | |
| background-color: var(--student-surface); | |
| border-color: var(--student-border); | |
| } | |
| .student-brand-title { | |
| @apply text-base font-bold; | |
| color: var(--student-text); | |
| } | |
| .student-topbar-actions { | |
| @apply flex items-center gap-3; | |
| } | |
| .student-theme-toggle { | |
| @apply static size-8 rounded-[8px] shadow-none sm:static; | |
| background-color: var(--student-surface) ; | |
| border-color: var(--student-border-strong) ; | |
| color: var(--student-primary) ; | |
| } | |
| .student-new-session-button { | |
| @apply h-8 rounded-[8px] px-4 text-xs font-semibold shadow-none; | |
| background-color: var(--student-primary) ; | |
| color: var(--student-primary-foreground) ; | |
| } | |
| .student-chat-stage { | |
| @apply flex min-h-0 flex-1 items-center justify-center px-4 py-10; | |
| } | |
| .student-empty-state { | |
| @apply flex w-full max-w-[610px] -translate-y-8 flex-col items-center; | |
| } | |
| .student-empty-icon { | |
| @apply mb-5 flex size-[52px] items-center justify-center rounded-[12px]; | |
| background-color: var(--student-primary-soft); | |
| color: var(--student-primary); | |
| } | |
| .student-empty-icon--thinking { | |
| @apply animate-pulse; | |
| background-color: var(--student-primary); | |
| color: var(--student-primary-foreground); | |
| } | |
| .student-greeting { | |
| @apply mb-9 text-center; | |
| } | |
| .student-greeting h2 { | |
| @apply text-3xl leading-tight font-bold tracking-[-0.02em]; | |
| color: var(--student-text); | |
| } | |
| .student-greeting p { | |
| @apply mt-2 text-sm; | |
| color: var(--student-muted); | |
| } | |
| .student-composer-card { | |
| @apply w-full gap-0 rounded-[14px] border py-0 shadow-none; | |
| background-color: var(--student-surface); | |
| border-color: var(--student-border-strong); | |
| box-shadow: var(--student-composer-shadow); | |
| } | |
| .student-composer-content { | |
| @apply relative min-h-[225px] px-5 py-4; | |
| } | |
| .student-composer-form { | |
| display: contents; | |
| } | |
| .student-status { | |
| @apply -mt-5 mb-5 text-center text-xs font-medium; | |
| color: var(--student-danger); | |
| } | |
| .student-status--success { | |
| color: var(--student-success); | |
| } | |
| .student-course-row { | |
| @apply flex flex-wrap items-center gap-2 text-[11px] font-medium; | |
| color: var(--student-text); | |
| } | |
| .student-course-icon, | |
| .student-question-icon { | |
| color: var(--student-primary); | |
| } | |
| .student-course-label { | |
| @apply whitespace-nowrap; | |
| } | |
| .student-course-select { | |
| @apply h-6 w-[180px] rounded-[5px] px-2 text-[10px] shadow-none; | |
| background-color: var(--student-surface) ; | |
| border-color: var(--student-border-strong) ; | |
| color: var(--student-text) ; | |
| } | |
| .student-course-select svg { | |
| @apply size-3; | |
| } | |
| .student-composer-divider { | |
| @apply my-4 h-px w-full; | |
| background-color: var(--student-border); | |
| } | |
| .student-question-row { | |
| @apply flex items-start gap-3; | |
| } | |
| .student-question-row textarea { | |
| @apply min-h-[118px] flex-1 resize-none bg-transparent pt-0 text-[11px] outline-none; | |
| color: var(--student-text); | |
| } | |
| .student-question-row textarea::placeholder { | |
| color: var(--student-placeholder); | |
| } | |
| .student-floating-send { | |
| @apply absolute right-5 bottom-4 size-8 rounded-[8px] shadow-none; | |
| background-color: var(--student-primary) ; | |
| color: var(--student-primary-foreground) ; | |
| } | |
| .student-chat-stage--session { | |
| @apply relative min-h-0 flex-col items-stretch justify-between overflow-hidden px-0 py-0; | |
| } | |
| .student-chat-thread { | |
| @apply min-h-0 w-full flex-1 overflow-y-auto overscroll-contain px-5 pt-8; | |
| padding-bottom: 12.5rem; | |
| } | |
| .student-chat-messages { | |
| @apply flex min-h-full w-full flex-col gap-6; | |
| } | |
| .student-chat-loading { | |
| @apply mt-24 text-center text-sm; | |
| color: var(--student-muted); | |
| } | |
| .student-chat-status { | |
| @apply mt-0 mb-4; | |
| } | |
| .student-message { | |
| @apply flex w-full items-start gap-3.5; | |
| } | |
| .student-message--assistant { | |
| @apply justify-start; | |
| } | |
| .student-message--user { | |
| @apply justify-end; | |
| } | |
| .student-message-avatar { | |
| @apply flex size-9 shrink-0 items-center justify-center rounded-[10px]; | |
| } | |
| .student-message-avatar--assistant { | |
| background-color: var(--student-primary); | |
| color: var(--student-primary-foreground); | |
| } | |
| .student-message-avatar--user { | |
| background-color: var(--student-primary-soft); | |
| color: var(--student-primary); | |
| } | |
| .student-message-bubble { | |
| @apply max-w-[min(760px,88%)] rounded-[10px] border px-4 py-3.5 text-base shadow-none; | |
| background-color: var(--student-surface); | |
| border-color: var(--student-border-strong); | |
| color: var(--student-primary); | |
| } | |
| .student-message--assistant .student-message-bubble { | |
| color: var(--student-text); | |
| } | |
| .student-message--user .student-message-bubble { | |
| background-color: var(--student-primary); | |
| border-color: var(--student-primary); | |
| color: var(--student-primary-foreground); | |
| } | |
| .student-message-content { | |
| @apply text-base leading-relaxed whitespace-pre-wrap; | |
| } | |
| .student-message-caret { | |
| @apply ml-0.5 inline-block h-3 w-px animate-pulse align-[-2px]; | |
| background-color: currentColor; | |
| } | |
| .student-message-time { | |
| @apply mt-2 block text-[10px]; | |
| color: color-mix(in oklab, currentColor 72%, transparent); | |
| } | |
| .student-message-sources { | |
| @apply mt-3 flex flex-wrap gap-2; | |
| } | |
| .student-message-source { | |
| @apply rounded-full border px-2 py-1 text-[10px]; | |
| border-color: color-mix( | |
| in oklab, | |
| var(--student-primary) 24%, | |
| transparent | |
| ); | |
| color: inherit; | |
| } | |
| .student-message-bubble--typing { | |
| @apply text-[11px]; | |
| color: var(--student-muted); | |
| } | |
| .student-chat-scroll-anchor { | |
| scroll-margin-bottom: 13.5rem; | |
| } | |
| .student-chat-composer { | |
| @apply pointer-events-none absolute right-5 bottom-8 left-5 z-10 w-auto pb-0; | |
| } | |
| .student-composer-card--dock { | |
| @apply pointer-events-auto w-full; | |
| -webkit-backdrop-filter: blur(18px) saturate(1.25); | |
| backdrop-filter: blur(18px) saturate(1.25); | |
| background-color: color-mix( | |
| in oklab, | |
| var(--student-surface) 76%, | |
| transparent | |
| ) ; | |
| } | |
| .student-composer-card--dock .student-composer-content { | |
| @apply min-h-[116px]; | |
| } | |
| .student-composer-card--dock .student-question-row textarea { | |
| @apply min-h-[38px]; | |
| } | |
| .student-chat-updated-at { | |
| @apply mt-3 text-center text-[11px]; | |
| color: var(--student-muted); | |
| } | |
| .embed-shell { | |
| @apply relative flex h-svh flex-col overflow-hidden px-6 py-5; | |
| background-color: var(--embed-bg); | |
| color: var(--embed-text); | |
| } | |
| .embed-toolbar { | |
| @apply relative z-20 flex shrink-0 items-start justify-between gap-4; | |
| } | |
| .embed-tabs { | |
| @apply flex h-8 items-center gap-1 rounded-full p-1 shadow-sm; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--embed-muted) 20%, | |
| transparent | |
| ); | |
| } | |
| .embed-tabs button { | |
| @apply h-6 rounded-full px-6 text-sm font-medium transition; | |
| color: var(--embed-text); | |
| } | |
| .embed-tabs button[aria-selected='true'] { | |
| @apply shadow-sm; | |
| background-color: var(--embed-surface); | |
| } | |
| .embed-actions { | |
| @apply flex items-center gap-5; | |
| } | |
| .embed-icon-button { | |
| @apply flex size-8 items-center justify-center rounded-[5px] transition; | |
| color: var(--embed-text); | |
| } | |
| .embed-icon-button:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--embed-muted) 14%, | |
| transparent | |
| ); | |
| } | |
| .embed-icon-button--primary { | |
| background-color: var(--embed-primary); | |
| color: #ffffff; | |
| } | |
| .embed-icon-button--primary:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--embed-primary) 88%, | |
| #ffffff | |
| ); | |
| } | |
| .embed-chat { | |
| @apply relative flex min-h-0 flex-1 flex-col items-center justify-center; | |
| } | |
| .embed-chat--session { | |
| @apply items-stretch justify-start; | |
| } | |
| .embed-empty-state { | |
| @apply mx-auto flex w-full max-w-[620px] -translate-y-5 flex-col items-center text-center; | |
| } | |
| .embed-empty-icon { | |
| @apply mb-5 flex size-[52px] items-center justify-center rounded-[14px]; | |
| background-color: var(--embed-primary-soft); | |
| color: var(--embed-primary); | |
| } | |
| .embed-empty-state h1 { | |
| @apply text-2xl leading-tight font-bold tracking-[-0.02em]; | |
| color: var(--embed-text); | |
| } | |
| .embed-empty-state p { | |
| @apply mt-2 text-sm; | |
| color: var(--embed-muted); | |
| } | |
| .embed-status { | |
| @apply mt-4 text-center text-sm font-medium; | |
| color: var(--embed-danger); | |
| } | |
| .embed-thread { | |
| @apply min-h-0 flex-1 space-y-5 overflow-y-auto overscroll-contain px-0 pt-10; | |
| margin-right: -1.5rem; | |
| padding-right: 1.5rem; | |
| padding-bottom: 11rem; | |
| } | |
| .embed-message { | |
| @apply flex w-full items-start gap-3; | |
| } | |
| .embed-message--assistant { | |
| @apply justify-start; | |
| } | |
| .embed-message--user { | |
| @apply justify-end; | |
| } | |
| .embed-message-avatar { | |
| @apply flex size-8 shrink-0 items-center justify-center rounded-[9px]; | |
| } | |
| .embed-message-avatar--assistant { | |
| background-color: var(--embed-primary); | |
| color: #ffffff; | |
| } | |
| .embed-message-avatar--user { | |
| background-color: var(--embed-primary-soft); | |
| color: var(--embed-primary); | |
| } | |
| .embed-message-bubble { | |
| @apply max-w-[min(290px,75%)] rounded-[10px] border px-4 py-3 text-sm shadow-none; | |
| background-color: var(--embed-surface); | |
| border-color: var(--embed-border); | |
| color: var(--embed-text); | |
| } | |
| .embed-message--assistant .embed-message-bubble { | |
| color: var(--embed-text); | |
| } | |
| .embed-message--user .embed-message-bubble { | |
| background-color: var(--embed-primary); | |
| border-color: var(--embed-primary); | |
| color: #ffffff; | |
| } | |
| .embed-message-content { | |
| @apply leading-relaxed whitespace-pre-wrap; | |
| } | |
| .embed-message-time { | |
| @apply mt-2 block text-xs; | |
| color: color-mix(in oklab, currentColor 68%, transparent); | |
| } | |
| .embed-message-caret { | |
| @apply ml-0.5 inline-block h-3 w-px animate-pulse align-[-2px]; | |
| background-color: currentColor; | |
| } | |
| .embed-message-bubble--typing { | |
| color: var(--embed-muted); | |
| } | |
| .embed-composer-dock { | |
| @apply absolute right-0 bottom-0 left-0 z-10; | |
| } | |
| .embed-composer { | |
| @apply relative w-full rounded-[var(--embed-radius)] border px-4 py-3; | |
| -webkit-backdrop-filter: blur(16px) saturate(1.25); | |
| backdrop-filter: blur(16px) saturate(1.25); | |
| background-color: color-mix( | |
| in oklab, | |
| var(--embed-surface) 82%, | |
| transparent | |
| ); | |
| border-color: var(--embed-border); | |
| box-shadow: 0 18px 40px color-mix(in oklab, var(--embed-primary) 24%, transparent); | |
| } | |
| .embed-course-row { | |
| @apply flex flex-wrap items-center gap-2 text-sm font-bold; | |
| color: var(--embed-text); | |
| } | |
| .embed-course-row svg, | |
| .embed-question-row svg { | |
| color: var(--embed-primary); | |
| } | |
| .embed-course-row select { | |
| @apply h-6 max-w-[210px] rounded-[5px] border px-2 text-xs outline-none; | |
| background-color: var(--embed-surface); | |
| border-color: var(--embed-border); | |
| color: var(--embed-text); | |
| } | |
| .embed-course-row select:disabled { | |
| @apply opacity-70; | |
| } | |
| .embed-composer-divider { | |
| @apply my-3 h-px w-full; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--embed-muted) 24%, | |
| transparent | |
| ); | |
| } | |
| .embed-question-row { | |
| @apply flex items-start gap-3; | |
| } | |
| .embed-question-row textarea { | |
| @apply min-h-[72px] flex-1 resize-none bg-transparent text-sm outline-none; | |
| color: var(--embed-text); | |
| } | |
| .embed-question-row textarea::placeholder { | |
| color: color-mix(in oklab, var(--embed-muted) 48%, transparent); | |
| } | |
| .embed-send-button { | |
| @apply absolute right-4 bottom-3 flex size-8 items-center justify-center rounded-[8px] transition disabled:opacity-55; | |
| background-color: var(--embed-primary); | |
| color: #ffffff; | |
| } | |
| .embed-updated-at { | |
| @apply mt-2 text-center text-xs; | |
| color: var(--embed-muted); | |
| } | |
| .embed-history { | |
| @apply flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto overscroll-contain pt-7; | |
| margin-right: -1.5rem; | |
| padding-right: 1.5rem; | |
| } | |
| .embed-history-item { | |
| @apply flex w-full items-center justify-between gap-4 rounded-[7px] px-6 py-3 text-left transition; | |
| color: var(--embed-text); | |
| } | |
| .embed-history-item[data-active='true'], | |
| .embed-history-item:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--embed-muted) 18%, | |
| transparent | |
| ); | |
| } | |
| .embed-history-item strong { | |
| @apply block text-base font-semibold; | |
| } | |
| .embed-history-item small { | |
| @apply mt-1 block text-xs; | |
| color: var(--embed-text); | |
| } | |
| .embed-history-delete { | |
| @apply shrink-0 opacity-30 transition; | |
| color: var(--embed-danger); | |
| } | |
| .embed-history-item[data-active='true'] .embed-history-delete, | |
| .embed-history-item:hover .embed-history-delete { | |
| @apply opacity-100; | |
| } | |
| .embed-empty-copy { | |
| @apply mt-16 text-center text-sm; | |
| color: var(--embed-muted); | |
| } | |
| .embed-modal-backdrop { | |
| @apply absolute inset-0 z-50 flex items-center justify-center p-6; | |
| background-color: color-mix(in oklab, var(--embed-text) 30%, transparent); | |
| } | |
| .embed-modal { | |
| @apply w-full max-w-xs rounded-2xl p-5 shadow-xl; | |
| background-color: var(--embed-surface); | |
| color: var(--embed-text); | |
| } | |
| .embed-modal-title { | |
| @apply mb-1 text-sm font-semibold; | |
| } | |
| .embed-modal-body { | |
| @apply mb-4 text-sm; | |
| color: var(--embed-muted); | |
| } | |
| .embed-modal-actions { | |
| @apply flex justify-end gap-2; | |
| } | |
| .embed-modal-btn { | |
| @apply rounded-full px-4 py-1.5 text-xs font-medium transition; | |
| } | |
| .embed-modal-btn--cancel { | |
| background-color: color-mix(in oklab, var(--embed-muted) 15%, transparent); | |
| color: var(--embed-text); | |
| } | |
| .embed-modal-btn--cancel:hover { | |
| background-color: color-mix(in oklab, var(--embed-muted) 25%, transparent); | |
| } | |
| .embed-modal-btn--danger { | |
| background-color: var(--embed-danger); | |
| color: #fff; | |
| } | |
| .embed-modal-btn--danger:hover { | |
| opacity: 0.88; | |
| } | |
| .lecturer-dashboard-shell { | |
| @apply min-h-svh; | |
| background-color: var(--lecturer-bg); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-sidebar { | |
| border-color: var(--lecturer-border) ; | |
| } | |
| .lecturer-sidebar [data-sidebar='sidebar'] { | |
| background-color: var(--lecturer-sidebar-bg); | |
| border-color: var(--lecturer-border); | |
| box-shadow: var(--lecturer-sidebar-shadow); | |
| } | |
| .lecturer-sidebar-header { | |
| @apply border-b; | |
| border-color: var(--lecturer-border); | |
| display: flex ; | |
| height: 72px ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| gap: 0 ; | |
| padding: 0 20px ; | |
| } | |
| .lecturer-brand { | |
| @apply flex min-w-0 items-center gap-3 rounded-[10px] text-left outline-none focus-visible:ring-2; | |
| color: var(--lecturer-text); | |
| flex: 1 1 auto; | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 45%, | |
| transparent | |
| ); | |
| } | |
| .lecturer-brand-mark { | |
| @apply flex size-8 shrink-0 items-center justify-center rounded-[8px]; | |
| background-color: var(--lecturer-primary); | |
| color: var(--lecturer-primary-foreground); | |
| } | |
| .lecturer-brand-copy { | |
| @apply truncate text-base font-bold; | |
| } | |
| .lecturer-sidebar-trigger { | |
| @apply rounded-[8px] shadow-none; | |
| color: var(--lecturer-text); | |
| width: 32px ; | |
| height: 32px ; | |
| } | |
| .lecturer-sidebar-trigger:hover { | |
| background-color: var(--lecturer-surface-soft); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-sidebar-content { | |
| gap: 0 ; | |
| } | |
| .lecturer-nav-group { | |
| padding: 16px 20px ; | |
| } | |
| .lecturer-nav-list { | |
| gap: 8px ; | |
| } | |
| .lecturer-nav-button { | |
| @apply justify-start gap-2 rounded-[8px] text-xs font-semibold shadow-none; | |
| color: var(--lecturer-muted); | |
| height: 34px ; | |
| padding: 0 10px ; | |
| } | |
| .lecturer-nav-button:hover { | |
| background-color: var(--lecturer-primary-soft); | |
| color: var(--lecturer-primary); | |
| } | |
| .lecturer-nav-button[data-active='true'] { | |
| background-color: var(--lecturer-primary); | |
| color: var(--lecturer-primary-foreground); | |
| } | |
| .lecturer-sidebar-footer { | |
| @apply mt-auto border-t; | |
| border-color: var(--lecturer-border); | |
| padding: 16px 20px ; | |
| } | |
| .lecturer-user-button { | |
| @apply mb-3 w-fit gap-2 rounded-[6px] shadow-none cursor-default; | |
| background-color: var(--lecturer-surface-soft); | |
| color: var(--lecturer-text); | |
| height: auto ; | |
| padding: 6px 8px ; | |
| } | |
| .lecturer-user-button:hover { | |
| background-color: var(--lecturer-surface-soft); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-user-avatar { | |
| @apply size-6 text-[8px]; | |
| background-color: var(--lecturer-surface); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-user-copy { | |
| @apply min-w-0; | |
| } | |
| .lecturer-user-name { | |
| @apply block truncate text-[11px] leading-tight font-semibold; | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-user-role { | |
| @apply block truncate text-[10px] leading-tight; | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-logout-button { | |
| @apply justify-start gap-1 rounded-none text-[11px] font-normal shadow-none; | |
| color: var(--lecturer-danger); | |
| height: auto ; | |
| padding: 10px 16px ; | |
| } | |
| .lecturer-logout-button:hover { | |
| background-color: transparent; | |
| color: var(--lecturer-danger); | |
| } | |
| .lecturer-confirm-dialog { | |
| @apply gap-5 rounded-[16px] border p-6 shadow-none sm:max-w-[440px]; | |
| background-color: var(--lecturer-surface); | |
| border-color: var(--lecturer-border); | |
| box-shadow: var(--lecturer-shadow); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-confirm-dialog-footer { | |
| @apply gap-3 pt-1; | |
| } | |
| .lecturer-danger-button { | |
| @apply h-10 rounded-[8px] px-5 text-sm font-semibold shadow-none; | |
| background-color: var(--lecturer-danger) ; | |
| color: var(--lecturer-primary-foreground) ; | |
| } | |
| .lecturer-danger-button:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 86%, | |
| #000 | |
| ) ; | |
| } | |
| .group[data-collapsible='icon'] .lecturer-sidebar-header { | |
| justify-content: center ; | |
| padding: 0 ; | |
| } | |
| .group[data-collapsible='icon'] .lecturer-brand-copy, | |
| .group[data-collapsible='icon'] .lecturer-nav-button span, | |
| .group[data-collapsible='icon'] .lecturer-user-copy, | |
| .group[data-collapsible='icon'] .lecturer-logout-button span { | |
| @apply hidden; | |
| } | |
| .group[data-collapsible='icon'] .lecturer-brand { | |
| flex: 0 0 auto; | |
| justify-content: center; | |
| } | |
| .group[data-collapsible='icon'] .lecturer-sidebar-trigger { | |
| display: none ; | |
| } | |
| .group[data-collapsible='icon'] .lecturer-nav-group { | |
| padding: 20px 12px ; | |
| } | |
| .group[data-collapsible='icon'] .lecturer-nav-button, | |
| .group[data-collapsible='icon'] .lecturer-user-button, | |
| .group[data-collapsible='icon'] .lecturer-logout-button { | |
| @apply mx-auto flex items-center justify-center rounded-[9px]; | |
| width: 32px ; | |
| height: 32px ; | |
| padding: 0 ; | |
| } | |
| .group[data-collapsible='icon'] .lecturer-sidebar-footer { | |
| @apply px-3; | |
| } | |
| .lecturer-workspace { | |
| @apply flex min-w-0 flex-1 flex-col; | |
| background-color: var(--lecturer-bg); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-page { | |
| @apply w-full px-5 py-8 sm:px-8 lg:px-10; | |
| } | |
| .lecturer-page input:not([type='checkbox']), | |
| .lecturer-page textarea, | |
| .lecturer-page select { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 10%, | |
| var(--lecturer-surface) | |
| ) ; | |
| } | |
| .lecturer-page-header { | |
| @apply flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between; | |
| } | |
| .lecturer-page-header h1 { | |
| @apply text-3xl leading-tight font-bold tracking-[-0.03em]; | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-page-header p { | |
| @apply mt-1 text-sm leading-relaxed; | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-header-actions { | |
| @apply flex items-center gap-3; | |
| } | |
| .lecturer-theme-toggle { | |
| @apply static size-9 rounded-[9px] shadow-none sm:static; | |
| background-color: var(--lecturer-surface) ; | |
| border-color: var(--lecturer-border-strong) ; | |
| color: var(--lecturer-primary) ; | |
| } | |
| .lecturer-create-button { | |
| @apply h-9 rounded-[8px] px-4 text-xs font-semibold shadow-none; | |
| background-color: var(--lecturer-primary) ; | |
| color: var(--lecturer-primary-foreground) ; | |
| } | |
| .lecturer-cancel-button { | |
| @apply h-10 rounded-[8px] px-5 text-sm font-semibold shadow-none; | |
| background-color: var(--lecturer-surface) ; | |
| border-color: var(--lecturer-border) ; | |
| color: var(--lecturer-text) ; | |
| } | |
| .lecturer-cancel-button:hover { | |
| background-color: var(--lecturer-surface-soft) ; | |
| } | |
| .lecturer-course-dialog { | |
| @apply gap-6 rounded-[16px] border p-6 shadow-none sm:max-w-[460px]; | |
| background-color: var(--lecturer-surface); | |
| border-color: var(--lecturer-border-strong); | |
| box-shadow: var(--lecturer-shadow); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-course-form { | |
| @apply flex flex-col gap-5; | |
| } | |
| .lecturer-form-field { | |
| @apply flex flex-col gap-2; | |
| } | |
| .lecturer-form-label { | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-form-input, | |
| .lecturer-form-textarea { | |
| @apply w-full rounded-[8px] border px-4 text-sm shadow-none transition-[border-color,box-shadow] outline-none; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 6%, | |
| var(--lecturer-surface) | |
| ); | |
| border-color: var(--lecturer-border); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-form-input { | |
| @apply h-11; | |
| } | |
| .lecturer-form-textarea { | |
| @apply min-h-28 resize-none py-3; | |
| } | |
| .lecturer-form-input::placeholder, | |
| .lecturer-form-textarea::placeholder { | |
| color: var(--app-placeholder); | |
| } | |
| .lecturer-form-input:focus, | |
| .lecturer-form-textarea:focus { | |
| border-color: var(--lecturer-primary); | |
| box-shadow: 0 0 0 3px | |
| color-mix(in oklab, var(--lecturer-primary) 18%, transparent); | |
| } | |
| .lecturer-course-form .lecturer-status { | |
| @apply mx-0 mt-0; | |
| } | |
| .lecturer-course-footer { | |
| @apply gap-3 pt-1; | |
| } | |
| .lecturer-metric-grid { | |
| @apply mt-8 grid grid-cols-1 gap-5 md:grid-cols-3; | |
| } | |
| .lecturer-metric-card { | |
| @apply gap-0 rounded-[14px] border py-0 shadow-none; | |
| background-color: var(--lecturer-surface); | |
| border-color: var(--lecturer-border-soft); | |
| box-shadow: var(--lecturer-shadow); | |
| } | |
| .lecturer-metric-content { | |
| @apply flex items-center gap-5 px-6 py-6; | |
| } | |
| .lecturer-metric-icon { | |
| @apply flex size-12 shrink-0 items-center justify-center rounded-[12px]; | |
| background-color: var(--lecturer-primary-soft); | |
| color: var(--lecturer-primary); | |
| } | |
| .lecturer-metric-icon[data-tone='danger'] { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 12%, | |
| var(--lecturer-surface) | |
| ); | |
| color: var(--lecturer-danger); | |
| } | |
| .lecturer-metric-copy p { | |
| @apply text-sm; | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-metric-value-row { | |
| @apply mt-1 flex items-end gap-2; | |
| } | |
| .lecturer-metric-value-row strong { | |
| @apply text-3xl leading-none font-bold; | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-metric-icon[data-tone='danger'] | |
| + .lecturer-metric-copy | |
| .lecturer-metric-value-row | |
| strong { | |
| color: var(--lecturer-danger); | |
| } | |
| .lecturer-metric-value-row span { | |
| @apply pb-1 text-xs; | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-table-card { | |
| @apply mt-8 gap-0 overflow-hidden rounded-[14px] border py-0 shadow-none; | |
| background-color: var(--lecturer-surface); | |
| border-color: var(--lecturer-border); | |
| box-shadow: var(--lecturer-shadow); | |
| } | |
| .lecturer-table-content { | |
| @apply px-0; | |
| } | |
| .lecturer-table-heading { | |
| @apply flex flex-col gap-4 border-b px-6 py-5 sm:flex-row sm:items-center sm:justify-between; | |
| border-color: var(--lecturer-border); | |
| } | |
| .lecturer-table-heading h2 { | |
| @apply text-base font-semibold; | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-search-field { | |
| @apply relative w-full sm:max-w-[320px]; | |
| } | |
| .lecturer-search-field svg { | |
| @apply pointer-events-none absolute top-1/2 left-3 -translate-y-1/2; | |
| color: var(--lecturer-muted); | |
| z-index: 1; | |
| } | |
| .lecturer-search-input { | |
| @apply h-10 rounded-[9px] border text-sm shadow-none transition-[border-color,box-shadow] outline-none; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 5%, | |
| var(--lecturer-surface) | |
| ); | |
| border-color: var(--lecturer-border); | |
| color: var(--lecturer-text); | |
| padding-right: 0.75rem ; | |
| padding-left: 2.5rem ; | |
| } | |
| .lecturer-search-input::placeholder { | |
| color: var(--app-placeholder); | |
| } | |
| .lecturer-search-input:focus { | |
| border-color: var(--lecturer-primary); | |
| box-shadow: 0 0 0 3px | |
| color-mix(in oklab, var(--lecturer-primary) 16%, transparent); | |
| } | |
| .lecturer-status { | |
| @apply mx-6 mt-4 rounded-[10px] border px-4 py-3 text-sm font-medium; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 8%, | |
| var(--lecturer-surface) | |
| ); | |
| border-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 24%, | |
| transparent | |
| ); | |
| color: var(--lecturer-danger); | |
| } | |
| .lecturer-status--success { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-success) 8%, | |
| var(--lecturer-surface) | |
| ); | |
| border-color: color-mix( | |
| in oklab, | |
| var(--lecturer-success) 24%, | |
| transparent | |
| ); | |
| color: var(--lecturer-success); | |
| } | |
| .lecturer-table-wrap { | |
| @apply w-full overflow-x-auto; | |
| } | |
| .lecturer-table { | |
| @apply w-full min-w-[620px] border-collapse text-left; | |
| } | |
| .lecturer-table th { | |
| @apply px-6 py-4 text-xs font-semibold; | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-table td { | |
| @apply border-t px-6 py-4 text-sm; | |
| border-color: var(--lecturer-border); | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-table tbody tr:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 5%, | |
| transparent | |
| ); | |
| } | |
| .lecturer-kb-name { | |
| @apply block max-w-[260px] font-semibold; | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-doc-pill { | |
| @apply inline-flex items-center gap-1.5 rounded-[7px] px-2.5 py-1 text-xs font-semibold; | |
| background-color: var(--lecturer-surface-soft); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-doc-pill svg { | |
| color: var(--lecturer-primary); | |
| } | |
| .lecturer-doc-error { | |
| @apply size-1.5 rounded-full; | |
| background-color: var(--lecturer-danger); | |
| } | |
| .lecturer-table-empty { | |
| @apply py-10 text-center text-sm; | |
| color: var(--lecturer-muted) ; | |
| } | |
| .lecturer-manage-button { | |
| @apply inline-flex items-center justify-center gap-1 rounded-[7px] px-3 py-1.5 text-sm font-semibold transition-colors outline-none focus-visible:ring-2; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 10%, | |
| var(--lecturer-surface) | |
| ); | |
| color: var(--lecturer-primary); | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 45%, | |
| transparent | |
| ); | |
| } | |
| .lecturer-manage-button:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 16%, | |
| var(--lecturer-surface) | |
| ); | |
| } | |
| .lecturer-detail-page { | |
| @apply min-h-svh w-full; | |
| background-color: var(--lecturer-bg); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-detail-header { | |
| @apply flex flex-col gap-5 px-5 py-8 sm:flex-row sm:items-start sm:px-8 lg:px-10; | |
| background-color: var(--lecturer-surface-soft); | |
| border-bottom: 1px solid var(--lecturer-border-soft); | |
| } | |
| .lecturer-detail-back { | |
| @apply mt-1 inline-flex size-9 shrink-0 items-center justify-center rounded-full transition-colors outline-none focus-visible:ring-2; | |
| color: var(--lecturer-muted); | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 45%, | |
| transparent | |
| ); | |
| } | |
| .lecturer-detail-back:hover { | |
| background-color: var(--lecturer-surface); | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-detail-heading { | |
| @apply min-w-0 flex-1; | |
| } | |
| .lecturer-detail-title-row { | |
| @apply flex flex-wrap items-center gap-4; | |
| } | |
| .lecturer-detail-title-row h1 { | |
| @apply text-3xl leading-tight font-bold tracking-[-0.03em]; | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-detail-heading p { | |
| @apply mt-1 text-base leading-relaxed italic; | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-detail-actions { | |
| @apply flex items-center gap-3 sm:ml-auto; | |
| } | |
| .lecturer-edit-button { | |
| @apply h-12 rounded-[8px] px-5 text-base font-semibold shadow-none; | |
| background-color: var(--lecturer-surface) ; | |
| border-color: var(--lecturer-border) ; | |
| color: var(--lecturer-text) ; | |
| } | |
| .lecturer-edit-button:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 8%, | |
| var(--lecturer-surface) | |
| ) ; | |
| } | |
| .lecturer-delete-button { | |
| @apply size-12 rounded-[8px] shadow-none; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 10%, | |
| var(--lecturer-surface) | |
| ) ; | |
| color: var(--lecturer-danger) ; | |
| } | |
| .lecturer-delete-button:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 16%, | |
| var(--lecturer-surface) | |
| ) ; | |
| } | |
| .lecturer-delete-copy { | |
| @apply text-sm leading-relaxed; | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-delete-copy strong { | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-danger-action-button { | |
| @apply h-10 rounded-[8px] px-5 text-sm font-semibold shadow-none; | |
| background-color: var(--lecturer-danger) ; | |
| color: var(--lecturer-primary-foreground) ; | |
| } | |
| .lecturer-danger-action-button:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 86%, | |
| #000 | |
| ) ; | |
| } | |
| .lecturer-detail-content { | |
| @apply mx-auto flex w-full max-w-[920px] flex-col gap-6 px-5 py-10 sm:px-8; | |
| } | |
| .lecturer-upload-input { | |
| @apply sr-only; | |
| } | |
| .lecturer-upload-card { | |
| @apply flex min-h-[185px] w-full flex-col items-center justify-center gap-3 rounded-[14px] border border-dashed px-6 py-8 text-center transition-colors outline-none focus-visible:ring-2; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 6%, | |
| var(--lecturer-surface) | |
| ); | |
| border-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 28%, | |
| var(--lecturer-border) | |
| ); | |
| color: var(--lecturer-text); | |
| --tw-ring-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 45%, | |
| transparent | |
| ); | |
| } | |
| .lecturer-upload-card:hover { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 10%, | |
| var(--lecturer-surface) | |
| ); | |
| border-color: var(--lecturer-primary); | |
| } | |
| .lecturer-upload-card[data-uploading='true'] { | |
| opacity: 0.78; | |
| } | |
| .lecturer-upload-icon { | |
| @apply flex size-12 items-center justify-center rounded-full; | |
| background-color: var(--lecturer-surface); | |
| color: var(--lecturer-primary); | |
| } | |
| .lecturer-upload-title { | |
| @apply text-base font-medium; | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-upload-description { | |
| @apply max-w-[560px] text-sm leading-relaxed; | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-document-section { | |
| @apply mt-1; | |
| } | |
| .lecturer-document-heading { | |
| @apply flex items-center gap-2 text-sm font-bold; | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-document-list { | |
| @apply mt-5 flex flex-col gap-3; | |
| } | |
| .lecturer-document-card { | |
| @apply relative gap-0 rounded-[10px] border py-0 shadow-none; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 3%, | |
| var(--lecturer-surface) | |
| ); | |
| border-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 18%, | |
| var(--lecturer-border) | |
| ); | |
| } | |
| .lecturer-document-card[data-status='failed'] { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 5%, | |
| var(--lecturer-surface) | |
| ); | |
| border-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 25%, | |
| var(--lecturer-border) | |
| ); | |
| } | |
| .lecturer-document-content { | |
| @apply flex items-start gap-4 px-5 py-5; | |
| } | |
| .lecturer-document-delete { | |
| @apply absolute top-3 right-3 rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive; | |
| @media (hover: hover) { | |
| @apply opacity-0; | |
| } | |
| } | |
| @media (hover: hover) { | |
| .lecturer-document-card:hover .lecturer-document-delete, | |
| .lecturer-document-card:focus-within .lecturer-document-delete { | |
| @apply opacity-100; | |
| } | |
| } | |
| .lecturer-document-icon { | |
| @apply flex size-10 shrink-0 items-center justify-center rounded-[8px]; | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-primary) 12%, | |
| var(--lecturer-surface) | |
| ); | |
| color: var(--lecturer-primary); | |
| } | |
| .lecturer-document-icon[data-status='failed'] { | |
| background-color: color-mix( | |
| in oklab, | |
| var(--lecturer-danger) 12%, | |
| var(--lecturer-surface) | |
| ); | |
| color: var(--lecturer-danger); | |
| } | |
| .lecturer-document-copy { | |
| @apply min-w-0 flex-1; | |
| } | |
| .lecturer-document-copy h3 { | |
| @apply truncate text-sm font-bold; | |
| color: var(--lecturer-text); | |
| } | |
| .lecturer-document-meta { | |
| @apply mt-2 flex flex-wrap items-center gap-3 text-xs; | |
| color: var(--lecturer-muted); | |
| } | |
| .lecturer-document-status { | |
| @apply mt-3 flex items-center gap-1.5 text-xs font-semibold; | |
| color: var(--lecturer-success); | |
| } | |
| .lecturer-document-status[data-status='failed'] { | |
| color: var(--lecturer-danger); | |
| } | |
| .lecturer-document-status[data-status='processing'] { | |
| color: var(--lecturer-primary); | |
| } | |
| .lecturer-detail-empty { | |
| @apply rounded-[10px] border px-5 py-8 text-center text-sm; | |
| background-color: var(--lecturer-surface); | |
| border-color: var(--lecturer-border); | |
| color: var(--lecturer-muted); | |
| } | |
| @media (max-width: 640px) { | |
| .student-chat-stage--session { | |
| @apply px-0; | |
| } | |
| .student-chat-thread { | |
| @apply px-3; | |
| padding-bottom: 11rem; | |
| } | |
| .student-chat-scroll-anchor { | |
| scroll-margin-bottom: 12rem; | |
| } | |
| .student-message-bubble { | |
| @apply max-w-[calc(100vw_-_7rem)]; | |
| } | |
| .student-chat-composer { | |
| @apply right-3 bottom-4 left-3 pb-0; | |
| } | |
| .lecturer-page { | |
| @apply px-4 py-6; | |
| } | |
| .lecturer-page-header h1 { | |
| @apply text-2xl; | |
| } | |
| .lecturer-header-actions { | |
| @apply w-full; | |
| } | |
| .lecturer-create-button { | |
| @apply flex-1; | |
| } | |
| .lecturer-detail-title-row h1 { | |
| @apply text-2xl; | |
| } | |
| .lecturer-detail-actions { | |
| @apply w-full; | |
| } | |
| .lecturer-edit-button { | |
| @apply flex-1; | |
| } | |
| .lecturer-detail-content { | |
| @apply px-4 py-6; | |
| } | |
| .lecturer-document-content { | |
| @apply flex-col; | |
| } | |
| } | |
| } | |
| .lecturer-dashboard-shell { | |
| --primary: var(--lecturer-primary); | |
| --primary-foreground: var(--lecturer-primary-foreground); | |
| --ring: color-mix(in oklab, var(--lecturer-primary) 40%, transparent); | |
| } | |
| /* Error page */ | |
| .error-shell { | |
| @apply relative flex min-h-screen items-center justify-center bg-background px-4; | |
| } | |
| .error-toggle { | |
| @apply absolute top-4 right-4; | |
| } | |
| .error-content { | |
| @apply flex flex-col items-center gap-4 text-center max-w-sm w-full; | |
| } | |
| .error-icon { | |
| @apply flex size-16 items-center justify-center rounded-full bg-muted text-muted-foreground; | |
| } | |
| .error-code { | |
| @apply text-6xl font-bold text-muted-foreground; | |
| } | |
| .error-title { | |
| @apply text-2xl font-semibold text-foreground; | |
| } | |
| .error-description { | |
| @apply text-sm text-muted-foreground; | |
| } | |
| /* Markdown rendering in chat messages */ | |
| .student-message-markdown { | |
| @apply text-sm leading-relaxed; | |
| } | |
| .student-message-markdown p { | |
| @apply mb-2 last:mb-0; | |
| } | |
| .student-message-markdown strong, | |
| .student-message-markdown b { | |
| @apply font-semibold; | |
| } | |
| .student-message-markdown em, | |
| .student-message-markdown i { | |
| @apply italic; | |
| } | |
| .student-message-markdown ul { | |
| @apply mb-2 list-disc pl-5; | |
| } | |
| .student-message-markdown ol { | |
| @apply mb-2 list-decimal pl-5; | |
| } | |
| .student-message-markdown li { | |
| @apply mb-0.5; | |
| } | |
| .student-message-markdown code { | |
| @apply rounded bg-muted px-1 py-0.5 font-mono text-xs; | |
| } | |
| .student-message-markdown pre { | |
| @apply mb-2 overflow-x-auto rounded-md bg-muted p-3; | |
| } | |
| .student-message-markdown pre code { | |
| @apply bg-transparent p-0; | |
| } | |
| .student-message-markdown h1, | |
| .student-message-markdown h2, | |
| .student-message-markdown h3 { | |
| @apply mb-1 font-semibold; | |
| } | |
| .student-message-markdown blockquote { | |
| @apply border-l-2 border-muted-foreground pl-3 italic text-muted-foreground; | |
| } | |