/* Glass over living light: OS-style windows, a dock, one live 3D stage per page */
:root {
  color-scheme: dark;
  --night: #070b20;
  --ink: 255, 255, 255;        /* lines, glass, soft fills (white on dark) */
  --well: 0, 0, 0;             /* inputs and sunken areas */
  --panel: 12, 16, 44;         /* frosted panels over busy pictures */
  --panel-solid: #1a1f45;
  --mist-rgb: 238, 240, 255;
  --menu-a: rgba(40, 47, 110, .96);
  --menu-b: rgba(16, 20, 54, .97);
  --gold-text: #f2b544;
  --name-a: #ffffff;
  --name-b: #c9ceff;
  --pre-glow: #1a1650;
  --curtain-bg: #0a0e28;
  --shadow: rgba(3, 5, 20, .7);
  --indigo: #2743b8;
  --dusk: #6b4bd6;
  --gold: #f2b544;
  --gold-ink: #2a1d02;
  --mist: #eef0ff;
  --mist-2: rgba(var(--mist-rgb), 0.72);
  --mist-3: rgba(var(--mist-rgb), 0.48);
  --line: rgba(var(--ink), 0.1);

  --glass: rgba(var(--ink), 0.06);
  --glass-strong: rgba(var(--ink), 0.11);
  --glass-edge: rgba(var(--ink), 0.15);
  --glass-hi: rgba(var(--ink), 0.28);
  --blur: saturate(170%) blur(26px);

  --r-window: 22px;
  --r-panel: 18px;
  --r-control: 12px;

  --display: "Syne", "Arial Black", system-ui, sans-serif;
  --body: "Manrope", system-ui, -apple-system, sans-serif;
  --gutter: clamp(16px, 4vw, 56px);
  --max: 1360px;
  --ease: cubic-bezier(.2, .8, .2, 1);
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }
html { -webkit-text-size-adjust: 100%; }
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-stopped { overflow: hidden; }
html.locked { overflow: hidden; }
body {
  margin: 0;
  background:
    radial-gradient(50vw 50vw at 10% 0%, rgba(39,67,184,.55), transparent 70%),
    radial-gradient(45vw 45vw at 95% 30%, rgba(107,75,214,.45), transparent 70%),
    radial-gradient(40vw 40vw at 40% 100%, rgba(212,129,42,.25), transparent 70%),
    var(--night);
  background-attachment: fixed; color: var(--mist);
  font: 500 16px/1.6 var(--body); -webkit-font-smoothing: antialiased; overflow-x: hidden;
}
img, video, canvas { display: block; max-width: 100%; }
a { color: inherit; }
button { font: inherit; color: inherit; }
::selection { background: var(--gold); color: var(--gold-ink); }
:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; border-radius: 8px; }
h1, h2, h3 { font-family: var(--display); margin: 0; line-height: 1.02; letter-spacing: -0.02em; text-wrap: balance; }
h2 { font-size: clamp(28px, 4.2vw, 56px); font-weight: 700; }
h3 { font-size: 20px; font-weight: 700; }
.ico { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex: none; }

/* ───────── Living light ───────── */
#bg { position: fixed; inset: 0; width: 100vw; height: 100vh; z-index: -2; background: var(--night); }
.grain { position: fixed; inset: -50%; z-index: -1; pointer-events: none; opacity: 0.07; mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation: grain 1s steps(4) infinite; }
@keyframes grain { 25% { transform: translate(-3%, 2%); } 50% { transform: translate(2%, -3%); } 75% { transform: translate(-1%, 3%); } }
.progress-line { position: fixed; top: 0; left: 0; right: 0; height: 2px; z-index: 70; pointer-events: none; }
.progress-line span { display: block; height: 100%; background: linear-gradient(90deg, var(--gold), var(--accent-1, var(--dusk))); transform-origin: 0 50%; transform: scaleX(0); }

/* ───────── Glass ───────── */
.glass {
  background: linear-gradient(160deg, var(--glass-strong), var(--glass) 55%);
  -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur);
  border: 1px solid var(--glass-edge);
  box-shadow: inset 0 1px 0 var(--glass-hi), inset 0 -1px 0 rgba(var(--ink),.04), 0 24px 60px -24px var(--shadow);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) { .glass { background: rgba(20, 24, 58, 0.94); } }

