← back to Nineoh Guide
apps/web/app/globals.css
207 lines
/* ── Unofficial 90210 Guide — original editorial design system ─────────────
A Beverly-Hills-luxe aesthetic (dusk sky, gold, blush) that is deliberately
OUR OWN brand — no official logos, title-card type, or key art. */
:root {
--ink: #17130f;
--ink-soft: #3a332c;
--paper: #faf6ef;
--paper-2: #fffdf9;
--line: #e9e1d4;
--gold: #c19a3e;
--gold-2: #e4c877;
--maroon: #7a2233;
--dusk-1: #2b1e3a;
--dusk-2: #7b3f6e;
--dusk-3: #d9668a;
--sun-1: #ff9a63;
--sun-2: #ffd27a;
--muted: #7c746b;
--radius: 12px;
--shadow: 0 1px 2px rgba(23, 19, 15, 0.04), 0 8px 24px rgba(23, 19, 15, 0.06);
--maxw: 940px;
}
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
margin: 0;
background: var(--paper);
color: var(--ink);
font-family: var(--font-body, system-ui, -apple-system, Segoe UI, Roboto, sans-serif);
line-height: 1.65;
font-size: 16px;
-webkit-font-smoothing: antialiased;
}
a { color: var(--maroon); text-decoration: none; }
a:hover { text-decoration: underline; text-underline-offset: 2px; }
h1, h2, h3 {
font-family: var(--font-display, Georgia, "Times New Roman", serif);
font-weight: 600;
line-height: 1.15;
letter-spacing: -0.01em;
color: var(--ink);
}
h1 { font-size: clamp(28px, 5vw, 40px); margin: 0 0 8px; }
h2 { font-size: clamp(19px, 3vw, 23px); margin: 28px 0 10px; }
/* ── Layout chrome ─────────────────────────────────────────────────────── */
.site-header {
position: sticky; top: 0; z-index: 20;
background: rgba(250, 246, 239, 0.62);
-webkit-backdrop-filter: saturate(1.8) blur(18px);
backdrop-filter: saturate(1.8) blur(18px);
border-bottom: 1px solid rgba(255, 255, 255, 0.4);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5), 0 1px 12px rgba(23, 19, 15, 0.05);
}
.site-header .bar {
max-width: var(--maxw); margin: 0 auto;
display: flex; align-items: center; gap: 16px;
padding: 12px 20px;
}
.brand { display: inline-flex; align-items: center; gap: 10px; }
.brand .badge {
font-size: 10px; font-weight: 700; letter-spacing: 0.12em;
color: var(--maroon); border: 1px solid currentColor;
padding: 2px 6px; border-radius: 999px;
}
.nav { margin-left: auto; display: flex; gap: 20px; font-size: 14px; font-weight: 500; }
.nav a { color: var(--ink-soft); }
/* CSS-only hamburger (no client JS) */
.nav-toggle { display: none; }
.hamburger {
display: none; margin-left: auto; cursor: pointer;
font-size: 22px; line-height: 1; color: var(--ink); padding: 4px 8px;
border: 1px solid var(--line); border-radius: 8px; background: rgba(255,255,255,0.5);
}
@media (max-width: 680px) {
.site-header .bar { position: relative; flex-wrap: wrap; }
.hamburger { display: inline-block; }
.nav {
display: none; position: absolute; top: 100%; left: 0; right: 0;
flex-direction: column; gap: 16px; padding: 16px 20px; margin: 0;
background: rgba(250,246,239,0.96);
-webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px);
border-bottom: 1px solid var(--line); box-shadow: 0 8px 24px rgba(23,19,15,0.10);
}
.nav-toggle:checked ~ .nav { display: flex; }
.nav a { font-size: 16px; }
}
.wrap { max-width: var(--maxw); margin: 0 auto; padding: 28px 20px 60px; }
.site-footer {
max-width: var(--maxw); margin: 0 auto; padding: 28px 20px 48px;
border-top: 1px solid var(--line); font-size: 12.5px; color: var(--muted);
}
.site-footer a { color: var(--muted); text-decoration: underline; }
/* ── Hero ──────────────────────────────────────────────────────────────── */
.hero {
position: relative; overflow: hidden;
border-radius: 20px; padding: 96px 44px 80px; margin-bottom: 8px;
min-height: 480px; display: flex; flex-direction: column; justify-content: center;
color: #fff5ec; isolation: isolate;
box-shadow: var(--shadow);
}
@media (max-width: 680px) { .hero { padding: 64px 24px 52px; min-height: 420px; } }
.hero .sky {
position: absolute; inset: 0; z-index: -2;
/* Photoshop-baked grainy ombre (dusk→blush→gold) over the animated CSS gradient fallback. */
background:
url("/hero-ombre.jpg") center/cover no-repeat,
linear-gradient(180deg, var(--dusk-1) 0%, var(--dusk-2) 46%, var(--dusk-3) 70%, var(--sun-1) 90%, var(--sun-2) 100%);
background-size: cover, 100% 220%;
animation: skyDrift 24s ease-in-out infinite alternate;
}
/* ── Liquid glass (2026 glassmorphism) ─────────────────────────────────── */
.glass {
background: rgba(255, 253, 249, 0.5);
-webkit-backdrop-filter: blur(18px) saturate(1.8);
backdrop-filter: blur(18px) saturate(1.8);
border: 1px solid rgba(255, 255, 255, 0.38);
box-shadow:
0 8px 32px rgba(23, 19, 15, 0.10),
inset 0 1px 0 rgba(255, 255, 255, 0.55);
}
.glass-dark {
background: rgba(30, 20, 40, 0.34);
-webkit-backdrop-filter: blur(16px) saturate(1.6);
backdrop-filter: blur(16px) saturate(1.6);
border: 1px solid rgba(255, 255, 255, 0.18);
color: #fff6ec;
}
.hero .art { position: absolute; inset: 0; z-index: -1; width: 100%; height: 100%; }
.hero .eyebrow {
font-size: 11px; letter-spacing: 0.22em; text-transform: uppercase;
color: var(--gold-2); font-weight: 700; margin-bottom: 12px;
}
.hero h1 { color: #fff8f0; font-size: clamp(40px, 7.5vw, 68px); line-height: 1.04; text-shadow: 0 2px 22px rgba(0,0,0,0.3); }
.hero p.lede { max-width: 40ch; font-size: 16px; color: rgba(255,246,236,0.9); }
.hero .cta {
display: inline-flex; align-items: center; gap: 8px; margin-top: 20px;
background: linear-gradient(180deg, var(--gold-2), var(--gold));
color: #241a06; font-weight: 700; font-size: 14px;
padding: 11px 20px; border-radius: 999px; box-shadow: 0 6px 20px rgba(0,0,0,0.22);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.hero .cta:hover { transform: translateY(-1px); text-decoration: none; box-shadow: 0 10px 26px rgba(0,0,0,0.28); }
.hero-stats { display: flex; gap: 12px; margin-top: 26px; flex-wrap: wrap; }
.hero-stat { border-radius: 14px; padding: 12px 20px; min-width: 92px; }
.hero-stat-num { font-family: var(--font-display, serif); font-size: 28px; font-weight: 700; color: #fff3d6; line-height: 1; }
.hero-stat-lab { font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: rgba(255,246,236,0.82); margin-top: 4px; }
/* ── Cards / stats ─────────────────────────────────────────────────────── */
.stat-row { display: flex; flex-wrap: wrap; gap: 14px; margin: 22px 0 6px; }
.stat {
background: var(--paper-2); border: 1px solid var(--line);
border-radius: var(--radius); padding: 14px 18px; min-width: 150px;
box-shadow: var(--shadow);
}
.stat .num { font-family: var(--font-display, serif); font-size: 30px; font-weight: 700; color: var(--maroon); }
.stat .lab { font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; }
.card {
background: var(--paper-2); border: 1px solid var(--line);
border-radius: var(--radius); padding: 14px 16px; box-shadow: var(--shadow);
transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}
.card:hover { transform: translateY(-2px); border-color: var(--gold); box-shadow: 0 10px 28px rgba(23,19,15,0.10); }
.pill {
display: inline-block; font-size: 11px; font-weight: 700; letter-spacing: 0.04em;
color: var(--maroon); background: #f3e7e6; border-radius: 999px; padding: 2px 8px;
}
.se { color: var(--maroon); font-weight: 700; }
.ep-recap { display: var(--ep-recaps, block); }
input[type="search"], input[type="number"] {
font-family: inherit; border: 1px solid var(--line); border-radius: 8px; padding: 9px 11px; font-size: 14px; background: var(--paper-2);
}
button {
font-family: inherit; cursor: pointer; border-radius: 8px;
border: 1px solid var(--line); background: var(--paper-2); color: var(--ink);
padding: 7px 12px; font-size: 13px; transition: background 0.12s ease, border-color 0.12s ease;
}
button:hover { border-color: var(--gold); }
/* ── Motion ────────────────────────────────────────────────────────────── */
@keyframes skyDrift { from { background-position: 0 0; } to { background-position: 0 100%; } }
@keyframes rise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes twinkle { 0%,100% { opacity: 0.25; } 50% { opacity: 0.9; } }
@keyframes sway { 0%,100% { transform: rotate(-1.2deg); } 50% { transform: rotate(1.2deg); } }
@keyframes shimmer { from { background-position: -400px 0; } to { background-position: 400px 0; } }
.rise { animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) both; }
.rise-2 { animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) 0.08s both; }
.rise-3 { animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) 0.16s both; }
.palm { transform-origin: bottom center; animation: sway 7s ease-in-out infinite; }
.star { animation: twinkle 4s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) {
*, .hero .sky, .palm, .star { animation: none !important; }
}