mirror of
https://github.com/Xevion/banner.git
synced 2026-01-31 00:23:31 -06:00
238 lines
5.4 KiB
CSS
238 lines
5.4 KiB
CSS
@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;
|
|
}
|