@import "tailwindcss"; @import "@fontsource-variable/inter"; @custom-variant dark (&:where(.dark, .dark *)); :root { --background: oklch(0.985 0 0); --foreground: oklch(0.145 0 0); --card: oklch(1 0 0); --card-foreground: oklch(0.145 0 0); --muted: oklch(0.96 0 0); --muted-foreground: oklch(0.556 0 0); --border: oklch(0.922 0 0); --ring: oklch(0.708 0 0); --accent: oklch(0.96 0 0); --accent-foreground: oklch(0.145 0 0); --status-green: oklch(0.65 0.2 145); --status-red: oklch(0.63 0.2 25); --status-orange: oklch(0.75 0.18 70); --status-gray: oklch(0.556 0 0); } .dark { --background: oklch(0.145 0 0); --foreground: oklch(0.985 0 0); --card: oklch(0.205 0 0); --card-foreground: oklch(0.985 0 0); --muted: oklch(0.269 0 0); --muted-foreground: oklch(0.708 0 0); --border: oklch(0.269 0 0); --ring: oklch(0.556 0 0); --accent: oklch(0.269 0 0); --accent-foreground: oklch(0.985 0 0); --status-green: oklch(0.72 0.19 145); --status-red: oklch(0.7 0.19 25); --status-orange: oklch(0.8 0.16 70); --status-gray: oklch(0.708 0 0); } @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-border: var(--border); --color-ring: var(--ring); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-status-green: var(--status-green); --color-status-red: var(--status-red); --color-status-orange: var(--status-orange); --color-status-gray: var(--status-gray); --font-sans: "Inter Variable", ui-sans-serif, system-ui, sans-serif; --animate-accordion-down: accordion-down 200ms ease-out; --animate-accordion-up: accordion-up 200ms ease-out; } body { border-color: var(--border); background-color: var(--background); color: var(--foreground); font-family: var(--font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; margin: 0; } /* Focus styling - only visible on keyboard navigation */ *:focus { outline: none; } /* Form inputs get outline-based focus directly on border */ input[type="text"]:focus-visible, input[type="search"]:focus-visible, input[type="email"]:focus-visible, input[type="password"]:focus-visible, input[type="number"]:focus-visible, input[type="url"]:focus-visible, input[type="tel"]:focus-visible, select:focus-visible, textarea:focus-visible { outline: 2px solid var(--ring); outline-offset: 0; } /* Buttons get rounded box-shadow focus (outline doesn't support border-radius) */ button:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--background), 0 0 0 4px var(--ring); } /* Checkboxes get direct outline focus */ input[type="checkbox"]:focus-visible, input[type="radio"]:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; } /* Checkbox styling - theme-aware appearance */ input[type="checkbox"] { appearance: none; width: 1rem; height: 1rem; border: 1.5px solid var(--border); border-radius: 0.25rem; background-color: var(--card); cursor: pointer; display: inline-grid; place-content: center; flex-shrink: 0; } input[type="checkbox"]:checked { background-color: var(--foreground); border-color: var(--foreground); } input[type="checkbox"]:checked::before { content: ""; width: 0.5rem; height: 0.5rem; background-color: var(--background); clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); } /* View Transitions API - disable default cross-fade so JS can animate clip-path */ ::view-transition-old(root), ::view-transition-new(root) { animation: none; mix-blend-mode: normal; } /* OverlayScrollbars — custom handle colors per theme */ :root .os-scrollbar { --os-handle-bg: rgba(0, 0, 0, 0.25); --os-handle-bg-hover: rgba(0, 0, 0, 0.35); --os-handle-bg-active: rgba(0, 0, 0, 0.45); } .dark .os-scrollbar { --os-handle-bg: rgba(255, 255, 255, 0.35); --os-handle-bg-hover: rgba(255, 255, 255, 0.45); --os-handle-bg-active: rgba(255, 255, 255, 0.55); } .os-scrollbar-handle { border-radius: 4px; } /* Hide native scrollbars on body — OverlayScrollbars takes over */ html, body { scrollbar-width: none; -ms-overflow-style: none; } html::-webkit-scrollbar, body::-webkit-scrollbar { display: none; } /* Native scrollbars — theme-aware styling for inner scrollable elements */ * { scrollbar-width: thin; scrollbar-color: rgba(0, 0, 0, 0.25) transparent; } .dark * { scrollbar-color: rgba(255, 255, 255, 0.3) transparent; } ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.25); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.35); } .dark ::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.3); } .dark ::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.4); } @keyframes accordion-down { from { height: 0; opacity: 0; } to { height: var(--bits-accordion-content-height); opacity: 1; } } @keyframes accordion-up { from { height: var(--bits-accordion-content-height); opacity: 1; } to { height: 0; opacity: 0; } } @keyframes pulse { 0%, 100% { opacity: 0.2; } 50% { opacity: 0.4; } } .animate-pulse { animation: pulse 2s ease-in-out infinite; }