d2l-ui / app /globals.css
Berkkirik's picture
revert: restore Twilight Atelier (drop Risograph Folio)
178db06
@tailwind base;
@tailwind components;
@tailwind utilities;
/* ───────────────────────────────────────────────────────────────
Twilight Atelier β€” base canvas
─────────────────────────────────────────────────────────────── */
@layer base {
:root {
color-scheme: dark;
}
html,
body {
background: #06070a;
color: #f5f3ec;
font-family: var(--font-manrope), system-ui, -apple-system, sans-serif;
font-size: 15px;
line-height: 1.6;
font-weight: 400;
font-feature-settings: "ss01", "cv11", "calt";
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
body {
/* Layered: deep canvas + warm aurora + subtle grain */
background:
radial-gradient(1100px 700px at 78% -10%, rgba(255, 181, 69, 0.12), transparent 65%),
radial-gradient(900px 800px at 8% 110%, rgba(98, 70, 255, 0.10), transparent 60%),
radial-gradient(1400px 900px at 50% 50%, rgba(20, 24, 40, 0.6), transparent 70%),
#06070a;
background-attachment: fixed;
min-height: 100vh;
overflow-x: hidden;
}
/* Subtle grain overlay (doesn't capture pointer events) */
body::before {
content: "";
position: fixed;
inset: 0;
pointer-events: none;
z-index: 0;
background-image: url("data:image/svg+xml;utf8,<svg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1, 0 0 0 0 1, 0 0 0 0 1, 0 0 0 0.06 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
opacity: 0.65;
mix-blend-mode: overlay;
}
::selection {
background: rgba(255, 181, 69, 0.32);
color: #fff8e7;
}
/* Custom scrollbar β€” barely there */
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, 0.08);
border-radius: 9999px;
border: 2px solid transparent;
background-clip: content-box;
}
::-webkit-scrollbar-thumb:hover {
background-color: rgba(255, 255, 255, 0.16);
}
::-webkit-scrollbar-track {
background: transparent;
}
/* Focus ring β€” luminous amber */
:focus-visible {
outline: 2px solid rgba(255, 181, 69, 0.75);
outline-offset: 2px;
border-radius: 4px;
}
button:focus-visible,
a:focus-visible,
input:focus-visible,
textarea:focus-visible {
outline-offset: 3px;
}
/* Default kerning for headlines */
h1,
h2,
h3,
h4 {
letter-spacing: -0.02em;
}
}
/* ───────────────────────────────────────────────────────────────
Component grammars
─────────────────────────────────────────────────────────────── */
@layer components {
/* ── Glass surfaces ─────────────────────────────────────────── */
.glass {
background: rgba(255, 255, 255, 0.04);
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
0 0 0 1px rgba(255, 255, 255, 0.08),
0 16px 40px -16px rgba(0, 0, 0, 0.6);
backdrop-filter: blur(16px) saturate(140%);
-webkit-backdrop-filter: blur(16px) saturate(140%);
}
.glass-strong {
background: rgba(255, 255, 255, 0.06);
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.08) inset,
0 0 0 1px rgba(255, 255, 255, 0.14),
0 28px 80px -24px rgba(0, 0, 0, 0.7);
backdrop-filter: blur(20px) saturate(160%);
-webkit-backdrop-filter: blur(20px) saturate(160%);
}
.glass-elev {
background: linear-gradient(
180deg,
rgba(255, 255, 255, 0.06) 0%,
rgba(255, 255, 255, 0.02) 100%
);
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.08) inset,
0 0 0 1px rgba(255, 255, 255, 0.10),
0 32px 80px -24px rgba(0, 0, 0, 0.7);
}
/* ── Buttons ────────────────────────────────────────────────── */
.btn-primary {
@apply inline-flex items-center justify-center
px-5 py-2.5 rounded-pill
text-body-strong text-canvas
bg-amber
transition-all duration-200 ease-atelier
active:scale-[0.97]
disabled:opacity-40 disabled:cursor-not-allowed disabled:active:scale-100
hover:bg-amber-soft hover:shadow-amber;
}
.btn-secondary {
@apply inline-flex items-center justify-center
px-5 py-2.5 rounded-pill
text-body text-ink
bg-glass
transition-all duration-200 ease-atelier
active:scale-[0.97]
hover:bg-glass-stronger;
box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.10);
}
.btn-ghost {
@apply inline-flex items-center justify-center
px-3 py-1.5 rounded-md
text-caption text-ink-70
transition-colors duration-200
hover:text-ink hover:bg-glass;
}
.btn-danger {
@apply inline-flex items-center justify-center
px-5 py-2.5 rounded-pill
text-body-strong text-status-err
transition-colors duration-200
hover:bg-status-err-glow;
box-shadow: 0 0 0 1px rgba(255, 122, 122, 0.4);
}
/* ── Inputs ─────────────────────────────────────────────────── */
.input-glass {
@apply w-full bg-glass text-ink
rounded-md px-4 py-3
text-body
outline-none
transition-all duration-200;
box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.10);
}
.input-glass:focus {
background: rgba(255, 255, 255, 0.07);
box-shadow: 0 0 0 1px rgba(255, 181, 69, 0.55),
0 0 24px -6px rgba(255, 181, 69, 0.35);
}
.input-glass::placeholder {
color: rgba(245, 243, 236, 0.36);
}
/* ── Cards ──────────────────────────────────────────────────── */
.card {
@apply rounded-lg p-6 glass;
}
/* ── Editorial italic moments ───────────────────────────────── */
.serif-italic {
font-family: var(--font-instrument), ui-serif, Georgia, serif;
font-style: italic;
font-weight: 400;
letter-spacing: -0.01em;
}
/* ── Containers ─────────────────────────────────────────────── */
.container-app {
@apply max-w-[1480px] mx-auto px-6 md:px-10;
}
.container-narrow {
@apply max-w-[920px] mx-auto px-6 md:px-10;
}
.container-prose {
@apply max-w-[760px] mx-auto px-6 md:px-10;
}
/* ── Chat-specific helpers ──────────────────────────────────── */
.chat-bubble-user {
@apply rounded-2xl rounded-tr-sm px-5 py-3 text-body text-ink;
background: linear-gradient(
135deg,
rgba(255, 181, 69, 0.16) 0%,
rgba(255, 181, 69, 0.08) 100%
);
box-shadow: 0 0 0 1px rgba(255, 181, 69, 0.22),
0 8px 24px -8px rgba(255, 181, 69, 0.18);
}
.chat-bubble-assistant {
@apply rounded-2xl rounded-tl-sm px-5 py-4 text-body text-ink;
background: linear-gradient(
180deg,
rgba(255, 255, 255, 0.05) 0%,
rgba(255, 255, 255, 0.025) 100%
);
box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.10),
0 16px 48px -16px rgba(0, 0, 0, 0.5);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
}
/* Hairline divider β€” for sectioning inside cards */
.hairline {
height: 1px;
background: linear-gradient(
90deg,
transparent,
rgba(255, 255, 255, 0.12),
transparent
);
}
.hairline-vert {
width: 1px;
background: linear-gradient(
180deg,
transparent,
rgba(255, 255, 255, 0.10),
transparent
);
}
}
/* ───────────────────────────────────────────────────────────────
Utilities
─────────────────────────────────────────────────────────────── */
@layer utilities {
.text-shimmer {
background: linear-gradient(
110deg,
rgba(245, 243, 236, 0.4) 30%,
rgba(245, 243, 236, 1) 50%,
rgba(245, 243, 236, 0.4) 70%
);
background-size: 200% 100%;
-webkit-background-clip: text;
background-clip: text;
color: transparent;
animation: shimmerBg 2.4s linear infinite;
}
@keyframes shimmerBg {
0% {
background-position: 200% 0;
}
100% {
background-position: -200% 0;
}
}
/* Aurora gradient orbs (used decoratively behind hero) */
.aurora-amber {
position: absolute;
border-radius: 9999px;
background: radial-gradient(
circle,
rgba(255, 181, 69, 0.32) 0%,
rgba(255, 181, 69, 0) 65%
);
filter: blur(80px);
pointer-events: none;
}
.aurora-violet {
position: absolute;
border-radius: 9999px;
background: radial-gradient(
circle,
rgba(120, 90, 240, 0.22) 0%,
rgba(120, 90, 240, 0) 65%
);
filter: blur(90px);
pointer-events: none;
}
.aurora-teal {
position: absolute;
border-radius: 9999px;
background: radial-gradient(
circle,
rgba(80, 200, 200, 0.18) 0%,
rgba(80, 200, 200, 0) 65%
);
filter: blur(80px);
pointer-events: none;
}
/* No-scrollbar utility */
.scrollbar-none {
scrollbar-width: none;
}
.scrollbar-none::-webkit-scrollbar {
display: none;
}
.text-balance {
text-wrap: balance;
}
}