/* ───────── Preloader + curtain ───────── */
#preloader { position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; background: radial-gradient(80% 60% at 50% 60%, var(--pre-glow), var(--night)); clip-path: inset(0 0 0 0); }
.pre-inner { display: grid; justify-items: center; gap: 10px; }
.pre-logo .logo-mark { width: 54px; height: 54px; font-size: 20px; border-radius: 16px; }
.pre-logo img { max-width: 120px; max-height: 60px; object-fit: contain; }
.pre-count { font: 800 clamp(80px, 16vw, 200px)/1 var(--display); letter-spacing: -0.05em; font-variant-numeric: tabular-nums;
  background: linear-gradient(180deg, var(--name-a), rgba(var(--ink),.35)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.pre-line { margin: 0; color: var(--mist-3); font-size: 14px; letter-spacing: .04em; }
html.loading body { overflow: hidden; }

#curtain { position: fixed; inset: 0; z-index: 90; display: none; place-items: center;
  background: radial-gradient(90% 70% at 30% 20%, color-mix(in srgb, var(--c1, #6b4bd6) 55%, transparent), transparent 60%),
              radial-gradient(90% 70% at 80% 90%, color-mix(in srgb, var(--c2, #2743b8) 55%, transparent), transparent 60%), var(--curtain-bg); }
.curtain-label { width: 100%; box-sizing: border-box; font: 800 clamp(34px, 6vw, 96px)/1 var(--display); letter-spacing: -0.03em; text-align: center; padding: 0 20px; max-width: 14ch; text-wrap: balance; }

/* ───────── Custom cursor ───────── */
.has-cursor, .has-cursor * { cursor: none !important; }
.cursor-dot, .cursor-ring { position: fixed; top: 0; left: 0; z-index: 200; pointer-events: none; will-change: transform; }
.cursor-dot { width: 6px; height: 6px; margin: -3px 0 0 -3px; border-radius: 50%; background: var(--gold); }
.cursor-ring { width: 38px; height: 38px; margin: -19px 0 0 -19px; }
.cursor-ring::before { content: ""; position: absolute; inset: 0; border-radius: 50%; border: 1px solid rgba(var(--ink),.55); transition: transform .35s var(--ease), background .3s, border-color .3s; }
.cursor-ring span { position: absolute; inset: 0; display: grid; place-items: center; font: 700 12px var(--body); color: var(--gold-ink); opacity: 0; transition: opacity .2s; }
.cursor-ring.is-link::before { transform: scale(1.5); border-color: var(--gold-text); }
.cursor-ring.is-label::before { transform: scale(2.2); background: var(--gold); border-color: transparent; }
.cursor-ring.is-label span { opacity: 1; }
.cursor-ring.down::before { transform: scale(.8); }
.cursor-ring.hide { opacity: 0; }

/* ───────── Menu bar ───────── */
.menubar {
  position: fixed; top: calc(10px + env(safe-area-inset-top, 0px)); left: 50%; transform: translateX(-50%);
  width: min(calc(100% - 20px), var(--max)); z-index: 60; display: flex; align-items: center; gap: 16px;
  padding: 7px 8px 7px 10px; border-radius: 16px; font-size: 14px;
}
.brand { display: flex; align-items: center; gap: 10px; text-decoration: none; font-weight: 700; min-width: 0; }
.brand-name { white-space: nowrap; }
.logo-mark { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; background: var(--gold); color: var(--gold-ink); font: 800 12px var(--display); flex: none; }
.logo-img { height: 30px; width: auto; max-width: 140px; object-fit: contain; }
.status { display: flex; align-items: center; gap: 8px; color: var(--mist-2); white-space: nowrap; }
.dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: #3ddc84; box-shadow: 0 0 0 4px rgba(61,220,132,.18); animation: pulse 2.4s infinite; }
@keyframes pulse { 50% { box-shadow: 0 0 0 7px rgba(61,220,132,0); } }
.menubar-right { margin-left: auto; display: flex; align-items: center; gap: 14px; }
.clock { color: var(--mist-2); font-variant-numeric: tabular-nums; white-space: nowrap; }
.menubar-cta { text-decoration: none; background: var(--mist); color: var(--night); font-weight: 700; padding: 7px 16px; border-radius: 10px; white-space: nowrap; }
.menubar-cta:hover { background: #fff; }

/* ───────── Dock ───────── */
.dock { position: fixed; bottom: calc(12px + env(safe-area-inset-bottom, 0px)); left: 50%; transform: translateX(-50%); z-index: 60;
  display: flex; align-items: flex-end; gap: 4px; padding: 7px; border-radius: 22px; max-width: calc(100% - 20px); }
.dock a { position: relative; display: grid; justify-items: center; gap: 3px; text-decoration: none; padding: 0 4px; }
.dock-ico { --m: 1; display: grid; place-items: center; width: calc(46px * var(--m)); height: calc(46px * var(--m)); border-radius: 14px;
  background: rgba(var(--ink),.1); transition: width .16s ease, height .16s ease, background .2s; }
.dock-ico .ico { width: 21px; height: 21px; }
.dock-label { font-size: 10.5px; font-weight: 700; color: var(--mist-3); white-space: nowrap; }
.dock a:hover .dock-ico { background: rgba(var(--ink),.18); }
.dock a.active .dock-ico { background: rgba(var(--ink),.24); box-shadow: inset 0 1px 0 rgba(var(--ink),.3); }
.dock a.active .dock-label { color: var(--mist); }
.dock-accent .dock-ico { background: var(--gold) !important; color: var(--gold-ink); }

/* ───────── Layout ───────── */
#view { width: min(100% - 2 * var(--gutter), var(--max)); margin: 0 auto; padding-bottom: 120px; }
.section { padding-block: clamp(80px, 11vw, 160px) 0; }
.section-head { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: 18px 40px; margin-bottom: clamp(24px, 3vw, 40px); }
.section-sub { color: var(--mist-2); margin: 0; max-width: 44ch; }
[data-split] .w { display: inline-block; white-space: nowrap; }
[data-split] .ch { display: inline-block; overflow: hidden; vertical-align: top; padding: .02em .01em .2em; margin: -.02em -.01em -.2em; }
[data-split] .ch > span { display: inline-block; will-change: transform; }

/* ───────── Buttons ───────── */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 46px; padding: 0 22px;
  border-radius: var(--r-control); border: 1px solid transparent; font-weight: 700; text-decoration: none; cursor: pointer; white-space: nowrap;
  transition: transform .25s var(--ease), background .2s, border-color .2s, color .2s; }
.btn:active { transform: scale(.97); }
.btn-gold { background: var(--gold); color: var(--gold-ink); box-shadow: 0 10px 30px -10px rgba(242,181,68,.6), inset 0 1px 0 rgba(var(--ink),.5); }
.btn-gold:hover { background: #ffc661; }
.btn-glass { background: rgba(var(--ink),.1); border-color: var(--glass-edge); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); }
.btn-glass:hover { background: rgba(var(--ink),.18); }
.btn-ghost { background: transparent; border-color: rgba(var(--ink),.16); color: var(--mist-2); }
.btn-ghost:hover { color: var(--mist); border-color: rgba(var(--ink),.34); }
.btn-sm { min-height: 38px; padding: 0 16px; font-size: 14px; }
.btn-lg { min-height: 56px; padding: 0 30px; font-size: 17px; }
.btn-block { width: 100%; }

/* ───────── Windows ───────── */
.window { border-radius: var(--r-window); overflow: hidden; display: flex; flex-direction: column; }
.titlebar { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-bottom: 1px solid rgba(var(--ink),.08); font-size: 13px; }
.lights { display: flex; gap: 7px; flex: none; }
.lights i { width: 12px; height: 12px; border-radius: 50%; }
.lights > :nth-child(1) { background: #ff5f57; }
.lights > :nth-child(2) { background: #febc2e; }
.lights > :nth-child(3) { background: #28c840; }
.titlebar-name { font-weight: 600; color: var(--mist-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.titlebar-hint { margin-left: auto; color: var(--mist-3); white-space: nowrap; }
.stage { position: relative; flex: 1; min-height: 0; cursor: grab; background: radial-gradient(70% 60% at 50% 45%, rgba(107,75,214,.25), transparent 70%); }
.stage:active { cursor: grabbing; }
.stage canvas { position: absolute; inset: 0; width: 100% !important; height: 100% !important; touch-action: none; }
.stage-loading { position: absolute; inset: 0; display: grid; place-items: center; z-index: 1; transition: opacity .4s; pointer-events: none; }
.stage-loading.done { opacity: 0; }
.stage-loading .pct { position: absolute; margin-top: 64px; font-size: 13px; color: var(--mist-2); }
.spinner { width: 34px; height: 34px; border-radius: 50%; border: 3px solid rgba(var(--ink),.15); border-top-color: var(--gold-text); animation: spin .9s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
.toolbar { display: flex; gap: 6px; padding: 10px; border-top: 1px solid rgba(var(--ink),.08); justify-content: center; flex-wrap: wrap; }
.tool { display: inline-flex; align-items: center; gap: 7px; height: 36px; padding: 0 12px; border-radius: 10px; border: 1px solid transparent; background: transparent; cursor: pointer; font-size: 13px; font-weight: 600; color: var(--mist-2); }
.tool:hover { background: rgba(var(--ink),.08); color: var(--mist); }
.tool[aria-pressed="true"] { background: rgba(242,181,68,.16); border-color: rgba(242,181,68,.35); color: var(--gold-text); }
.modal-error { color: var(--mist-2); padding: 24px; text-align: center; max-width: 40ch; margin: auto; }

/* ───────── Hero ───────── */
.hero { position: relative; padding-block: 120px 60px; min-height: min(100svh, 980px);
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: center; gap: clamp(24px, 4vw, 64px); }
.hero-badge { display: inline-flex; align-items: center; gap: 10px; padding: 5px 14px 5px 5px; border-radius: 999px; font-size: 14px; color: var(--mist-2); margin-bottom: 26px; }
.hero-badge img { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; border: 1.5px solid var(--gold); }
.hero-badge span { display: flex; align-items: center; gap: 8px; }
.hero-name { font-size: clamp(46px, 9vw, 150px); font-weight: 800; line-height: .88; letter-spacing: -.045em; }
.hero-name .w:nth-child(1) .ch > span { background: linear-gradient(180deg, var(--name-a) 35%, var(--name-b)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hero-name .w:nth-last-child(1) .ch > span { color: transparent; -webkit-text-stroke: 1.5px rgba(var(--mist-rgb),.7); }
.hero-role { font: 600 clamp(19px, 1.8vw, 23px)/1.35 var(--body); margin: 28px 0 10px; color: var(--gold-text); max-width: 30ch; }
.hero-lede { color: var(--mist-2); max-width: 44ch; margin: 0 0 30px; }
.hero-actions { display: flex; flex-wrap: wrap; gap: 10px; }
.hero-window { height: min(68svh, 640px); min-height: 400px; transform-origin: 50% 100%; perspective: 1200px; }
.scroll-cue { position: absolute; left: 50%; bottom: 18px; width: 26px; height: 42px; border: 1.5px solid rgba(var(--ink),.4); border-radius: 14px; transform: translateX(-50%); }
.scroll-cue span { position: absolute; left: 50%; top: 8px; width: 3px; height: 8px; margin-left: -1.5px; border-radius: 2px; background: var(--gold); animation: cue 1.8s var(--ease) infinite; }
@keyframes cue { 0% { transform: translateY(0); opacity: 1; } 80% { transform: translateY(14px); opacity: 0; } 100% { opacity: 0; } }

/* ───────── Marquee ───────── */
.marquee { overflow: hidden; margin-inline: calc(-1 * var(--gutter)); padding-block: clamp(20px, 3vw, 36px); border-block: 1px solid var(--line); }
.marquee-track { display: flex; align-items: center; gap: clamp(20px, 3vw, 44px); width: max-content; will-change: transform; }
.marquee-track span { font: 800 clamp(36px, 5.6vw, 84px)/1 var(--display); letter-spacing: -.03em; white-space: nowrap; color: transparent; -webkit-text-stroke: 1.2px rgba(var(--mist-rgb),.55); }
.marquee-track span:nth-of-type(3n+1) { color: var(--mist); -webkit-text-stroke: 0; }
.mq-star { width: clamp(26px, 3vw, 44px); height: clamp(26px, 3vw, 44px); fill: var(--gold); stroke: none; }

/* ───────── Doors ───────── */
.doors { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
.door { position: relative; overflow: hidden; min-height: clamp(300px, 32vw, 440px); border-radius: 28px; text-decoration: none; display: flex; padding: clamp(22px, 3vw, 36px); isolation: isolate; }
.door-glow { position: absolute; inset: -30%; z-index: -1; opacity: .55; transition: opacity .5s, transform .8s var(--ease);
  background: radial-gradient(40% 40% at 25% 30%, var(--c1), transparent 70%), radial-gradient(45% 45% at 80% 80%, var(--c2), transparent 70%); }
.door:hover .door-glow { opacity: .9; transform: scale(1.1) rotate(8deg); }
.door-text { display: flex; flex-direction: column; gap: 10px; max-width: 52%; z-index: 1; }
.door-count { font-size: 13px; font-weight: 700; color: var(--mist-2); font-variant-numeric: tabular-nums; }
.door-name { font: 800 clamp(24px, 2.8vw, 42px)/1.02 var(--display); letter-spacing: -.03em; }
.door-blurb { color: var(--mist-2); font-size: 15px; }
.door-go { margin-top: auto; display: inline-flex; align-items: center; gap: 8px; font-weight: 700; }
.door-go .ico { transition: transform .3s var(--ease); }
.door:hover .door-go .ico { transform: translateX(6px); }
.fan { position: absolute; right: clamp(12px, 3vw, 44px); bottom: clamp(18px, 3vw, 40px); width: 38%; aspect-ratio: 4 / 3; }
.fan img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border-radius: 14px; border: 1px solid rgba(var(--ink),.2); box-shadow: 0 20px 40px -12px rgba(var(--well),.6); transition: transform .6s var(--ease); }
.fan img:nth-child(1) { transform: rotate(-7deg) translateX(-26px); }
.fan img:nth-child(3) { transform: rotate(7deg) translateX(26px); }
.door:hover .fan img:nth-child(1) { transform: rotate(-14deg) translate(-60px, -10px) !important; }
.door:hover .fan img:nth-child(2) { transform: translateY(-18px) !important; }
.door:hover .fan img:nth-child(3) { transform: rotate(14deg) translate(60px, -10px) !important; }

/* ───────── Pinned sideways gallery ───────── */
.hscroll { padding-block: clamp(80px, 10vw, 140px) 40px; overflow: hidden; margin-inline: calc(-1 * var(--gutter)); padding-inline: var(--gutter); }
.h-head { display: flex; align-items: end; justify-content: space-between; gap: 24px; margin-bottom: 32px; flex-wrap: wrap; }
.h-progress { width: min(260px, 40vw); height: 3px; background: rgba(var(--ink),.12); border-radius: 3px; overflow: hidden; }
.h-progress span { display: block; height: 100%; background: var(--gold); transform-origin: 0 50%; transform: scaleX(0); }
.h-track { display: flex; gap: 22px; width: max-content; }
.h-card { position: relative; width: clamp(300px, 52vw, 820px); text-decoration: none; display: grid; gap: 14px; }
.h-media { display: block; aspect-ratio: 16 / 10; border-radius: 24px; overflow: hidden; border: 1px solid var(--glass-edge); max-width: 100%; }
.h-media img { width: 112%; max-width: none; height: 100%; object-fit: cover; margin-left: -6%; transition: filter .4s; }
.h-card:hover .h-media img { filter: brightness(1.1) saturate(1.1); }
.h-info { display: grid; gap: 2px; }
.h-info small { color: var(--gold-text); font-weight: 700; font-size: 13px; }
.h-info b { font: 700 clamp(22px, 2.4vw, 32px)/1.1 var(--display); }
.h-info span { color: var(--mist-2); font-size: 14px; }
.h-more { width: clamp(240px, 26vw, 380px); place-items: center; border-radius: 24px; border: 1px dashed rgba(var(--ink),.3); aspect-ratio: 4 / 5; align-self: start; }
.h-more span { display: inline-flex; align-items: center; gap: 10px; font: 700 22px var(--display); }
@media (max-width: 899px) {
  .hscroll { overflow: visible; }
  .h-track { width: auto; overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 12px; margin-inline: calc(-1 * var(--gutter)); padding-inline: var(--gutter); scrollbar-width: none; }
  .h-card { width: 82vw; scroll-snap-align: start; flex: none; }
  .h-more { width: 60vw; aspect-ratio: auto; min-height: 200px; flex: none; }
  .h-media img { width: 100%; margin: 0; }
}

/* ───────── Statement ───────── */
.statement-text { font: 700 clamp(22px, 3vw, 44px)/1.22 var(--display); letter-spacing: -.02em; margin: 0; max-width: 26ch; text-wrap: pretty; }
.statement-text .word { display: inline; }

/* ───────── About ───────── */
.about { display: grid; gap: 18px; padding-top: clamp(60px, 8vw, 110px); }
.widgets { display: grid; grid-template-columns: 1fr 1fr 2fr; gap: 18px; }
.widget { border-radius: var(--r-panel); padding: 22px; display: flex; flex-direction: column; justify-content: flex-end; min-height: 150px; }
.widget strong { font: 800 clamp(40px, 4.4vw, 64px)/1 var(--display); letter-spacing: -.03em; }
.widget span { color: var(--mist-2); font-size: 14px; margin-top: 6px; }
.widget-award { background: linear-gradient(140deg, rgba(242,181,68,.24), rgba(242,181,68,.05) 60%); border-color: rgba(242,181,68,.32); }
.widget-award strong { font-size: clamp(24px, 2.4vw, 32px); line-height: 1.12; }
.about-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.panel { border-radius: var(--r-panel); padding: clamp(22px, 3vw, 32px); }
.panel h3 { margin-bottom: 16px; }
.mt { margin-top: 26px; }
.timeline { list-style: none; margin: 0; padding: 0; position: relative; }
.timeline::before { content: ""; position: absolute; left: 5px; top: 8px; bottom: 8px; width: 1px; background: rgba(var(--ink),.18); }
.timeline li { position: relative; padding-left: 28px; margin-bottom: 20px; display: grid; gap: 2px; }
.timeline li:last-child { margin-bottom: 0; }
.timeline li::before { content: ""; position: absolute; left: 0; top: 6px; width: 11px; height: 11px; border-radius: 50%; background: var(--night); border: 2px solid var(--gold); }
.timeline time { font-size: 13px; color: var(--gold-text); font-weight: 700; }
.timeline span { color: var(--mist-2); font-size: 14px; }
.chips, .tags { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.chips li { padding: 6px 12px; border-radius: 10px; background: rgba(var(--ink),.09); border: 1px solid rgba(var(--ink),.1); font-size: 14px; font-weight: 600; }
.chips-quiet li { background: transparent; color: var(--mist-2); }
.tags li { font-size: 13px; font-weight: 600; padding: 4px 11px; border-radius: 8px; background: rgba(var(--ink),.08); color: var(--mist-2); }

/* ───────── Sites ───────── */
.sites { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
.browser { border-radius: var(--r-window); overflow: hidden; transition: transform .5s var(--ease); }
.browser:hover { transform: translateY(-6px); }
.browser-bar { display: flex; align-items: center; gap: 14px; padding: 12px 14px; border-bottom: 1px solid rgba(var(--ink),.08); }
.url { flex: 1; min-width: 0; font-size: 13px; color: var(--mist-2); background: rgba(var(--well),.22); border-radius: 8px; padding: 5px 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.browser-body { padding: 26px; }
.browser-body p { color: var(--mist-2); margin: 10px 0 16px; }
.browser-body .tags { margin-bottom: 20px; }

/* ───────── Contact ───────── */
.contact { border-radius: 30px; padding: clamp(24px, 4vw, 56px); display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: clamp(24px, 4vw, 64px); }
.contact-side p { color: var(--mist-2); margin: 16px 0 26px; max-width: 42ch; }
.channels { display: grid; gap: 10px; }
.channel { display: flex; align-items: center; gap: 14px; padding: 12px; border-radius: 14px; text-decoration: none; background: rgba(var(--ink),.05); border: 1px solid rgba(var(--ink),.08); transition: background .2s; min-width: 0; }
.channel > span:last-child { min-width: 0; }
.channel:hover { background: rgba(var(--ink),.1); }
.channel b { display: block; font-size: 15px; }
.channel small { color: var(--mist-2); font-size: 13px; overflow-wrap: anywhere; }
.ch-icon { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 12px; background: rgba(var(--ink),.1); flex: none; }
.ch-icon svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.ch-icon.wa { background: #25d366; color: #fff; }
.ch-icon.wa svg { fill: currentColor; stroke: none; width: 22px; height: 22px; }
.form { display: grid; gap: 14px; align-content: start; }
.row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.form label { display: grid; gap: 6px; font-size: 14px; font-weight: 600; }
.form label em { font-style: normal; color: var(--mist-3); font-weight: 500; }
.form input, .form select, .form textarea, .search input, .sort select {
  width: 100%; font: 500 15px/1.4 var(--body); color: var(--mist); padding: 12px 14px; border-radius: var(--r-control);
  background: rgba(var(--well),.24); border: 1px solid rgba(var(--ink),.14); outline: none; transition: border-color .2s, background .2s; }
.form textarea { resize: vertical; min-height: 120px; }
.form select, .sort select { appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23eef0ff' stroke-width='1.6' fill='none'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 14px center; padding-right: 36px; }
select option { background: var(--panel-solid); color: var(--mist); }
.form input:focus, .form select:focus, .form textarea:focus { border-color: var(--gold-text); background: rgba(var(--well),.32); }
.form ::placeholder, .search ::placeholder { color: var(--mist-3); }
.form [aria-invalid="true"] { border-color: #ff6b6b; }
.hp { position: absolute !important; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.form-status { margin: 0; min-height: 1.5em; font-size: 14px; color: var(--mist-2); }
.form-status.ok { color: #6ee7a8; }
.form-status.err { color: #ff8f8f; }
.form-status a { color: var(--gold-text); }

/* ───────── Category page ───────── */
.cat-head { padding-block: 130px 36px; display: grid; gap: 22px; }
.cat-tabs { display: inline-flex; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; gap: 2px; padding: 4px; border-radius: 14px; justify-self: start; max-width: 100%; }
.cat-tabs a { text-decoration: none; padding: 8px 15px; border-radius: 10px; font-weight: 600; font-size: 14px; color: var(--mist-2); white-space: nowrap; }
.cat-tabs a:hover { color: var(--mist); }
.cat-tabs a[aria-current="page"] { background: rgba(var(--ink),.16); color: var(--mist); box-shadow: inset 0 1px 0 rgba(var(--ink),.25); }
.cat-title { font-size: clamp(40px, 10vw, 170px); font-weight: 800; line-height: .9; letter-spacing: -.045em; }
.cat-blurb { margin: 0; color: var(--mist-2); font-size: clamp(16px, 1.4vw, 19px); max-width: 60ch; }
.cat-count { color: var(--gold-text); font-weight: 700; font-variant-numeric: tabular-nums; }
.sample-note { margin: 0; padding: 10px 14px; border-radius: 12px; font-size: 14px; color: var(--mist-2); justify-self: start; }
.work-tools { position: sticky; top: calc(76px + env(safe-area-inset-top, 0px)); z-index: 20; display: grid; grid-template-columns: minmax(200px, 300px) minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 8px; margin-bottom: 26px; border-radius: 18px;
  background: rgba(var(--panel), .62); -webkit-backdrop-filter: saturate(170%) blur(22px); backdrop-filter: saturate(170%) blur(22px); border: 1px solid var(--glass-edge); box-shadow: inset 0 1px 0 var(--glass-hi), 0 20px 40px -20px rgba(var(--well),.6); }
.work-tools .search, .work-tools .sort { background: rgba(var(--ink),.06); box-shadow: none; }
.search { display: flex; align-items: center; gap: 8px; padding: 0 0 0 14px; border-radius: 14px; }
.search .ico { color: var(--mist-3); }
.search input { background: transparent; border: 0; padding-left: 0; }
.tagbar { display: flex; gap: 6px; overflow-x: auto; scrollbar-width: none; padding: 2px; mask-image: linear-gradient(90deg, #000 90%, transparent); }
.tag { flex: none; border: 1px solid rgba(var(--ink),.14); background: rgba(var(--panel),.5); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); padding: 8px 14px; border-radius: 999px; font-size: 13px; font-weight: 600; color: var(--mist-2); cursor: pointer; }
.tag:hover { color: var(--mist); border-color: rgba(var(--ink),.3); }
.tag.is-on { background: var(--mist); color: var(--night); border-color: var(--mist); }
.sort { display: flex; align-items: center; gap: 8px; padding-left: 14px; border-radius: 14px; font-size: 13px; color: var(--mist-3); }
.sort select { background-color: transparent; border: 0; padding-block: 11px; width: auto; }

.pgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr)); gap: 28px 20px; }
.pgrid-4 { grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr)); }
.pcard { position: relative; display: grid; gap: 12px; text-decoration: none; }
.pcard-media { display: block; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 16px; border: 1px solid rgba(var(--ink),.12); background: rgba(var(--ink),.04); max-width: 100%; }
.pcard-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--ease), filter .4s; }
.pcard:hover .pcard-media img { transform: scale(1.06); filter: brightness(1.08); }
.pcard-info { display: grid; gap: 2px; min-width: 0; padding-inline: 2px; }
.pcard-info b { font-weight: 700; font-size: 16px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pcard-info small { color: var(--mist-3); font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pcard-cat { position: absolute; top: 12px; left: 12px; padding: 4px 10px; border-radius: 8px; font-size: 12px; font-weight: 700;
  background: rgba(var(--panel),.55); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); border: 1px solid rgba(var(--ink),.18);
  opacity: 0; transform: translateY(-6px); transition: .35s var(--ease); }
.pcard:hover .pcard-cat { opacity: 1; transform: none; }
.grid-empty { color: var(--mist-2); padding: 40px 0; }
.more-row { display: grid; place-items: center; padding-top: 40px; }
#sentinel { display: block; height: 1px; width: 1px; }

.next-cat, .next-project { position: relative; display: grid; gap: 8px; text-decoration: none; margin-top: clamp(80px, 10vw, 140px); padding: clamp(40px, 6vw, 80px) 0; border-top: 1px solid var(--line); overflow: hidden; }
.next-cat small, .next-project small { color: var(--mist-3); font-weight: 700; font-size: 14px; }
.next-cat > span, .next-project > span { font: 800 clamp(36px, 7vw, 120px)/.95 var(--display); letter-spacing: -.045em; transition: color .4s; }
.next-cat::after { content: ""; position: absolute; inset: 0; z-index: -1; opacity: 0; transition: opacity .6s;
  background: radial-gradient(50% 80% at 20% 60%, var(--c1), transparent 70%), radial-gradient(50% 80% at 80% 50%, var(--c2), transparent 70%); }
.next-cat:hover::after { opacity: .45; }
.next-project img { position: absolute; right: 0; top: 50%; width: min(34vw, 420px); aspect-ratio: 4/3; object-fit: cover; border-radius: 18px; opacity: 0; transform: translateY(-40%) rotate(4deg) scale(.9); transition: .6s var(--ease); pointer-events: none; }
.next-project:hover img { opacity: 1; transform: translateY(-50%) rotate(-2deg); }

/* ───────── Project page ───────── */
.project-head { padding-block: 130px 40px; display: grid; gap: 22px; }
.back { display: inline-flex; align-items: center; gap: 8px; text-decoration: none; color: var(--mist-2); font-weight: 600; justify-self: start; }
.back:hover { color: var(--mist); }
.project-title { font-size: clamp(34px, 5.6vw, 92px); font-weight: 800; line-height: .92; letter-spacing: -.04em; max-width: 16ch; }
.project-meta { display: flex; flex-wrap: wrap; gap: 12px 40px; }
.project-meta span { display: grid; font-weight: 700; }
.project-meta small { font-weight: 600; color: var(--mist-3); font-size: 13px; }
.project-actions { display: flex; flex-wrap: wrap; gap: 10px; }
.project-cover { margin: 0; overflow: hidden; border-radius: 22px; border: 1px solid var(--glass-edge); transform-origin: 50% 0; max-width: 100%; }
.project-cover img { width: 100%; max-height: 82svh; object-fit: cover; }
.project-body { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 24px; align-items: start; padding-block: clamp(40px, 5vw, 70px); }
.project-desc { margin: 0; font-size: clamp(18px, 1.6vw, 22px); line-height: 1.6; max-width: 62ch; color: var(--mist); }
.media-stack { display: grid; gap: clamp(12px, 1.4vw, 20px); }
.media { margin: 0; display: grid; gap: 10px; }
.media figcaption { color: var(--mist-3); font-size: 14px; padding-inline: 4px; }
.media img, .media video { width: 100%; height: auto; border-radius: 18px; background: rgba(var(--ink),.04); }
.zoom { display: block; padding: 0; border: 0; background: none; cursor: zoom-in; width: 100%; }
.media-embed iframe { width: 100%; aspect-ratio: 16 / 9; border: 0; border-radius: 18px; background: #000; }
.model-window { height: clamp(380px, 70svh, 760px); }
.more-from .section-head { align-items: center; }

/* ───────── Lightbox ───────── */
.lightbox { position: fixed; inset: 0; z-index: 95; display: grid; place-items: center; }
.lb-backdrop { position: absolute; inset: 0; background: rgba(4, 6, 20, .88); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); }
.lb-stage { position: relative; margin: 0; max-width: calc(100% - 32px); max-height: calc(100svh - 120px); }
.lb-stage img { max-height: calc(100svh - 120px); width: auto; border-radius: 12px; animation: lbIn .4s var(--ease); }
@keyframes lbIn { from { opacity: 0; transform: scale(.96); } }
.lb-bar { position: absolute; bottom: calc(18px + env(safe-area-inset-bottom, 0px)); left: 50%; transform: translateX(-50%); display: flex; align-items: center; gap: 6px; padding: 6px; border-radius: 16px; }
.lb-bar span { min-width: 64px; text-align: center; font-size: 14px; font-variant-numeric: tabular-nums; color: var(--mist-2); }
.lb-btn { width: 42px; height: 42px; border-radius: 12px; border: 0; background: rgba(var(--ink),.08); display: grid; place-items: center; cursor: pointer; }
.lb-btn:hover { background: rgba(var(--ink),.18); }
.lb-btn svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.lb-btn:disabled { opacity: .35; }

/* ───────── Footer ───────── */
.site-footer { margin-top: clamp(100px, 12vw, 180px); border-top: 1px solid var(--line); padding-top: 50px; overflow: hidden; }
.footer-top { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 30px; }
.footer-cta { font: 700 clamp(26px, 3vw, 40px)/1.1 var(--display); margin: 0 0 18px; letter-spacing: -.02em; }
.footer-nav { display: grid; gap: 8px; align-content: start; }
.footer-nav a { text-decoration: none; color: var(--mist-2); font-weight: 600; }
.footer-nav a:hover { color: var(--mist); }
.copyable { color: var(--mist-2); user-select: all; overflow-wrap: anywhere; }
.wordmark-wrap { overflow: hidden; margin-top: 50px; }
.wordmark { font: 800 clamp(34px, 7.6vw, 140px)/.9 var(--display); letter-spacing: -.055em; white-space: nowrap; text-align: center;
  background: linear-gradient(180deg, rgba(var(--ink),.95), rgba(var(--ink),.08)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.footer-base { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 10px; padding-block: 18px 0; color: var(--mist-3); font-size: 13px; }

.notfound { min-height: 70svh; display: grid; place-content: center; justify-items: start; gap: 18px; padding-top: 100px; }
.notfound h1 { font-size: clamp(40px, 8vw, 120px); }
.notfound p { color: var(--mist-2); margin: 0; }

/* ───────── Responsive ───────── */
@media (max-width: 1000px) {
  .hero { grid-template-columns: 1fr; min-height: 0; padding-top: 110px; }
  .hero-window { height: 58svh; min-height: 340px; }
  .about-cols, .contact, .sites { grid-template-columns: 1fr; }
  .widgets { grid-template-columns: 1fr 1fr; }
  .widget-award { grid-column: 1 / -1; }
  .work-tools { grid-template-columns: 1fr auto; }
  .tagbar { grid-column: 1 / -1; grid-row: 2; }
  .footer-top { grid-template-columns: 1fr 1fr; }
  .footer-top > div:first-child { grid-column: 1 / -1; }
  .project-body { grid-template-columns: 1fr; }
}
@media (max-width: 720px) {
  .doors { grid-template-columns: 1fr; }
  .door-text { max-width: 100%; }
  .fan { position: relative; right: auto; bottom: auto; width: 70%; margin: 24px auto 0; }
  .door { flex-direction: column; }
  .status, .clock, .brand-name { display: none; }
  .row2 { grid-template-columns: 1fr; }
  .titlebar-hint { display: none; }
  .tool span { display: none; }
  .dock { gap: 0; padding: 6px; }
  .dock a { padding: 0 3px; }
  .dock-ico { width: 42px; height: 42px; border-radius: 12px; }
  .dock-label { font-size: 9.5px; }
  .work-tools { top: calc(66px + env(safe-area-inset-top, 0px)); }
  .sort > span { display: none; }
  .next-project img { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
}

/* ───────── Glass dropdowns ───────── */
.fx-select { position: relative; min-width: 0; }
.fx-native { position: absolute !important; inset: 0; width: 100% !important; height: 100% !important; opacity: 0; pointer-events: none; }
.fx-trigger { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 46px; padding: 0 12px 0 14px;
  font: 600 15px/1.2 var(--body); color: var(--mist); text-align: left; cursor: pointer; border-radius: var(--r-control);
  background: rgba(var(--well),.24); border: 1px solid rgba(var(--ink),.14); transition: border-color .2s, background .2s, box-shadow .2s; }
.fx-trigger:hover { border-color: rgba(var(--ink),.28); background: rgba(var(--well),.3); }
.fx-select.is-open .fx-trigger, .fx-trigger:focus-visible { border-color: var(--gold-text); box-shadow: 0 0 0 4px rgba(242,181,68,.14); outline: none; }
.fx-value { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fx-chev { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 8px; background: rgba(var(--ink),.08); flex: none; transition: transform .35s var(--ease), background .2s; }
.fx-chev svg, .fx-check svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.fx-select.is-open .fx-chev { transform: rotate(180deg); background: rgba(242,181,68,.2); color: var(--gold-text); }
.fx-menu { position: absolute; z-index: 40; top: calc(100% + 8px); left: 0; min-width: 100%; max-height: 320px; overflow-y: auto; margin: 0; padding: 6px; list-style: none;
  border-radius: 16px; background: linear-gradient(160deg, var(--menu-a), var(--menu-b));
  -webkit-backdrop-filter: saturate(180%) blur(28px); backdrop-filter: saturate(180%) blur(28px);
  border: 1px solid rgba(var(--ink),.18); box-shadow: inset 0 1px 0 rgba(var(--ink),.25), 0 30px 60px -18px rgba(var(--well),.75), 0 0 0 1px rgba(var(--well),.2);
  opacity: 0; transform: translateY(-6px) scale(.97); transform-origin: 50% 0; transition: opacity .18s ease, transform .28s var(--ease); scrollbar-width: thin; }
.fx-select.fx-up .fx-menu { top: auto; bottom: calc(100% + 8px); transform-origin: 50% 100%; transform: translateY(6px) scale(.97); }
.fx-select.is-open .fx-menu { opacity: 1; transform: none; }
.fx-opt { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 10px 12px; border-radius: 10px; cursor: pointer;
  font-size: 15px; font-weight: 600; color: var(--mist-2); white-space: nowrap; transition: background .15s, color .15s; }
.fx-opt.is-active { background: rgba(var(--ink),.1); color: var(--mist); }
.fx-opt.is-sel { color: var(--mist); }
.fx-check { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; color: var(--gold-ink); background: var(--gold); opacity: 0; transform: scale(.4); transition: .25s var(--ease); }
.fx-opt.is-sel .fx-check { opacity: 1; transform: none; }
.fx-select.is-open .fx-opt { animation: fxIn .32s var(--ease) both; }
.fx-select.is-open .fx-opt:nth-child(2) { animation-delay: .02s; } .fx-select.is-open .fx-opt:nth-child(3) { animation-delay: .04s; }
.fx-select.is-open .fx-opt:nth-child(4) { animation-delay: .06s; } .fx-select.is-open .fx-opt:nth-child(5) { animation-delay: .08s; }
.fx-select.is-open .fx-opt:nth-child(n+6) { animation-delay: .1s; }
@keyframes fxIn { from { opacity: 0; transform: translateY(-4px); } }
.sort .fx-select { min-width: 150px; }
.sort .fx-trigger { background: transparent; border-color: transparent; min-height: 42px; padding-left: 4px; }
.sort .fx-trigger:hover { background: rgba(var(--ink),.06); }
.sort .fx-menu { left: auto; right: 0; }

/* ───────── Back to top ───────── */
.to-top { position: fixed; z-index: 58; right: max(16px, calc((100vw - var(--max)) / 2 - 20px)); bottom: calc(100px + env(safe-area-inset-bottom, 0px));
  display: flex; align-items: center; gap: 0; height: 56px; min-width: 56px; padding: 0; border: 0; border-radius: 999px; cursor: pointer; color: var(--mist);
  background: linear-gradient(160deg, rgba(var(--ink),.16), rgba(var(--ink),.06)); -webkit-backdrop-filter: saturate(170%) blur(20px); backdrop-filter: saturate(170%) blur(20px);
  box-shadow: inset 0 1px 0 rgba(var(--ink),.3), 0 18px 40px -14px rgba(var(--well),.7);
  opacity: 0; transform: translateY(24px) scale(.8); pointer-events: none; transition: opacity .4s, transform .5s var(--ease), background .4s, box-shadow .4s, padding .5s var(--ease); }
.to-top.show { opacity: 1; transform: none; pointer-events: auto; }
.tt-ring { position: relative; width: 56px; height: 56px; flex: none; }
.tt-ring svg.ring { position: absolute; inset: 0; transform: rotate(-90deg); }
.tt-ring circle { fill: none; stroke-width: 2.5; }
.tt-ring .track { stroke: rgba(var(--ink),.14); }
.tt-ring .fill { stroke: var(--gold); stroke-linecap: round; stroke-dasharray: 151; stroke-dashoffset: 151; transition: stroke-dashoffset .15s linear; }
.tt-arrow { position: absolute; inset: 0; display: grid; place-items: center; }
.tt-arrow svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; transition: transform .4s var(--ease); }
.to-top:hover .tt-arrow svg { transform: translateY(-3px); }
.tt-orbit { position: absolute; inset: -6px; border-radius: 50%; opacity: 0; transition: opacity .4s; }
.tt-orbit::before { content: ""; position: absolute; top: 50%; left: -2px; width: 7px; height: 7px; margin-top: -3.5px; border-radius: 50%; background: #fff; box-shadow: 0 0 10px 3px rgba(242,181,68,.9); }
.tt-label { max-width: 0; overflow: hidden; white-space: nowrap; font-weight: 700; font-size: 15px; transition: max-width .5s var(--ease), padding .5s var(--ease); }
/* the moment you reach the bottom */
.to-top.at-end { background: linear-gradient(135deg, #ffcf6e, var(--gold) 55%, #e39a2b); color: var(--gold-ink); padding-right: 22px;
  box-shadow: inset 0 1px 0 rgba(var(--ink),.6), 0 0 0 6px rgba(242,181,68,.16), 0 20px 50px -12px rgba(242,181,68,.65); }
.to-top.at-end .tt-label { max-width: 140px; }
.to-top.at-end .track { stroke: rgba(42,29,2,.15); }
.to-top.at-end .fill { stroke: var(--gold-ink); }
.to-top.at-end .tt-orbit { opacity: 1; animation: orbit 2.4s linear infinite; }
.to-top.at-end .tt-arrow svg { animation: nudge 1.4s var(--ease) infinite; }
@keyframes orbit { to { transform: rotate(360deg); } }
@keyframes nudge { 50% { transform: translateY(-4px); } }
.to-top .spark { position: absolute; left: 28px; top: 28px; width: 5px; height: 5px; margin: -2.5px; border-radius: 50%; background: var(--gold); pointer-events: none; }
.to-top.launch .tt-arrow svg { animation: launch .7s var(--ease) forwards; }
@keyframes launch { 40% { transform: translateY(6px); } 100% { transform: translateY(-60px); opacity: 0; } }
@media (max-width: 720px) {
  .to-top { right: 14px; bottom: calc(92px + env(safe-area-inset-bottom, 0px)); height: 50px; min-width: 50px; }
  .tt-ring { width: 50px; height: 50px; }
  .to-top .spark { left: 25px; top: 25px; }
}

/* ───────── Sharing ───────── */
.share-wrap { position: relative; }
.share-open svg, .share-ico svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.share-panel { position: absolute; z-index: 30; top: calc(100% + 10px); left: 0; width: min(360px, calc(100vw - 32px)); padding: 16px; border-radius: 20px;
  background: linear-gradient(160deg, var(--menu-a), var(--menu-b)); -webkit-backdrop-filter: saturate(180%) blur(28px); backdrop-filter: saturate(180%) blur(28px);
  border: 1px solid rgba(var(--ink),.18); box-shadow: inset 0 1px 0 rgba(var(--ink),.25), 0 30px 60px -18px rgba(var(--well),.75);
  opacity: 0; transform: translateY(-8px) scale(.96); transform-origin: 20% 0; transition: opacity .2s, transform .35s var(--ease); }
.share-wrap.is-open .share-panel { opacity: 1; transform: none; }
.share-title { margin: 0 0 12px; font-weight: 700; }
.share-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.share-net { display: grid; justify-items: center; gap: 6px; padding: 10px 2px; border-radius: 14px; text-decoration: none; color: var(--mist); background: transparent; border: 0; cursor: pointer; font: inherit; transition: background .2s; }
.share-net:hover { background: rgba(var(--ink),.08); }
.share-ico { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; background: var(--net); color: #fff; box-shadow: 0 8px 20px -8px var(--net); transition: transform .35s var(--ease); }
.share-net:hover .share-ico { transform: translateY(-3px) scale(1.06); }
.share-ico svg { width: 20px; height: 20px; }
.share-copy .share-ico { color: var(--gold-ink); }
.share-copy.done .share-ico { background: #3ddc84; }
.share-name { font-size: 11.5px; font-weight: 700; color: var(--mist-2); white-space: nowrap; }
.share-url { margin: 12px 0 0; padding: 8px 12px; border-radius: 10px; background: rgba(var(--well),.25); font-size: 12.5px; color: var(--mist-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; user-select: all; }
.share-strip { margin-top: clamp(50px, 7vw, 90px); padding: clamp(20px, 3vw, 32px); border-radius: 26px; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 20px;
  background: linear-gradient(140deg, rgba(242,181,68,.16), rgba(var(--ink),.04) 60%); border: 1px solid rgba(242,181,68,.28); }
.share-strip h3 { font-size: clamp(24px, 2.6vw, 34px); }
.share-strip p { margin: 4px 0 0; color: var(--mist-2); }
.share-row { display: flex; flex-wrap: wrap; gap: 2px; }
.share-row .share-net { width: 76px; }
@media (max-width: 720px) {
  .share-row { display: grid; grid-template-columns: repeat(4, 1fr); width: 100%; }
  .share-row .share-net { width: auto; }
}
.share-ico { outline: 1px solid rgba(var(--ink),.14); outline-offset: -1px; }
@media (max-width: 720px) {
  .share-panel { position: fixed; top: auto; left: 12px; right: 12px; bottom: calc(96px + env(safe-area-inset-bottom, 0px)); width: auto; transform-origin: 50% 100%; transform: translateY(16px) scale(.98); }
}


/* ═════════ Light theme ═════════ */
:root[data-theme="light"] {
  color-scheme: light;
  --night: #eef0f8;
  --ink: 22, 26, 64;
  --well: 255, 255, 255;
  --panel: 255, 255, 255;
  --panel-solid: #ffffff;
  --mist: #141833;
  --mist-rgb: 20, 24, 51;
  --mist-2: rgba(20, 24, 51, .72);
  --mist-3: rgba(20, 24, 51, .52);
  --line: rgba(22, 26, 64, .12);
  --glass: rgba(255, 255, 255, .5);
  --glass-strong: rgba(255, 255, 255, .78);
  --glass-edge: rgba(22, 26, 64, .12);
  --glass-hi: rgba(255, 255, 255, .95);
  --menu-a: rgba(255, 255, 255, .92);
  --menu-b: rgba(244, 246, 252, .96);
  --gold-text: #9a6200;
  --name-a: #141833;
  --name-b: #4a3fb0;
  --pre-glow: #dfe2f5;
  --curtain-bg: #f4f5fb;
  --shadow: rgba(40, 46, 100, .22);
}
:root[data-theme="light"] body { background: var(--night); }
:root[data-theme="light"] .grain { opacity: .04; }
:root[data-theme="light"] .work-tools { background: rgba(255, 255, 255, .72); }
:root[data-theme="light"] .lb-backdrop { background: rgba(236, 238, 248, .92); }
:root[data-theme="light"] .form input, :root[data-theme="light"] .form select, :root[data-theme="light"] .form textarea, :root[data-theme="light"] .fx-trigger, :root[data-theme="light"] .search input { background: rgba(255, 255, 255, .8); }
:root[data-theme="light"] .hero-name .w:nth-last-child(1) .ch > span { -webkit-text-stroke-color: rgba(20, 24, 51, .55); }
:root[data-theme="light"] .marquee-track span { -webkit-text-stroke-color: rgba(20, 24, 51, .4); }

/* ═════════ v3 components ═════════ */
.mb-icon { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 10px; border: 1px solid transparent; background: rgba(var(--ink), .06); color: var(--mist-2); cursor: pointer; }
.mb-icon:hover { color: var(--mist); background: rgba(var(--ink), .12); }
.mb-icon .ico { width: 17px; height: 17px; }
.mb-icon[aria-pressed="true"] { color: var(--gold-text); }

/* fast pictures: blurred preview, then fade in */
.pic { display: block; width: 100%; height: 100%; background-size: cover; background-position: center; background-color: rgba(var(--ink), .05); overflow: hidden; }
.pic img { width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .6s ease, transform .8s var(--ease), filter .4s; }
.pic img.in { opacity: 1; }
.media .pic, .project-cover .pic { height: auto; border-radius: 18px; }
.media .pic img, .project-cover .pic img { height: auto; }
.pcard:hover .pic img { transform: scale(1.06); filter: brightness(1.08); }
.pcard-info small { display: flex; justify-content: space-between; gap: 8px; }
.pcard-info small > span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pcard-stats { display: inline-flex; align-items: center; gap: 4px; flex: none; font-variant-numeric: tabular-nums; }
.pcard-stats .ico { width: 13px; height: 13px; margin-left: 4px; }

/* showreel */
.reel-btn { display: inline-flex; align-items: center; gap: 10px; min-height: 46px; padding: 0 18px 0 6px; border-radius: 999px; border: 1px solid var(--glass-edge); background: rgba(var(--ink), .06); color: var(--mist); font-weight: 700; cursor: pointer; transition: background .2s, transform .25s var(--ease); }
.reel-btn:hover { background: rgba(var(--ink), .12); }
.reel-play { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: var(--gold); color: var(--gold-ink); position: relative; }
.reel-play::after { content: ""; position: absolute; inset: -5px; border-radius: 50%; border: 1.5px solid var(--gold); opacity: .6; animation: ring 2s ease-out infinite; }
@keyframes ring { to { transform: scale(1.5); opacity: 0; } }
.reel-play .ico { width: 14px; height: 14px; margin-left: 2px; }
.reel-modal { position: fixed; inset: 0; z-index: 96; display: grid; place-items: center; padding: 16px; animation: fade .25s ease; }
.reel-modal.out { opacity: 0; transition: opacity .25s; }
.reel-backdrop { position: absolute; inset: 0; background: rgba(4, 6, 20, .82); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); }
.reel-window { position: relative; width: min(1200px, 100%); animation: pop .35s var(--ease); background: linear-gradient(160deg, var(--menu-a), var(--menu-b)); }
.reel-body { aspect-ratio: 16 / 9; background: #000; }
.reel-body video, .reel-body iframe { width: 100%; height: 100%; border: 0; display: block; }
.titlebar-x { margin-left: auto; display: grid; place-items: center; width: 32px; height: 32px; border-radius: 9px; background: rgba(var(--ink), .08); border: 0; cursor: pointer; color: var(--mist); }
.titlebar-x .ico { width: 16px; height: 16px; }
@keyframes pop { from { opacity: 0; transform: translateY(18px) scale(.97); } }
@keyframes fade { from { opacity: 0; } }
.sample-reel { position: relative; width: 100%; height: 100%; overflow: hidden; }
.sample-reel img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; animation: reel 18s infinite; animation-delay: calc(var(--i) * 3s); }
@keyframes reel { 0% { opacity: 0; transform: scale(1.12); } 4% { opacity: 1; } 16% { opacity: 1; } 20% { opacity: 0; transform: scale(1); } 100% { opacity: 0; } }
.sample-reel p { position: absolute; left: 16px; bottom: 12px; margin: 0; padding: 6px 12px; border-radius: 10px; background: rgba(0,0,0,.55); color: #fff; font-size: 13px; }

/* client reviews */
.review-track { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); gap: 18px; }
.review { position: relative; margin: 0; padding: 26px; border-radius: 22px; display: flex; flex-direction: column; gap: 16px; }
.review-q { width: 34px; height: 34px; color: var(--gold-text); stroke-width: 2.2; }
.stars { color: var(--gold); letter-spacing: 2px; font-size: 15px; }
.stars i { font-style: normal; color: rgba(var(--ink), .2); }
.review blockquote { margin: 0; font: 600 clamp(17px, 1.4vw, 20px)/1.5 var(--body); flex: 1; }
.review figcaption { display: flex; align-items: center; gap: 12px; }
.review figcaption img, .avatar-ph { width: 48px; height: 48px; border-radius: 50%; object-fit: cover; flex: none; }
.avatar-ph { display: grid; place-items: center; background: linear-gradient(135deg, var(--dusk), var(--indigo)); color: #fff; font: 800 16px var(--display); }
.review figcaption b { display: block; }
.review figcaption small { color: var(--mist-3); }
.sample-pill { position: absolute; top: 16px; right: 16px; font-size: 11px; font-weight: 800; padding: 2px 8px; border-radius: 6px; background: rgba(var(--ink), .1); color: var(--mist-3); }

/* how I work */
.steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; counter-reset: s; }
.step { position: relative; padding: 20px; border-radius: 18px; display: grid; gap: 6px; align-content: start; }
.step-n { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; background: var(--gold); color: var(--gold-ink); font: 800 15px var(--display); margin-bottom: 6px; }
.step b { font: 700 18px var(--display); }
.step span:last-child { color: var(--mist-2); font-size: 14px; }
.steps-lg .step { padding: 24px; }
@media (max-width: 1000px) { .steps { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .steps { grid-template-columns: 1fr; } }

/* journal */
.post-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 26px 20px; }
.post-grid-page { margin-top: 30px; }
.post-card { display: grid; gap: 8px; text-decoration: none; }
.post-media { display: block; aspect-ratio: 16 / 10; border-radius: 16px; overflow: hidden; border: 1px solid var(--glass-edge); }
.post-card:hover .pic img { transform: scale(1.05); }
.post-card small { color: var(--gold-text); font-weight: 700; font-size: 13px; }
.post-card b { font: 700 20px/1.2 var(--display); }
.post-card > span:last-child { color: var(--mist-2); font-size: 15px; }
.post-hero { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); border-radius: 26px; overflow: hidden; text-decoration: none; }
.post-hero-media { display: block; aspect-ratio: 16 / 10; }
.post-hero-text { display: flex; flex-direction: column; gap: 10px; padding: clamp(22px, 3vw, 40px); justify-content: center; }
.post-hero-text small { color: var(--gold-text); font-weight: 700; }
.post-hero-text b { font: 800 clamp(26px, 3vw, 42px)/1.05 var(--display); letter-spacing: -.02em; }
.post-hero-text > span { color: var(--mist-2); }
.post-head { padding-block: 130px 36px; display: grid; gap: 18px; max-width: 900px; }
.post-title { font-size: clamp(34px, 5.4vw, 84px); font-weight: 800; line-height: .95; letter-spacing: -.04em; }
.post-meta { margin: 0; color: var(--mist-3); font-weight: 600; }
.post-lede { margin: 0; font-size: clamp(18px, 1.6vw, 22px); color: var(--mist-2); max-width: 60ch; }
.prose { max-width: 68ch; margin: clamp(40px, 5vw, 70px) auto 0; font-size: 18px; line-height: 1.75; }
.prose h2 { font-size: clamp(24px, 2.6vw, 34px); margin: 1.8em 0 .5em; }
.prose h3 { font-size: 22px; margin: 1.6em 0 .4em; }
.prose p, .prose ul, .prose ol { margin: 0 0 1.1em; color: var(--mist); }
.prose li { margin-bottom: .3em; }
.prose a { color: var(--gold-text); }
.prose blockquote { margin: 1.4em 0; padding: 14px 20px; border-left: 3px solid var(--gold); border-radius: 0 12px 12px 0; background: rgba(var(--ink), .05); color: var(--mist-2); }
.prose img { width: 100%; border-radius: 16px; margin: 1em 0; }
.prose code { font-size: .9em; padding: 2px 6px; border-radius: 6px; background: rgba(var(--ink), .08); }
.prose figure { margin: 1.4em 0; }
@media (max-width: 800px) { .post-hero { grid-template-columns: 1fr; } }

/* before / after */
.compare { position: relative; overflow: hidden; border-radius: 18px; cursor: ew-resize; user-select: none; touch-action: pan-y; background: rgba(var(--ink), .05); }
.compare img { display: block; width: 100%; height: auto; pointer-events: none; }
.cmp-before { position: absolute; inset: 0; clip-path: inset(0 calc(100% - var(--pos)) 0 0); }
.cmp-before img { height: 100%; object-fit: cover; }
.cmp-line { position: absolute; top: 0; bottom: 0; left: var(--pos); width: 2px; margin-left: -1px; background: #fff; box-shadow: 0 0 12px rgba(0,0,0,.4); }
.cmp-handle { position: absolute; top: 50%; left: 50%; width: 52px; height: 52px; margin: -26px 0 0 -26px; border-radius: 50%; border: 2px solid #fff; display: grid; place-items: center; cursor: ew-resize; color: #fff;
  background: rgba(10, 14, 40, .45); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); box-shadow: 0 10px 30px rgba(0,0,0,.4); transition: transform .25s var(--ease); }
.compare.active .cmp-handle, .cmp-handle:hover { transform: scale(1.1); }
.cmp-handle .ico { width: 22px; height: 22px; stroke-width: 2.2; }
.cmp-label { position: absolute; top: 14px; padding: 5px 12px; border-radius: 999px; font-size: 13px; font-weight: 700; color: #fff; background: rgba(10, 14, 40, .55); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); pointer-events: none; }
.cmp-label.l { left: 14px; } .cmp-label.r { right: 14px; }

/* 360 view */
.pano-window { height: clamp(360px, 68svh, 720px); }
.pano-stage canvas { position: absolute; inset: 0; width: 100% !important; height: 100% !important; cursor: grab; }
.pano-stage canvas:active { cursor: grabbing; }

/* AR */
.ar-btn { position: absolute; right: 14px; bottom: 64px; display: inline-flex; align-items: center; gap: 8px; padding: 10px 16px; border-radius: 999px; border: 0; background: var(--gold); color: var(--gold-ink); font-weight: 800; box-shadow: 0 10px 30px -10px rgba(242,181,68,.7); cursor: pointer; }
.model-window { position: relative; }

/* likes */
.likebar { display: inline-flex; align-items: center; gap: 14px; margin-left: auto; }
.like-btn { position: relative; display: inline-flex; align-items: center; gap: 8px; height: 46px; padding: 0 18px; border-radius: 999px; border: 1px solid var(--glass-edge); background: rgba(var(--ink), .06); color: var(--mist); font-weight: 800; cursor: pointer; font-variant-numeric: tabular-nums; transition: background .2s, transform .2s var(--ease); }
.like-btn .ico { width: 20px; height: 20px; transition: transform .35s var(--ease), fill .2s; }
.like-btn:hover { background: rgba(var(--ink), .12); }
.like-btn:active .ico { transform: scale(.8); }
.like-btn.on { background: rgba(224, 69, 123, .18); border-color: rgba(224, 69, 123, .5); color: #ff6f9f; }
.like-btn.on .ico { fill: currentColor; animation: beat .45s var(--ease); }
@keyframes beat { 40% { transform: scale(1.35); } }
.heart-fly { position: absolute; left: 22px; top: 12px; color: #ff6f9f; pointer-events: none; }
.heart-fly .ico { width: 16px; height: 16px; fill: currentColor; }
.views { display: inline-flex; align-items: center; gap: 6px; color: var(--mist-3); font-weight: 600; font-size: 14px; font-variant-numeric: tabular-nums; }
.views .ico { width: 17px; height: 17px; }
.project-actions { align-items: center; }

/* case study */
.case { display: grid; gap: 22px; padding-bottom: clamp(30px, 4vw, 60px); }
.case-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 14px; }
.case-stat { padding: 22px; border-radius: 20px; display: grid; gap: 4px; }
.case-stat strong { font: 800 clamp(34px, 4vw, 56px)/1 var(--display); letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.case-stat span { color: var(--mist-2); }
.case-parts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.case-part { padding: 22px; border-radius: 20px; border: 1px solid var(--line); display: grid; gap: 8px; align-content: start; }
.case-step { font: 800 13px var(--display); color: var(--gold-text); }
.case-part p { margin: 0; color: var(--mist-2); }
@media (max-width: 860px) { .case-parts { grid-template-columns: 1fr; } }

/* pages */
.page-head { padding-block: 130px 30px; display: grid; gap: 18px; }
.page-title { font-size: clamp(40px, 9vw, 150px); font-weight: 800; line-height: .92; letter-spacing: -.045em; }
.page-sub { margin: 0; color: var(--mist-2); font-size: clamp(17px, 1.5vw, 20px); max-width: 56ch; }
.page-jump { display: flex; flex-wrap: wrap; gap: 8px; }

/* services & estimator */
.svc-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 270px), 1fr)); gap: 14px; }
.svc { padding: 22px; border-radius: 20px; display: flex; flex-direction: column; gap: 8px; }
.svc b { font: 700 19px/1.2 var(--display); }
.svc p { margin: 0; color: var(--mist-2); font-size: 14px; flex: 1; }
.svc-from { display: flex; align-items: baseline; gap: 6px; font: 800 24px var(--display); margin: 8px 0 4px; font-variant-numeric: tabular-nums; }
.svc-from small { font: 600 13px var(--body); color: var(--mist-3); }
.svc .btn { align-self: flex-start; }
.estimator { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); border-radius: 28px; overflow: hidden; }
.est-form { padding: clamp(22px, 3.5vw, 44px); display: grid; gap: 18px; align-content: start; }
.est-form label, .est-group { display: grid; gap: 8px; font-weight: 600; font-size: 14px; }
.pills { display: flex; flex-wrap: wrap; gap: 8px; }
.pills button { padding: 10px 16px; border-radius: 999px; border: 1px solid var(--glass-edge); background: rgba(var(--ink), .05); color: var(--mist-2); font-weight: 700; cursor: pointer; transition: .2s; }
.pills button:hover { color: var(--mist); border-color: rgba(var(--ink), .3); }
.pills button[aria-checked="true"] { background: var(--mist); color: var(--night); border-color: var(--mist); }
.est-result { padding: clamp(22px, 3.5vw, 44px); display: flex; flex-direction: column; gap: 12px; justify-content: center;
  background: linear-gradient(150deg, rgba(242,181,68,.22), rgba(107,75,214,.14)); border-left: 1px solid var(--glass-edge); }
.est-result > small { color: var(--mist-2); font-weight: 700; }
.est-price { font: 800 clamp(32px, 4vw, 54px)/1.05 var(--display); letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.est-price span { font: 600 18px var(--body); color: var(--mist-3); }
.est-note { margin: 0 0 8px; color: var(--mist-2); font-size: 14px; }
@media (max-width: 860px) { .estimator { grid-template-columns: 1fr; } .est-result { border-left: 0; border-top: 1px solid var(--glass-edge); } }

/* booking */
.booking { border-radius: 28px; padding: clamp(22px, 3.5vw, 44px); display: grid; gap: 20px; }
.bk-head h2 { margin-bottom: 6px; }
.bk-tz { color: var(--mist-3); font-weight: 600; }
.bk-days { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 6px; scrollbar-width: thin; }
.bk-days button { flex: none; display: grid; justify-items: center; gap: 2px; width: 70px; padding: 10px 0; border-radius: 16px; border: 1px solid var(--glass-edge); background: rgba(var(--ink), .05); color: var(--mist-2); cursor: pointer; }
.bk-days button b { font: 800 22px var(--display); color: var(--mist); }
.bk-days button small { font-size: 12px; font-weight: 700; }
.bk-days button[aria-selected="true"] { background: var(--gold); border-color: var(--gold); color: var(--gold-ink); }
.bk-days button[aria-selected="true"] b { color: var(--gold-ink); }
.bk-slots { display: grid; grid-template-columns: repeat(auto-fill, minmax(92px, 1fr)); gap: 8px; }
.slot { padding: 12px 0; border-radius: 12px; border: 1px solid var(--glass-edge); background: rgba(var(--ink), .05); color: var(--mist); font-weight: 700; cursor: pointer; font-variant-numeric: tabular-nums; transition: .2s; }
.slot:hover:not(:disabled) { border-color: var(--gold); }
.slot:disabled { opacity: .3; text-decoration: line-through; cursor: not-allowed; }
.slot.on { background: var(--mist); color: var(--night); border-color: var(--mist); }
.bk-empty { color: var(--mist-2); margin: 0; }
.bk-form { border-top: 1px solid var(--line); padding-top: 18px; }
.bk-picked { margin: 0; display: flex; align-items: center; gap: 8px; }
.pay-ok { display: grid; justify-items: center; text-align: center; gap: 10px; padding: 20px; }
.pay-ok .ico { width: 44px; height: 44px; color: #ff6f9f; fill: currentColor; }
.pay-ok p { margin: 0; color: var(--mist-2); max-width: 46ch; }

/* questions */
.faq { display: grid; gap: 10px; max-width: 900px; }
.faq-item { border-radius: 18px; overflow: hidden; }
.faq-item summary { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 18px 22px; cursor: pointer; font: 700 18px var(--display); list-style: none; }
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary i { position: relative; width: 28px; height: 28px; border-radius: 50%; background: rgba(var(--ink), .08); flex: none; }
.faq-item summary i::before, .faq-item summary i::after { content: ""; position: absolute; left: 8px; right: 8px; top: 13px; height: 2px; background: currentColor; border-radius: 2px; transition: transform .3s var(--ease); }
.faq-item summary i::after { transform: rotate(90deg); }
.faq-item[open] summary i::after { transform: rotate(0deg); }
.faq-item[open] summary i { background: var(--gold); color: var(--gold-ink); }
.faq-a { padding: 0 22px 20px; color: var(--mist-2); }
.faq-a p { margin: 0; max-width: 70ch; }

/* deposit window */
.pay-window { position: relative; width: min(460px, 100%); background: linear-gradient(160deg, var(--menu-a), var(--menu-b)); }
.pay-form { padding: 22px; }
.pay-sum { margin: 0 0 6px; display: grid; gap: 2px; }
.pay-sum small { color: var(--mist-3); font-weight: 700; }
.pay-sum strong { font: 800 40px var(--display); }
.pay-sum span { color: var(--mist-2); font-size: 14px; }

/* private review */
.rv-banner { padding: 14px 18px; border-radius: 16px; display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; color: var(--mist-2); font-size: 14px; }
.rv-banner b { color: var(--mist); }
.rv-status { margin-left: auto; padding: 4px 12px; border-radius: 999px; background: rgba(242,181,68,.18); color: var(--gold-text); font-weight: 700; }
.rv-comment { justify-self: start; margin-top: 4px; }
.rv-inline { display: flex; gap: 8px; align-items: flex-start; }
.rv-inline textarea { flex: 1; font: 500 15px var(--body); color: var(--mist); padding: 10px 12px; border-radius: 12px; border: 1px solid rgba(var(--ink), .16); background: rgba(var(--well), .22); resize: vertical; }
.rv-thread { padding: 10px 14px; border-radius: 12px; background: rgba(var(--ink), .06); font-size: 14px; color: var(--mist-2); margin-top: 6px; }
.rv-thread b { color: var(--mist); }
.rv-thread.approve { background: rgba(61,220,132,.14); }
.rv-thread.changes { background: rgba(242,181,68,.14); }
.rv-panel { margin-top: 30px; padding: clamp(20px, 3vw, 32px); border-radius: 24px; display: grid; gap: 14px; }
.rv-actions { display: flex; flex-wrap: wrap; gap: 8px; }

/* 404 game */
.nf-game { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 30px; align-items: center; min-height: 80svh; padding-top: 110px; }
.nf-text { display: grid; gap: 16px; justify-items: start; }
.nf-text p { margin: 0; color: var(--mist-2); }
.nf-score { font: 700 18px var(--display); color: var(--gold-text) !important; min-height: 1.4em; }
.nf-window { height: min(62svh, 560px); }
.nf-window .stage canvas { position: absolute; inset: 0; width: 100% !important; height: 100% !important; }
@media (max-width: 860px) { .nf-game { grid-template-columns: 1fr; } }

.ts-slot:empty { display: none; }
.ts-slot { min-height: 0; }
@media (max-width: 720px) {
  .mb-icon { width: 32px; height: 32px; }
  .likebar { margin-left: 0; }
  .dock-ico { width: 40px; height: 40px; }
  .dock a { padding: 0 2px; }
}
.notfound.nf-game { place-content: normal; justify-items: stretch; }
.nf-game h1 { font-size: clamp(44px, 7vw, 110px); font-weight: 800; line-height: .92; letter-spacing: -.04em; }
.case-step { display: inline-grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: rgba(242,181,68,.18); color: var(--gold-text); font: 800 14px var(--display); }
.case-step { font: 800 14px var(--body); }

/* dropdowns are never cut off by the box they sit in */
.estimator { overflow: visible; }
.est-form { border-radius: 28px 0 0 28px; }
.est-result { border-radius: 0 28px 28px 0; }
@media (max-width: 860px) { .est-form { border-radius: 28px 28px 0 0; } .est-result { border-radius: 0 0 28px 28px; } }
.fx-select.is-open { z-index: 50; }
/* an open dropdown lifts its panel above neighbours; sticky panels stay sticky (no jump) */
.glass:has(.fx-select.is-open), [data-reveal]:has(.fx-select.is-open) { z-index: 45; }
:where(.glass:not(.work-tools, .list-pane, .text-head, .editor-head, .pdf-opts, .product-side, .invoice-side, .admin-top), [data-reveal]:not(.work-tools, .list-pane, .text-head, .editor-head, .pdf-opts, .product-side, .invoice-side, .admin-top)):has(.fx-select.is-open) { position: relative; }
/* slim glass scrollbar inside menus */
.fx-menu { max-height: min(340px, 52vh); scrollbar-width: thin; scrollbar-color: rgba(var(--ink), .3) transparent; }
.fx-menu::-webkit-scrollbar { width: 6px; }
.fx-menu::-webkit-scrollbar-track { background: transparent; margin: 10px 0; }
.fx-menu::-webkit-scrollbar-thumb { background: rgba(var(--ink), .28); border-radius: 6px; }
.fx-menu::-webkit-scrollbar-button { display: none; height: 0; }
.fx-opt { white-space: normal; }

/* ───────── Your logo ───────── */
.logo-img { height: 30px; width: auto; max-width: 110px; object-fit: contain; display: block; }
.pre-logo .logo-img { height: auto; width: min(220px, 50vw); max-width: none; }
:root[data-theme="light"] .logo-img.auto-dark { filter: brightness(.14) saturate(0); }
.brand-name { display: none; }

/* ═════════ v4 ═════════ */
/* search button + spotlight */
.mb-search { width: auto; padding: 0 10px; gap: 8px; display: inline-flex; align-items: center; }
.mb-search kbd, .sp-panel kbd { font: 700 11px var(--body); padding: 2px 6px; border-radius: 6px; background: rgba(var(--ink), .1); border: 1px solid rgba(var(--ink), .14); color: var(--mist-2); }
@media (max-width: 900px) { .mb-search kbd { display: none; } .mb-search { padding: 0; width: 34px; justify-content: center; } }
.spotlight { position: fixed; inset: 0; z-index: 97; display: grid; justify-items: center; align-items: start; padding: max(12vh, 70px) 16px 16px; }
.spotlight.out { opacity: 0; transition: opacity .18s; }
.sp-backdrop { position: absolute; inset: 0; background: rgba(4, 6, 20, .5); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); animation: fade .2s ease; }
.sp-panel { position: relative; width: min(680px, 100%); border-radius: 22px; overflow: hidden; background: linear-gradient(160deg, var(--menu-a), var(--menu-b)); animation: spin-in .28s var(--ease); display: flex; flex-direction: column; max-height: 70vh; }
@keyframes spin-in { from { opacity: 0; transform: translateY(-12px) scale(.97); } }
.sp-bar { display: flex; align-items: center; gap: 12px; padding: 16px 18px; border-bottom: 1px solid var(--line); }
.sp-bar .ico { width: 22px; height: 22px; color: var(--mist-3); }
.sp-input { flex: 1; min-width: 0; border: 0; outline: none; background: transparent; color: var(--mist); font: 600 19px var(--body); }
.sp-input::-webkit-search-cancel-button { display: none; }
.sp-list { list-style: none; margin: 0; padding: 8px; overflow-y: auto; }
.sp-list li[data-i] { display: grid; grid-template-columns: 48px minmax(0, 1fr) auto; gap: 12px; align-items: center; padding: 8px 10px; border-radius: 12px; cursor: pointer; }
.sp-list li[aria-selected="true"] { background: rgba(var(--ink), .1); }
.sp-list img, .sp-ico { width: 48px; height: 36px; border-radius: 8px; object-fit: cover; display: grid; place-items: center; background: rgba(var(--ink), .08); color: var(--mist-3); }
.sp-text { min-width: 0; display: grid; }
.sp-text b { font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sp-text small { color: var(--mist-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sp-text mark { background: rgba(242,181,68,.35); color: inherit; border-radius: 3px; }
.sp-type { font-size: 12px; font-weight: 700; color: var(--mist-3); }
.sp-empty { padding: 20px; color: var(--mist-2); }
.sp-empty a { color: var(--gold-text); }
.sp-foot { display: flex; gap: 16px; padding: 10px 18px; border-top: 1px solid var(--line); font-size: 12px; color: var(--mist-3); }
.sp-foot span { display: inline-flex; gap: 4px; align-items: center; }
@media (max-width: 600px) { .sp-foot { display: none; } .spotlight { padding-top: 70px; } }

/* WhatsApp bubble */
.wa-bubble { position: fixed; z-index: 58; left: max(16px, calc((100vw - var(--max)) / 2 - 20px)); bottom: calc(100px + env(safe-area-inset-bottom, 0px));
  display: inline-flex; align-items: center; gap: 0; height: 56px; padding: 0 16px; border-radius: 999px; background: #25d366; color: #fff; text-decoration: none; font-weight: 800;
  box-shadow: 0 16px 36px -12px rgba(37, 211, 102, .7), inset 0 1px 0 rgba(255,255,255,.35);
  opacity: 0; transform: translateY(20px) scale(.8); transition: opacity .5s, transform .6s var(--ease), gap .4s var(--ease); }
.wa-bubble.show { opacity: 1; transform: none; }
.wa-bubble svg { width: 26px; height: 26px; fill: currentColor; flex: none; }
.wa-bubble::after { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 2px solid #25d366; animation: ring 2.4s ease-out infinite; animation-delay: 3s; pointer-events: none; }
.wa-label { max-width: 0; overflow: hidden; white-space: nowrap; transition: max-width .45s var(--ease); }
.wa-bubble:hover, .wa-bubble:focus-visible { gap: 10px; }
.wa-bubble:hover .wa-label, .wa-bubble:focus-visible .wa-label { max-width: 180px; }
body[data-page="invoice"] .wa-bubble { display: none; }
@media (max-width: 720px) { .wa-bubble { left: 14px; bottom: calc(92px + env(safe-area-inset-bottom, 0px)); height: 50px; padding: 0 12px; } }

/* client logo wall */
.logo-marquee { overflow: hidden; margin-inline: calc(-1 * var(--gutter)); mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); }
.logo-track { display: flex; align-items: center; gap: clamp(28px, 5vw, 72px); width: max-content; padding: 10px 0; animation: logos 40s linear infinite; }
.logo-marquee:hover .logo-track { animation-play-state: paused; }
@keyframes logos { to { transform: translateX(-50%); } }
.logo-item { display: grid; place-items: center; height: clamp(44px, 5vw, 64px); }
.logo-item img { height: 100%; width: auto; max-width: 200px; object-fit: contain; opacity: .7; filter: grayscale(1) brightness(1.6); transition: opacity .3s, filter .3s; }
.logo-item:hover img { opacity: 1; filter: none; }
:root[data-theme="light"] .logo-item img { filter: grayscale(1) invert(1) brightness(.35); }
:root[data-theme="light"] .logo-item:hover img { filter: none; }

/* CV + panel head */
.panel-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 16px; }
.panel-head h3 { margin: 0; }

/* newsletter + legal */
.newsletter { margin-top: 40px; padding: 20px 22px; border-radius: 22px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); gap: 16px 24px; align-items: center; }
.newsletter > div:first-child { display: grid; gap: 4px; }
.newsletter b { font: 700 20px var(--display); }
.newsletter span { color: var(--mist-2); font-size: 14px; }
.nl-row { display: flex; gap: 8px; }
.nl-row input { flex: 1; min-width: 0; font: 500 15px var(--body); color: var(--mist); padding: 12px 14px; border-radius: var(--r-control); background: rgba(var(--well), .24); border: 1px solid rgba(var(--ink), .14); outline: none; }
.nl-row input:focus { border-color: var(--gold); }
.newsletter .form-status { grid-column: 1 / -1; margin: -6px 0 0; min-height: 0; }
@media (max-width: 760px) { .newsletter { grid-template-columns: 1fr; } }
.legal-links { display: flex; gap: 14px; }
.legal-links a { color: var(--mist-3); text-decoration: none; }
.legal-links a:hover { color: var(--mist); }
.legal .cat-tabs { margin-bottom: 8px; }

/* video previews on cards */
.pcard-media { position: relative; }
.pcard-video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .4s; }
.pcard-video.on { opacity: 1; }
.pcard-play { position: absolute; right: 10px; bottom: 10px; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: rgba(10,14,40,.55); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); color: #fff; transition: opacity .3s; }
.pcard-play .ico { width: 12px; height: 12px; margin-left: 2px; }
.pcard-video.on + .pcard-play { opacity: 0; }

/* shop */
.shop-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 30px 20px; }
.product-card { display: grid; gap: 8px; text-decoration: none; }
.product-media { display: block; aspect-ratio: 4 / 3; border-radius: 18px; overflow: hidden; border: 1px solid var(--glass-edge); }
.product-card:hover .pic img { transform: scale(1.05); }
.product-info { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
.product-info b { font: 700 18px/1.25 var(--display); }
.price { flex: none; font: 800 18px var(--display); color: var(--gold-text); font-variant-numeric: tabular-nums; }
.product-card small { color: var(--mist-3); }
.product { padding-top: 120px; display: grid; gap: 22px; }
.product-layout { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); gap: clamp(18px, 3vw, 40px); align-items: start; }
.product-gallery { display: grid; gap: 10px; }
.product-main { border-radius: 22px; overflow: hidden; aspect-ratio: 4 / 3; }
.product-main .pic { height: 100%; }
.product-thumbs { display: flex; gap: 8px; overflow-x: auto; }
.product-thumbs button { flex: none; width: 96px; aspect-ratio: 4 / 3; border-radius: 10px; overflow: hidden; border: 1px solid var(--glass-edge); padding: 0; cursor: pointer; }
.product-thumbs img { width: 100%; height: 100%; object-fit: cover; }
.product-side { position: sticky; top: 90px; padding: clamp(20px, 3vw, 32px); border-radius: 24px; display: grid; gap: 14px; }
.product-title { font-size: clamp(28px, 3vw, 44px); line-height: 1; }
.product-price { margin: 0; font: 800 clamp(30px, 3vw, 40px) var(--display); color: var(--gold-text); }
.product-desc { margin: 0; font-size: 16px; max-width: none; }
.product-facts { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; font-size: 14px; }
.product-facts li { display: grid; grid-template-columns: 90px minmax(0, 1fr); gap: 10px; padding: 8px 0; border-top: 1px solid var(--line); }
.product-facts b { color: var(--mist-3); font-weight: 600; }
.product-licence { margin: 0; font-size: 13px; color: var(--mist-3); }
.product-licence a { color: var(--gold-text); }
.pay-safe { margin: 0; display: flex; align-items: center; justify-content: center; gap: 6px; font-size: 12.5px; color: var(--mist-3); }
.pay-safe .ico { width: 14px; height: 14px; }
.pay-form label em { font-style: normal; color: var(--mist-3); font-weight: 500; }
@media (max-width: 860px) { .product-layout { grid-template-columns: 1fr; } .product-side { position: static; } }

/* invoice / quote */
.invoice-wrap { padding-top: 110px; display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 20px; align-items: start; }
.invoice-actions { grid-column: 1 / -1; display: flex; justify-content: space-between; align-items: center; }
.pill-status { padding: 6px 14px; border-radius: 999px; font-weight: 800; font-size: 14px; background: rgba(242,181,68,.18); color: var(--gold-text); }
.pill-status.s-paid, .pill-status.s-accepted { background: rgba(61,220,132,.18); color: #3ddc84; }
.pill-status.s-cancelled { background: rgba(255,95,87,.18); color: #ff8f8f; }
.invoice { padding: clamp(22px, 4vw, 48px); border-radius: 26px; display: grid; gap: 26px; }
.inv-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px; }
.inv-logo { height: 54px; width: auto; }
.inv-title { text-align: right; }
.inv-title h1 { font-size: clamp(30px, 4vw, 48px); }
.inv-title span { color: var(--mist-3); font-weight: 700; font-variant-numeric: tabular-nums; }
.inv-parties { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; }
.inv-parties > div { display: grid; align-content: start; gap: 2px; font-size: 14px; }
.inv-parties small { color: var(--mist-3); font-weight: 700; text-transform: none; }
.inv-parties span { color: var(--mist-2); overflow-wrap: anywhere; }
.mt-s { margin-top: 8px; }
.inv-table-wrap { overflow-x: auto; }
.inv-table { width: 100%; border-collapse: collapse; font-size: 15px; min-width: 460px; }
.inv-table th { text-align: left; font-size: 13px; color: var(--mist-3); font-weight: 700; padding: 10px 8px; border-bottom: 1px solid var(--line); }
.inv-table td { padding: 12px 8px; border-bottom: 1px solid var(--line); }
.inv-table .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.inv-totals { justify-self: end; width: min(340px, 100%); display: grid; gap: 6px; font-variant-numeric: tabular-nums; }
.inv-totals > div { display: flex; justify-content: space-between; gap: 20px; color: var(--mist-2); }
.inv-totals .grand { padding-top: 8px; border-top: 1px solid var(--line); color: var(--mist); font-size: 18px; }
.inv-totals .grand b { font: 800 22px var(--display); }
.inv-totals .due b { color: var(--gold-text); }
.inv-notes { margin: 0; padding: 14px 16px; border-radius: 14px; background: rgba(var(--ink), .05); color: var(--mist-2); white-space: pre-wrap; }
.inv-terms { margin: 0; font-size: 13px; color: var(--mist-3); }
.inv-terms a { color: var(--gold-text); }
.invoice-side { display: grid; gap: 12px; position: sticky; top: 90px; }
.inv-pay, .inv-files { padding: 20px; border-radius: 20px; display: grid; gap: 10px; }
.inv-pay small { color: var(--mist-2); font-weight: 700; }
.inv-pay strong { font: 800 34px var(--display); font-variant-numeric: tabular-nums; }
.inv-files h3 { font-size: 18px; }
.inv-files p { margin: 0; color: var(--mist-2); font-size: 14px; display: flex; gap: 6px; }
.inv-files ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.inv-files li { display: flex; justify-content: space-between; align-items: center; gap: 10px; font-size: 14px; min-width: 0; }
.inv-files li > span:first-child { display: grid; min-width: 0; overflow-wrap: anywhere; }
.inv-files small { color: var(--mist-3); }
.lock { font-size: 12px; font-weight: 800; padding: 4px 10px; border-radius: 999px; background: rgba(var(--ink), .08); color: var(--mist-3); }
.accepted-note { margin: 0; padding: 14px; border-radius: 14px; background: rgba(61,220,132,.14); display: flex; gap: 8px; align-items: center; }
.accepted-note .ico { color: #3ddc84; fill: currentColor; }
@media (max-width: 900px) { .invoice-wrap { grid-template-columns: 1fr; } .invoice-side { position: static; } .inv-parties { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .inv-parties { grid-template-columns: 1fr; } .inv-head { flex-direction: column; } .inv-title { text-align: left; } }

/* Save as PDF: a clean white page */
@media print {
  #bg, .grain, .progress-line, .menubar, .dock, .to-top, .wa-bubble, .site-footer, .no-print, #curtain, .cursor-dot, .cursor-ring { display: none !important; }
  html, body { background: #fff !important; color: #111 !important; }
  #view { width: 100%; padding: 0; }
  .invoice-wrap { display: block; padding: 0; }
  .invoice { background: #fff !important; border: 0 !important; box-shadow: none !important; color: #111; -webkit-backdrop-filter: none; backdrop-filter: none; padding: 0; }
  .invoice * { color: #111 !important; border-color: #ddd !important; }
  .inv-notes { background: #f4f4f4 !important; }
  .inv-logo { filter: invert(1) brightness(.2); }
  a { text-decoration: none; }
}
.inv-pay strong { font-size: clamp(22px, 2.4vw, 28px); white-space: nowrap; }
.logo-item { height: clamp(34px, 4vw, 48px); }
.logo-item img { max-width: 260px; }
.newsletter { min-width: 0; }
.nl-row { flex-wrap: wrap; }
.nl-row input { flex: 1 1 180px; }
@media (max-width: 480px) { .nl-row .btn { flex: 1 1 100%; } }

/* ── Glow stage: small, old or tall pictures sit on a soft light made from their own colours ── */
.zoom.stage { position: relative; display: grid; place-items: center; isolation: isolate; overflow: hidden;
  padding: clamp(22px, 5vw, 72px); border-radius: var(--r-window); background: rgba(var(--ink), .03);
  border: 1px solid rgba(255,255,255,.08); }
.stage-glow { position: absolute; inset: -18%; z-index: -1; background: var(--amb) center / cover no-repeat;
  filter: blur(50px) saturate(1.6) brightness(.72); opacity: .8; transform: scale(1.1);
  animation: stage-breathe 9s ease-in-out infinite alternate; }
.zoom.stage::after { content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: radial-gradient(120% 90% at 50% 40%, transparent 40%, rgba(4,6,26,.55) 100%); }
.zoom.stage .pic { width: auto; max-width: 100%; height: auto; max-height: min(78vh, 980px); aspect-ratio: var(--ratio);
  border-radius: 14px; overflow: hidden;
  box-shadow: 0 40px 90px -30px rgba(0,0,0,.75), 0 0 0 1px rgba(255,255,255,.14), 0 0 60px -10px rgba(255,255,255,.08);
  transition: transform .8s var(--ease); }
.zoom.stage .pic img { border-radius: 0; height: 100%; width: 100%; object-fit: contain; }
.zoom.stage:hover .pic { transform: translateY(-4px) scale(1.01); }
@keyframes stage-breathe { from { transform: scale(1.1) translate(-2%, -1%); } to { transform: scale(1.18) translate(2%, 1%); } }
@media (prefers-reduced-motion: reduce) { .stage-glow { animation: none; } }
:root[data-theme="light"] .zoom.stage { background: rgba(255,255,255,.4); border-color: rgba(0,0,0,.06); }
:root[data-theme="light"] .zoom.stage::after { background: radial-gradient(120% 90% at 50% 40%, transparent 45%, rgba(255,255,255,.35) 100%); }
:root[data-theme="light"] .stage-glow { filter: blur(46px) saturate(1.5) brightness(1.1); opacity: .6; }

/* preloader safety net */
.pre-retry { margin-top: 26px; padding: 12px 20px; border-radius: 999px; border: 1px solid rgba(255,255,255,.25);
  background: rgba(255,255,255,.1); color: #fff; font: 600 14px/1 Manrope, system-ui, sans-serif; cursor: pointer; pointer-events: auto;
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }

/* ── Touch screens: no blue tap flash, a gentle press instead ── */
* { -webkit-tap-highlight-color: transparent; }
button, .btn, .tag, .dock a, .pcard, [data-link] { -webkit-touch-callout: none; }
button, .btn, .tag, .dock a { -webkit-user-select: none; user-select: none; }
@media (pointer: coarse) {
  button:active, .btn:active, .tag:active, .dock a:active, .pcard:active { transform: scale(.97); transition: transform .08s; }
  :focus:not(:focus-visible) { outline: none; }

  /* lighter on phones so scrolling stays smooth */
  .grain { display: none; }
  :root { --blur: blur(14px); }
  .stage-glow { animation: none; filter: blur(40px) saturate(1.4) brightness(.6); }
  .door-glow { opacity: .32; }

  /* smaller floating buttons so they don't cover the page */
  .wa-bubble { transform-origin: 0 100%; }
  .wa-bubble.show { transform: scale(.78); opacity: .95; }
  .to-top { transform-origin: 100% 100%; }
  .to-top.show { transform: scale(.78); }
}

/* ── Phone tab bar: five roomy tabs, "Work" opens a panel ── */
.dock-work { display: none; }
@media (max-width: 720px) {
  .dock { left: 10px; right: 10px; transform: none; max-width: none; justify-content: space-between; align-items: stretch;
    gap: 2px; padding: 6px; border-radius: 26px; bottom: calc(10px + env(safe-area-inset-bottom, 0px)); }
  .dock .dock-cat { display: none; }
  .dock a, .dock-work { flex: 1 1 0; min-width: 0; min-height: 58px; display: grid; align-content: center; justify-items: center; gap: 4px;
    padding: 4px 0; border: 0; background: none; color: inherit; font: inherit; cursor: pointer; border-radius: 20px; }
  .dock-ico { width: 52px; height: 32px; border-radius: 999px; transition: background .25s, transform .2s; }
  .dock-ico .ico { width: 23px; height: 23px; }
  .dock-label { font-size: 11.5px; letter-spacing: .01em; }
  .dock a.active .dock-ico, .dock-work.active .dock-ico, .dock-work[aria-expanded="true"] .dock-ico { background: rgba(var(--ink),.2); box-shadow: inset 0 1px 0 rgba(var(--ink),.25); }
  .dock a.active .dock-label, .dock-work.active .dock-label, .dock-work[aria-expanded="true"] .dock-label { color: var(--mist); }
  .dock-accent .dock-ico { width: 52px; }
  .dock-accent .dock-label { color: var(--gold-text); }
  .wa-bubble, .to-top { bottom: calc(96px + env(safe-area-inset-bottom, 0px)); }
}
.work-sheet { position: fixed; inset: 0; z-index: 59; }
.work-sheet[hidden] { display: none; }
.ws-backdrop { position: absolute; inset: 0; background: rgba(4, 6, 20, .55); opacity: 0; transition: opacity .3s; }
.ws-panel { position: absolute; left: 10px; right: 10px; bottom: calc(88px + env(safe-area-inset-bottom, 0px)); border-radius: 26px; padding: 8px 10px 10px;
  background: linear-gradient(160deg, rgba(var(--panel), .94), rgba(var(--panel), .86)); opacity: 0; transform: translateY(28px) scale(.98);
  transition: transform .4s var(--ease), opacity .25s; }
.work-sheet.open .ws-backdrop { opacity: 1; }
.work-sheet.open .ws-panel { opacity: 1; transform: none; }
.ws-grip { display: block; width: 40px; height: 4px; border-radius: 4px; background: rgba(var(--ink), .25); margin: 4px auto 10px; }
.ws-title { margin: 0 8px 10px; font-size: 12px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--mist-3); }
.ws-list { display: grid; gap: 8px; }
.ws-item { display: flex; align-items: center; gap: 14px; padding: 12px; border-radius: 18px; text-decoration: none; color: var(--mist);
  background: rgba(var(--ink), .05); border: 1px solid rgba(var(--ink), .08); transition: transform .15s, border-color .2s; }
.ws-item:active { transform: scale(.98); }
.ws-item.active { border-color: var(--c1); background: rgba(var(--ink), .09); }
.ws-ico { display: grid; place-items: center; width: 48px; height: 48px; flex: none; border-radius: 15px; color: #fff;
  background: linear-gradient(135deg, var(--c1), var(--c2)); box-shadow: 0 10px 22px -10px var(--c1); }
.ws-ico .ico { width: 23px; height: 23px; }
.ws-text { display: grid; gap: 3px; flex: 1; min-width: 0; }
.ws-text b { font-size: 16px; font-weight: 800; }
.ws-text small { font-size: 12.5px; color: var(--mist-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ws-item > .ico { width: 18px; height: 18px; color: var(--mist-3); flex: none; }

/* very small phones: a tighter top bar, and the page can never be pushed sideways */
html, body { overflow-x: clip; }
@media (max-width: 370px) {
  .menubar { padding-inline: 8px; gap: 6px; }
  .menubar-right { gap: 4px; }
  #soundBtn { display: none; }
  .menubar-cta { padding-inline: 12px; font-size: 13px; }
  .dock-label { font-size: 10.5px; }
  .dock-ico { width: 44px; }
}
@media (max-width: 720px) {
  .dock a:not(.active):not(.dock-accent) .dock-ico, .dock-work:not(.active):not([aria-expanded="true"]) .dock-ico { background: transparent; box-shadow: none; }
}

/* ── "Glass blur" switched off (admin → Look & speed) ──
   Live blur has to be redrawn behind every moving card on each scroll step, which makes
   scrolling heavy on phones. With it off, panels get a rich, slightly see-through tint instead. */
html.no-glass .glass, html.no-glass .work-tools, html.no-glass .pcard-cat, html.no-glass .to-top, html.no-glass .fx-menu, html.no-glass .share-panel, html.no-glass .pre-retry, html.no-glass .tag, html.no-glass .pcard-play, html.no-glass .cmp-label, html.no-glass .btn-glass {
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
html.no-glass .tag { background: rgba(var(--panel), .82); }
html.no-glass .btn-glass { background: rgba(var(--ink), .14); }
html.no-glass .glass { background: linear-gradient(160deg, rgba(var(--panel), .86), rgba(var(--panel), .72)); }
html.no-glass .ws-panel.glass { -webkit-backdrop-filter: blur(12px) !important; backdrop-filter: blur(12px) !important; }
html.no-glass .menubar.glass, html.no-glass .dock.glass { background: linear-gradient(160deg, rgba(var(--panel), .985), rgba(var(--panel), .96)); }
html.no-glass .work-tools { background: rgba(var(--panel), .92); }
html.no-glass .pcard-cat { background: rgba(var(--panel), .85); }
html.no-glass .to-top { background: rgba(var(--panel), .9); }
html.no-glass .fx-menu { background: rgba(var(--panel), .97); }
/* big soft shadows cost a lot to paint on phones */
html.no-glass .glass { box-shadow: inset 0 1px 0 var(--glass-hi), 0 12px 28px -18px var(--shadow); }

/* ── iOS-style switch (admin Look & speed, preview panel) ── */
.sw { position: relative; display: inline-block; width: 50px; height: 30px; flex: none; }
.sw input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; z-index: 1; }
.sw i { position: absolute; inset: 0; border-radius: 999px; background: rgba(var(--ink), .18); transition: background .25s; pointer-events: none; }
.sw i::after { content: ""; position: absolute; top: 3px; left: 3px; width: 24px; height: 24px; border-radius: 50%; background: #fff;
  box-shadow: 0 2px 6px rgba(0,0,0,.35); transition: transform .28s var(--ease); }
.sw input:checked + i { background: #34c759; }
.sw input:checked + i::after { transform: translateX(20px); }
.sw input:focus-visible + i { outline: 2px solid var(--gold); outline-offset: 2px; }
.look-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
.look-card { border-radius: 16px; padding: 14px; background: rgba(var(--ink), .05); border: 1px solid rgba(var(--ink), .1); display: grid; gap: 4px; }
.look-head { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; font-size: 15px; }
.look-head svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; }
.look-row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 10px 2px; border-top: 1px solid rgba(var(--ink), .08); cursor: pointer; }
.look-row > span:first-child { display: grid; gap: 2px; }
.look-row b { font-size: 14px; }
.look-row small { font-size: 12px; color: var(--mist-3); line-height: 1.4; }
.look-pop { position: fixed; z-index: 70; top: calc(78px + env(safe-area-inset-top, 0px)); right: max(10px, calc((100vw - var(--max)) / 2));
  width: min(560px, calc(100vw - 20px)); max-height: calc(100dvh - 190px); overflow: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; border-radius: 22px; padding: 14px;
  background: linear-gradient(160deg, rgba(var(--panel), .97), rgba(var(--panel), .93)); box-shadow: 0 30px 60px -20px rgba(0,0,0,.6); }
.look-pop[hidden] { display: none; }
.look-pop-head { display: grid; grid-template-columns: 1fr auto; gap: 2px 10px; margin: 2px 4px 12px; }
.look-pop-head small { grid-column: 1; color: var(--mist-3); font-size: 12.5px; }
.look-x { grid-row: 1 / span 2; grid-column: 2; width: 34px; height: 34px; border-radius: 10px; border: 0; background: rgba(var(--ink), .1); color: var(--mist); cursor: pointer; }
.look-card.this { border-color: var(--gold); }
.pill-now { margin-left: auto; font-size: 11px; font-weight: 800; padding: 3px 8px; border-radius: 999px; background: var(--gold); color: var(--gold-ink); }
.look-pop.glass, html.no-glass .look-pop.glass { background: rgba(var(--panel), .985); }
/* keep active states visible when glass blur is off */
html.no-glass .to-top.at-end { background: linear-gradient(135deg, #ffcf6e, var(--gold) 55%, #e39a2b); color: var(--gold-ink); }
html.no-glass .tag.is-on { background: var(--mist); color: var(--night); border-color: var(--mist); }
html.no-glass .btn-glass:hover { background: rgba(var(--ink), .2); }
@media (max-width: 720px) { .site-footer { padding-bottom: calc(170px + env(safe-area-inset-bottom, 0px)); } }

/* ── Brand wall: two rows drifting in opposite directions; logos light up in colour mid-screen ── */
.lw { display: grid; gap: clamp(12px, 1.6vw, 18px); margin-inline: calc(-1 * var(--gutter)); margin-top: 28px;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); }
.lw-row { overflow: hidden; padding: 14px 0; }
.lw-track { display: flex; gap: clamp(12px, 1.6vw, 18px); width: max-content; animation: lw var(--dur, 60s) linear infinite; will-change: transform; }
.lw-row.rev .lw-track { animation-direction: reverse; }
.lw:hover .lw-track { animation-play-state: paused; }
@keyframes lw { to { transform: translateX(calc(-50% - clamp(6px, .8vw, 9px))); } }
.lw-tile { --acc: #9fb4ff; position: relative; flex: none; display: grid; place-items: center; width: clamp(150px, 15vw, 210px); aspect-ratio: 16 / 9;
  border-radius: 20px; overflow: hidden; text-decoration: none; cursor: pointer; outline: none;
  background: linear-gradient(160deg, rgba(var(--ink), .07), rgba(var(--ink), .025)); border: 1px solid rgba(var(--ink), .09);
  transition: transform .6s var(--ease), border-color .6s, box-shadow .6s, background .6s; }
.lw-tile img { position: absolute; inset: 0; margin: auto; max-width: 74%; max-height: 62%; width: auto; height: auto; object-fit: contain; transition: opacity .6s ease, transform .6s var(--ease); }
.lw-mono { opacity: .72; }
.lw-mono-f { filter: brightness(0) invert(1); }
.lw-color { opacity: 0; transform: scale(.94); }
.lw-sweep { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(105deg, transparent 35%, rgba(255,255,255,.28) 50%, transparent 65%); transform: translateX(-120%); }
.lw-tile.lit, .lw-tile:hover, .lw-tile:focus-visible, .lw-tile.tap {
  transform: translateY(-5px) scale(1.05); border-color: color-mix(in srgb, var(--acc) 60%, transparent);
  background: radial-gradient(120% 90% at 50% 115%, color-mix(in srgb, var(--acc) 34%, transparent), transparent 70%), linear-gradient(160deg, rgba(var(--ink), .1), rgba(var(--ink), .04));
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--acc) 35%, transparent), 0 22px 48px -20px color-mix(in srgb, var(--acc) 80%, transparent); }
.lw-tile.lit .lw-mono, .lw-tile:hover .lw-mono, .lw-tile:focus-visible .lw-mono, .lw-tile.tap .lw-mono { opacity: 0; transform: scale(1.04); }
.lw-tile.lit .lw-color, .lw-tile:hover .lw-color, .lw-tile:focus-visible .lw-color, .lw-tile.tap .lw-color { opacity: 1; transform: none; }
.lw-tile.lit .lw-sweep, .lw-tile:hover .lw-sweep, .lw-tile.tap .lw-sweep { animation: lw-sweep 1.1s var(--ease) both; }
@keyframes lw-sweep { to { transform: translateX(120%); } }
.lw-count { margin: 8px 0 0; color: var(--mist-3); font-size: 14px; letter-spacing: .02em; }
.lw-count b { color: var(--gold-text); font-size: 18px; margin-right: 2px; }
:root[data-theme="light"] .lw-mono:not(.lw-mono-f) { filter: brightness(0); opacity: .55; }
:root[data-theme="light"] .lw-mono-f { filter: brightness(0); opacity: .55; }
:root[data-theme="light"] .lw-tile { background: rgba(255,255,255,.55); border-color: rgba(0,0,0,.06); }
:root[data-theme="light"] .lw-tile.lit, :root[data-theme="light"] .lw-tile:hover { background: radial-gradient(120% 90% at 50% 115%, color-mix(in srgb, var(--acc) 25%, transparent), transparent 70%), #0b1030; }
@media (prefers-reduced-motion: reduce) { .lw-track { animation: none; flex-wrap: wrap; width: auto; justify-content: center; } }
@media (max-width: 720px) { .lw-tile { width: 150px; border-radius: 16px; } }

/* ── Intro logo reveal (js/intro.js) ── */
#preloader.intro { background: #04061a; overflow: hidden; }
.intro-cv { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
#preloader.intro .pre-inner { position: relative; z-index: 1; align-self: end; margin-bottom: max(13vh, 90px); pointer-events: none; }
#preloader.intro #preLogo, #preloader.intro .pre-count { display: none; }
#preloader.intro .pre-line { opacity: 0; color: #dfe6ff; font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: .6em; text-align: center;
  animation: intro-name 1s var(--ease) forwards; animation-delay: calc(var(--hit, 1s) + .3s); }
@keyframes intro-name { to { opacity: 1; letter-spacing: .24em; } }
#preloader.intro::after { content: ""; position: absolute; left: calc(50% - 60px); bottom: max(7vh, 50px); width: 120px; height: 2px; border-radius: 2px;
  background: linear-gradient(90deg, var(--gold), #8aa4ff); transform-origin: 0 50%; transform: scaleX(var(--p, 0)); opacity: .8; }
@property --hole { syntax: "<percentage>"; inherits: false; initial-value: 0%; }
#preloader.intro-out { -webkit-mask: radial-gradient(circle at 50% 46%, transparent var(--hole), #000 calc(var(--hole) + .6%));
  mask: radial-gradient(circle at 50% 46%, transparent var(--hole), #000 calc(var(--hole) + .6%)); animation: intro-hole .8s cubic-bezier(.7, 0, .3, 1) forwards; }
#preloader.intro-out::after, #preloader.intro-out .pre-inner { opacity: 0; transition: opacity .2s; }
@keyframes intro-hole { to { --hole: 125%; } }
#preloader > .pre-retry { position: absolute; left: 50%; bottom: 18vh; transform: translateX(-50%); z-index: 2; }
.look-replay { margin: 12px 4px 2px; }
html.intro-pending #preloader { background: #04061a; }
html.intro-pending #preloader:not(.intro) .pre-inner { visibility: hidden; }
html.intro-pending #preloader:not(.intro)::before { content: ""; position: absolute; left: 50%; top: 46%; width: 60vmin; height: 60vmin; transform: translate(-50%, -50%);
  border-radius: 50%; background: radial-gradient(circle, rgba(120,140,255,.35), rgba(58,76,220,.12) 45%, transparent 70%); animation: intro-wait 1.6s ease-in-out infinite alternate; }
@keyframes intro-wait { from { opacity: .5; transform: translate(-50%, -50%) scale(.9); } to { opacity: 1; transform: translate(-50%, -50%) scale(1.05); } }

/* ── Videos inside mockup screens ── */
.mockv { position: relative; width: 100%; overflow: hidden; border-radius: var(--r-window); background: #070a1c; }
.mockv-base { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.mockv-screen { position: absolute; overflow: hidden; -webkit-mask-size: 100% 100%; mask-size: 100% 100%; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; }
.mockv-screen video { position: absolute; left: 0; top: 0; transform-origin: 0 0; object-fit: cover; background: #000; max-width: none; border-radius: 0; }
.mockv-glass { position: absolute; pointer-events: none; mix-blend-mode: screen; opacity: .55; }
.mockv-sound { position: absolute; right: 14px; bottom: 14px; width: 40px; height: 40px; border-radius: 50%; border: 1px solid rgba(255,255,255,.2);
  background: rgba(7,10,28,.6); color: #fff; display: grid; place-items: center; cursor: pointer; }
.mockv-sound .ico { width: 18px; height: 18px; }

/* ── 3D models on a lit studio stage ── */
.model-window .stage { background:
  radial-gradient(55% 45% at 50% 30%, rgba(255,228,200,.16), transparent 70%),
  radial-gradient(70% 30% at 50% 100%, rgba(58,108,240,.30), transparent 72%),
  radial-gradient(40% 25% at 85% 90%, rgba(242,181,68,.14), transparent 70%),
  linear-gradient(180deg, #10163a, #080b20 70%); }
.model-window .stage::after { content: ""; position: absolute; left: 12%; right: 12%; bottom: 9%; height: 16%; pointer-events: none;
  background: radial-gradient(50% 50% at 50% 50%, rgba(160,180,255,.10), transparent 70%); border-radius: 50%; }
:root[data-theme="light"] .model-window .stage { background: radial-gradient(55% 45% at 50% 30%, rgba(255,255,255,.9), transparent 70%), linear-gradient(180deg, #e9ecf7, #d4d9ec); }

/* ───────── Smart glass (speed) ─────────
   Real blur is only paid for where something sharp can pass behind the glass: the floating
   bars, dock, pop-ups and windows over content. Panels that sit on the soft moving light get
   the same frosted look from a tint (blurring an already-soft background changes nothing you can see),
   so the phone doesn't redraw a blur behind every card on every scroll step. */
.tagbar .tag, .work-tools .btn-glass, .glass .btn-glass { -webkit-backdrop-filter: none; backdrop-filter: none; }
/* colour boost without the blur: keeps the glow of the light showing through, at a fraction of the cost */
.glass:not(:is(.menubar, .dock, .ws-panel, .sp-panel, .lb-bar, .rv-panel, .pay-window, .reel-window, .hero-badge, .look-pop)) {
  -webkit-backdrop-filter: saturate(170%); backdrop-filter: saturate(170%);
}
/* phones: panels on the light need no see-through work at all */
@media (pointer: coarse) {
  .glass:not(:is(.menubar, .dock, .ws-panel, .sp-panel, .lb-bar, .rv-panel, .pay-window, .reel-window, .hero-badge, .look-pop)) { -webkit-backdrop-filter: none; backdrop-filter: none; }
}
.glass:not(:is(.menubar, .dock, .ws-panel, .sp-panel, .lb-bar, .rv-panel, .pay-window, .reel-window, .hero-badge, .look-pop)) {
  background: linear-gradient(160deg, var(--glass-strong), var(--glass) 55%);
}
/* floating glass keeps its real blur, and gets its own layer so scrolling doesn't repaint it */
.menubar, .dock, .work-tools, .to-top { will-change: transform; }

/* ───────── Scroll effects run by the browser itself (speed) ─────────
   Same effects as the GSAP versions, but tied to scrolling by the browser, off the main thread,
   so they stay smooth on phones. Older browsers keep the GSAP versions. */
@supports (animation-timeline: view()) {
  .sd-parallax { animation: sdPar linear both; animation-timeline: view(); animation-range: cover; }
  @keyframes sdPar { from { transform: translateY(-8%) scale(1.16); } to { transform: translateY(8%) scale(1.16); } }

  .sd-grow { animation: sdGrow linear both; animation-timeline: view(); animation-range: cover 0% cover 75vh; }
  @keyframes sdGrow { from { transform: scale(.86); border-radius: 40px; } to { transform: none; border-radius: 22px; } }

  .sd-words .word { display: inline-block; animation: sdWord linear both; animation-timeline: view(); animation-range: cover 20vh cover 55vh; }
  @keyframes sdWord { from { opacity: .16; } to { opacity: 1; } }

  .sd-rise { animation: sdRise linear both; animation-timeline: view(); animation-range: entry; }
  @keyframes sdRise { from { transform: translateY(40%); } to { transform: none; } }

  .sd-door { view-timeline: --door block; }
  .sd-door .fan img { animation: sdFan linear both; animation-timeline: --door; animation-range: cover 0% cover 50%; }
  .sd-door .fan img:nth-child(1) { --fx: -26px; --fr: -7deg; }
  .sd-door .fan img:nth-child(2) { --fx: 0px; --fr: 0deg; }
  .sd-door .fan img:nth-child(3) { --fx: 26px; --fr: 7deg; }
  @keyframes sdFan { from { transform: translateY(30px); } to { transform: rotate(var(--fr)) translateX(var(--fx)); } }

  .sd-hero { view-timeline: --hero block; }
  .sd-hero .hero-name .w, .sd-hero .hero-window, .sd-hero .hero-sub { animation-timeline: --hero; animation-range: exit; animation-fill-mode: both; animation-timing-function: linear; }
  .sd-hero .hero-name .w:nth-of-type(odd) { animation-name: sdHeroA; }
  .sd-hero .hero-name .w:nth-of-type(even) { animation-name: sdHeroB; }
  .sd-hero .hero-window { animation-name: sdHeroWin; }
  .sd-hero .hero-sub { animation-name: sdHeroSub; }
  @keyframes sdHeroA { to { transform: translateY(-80%); opacity: .1; } }
  @keyframes sdHeroB { to { transform: translateY(-40%); opacity: .1; } }
  @keyframes sdHeroWin { to { transform: perspective(1200px) translateY(-18%) rotateX(8deg) scale(.94); } }
  @keyframes sdHeroSub { to { transform: translateY(-60px); opacity: 0; } }
  @media (hover: hover) and (pointer: fine) {
    @keyframes sdHeroA { to { transform: translateY(-80%); opacity: .1; filter: blur(6px); } }
    @keyframes sdHeroB { to { transform: translateY(-40%); opacity: .1; filter: blur(6px); } }
  }
  .sd-hero .hero-name .w { display: inline-block; }
}
html.lite-motion :is(.sd-parallax, .sd-grow, .sd-rise, .sd-words .word, .sd-door .fan img, .sd-hero .hero-name .w, .sd-hero .hero-window, .sd-hero .hero-sub) { animation: none !important; }

/* ───────── Automatic quality (quality.js) ─────────
   Slower devices keep every effect, just drawn softer and cheaper. */
@media (hover: hover) and (pointer: fine) { html[data-q="1"] { --blur: saturate(170%) blur(18px); } }
html[data-q="0"] { --blur: saturate(150%) blur(10px); }
html[data-q="0"] :is(.fx-menu, .share-panel) { -webkit-backdrop-filter: saturate(160%) blur(12px); backdrop-filter: saturate(160%) blur(12px); }
html[data-q="0"] :is(.work-tools, .to-top) { -webkit-backdrop-filter: saturate(150%) blur(10px); backdrop-filter: saturate(150%) blur(10px); }
html[data-q="0"] .grain { display: none; }

/* ───────── Skip drawing what's far off-screen (speed) ─────────
   The browser lays out and paints these only when you scroll near them. */
.site-footer { content-visibility: auto; contain-intrinsic-size: auto 720px; }
.pgrid .pcard { content-visibility: auto; contain-intrinsic-size: auto 340px; }

/* ───────── Quick pay link (a friend paying for a small job) ───────── */
.qpay-wrap { min-height: calc(100svh - 80px); display: grid; place-content: center; justify-items: center; gap: 14px; padding: calc(96px + env(safe-area-inset-top, 0px)) 16px 140px; }
.qpay { width: min(440px, calc(100vw - 32px)); display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; justify-items: center; text-align: center; padding: 30px 24px 22px; border-radius: 28px; }
.qpay-logo { height: 34px; width: auto; margin-bottom: 4px; }
.qpay-hi { margin: 0; font-family: var(--display); font-size: 26px; font-weight: 800; letter-spacing: -.02em; }
.qpay-from { margin: -8px 0 0; color: var(--mist-3); font-size: 14px; }
.qpay-amount { display: grid; gap: 2px; padding: 18px 22px; width: 100%; border-radius: 20px; background: rgba(var(--ink), .06); border: 1px solid rgba(var(--ink), .1); }
.qpay-amount small { color: var(--mist-3); font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.qpay-amount strong { font-family: var(--display); font-size: min(50px, calc(min(330px, 100vw - 130px) / var(--n, 7) * 1.15)); line-height: 1.1; white-space: nowrap; font-weight: 800; letter-spacing: -.03em; color: var(--gold-text); font-variant-numeric: tabular-nums; }
.qpay.is-paid .qpay-amount strong { color: #34d399; }
.qpay-for { margin: 0; display: grid; gap: 2px; font-size: 17px; font-weight: 600; }
.qpay-for small { color: var(--mist-3); font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.qpay-note { margin: 0; color: var(--mist-2); font-size: 14px; line-height: 1.55; }
.qpay .btn-lg { margin-top: 4px; }
.qpay .pay-safe { margin: -4px 0 0; }
.qpay-done { display: grid; justify-items: center; gap: 4px; padding: 14px; width: 100%; border-radius: 18px; background: rgba(52, 211, 153, .12); color: #34d399; }
.qpay-done .ico { width: 26px; height: 26px; }
.qpay-done span { color: var(--mist-2); font-size: 14px; }
.qpay-files { display: grid; gap: 8px; width: 100%; min-width: 0; }
.qpay-files .btn { min-width: 0; max-width: 100%; }
.qpay-files .btn span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qpay-wa { display: inline-flex; align-items: center; gap: 8px; color: var(--mist-2); font-size: 14px; text-decoration: none; }
.qpay-wa:hover { color: var(--mist); }
.qpay-ref { margin: 0; color: var(--mist-3); font-size: 12.5px; }
.qpay-ref a { color: inherit; }

.look-demo-row { display: flex; flex-wrap: wrap; gap: 8px; }

/* ── Motions for designs (js/gmotion.js), chosen per picture in Admin → 🎬 Motion ── */
.pic.gm { position: relative; isolation: isolate; }
.gm .gm-l { position: absolute; inset: 0; display: block; pointer-events: none; }
.gm.gm-on img, .gm.gm-wait img { transition: none; }
.gm-wait[data-gm="slices"] img, .gm-wait[data-gm="glitch"] img, .gm-wait[data-gm="doors"] img,
.gm-wait[data-gm="stack"] img, .gm-wait[data-gm="wipe"] img, .gm-wait[data-gm="particles"] img { opacity: 0 !important; }
.gm-wait[data-gm="drop"] { opacity: 0; }
@keyframes gm-show { from { opacity: 0; } to { opacity: 1; } }
@keyframes gm-fadein { from { opacity: 0; } to { opacity: 1; } }
@keyframes gm-hide { to { opacity: 0; visibility: hidden; } }

/* 1 Light sweep */
.gm-shine { z-index: 2; mix-blend-mode: screen; background: linear-gradient(105deg, transparent 38%, rgba(255,255,255,.06) 44%, rgba(255,250,235,.5) 50%, rgba(255,255,255,.06) 56%, transparent 62%) 160% 0 / 250% 100% no-repeat; }
.gm-on[data-gm="sweep"] img { animation: gm-pop .9s var(--ease) both; }
.gm-on[data-gm="sweep"] .gm-shine { animation: gm-sweep 5s .2s cubic-bezier(.45, 0, .25, 1) infinite; }
@keyframes gm-sweep { 0% { background-position: 160% 0; } 28%, 100% { background-position: -60% 0; } }
@keyframes gm-pop { from { opacity: .35; transform: scale(1.05); } to { opacity: 1; transform: none; } }

/* 2 3D float */
.gm[data-gm="tilt"] { transform: perspective(1100px) rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg)); transition: transform .5s var(--ease); box-shadow: 0 34px 60px -34px rgba(0,0,0,.65); }
.gm-on[data-gm="tilt"] { animation: gm-tilt-in 1.1s var(--ease) backwards; }
.gm-on[data-gm="tilt"] img { animation: gm-float 6s 1.1s ease-in-out infinite; }
.gm-glare { z-index: 2; mix-blend-mode: soft-light; opacity: 0; transition: opacity .4s; background: radial-gradient(circle at var(--gx, 30%) var(--gy, 20%), rgba(255,255,255,.55), transparent 50%); }
.gm-on .gm-glare { opacity: 1; }
@keyframes gm-tilt-in { from { opacity: 0; transform: perspective(1100px) rotateX(24deg) translateY(8%) scale(.94); } }
@keyframes gm-float { 0%, 100% { transform: scale(1.035) translateY(0); } 50% { transform: scale(1.035) translateY(-1.1%) rotate(.3deg); } }

/* 3 Slice reveal */
.gm .gm-l.gm-sl { right: auto; opacity: 0; background-image: var(--gm-src); background-repeat: no-repeat; --dir: -105%; }
.gm .gm-l.gm-sl:nth-of-type(even) { --dir: 105%; }
.gm-on[data-gm="slices"] .gm-sl { opacity: 1; animation: gm-slice .85s calc(var(--k) * .075s) cubic-bezier(.7, 0, .2, 1) both, gm-hide 0s 1.25s forwards; }
.gm-on[data-gm="slices"] img { animation: gm-show 0s 1.2s both; }
@keyframes gm-slice { from { transform: translateY(var(--dir)); } to { transform: none; } }

/* 4 Paper drop */
.gm-on[data-gm="drop"] { transform-origin: 50% 100%; animation: gm-drop 1.15s cubic-bezier(.3, .7, .2, 1) both; }
@keyframes gm-drop {
  0% { opacity: 0; transform: translateY(-16%) rotate(-5deg) scale(1.08); box-shadow: 0 90px 90px -40px rgba(0,0,0,0); }
  55% { opacity: 1; transform: translateY(1.2%) rotate(.8deg) scale(1); }
  76% { transform: translateY(-.6%) rotate(-.3deg); }
  100% { transform: none; box-shadow: 0 30px 50px -30px rgba(0,0,0,.55); } }

/* 5 Glitch */
.gm-g1, .gm-g2 { z-index: 2; opacity: 0; mix-blend-mode: screen; background: var(--gm-src) center / 100% 100% no-repeat; background-blend-mode: multiply; }
.gm-g1 { background-color: #ff2d6f; }
.gm-g2 { background-color: #29e0ff; }
.gm-on[data-gm="glitch"] img { animation: gm-gl .9s steps(1, end) both, gm-gl-again 6s 1.6s steps(1, end) infinite; }
.gm-on[data-gm="glitch"] .gm-g1 { animation: gm-gl-r .9s steps(1, end) both, gm-gl-r-again 6s 1.6s steps(1, end) infinite; }
.gm-on[data-gm="glitch"] .gm-g2 { animation: gm-gl-c .9s steps(1, end) both, gm-gl-c-again 6s 1.6s steps(1, end) infinite; }
@keyframes gm-gl {
  0% { opacity: 0; } 8% { opacity: 1; transform: translateX(-3%); clip-path: inset(12% 0 58% 0); }
  18% { transform: translateX(2.5%); clip-path: inset(42% 0 22% 0); } 28% { transform: none; clip-path: none; opacity: .55; }
  40% { transform: translateX(-1.6%); clip-path: inset(70% 0 6% 0); opacity: 1; } 52% { transform: translateX(1%); clip-path: inset(0 0 80% 0); }
  64%, 100% { transform: none; clip-path: none; opacity: 1; } }
@keyframes gm-gl-r { 0% { opacity: 0; } 8% { opacity: .8; transform: translateX(-4%); clip-path: inset(30% 0 40% 0); } 30% { transform: translateX(-2%); clip-path: inset(55% 0 20% 0); } 52% { transform: translateX(-1%); clip-path: none; opacity: .5; } 66%, 100% { opacity: 0; transform: none; clip-path: none; } }
@keyframes gm-gl-c { 0% { opacity: 0; } 8% { opacity: .8; transform: translateX(4%); clip-path: inset(5% 0 70% 0); } 30% { transform: translateX(2%); clip-path: inset(20% 0 50% 0); } 52% { transform: translateX(1%); clip-path: none; opacity: .5; } 66%, 100% { opacity: 0; transform: none; clip-path: none; } }
@keyframes gm-gl-again { 0%, 95% { transform: none; clip-path: none; } 96% { transform: translateX(-1.5%); clip-path: inset(30% 0 48% 0); } 97.5% { transform: translateX(1.2%); clip-path: inset(62% 0 12% 0); } 99%, 100% { transform: none; clip-path: none; } }
@keyframes gm-gl-r-again { 0%, 95% { opacity: 0; transform: none; } 96% { opacity: .7; transform: translateX(-2.5%); } 98%, 100% { opacity: 0; transform: none; } }
@keyframes gm-gl-c-again { 0%, 95% { opacity: 0; transform: none; } 96.5% { opacity: .7; transform: translateX(2.5%); } 98.5%, 100% { opacity: 0; transform: none; } }

/* 6 Cinematic zoom */
.gm-on[data-gm="kenburns"] img { transform-origin: 40% 40%; animation: gm-kb-in 1.4s var(--ease) both, gm-kb 14s 1.4s ease-in-out infinite alternate; }
@keyframes gm-kb-in { from { opacity: .25; transform: scale(1.32); } to { opacity: 1; transform: scale(1.08); } }
@keyframes gm-kb { from { transform: scale(1.08); } to { transform: scale(1.18) translate(-3%, -2%); } }

/* 7 Folding doors */
.gm-dl, .gm-dr { z-index: 2; width: 50.2%; opacity: 0; background: var(--gm-src) no-repeat; background-size: 200% 100%; }
.gm-dl { right: auto !important; background-position: 0 0; transform-origin: 0 50%; }
.gm-dr { left: auto !important; background-position: 100% 0; transform-origin: 100% 50%; }
.gm-on[data-gm="doors"] .gm-dl { animation: gm-door-l 1.05s cubic-bezier(.2, .8, .2, 1) both, gm-hide 0s 1.1s forwards; }
.gm-on[data-gm="doors"] .gm-dr { animation: gm-door-r 1.05s .08s cubic-bezier(.2, .8, .2, 1) both, gm-hide 0s 1.18s forwards; }
.gm-on[data-gm="doors"] img { animation: gm-show 0s 1.1s both; }
@keyframes gm-door-l { from { opacity: 1; transform: perspective(1200px) rotateY(-96deg); filter: brightness(.35); } to { opacity: 1; transform: perspective(1200px) rotateY(0); filter: none; } }
@keyframes gm-door-r { from { opacity: 1; transform: perspective(1200px) rotateY(96deg); filter: brightness(.35); } to { opacity: 1; transform: perspective(1200px) rotateY(0); filter: none; } }

/* 8 Poster stack */
.gm[data-gm="stack"] img { position: relative; z-index: 3; }
.gm-s1, .gm-s2 { opacity: 0; background: var(--gm-src) center / cover no-repeat; filter: brightness(.5) saturate(.85); }
.gm-s1 { z-index: 1; } .gm-s2 { z-index: 2; }
.gm-on[data-gm="stack"] .gm-s1 { animation: gm-st1 .7s cubic-bezier(.2, .8, .2, 1) both; }
.gm-on[data-gm="stack"] .gm-s2 { animation: gm-st2 .7s .18s cubic-bezier(.2, .8, .2, 1) both; }
.gm-on[data-gm="stack"] img { animation: gm-st3 .85s .4s cubic-bezier(.2, .8, .2, 1) both; }
@keyframes gm-st1 { from { opacity: 0; transform: translate(-60%, 10%) rotate(-12deg); } to { opacity: 1; transform: translate(-2%, 1%) rotate(-3deg) scale(.96); } }
@keyframes gm-st2 { from { opacity: 0; transform: translate(60%, -8%) rotate(14deg); } to { opacity: 1; transform: translate(2%, -1%) rotate(2.5deg) scale(.97); } }
@keyframes gm-st3 { from { opacity: 0; transform: translateY(42%) rotate(-4deg) scale(1.1); } to { opacity: 1; transform: none; } }

/* 9 Light wipe */
.gm-on[data-gm="wipe"]:not(.gm-done) img { -webkit-mask: linear-gradient(100deg, #000 40%, transparent 60%) 100% 0 / 300% 100% no-repeat; mask: linear-gradient(100deg, #000 40%, transparent 60%) 100% 0 / 300% 100% no-repeat;
  animation: gm-wipe 1.35s cubic-bezier(.6, 0, .2, 1) both; }
.gm-beam { z-index: 2; opacity: 0; mix-blend-mode: screen; background: linear-gradient(100deg, transparent 46%, rgba(255,240,200,.15) 48%, rgba(255,245,220,.95) 50%, rgba(255,240,200,.15) 52%, transparent 54%) 100% 0 / 300% 100% no-repeat; }
.gm-on[data-gm="wipe"] .gm-beam { animation: gm-wipe-beam 1.35s cubic-bezier(.6, 0, .2, 1) both; }
@keyframes gm-wipe { from { -webkit-mask-position: 100% 0; mask-position: 100% 0; } to { -webkit-mask-position: 0 0; mask-position: 0 0; } }
@keyframes gm-wipe-beam { 0% { opacity: 1; background-position: 100% 0; } 85% { opacity: 1; } 100% { opacity: 0; background-position: 0 0; } }

/* 10 Particles */
.gm-cv { z-index: 2; width: 100%; height: 100%; opacity: 0; }
.gm-on[data-gm="particles"] .gm-cv { opacity: 1; animation: gm-hide .45s 1.75s forwards; }
.gm-on[data-gm="particles"] img { animation: gm-fadein .5s 1.55s both; }
.gm-on.gm-nopx[data-gm="particles"] img { animation: gm-pop 1s var(--ease) both; }
.gm-nopx .gm-cv { display: none; }

@media (prefers-reduced-motion: reduce) {
  .gm .gm-l { display: none; }
  .gm, .gm img { animation: none !important; transform: none !important; opacity: 1 !important; }
}

/* ═════════ Colour themes (js/palettes.js), chosen per device in Admin → Look & speed ═════════ */
:root[data-palette="royal"]:not([data-theme="light"]) {
  --night: #0d0620; --panel: 30, 13, 65; --panel-solid: #220f48;
  --menu-a: rgba(49, 22, 101, .96); --menu-b: rgba(26, 12, 57, .97);
  --pre-glow: #291257; --curtain-bg: #13082b; --shadow: rgba(13, 6, 32, .7);
  --indigo: #6b2fd6; --dusk: #b03fd9;
}
:root[data-palette="royal"]:not([data-theme="light"]) body {
  background:
    radial-gradient(50vw 50vw at 10% 0%, rgba(107,47,214,.55), transparent 70%),
    radial-gradient(45vw 45vw at 95% 30%, rgba(176,63,217,.45), transparent 70%),
    radial-gradient(40vw 40vw at 40% 100%, rgba(224,69,123,.25), transparent 70%),
    var(--night);
  background-attachment: fixed;
}
:root[data-palette="emerald"]:not([data-theme="light"]) {
  --night: #03140f; --panel: 5, 42, 32; --panel-solid: #062f24;
  --menu-a: rgba(8, 67, 51, .96); --menu-b: rgba(5, 37, 28, .97);
  --pre-glow: #07392c; --curtain-bg: #041b15; --shadow: rgba(3, 20, 15, .7);
  --indigo: #0f8f6f; --dusk: #1fb5a6;
}
:root[data-palette="emerald"]:not([data-theme="light"]) body {
  background:
    radial-gradient(50vw 50vw at 10% 0%, rgba(15,143,111,.55), transparent 70%),
    radial-gradient(45vw 45vw at 95% 30%, rgba(31,181,166,.45), transparent 70%),
    radial-gradient(40vw 40vw at 40% 100%, rgba(201,162,39,.25), transparent 70%),
    var(--night);
  background-attachment: fixed;
}
:root[data-palette="sunset"]:not([data-theme="light"]) {
  --night: #1a0710; --panel: 62, 18, 35; --panel-solid: #461528;
  --menu-a: rgba(101, 31, 57, .96); --menu-b: rgba(54, 16, 31, .97);
  --pre-glow: #551a30; --curtain-bg: #260b16; --shadow: rgba(26, 7, 16, .7);
  --indigo: #e0457b; --dusk: #f2793a;
}
:root[data-palette="sunset"]:not([data-theme="light"]) body {
  background:
    radial-gradient(50vw 50vw at 10% 0%, rgba(224,69,123,.55), transparent 70%),
    radial-gradient(45vw 45vw at 95% 30%, rgba(242,121,58,.45), transparent 70%),
    radial-gradient(40vw 40vw at 40% 100%, rgba(242,181,68,.25), transparent 70%),
    var(--night);
  background-attachment: fixed;
}
:root[data-palette="ocean"]:not([data-theme="light"]) {
  --night: #031419; --panel: 5, 36, 45; --panel-solid: #052832;
  --menu-a: rgba(7, 54, 68, .96); --menu-b: rgba(4, 33, 41, .97);
  --pre-glow: #062f3b; --curtain-bg: #041920; --shadow: rgba(3, 20, 25, .7);
  --indigo: #0d6e8a; --dusk: #1fb5d6;
}
:root[data-palette="ocean"]:not([data-theme="light"]) body {
  background:
    radial-gradient(50vw 50vw at 10% 0%, rgba(13,110,138,.55), transparent 70%),
    radial-gradient(45vw 45vw at 95% 30%, rgba(31,181,214,.45), transparent 70%),
    radial-gradient(40vw 40vw at 40% 100%, rgba(39,67,184,.25), transparent 70%),
    var(--night);
  background-attachment: fixed;
}
:root[data-palette="wine"]:not([data-theme="light"]) {
  --night: #16050a; --panel: 43, 8, 18; --panel-solid: #300914;
  --menu-a: rgba(66, 11, 27, .96); --menu-b: rgba(38, 7, 16, .97);
  --pre-glow: #390a18; --curtain-bg: #1d060d; --shadow: rgba(22, 5, 10, .7);
  --indigo: #8a1538; --dusk: #c0392b;
}
:root[data-palette="wine"]:not([data-theme="light"]) body {
  background:
    radial-gradient(50vw 50vw at 10% 0%, rgba(138,21,56,.55), transparent 70%),
    radial-gradient(45vw 45vw at 95% 30%, rgba(192,57,43,.45), transparent 70%),
    radial-gradient(40vw 40vw at 40% 100%, rgba(212,129,42,.25), transparent 70%),
    var(--night);
  background-attachment: fixed;
}
:root[data-palette="forest"]:not([data-theme="light"]) {
  --night: #0c1206; --panel: 21, 34, 10; --panel-solid: #17260c;
  --menu-a: rgba(31, 52, 16, .96); --menu-b: rgba(19, 30, 10, .97);
  --pre-glow: #1b2d0e; --curtain-bg: #0f1708; --shadow: rgba(12, 18, 6, .7);
  --indigo: #3f6b1f; --dusk: #8aa63a;
}
:root[data-palette="forest"]:not([data-theme="light"]) body {
  background:
    radial-gradient(50vw 50vw at 10% 0%, rgba(63,107,31,.55), transparent 70%),
    radial-gradient(45vw 45vw at 95% 30%, rgba(138,166,58,.45), transparent 70%),
    radial-gradient(40vw 40vw at 40% 100%, rgba(242,181,68,.25), transparent 70%),
    var(--night);
  background-attachment: fixed;
}
:root[data-palette="charcoal"]:not([data-theme="light"]) {
  --night: #0b0b0e; --panel: 19, 20, 27; --panel-solid: #15161e;
  --menu-a: rgba(29, 31, 41, .96); --menu-b: rgba(18, 18, 24, .97);
  --pre-glow: #191b23; --curtain-bg: #0e0e12; --shadow: rgba(11, 11, 14, .7);
  --indigo: #3a3f55; --dusk: #5b6075;
}
:root[data-palette="charcoal"]:not([data-theme="light"]) body {
  background:
    radial-gradient(50vw 50vw at 10% 0%, rgba(58,63,85,.55), transparent 70%),
    radial-gradient(45vw 45vw at 95% 30%, rgba(91,96,117,.45), transparent 70%),
    radial-gradient(40vw 40vw at 40% 100%, rgba(138,122,90,.25), transparent 70%),
    var(--night);
  background-attachment: fixed;
}

/* "A new version is ready" note (app.js) */
.upd-note { position: fixed; left: 50%; bottom: calc(96px + env(safe-area-inset-bottom)); z-index: 90; display: flex; align-items: center; gap: 12px;
  padding: 10px 12px 10px 16px; border-radius: 999px; border: 1px solid var(--glass-edge); color: var(--mist); font: 600 13.5px/1.2 var(--body); cursor: pointer;
  background: rgba(var(--panel), .85); box-shadow: 0 18px 40px -18px var(--shadow); transform: translate(-50%, 20px); opacity: 0; transition: transform .5s var(--ease), opacity .4s; max-width: calc(100vw - 32px); }
.upd-note.in { transform: translate(-50%, 0); opacity: 1; }
.upd-note b { padding: 7px 12px; border-radius: 999px; background: var(--gold); color: var(--gold-ink); white-space: nowrap; }
@media (max-width: 480px) { .upd-note span { font-size: 12.5px; } }

/* Leave a review page (js/feedback.js) */
.leave-review { display: grid; place-items: center; padding-top: clamp(110px, 14vh, 160px); }
.lr-card { width: min(720px, 100%); padding: clamp(22px, 4vw, 40px); border-radius: var(--r-window); }
.lr-kicker { margin: 0 0 6px; color: var(--gold-text); font-weight: 700; font-size: 13px; letter-spacing: .08em; text-transform: uppercase; }
.lr-title { margin: 0 0 10px; font: 800 clamp(34px, 6vw, 56px)/1.02 var(--display); letter-spacing: -.02em; }
.lr-lead { margin: 0 0 22px; color: var(--mist-2); font-size: 16.5px; }
.lr-stars { display: flex; gap: 6px; margin-bottom: 6px; }
.lr-stars button { border: 0; background: none; padding: 2px; font-size: clamp(34px, 7vw, 42px); line-height: 1; color: rgba(var(--ink), .18); cursor: pointer; transition: transform .2s var(--ease), color .2s; }
.lr-stars button.on { color: var(--gold); text-shadow: 0 0 18px rgba(242,181,68,.45); }
.lr-stars button:hover { transform: scale(1.15); }
.lr-photo-row { display: flex; align-items: center; gap: 10px; }
.lr-avatar { flex: none; width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center; background: rgba(var(--ink), .08) center / cover; color: var(--mist-3); font-size: 20px; border: 1px dashed rgba(var(--ink), .25); }
.lr-photo input[type=file] { font-size: 13px; min-width: 0; }
.lr-consent { font-size: 14px; }
.lr-done { text-align: center; padding: 20px 0 6px; }
.lr-check { width: 74px; height: 74px; margin: 0 auto 12px; border-radius: 50%; display: grid; place-items: center; font-size: 36px; color: var(--gold-ink); background: var(--gold); box-shadow: 0 0 40px rgba(242,181,68,.45); animation: gm-pop .6s var(--ease) both; }
.lr-done h2 { margin: 0 0 6px; font: 800 32px/1.1 var(--display); }
.lr-done p { color: var(--mist-2); margin: 0 0 18px; }
.qpay-choice { display: grid; gap: 10px; width: 100%; }
.qpay-later { margin: -4px 0 -6px; font-size: 14px; opacity: .8; text-align: center; }
.qpay-part { margin: -4px 0 0; font-size: 14px; font-weight: 700; color: #34d399; }
.qpay-after { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; width: 100%; }
.qpay-after .btn { flex: 1 1 150px; min-width: 0; }
/* discount code in the pay window */
.pay-code { border-radius: 14px; padding: 10px 12px; background: rgba(var(--ink), .05); border: 1px solid rgba(var(--ink), .1); }
.pay-code summary { cursor: pointer; font-weight: 700; font-size: 14px; color: var(--gold-text); list-style: none; }
.pay-code summary::-webkit-details-marker { display: none; }
.pay-code summary::before { content: "🏷️ "; }
.pay-code-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; margin-top: 10px; }
.pay-code-row input { text-transform: uppercase; letter-spacing: .06em; }
.pay-code-msg { margin: 8px 0 0; font-size: 13px; color: var(--mist-2); }
.pay-code-msg:empty { display: none; }
.pay-code-msg.ok { color: #34d399; } .pay-code-msg.err { color: #ff8a8a; }
.pay-sum strong s { display: block; opacity: .5; font-size: .42em; font-weight: 700; margin-bottom: 2px; }
/* ═════ design proof page ═════ */
.proof-wrap { width: min(880px, calc(100% - 32px)); margin: clamp(90px, 12vh, 130px) auto 60px; display: grid; gap: 18px; }
.proof-head { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 16px; padding: 16px 20px; border-radius: 22px; }
.proof-logo { height: 38px; width: auto; }
.proof-title small { display: block; color: var(--mist-2); font-size: 13px; font-weight: 700; letter-spacing: .04em; }
.proof-title h1 { margin: 2px 0 0; font-size: clamp(20px, 3.4vw, 30px); line-height: 1.15; overflow-wrap: anywhere; }
.proof-pill { padding: 7px 12px; border-radius: 999px; font-size: 13px; font-weight: 800; white-space: nowrap; background: rgba(var(--ink), .08); color: var(--mist); }
.proof-pill.ok { background: rgba(52, 211, 153, .16); color: #34d399; } .proof-pill.warn { background: rgba(242, 181, 68, .16); color: var(--gold-text); }
.proof-note { margin: 0; padding: 16px 20px; border-radius: 18px; line-height: 1.6; white-space: pre-wrap; }
.proof-how { margin: 4px 4px 0; display: flex; align-items: center; gap: 8px; color: var(--mist-2); font-size: 15px; }
.proof-how .ico { width: 18px; height: 18px; flex: none; }
.proof-item { padding: 14px; border-radius: 22px; display: grid; gap: 12px; }
.proof-item-head { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; padding: 2px 4px; }
.proof-item-head span { color: var(--mist-2); font-size: 13px; }
.proof-canvas { position: relative; margin-inline: auto; border-radius: 14px; overflow: hidden; background: rgba(var(--ink), .05); cursor: crosshair; user-select: none; -webkit-user-select: none; -webkit-touch-callout: none; }
.proof-canvas.locked { cursor: default; }
.proof-canvas img { width: 100%; height: 100%; object-fit: fill; display: block; pointer-events: none; }
.proof-pin { position: absolute; transform: translate(-50%, -50%); width: 30px; height: 30px; border-radius: 50% 50% 50% 4px; display: grid; place-items: center; font-size: 13px; font-weight: 900;
  background: var(--gold, #f2b544); color: #2a1d02; box-shadow: 0 0 0 3px rgba(0,0,0,.25), 0 8px 18px -6px rgba(0,0,0,.6); cursor: pointer; transition: transform .2s; }
.proof-pin:hover { transform: translate(-50%, -50%) scale(1.15); }
.proof-pin.done { background: #34d399; color: #04291b; opacity: .8; }
.proof-pin.new { background: #fff; color: #14173a; animation: pinPulse 1.2s ease-in-out infinite; }
@keyframes pinPulse { 50% { box-shadow: 0 0 0 10px rgba(255,255,255,.18), 0 8px 18px -6px rgba(0,0,0,.6); } }
.proof-new { padding: 14px; border-radius: 16px; background: rgba(var(--ink), .06); border: 1px solid rgba(242,181,68,.4); }
.proof-new .row2 { align-items: end; }
.proof-new-actions { display: flex; gap: 8px; justify-content: flex-end; }
.proof-thread { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.proof-thread li { display: grid; grid-template-columns: 30px minmax(0, 1fr); gap: 10px; padding: 10px 12px; border-radius: 14px; background: rgba(var(--ink), .05); transition: background .4s; }
.proof-thread li.you { background: rgba(107, 75, 214, .16); margin-left: 24px; }
.proof-thread li.done { opacity: .65; }
.proof-thread li.flash { background: rgba(242, 181, 68, .25); }
.proof-thread b { font-size: 14px; } .proof-thread small { color: var(--mist-2); font-size: 12px; margin-left: 8px; }
.proof-thread p { margin: 4px 0 0; line-height: 1.5; white-space: pre-wrap; overflow-wrap: anywhere; }
.proof-num { width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center; font-size: 12px; font-weight: 900; background: var(--gold, #f2b544); color: #2a1d02; }
.proof-num.reply { background: rgba(var(--ink), .12); color: var(--mist); }
.proof-approve { padding: clamp(18px, 3vw, 28px); border-radius: 22px; display: grid; gap: 12px; }
.proof-approve h2 { margin: 0; } .proof-approve p { margin: 0; color: var(--mist-2); line-height: 1.6; }
.proof-approved { display: flex; gap: 14px; align-items: center; padding: 16px; border-radius: 16px; background: rgba(52, 211, 153, .12); color: #34d399; }
.proof-approved .ico { width: 28px; height: 28px; flex: none; }
.proof-approved b { display: block; font-size: 18px; } .proof-approved span { color: var(--mist-2); }
.proof-wa { display: inline-flex; align-items: center; gap: 8px; color: var(--mist-2); font-size: 14px; justify-self: start; }
.proof-wa .ico { width: 16px; height: 16px; }
@media (max-width: 560px) { .proof-head { grid-template-columns: minmax(0, 1fr) auto; } .proof-logo { display: none; } .proof-new .row2 { grid-template-columns: 1fr; } }

/* progress tracker on invoices */
.inv-progress { padding: 18px 20px; border-radius: 20px; display: grid; gap: 14px; }
.inv-progress h3 { margin: 0; font-size: 16px; }
.inv-steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; }
.inv-steps li { display: grid; justify-items: center; gap: 6px; text-align: center; font-size: 12px; font-weight: 700; color: var(--mist-2); position: relative; }
.inv-steps li::before { content: ""; position: absolute; top: 13px; left: calc(-50% + 16px); right: calc(50% + 16px); height: 3px; border-radius: 3px; background: rgba(var(--ink), .14); }
.inv-steps li:first-child::before { display: none; }
.inv-steps li.on::before { background: linear-gradient(90deg, var(--gold, #f2b544), #34d399); }
.inv-steps i { width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; font-style: normal; font-size: 13px; font-weight: 900; background: rgba(var(--ink), .1); color: var(--mist-2); position: relative; }
.inv-steps li.on i { background: #34d399; color: #04291b; }
.inv-steps li.now i { background: var(--gold, #f2b544); color: #2a1d02; box-shadow: 0 0 0 5px rgba(242,181,68,.22); }
.inv-steps li.on, .inv-steps li.now { color: var(--mist); }
.inv-progress-note { margin: 0; padding: 12px 14px; border-radius: 14px; background: rgba(var(--ink), .06); line-height: 1.5; white-space: pre-wrap; }
.inv-progress-note small { display: block; color: var(--mist-2); font-size: 12px; margin-bottom: 4px; }
.qpay .inv-progress { width: 100%; text-align: left; padding: 14px; background: rgba(var(--ink), .05); }
.qpay .inv-steps li { font-size: 10.5px; }
/* tick boxes sit beside their text */
.form label.check { display: flex; align-items: flex-start; gap: 10px; font-weight: 600; cursor: pointer; line-height: 1.45; }
.form label.check input { width: 18px; height: 18px; margin: 1px 0 0; flex: none; accent-color: var(--gold); }
/* Work page filters: search + sort on top, every filter visible underneath (wraps on computers, swipes on phones) */
.work-tools { grid-template-columns: minmax(200px, 1fr) auto; }
.work-tools .tagbar { grid-column: 1 / -1; grid-row: 2; }
.sort { white-space: nowrap; }
.sort .fx-select { min-width: 168px; }
@media (min-width: 761px) {
  .work-tools .tagbar { flex-wrap: wrap; overflow: visible; -webkit-mask-image: none; mask-image: none; }
}
/* website proof: live preview */
.proof-site-bar { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 10px; }
.proof-devices { display: inline-flex; padding: 4px; gap: 4px; border-radius: 999px; background: rgba(var(--ink), .08); }
.proof-devices button { border: 0; background: transparent; color: var(--mist-2); font: inherit; font-size: 13px; font-weight: 700; padding: 8px 14px; border-radius: 999px; cursor: pointer; }
.proof-devices button[aria-pressed="true"] { background: var(--mist); color: var(--night); }
.proof-site-stage { position: relative; overflow: hidden; border-radius: 14px; background: rgba(var(--ink), .06); }
.proof-site-frame { position: absolute; top: 0; left: 0; transform-origin: 0 0; background: #fff; }
.proof-site-stage.phone .proof-site-frame { left: 50%; top: 12px; transform-origin: 50% 0; translate: -50% 0; border-radius: 28px; overflow: hidden; box-shadow: 0 0 0 8px #0b0d1f, 0 24px 50px -18px rgba(0,0,0,.7); }
.proof-site-frame iframe { width: 100%; height: 100%; border: 0; display: block; background: #fff; }
.proof-site-tip { margin: 0; font-size: 13px; color: var(--mist-3); }
.proof-note-form { padding: 14px; border-radius: 16px; background: rgba(var(--ink), .05); }
.proof-note-form .row2 { align-items: end; }
@media (max-width: 560px) { .proof-note-form .row2 { grid-template-columns: 1fr; } }
.proof-view .model-window, .proof-view .pano-window { margin: 0; }
.proof-view .model-window .stage { height: min(70vh, 560px); }
@media (max-width: 760px) {
  .work-tools { grid-template-columns: minmax(0, 1fr) auto; max-width: 100%; }
  .work-tools .search { min-width: 0; }
  .work-tools .search input { min-width: 0; width: 100%; }
  .sort { padding-left: 0; }
  .sort > span { display: none; }
  .sort .fx-select { min-width: 0; }
}
/* "new version" notice: as wide as its text (up to the screen), on one line */
.upd-note { width: max-content; white-space: nowrap; }
.upd-note span { overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 480px) { .upd-note { gap: 10px; padding: 8px 8px 8px 14px; bottom: calc(158px + env(safe-area-inset-bottom)); } .upd-note b { padding: 7px 11px; } }
