/* thekingziga.com — shared design system, used by every page on the site. */

:root{
  --bg: #0B0F0D;
  --surface: #121815;
  --grid: #1B2320;
  --ink: #E9EDEB;
  --muted: #8A9A94;
  --line: #232B27;
  --accent: #7C74FF;
  --accent-soft: #211F3D;
  --online: #34D399;
  --online-soft: #123626;
  --down: #F87171;
  --down-soft: #3B1616;
  --pending: #FBBF24;
  --pending-soft: #3A2A0A;
  --warn-strong: #D97706;
  --warn-strong-soft: #3D2409;
  --surface-translucent: rgba(18,24,21,.75);
  --on-ink-muted: rgba(11,15,13,.6);
  --mono: 'JetBrains Mono', ui-monospace, monospace;
  --sans: 'Space Grotesk', system-ui, sans-serif;
}

:root[data-theme="light"]{
  --bg: #EEF1F0;
  --surface: #FFFFFF;
  --grid: #DBE0DD;
  --ink: #16221E;
  --muted: #5C6B66;
  --line: #D3D8D5;
  --accent: #4F46E5;
  --accent-soft: #ECEBFC;
  --online: #16A34A;
  --online-soft: #E7F6EC;
  --down: #DC2626;
  --down-soft: #FDEEEE;
  --pending: #B45309;
  --pending-soft: #FDF3E7;
  --warn-strong: #C2410C;
  --warn-strong-soft: #FDE9DC;
  --surface-translucent: rgba(255,255,255,.75);
  --on-ink-muted: rgba(238,241,240,.65);
}

*{ box-sizing: border-box; }
html{ scroll-behavior: smooth; }
/* Never allow sideways page scrolling: cards animating in from the sides
   (scroll reveal) or anything slightly too wide would otherwise make the
   whole page pan left/right on phones. `clip` (unlike `hidden`) doesn't
   turn html/body into scroll containers, so the sticky status bar and
   scroll listeners keep working; `hidden` is the fallback for old Safari. */
html{ overflow-x: hidden; }
@supports (overflow-x: clip){
  html, body{ overflow-x: clip; }
}
body{
  margin:0;
  background:
    linear-gradient(var(--grid) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid) 1px, transparent 1px),
    var(--bg);
  background-size: 28px 28px;
  color: var(--ink);
  font-family: var(--sans);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

a{ color: inherit; }
::selection{ background: var(--accent-soft); }

.wrap{ max-width: 960px; margin: 0 auto; padding: 0 32px; position: relative; z-index: 1; }
.wrap.narrow{ max-width: 720px; }

/* Live background — a faint network graph that reacts to real server health
   (see siteHealth + site.js). Sits behind all page content, in front of the
   static CSS grid backdrop. */
#bgCanvas{
  position: fixed;
  inset: 0;
  z-index: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

/* Big screens look exactly like 1080p, just bigger: every page sets
   --z = max(1, screen width / 1920) in its <head> (site.js keeps it updated
   on resize). 1920px and narrower: 1, unchanged. Full-bleed pieces sized in
   vw divide by --z so they stay exactly one screen wide. */
:root{ --z: 1; }
body{ zoom: var(--z); }

/* Status bar */
/* The uptime counter doubles as the button that opens the terminal */
.uptime-door{ cursor: pointer; border-radius: 6px; padding: 4px 6px; margin: -4px -6px; transition: background .15s, color .15s; }
.uptime-door:hover, .uptime-door:focus-visible{ background: var(--online-soft, rgba(52,211,153,.12)); color: var(--ink); }
.statusbar{
  border-bottom: 1px solid var(--line);
  background: var(--surface-translucent);
  backdrop-filter: blur(6px);
  position: sticky;
  top: 0;
  z-index: 10;
}
.statusbar-inner{
  max-width: none;
  width: 100%;
  margin: 0 auto;
  padding: 12px 32px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  font-family: var(--mono);
  font-size: 12.5px;
  color: var(--muted);
}
.statusbar nav{ display:flex; gap:18px; }
.statusbar nav a{ text-decoration:none; color: var(--muted); transition: color .15s; }
.statusbar nav a:hover, .statusbar nav a:focus-visible{ color: var(--ink); }
.statusbar nav a.current{ color: var(--accent); }
.statusbar-right{ display:flex; align-items:center; gap:18px; }
.lang-switch{
  display:flex;
  border: 1px solid var(--line);
  border-radius: 6px;
  overflow: hidden;
}
.lang-switch button{
  font-family: var(--mono);
  font-size: 11.5px;
  border: none;
  background: transparent;
  color: var(--muted);
  padding: 4px 9px;
  cursor: pointer;
  transition: background .15s, color .15s;
}
.lang-switch button.active{ background: var(--ink); color: var(--bg); }
.lang-switch button:hover:not(.active){ color: var(--ink); }
.theme-toggle{
  font-family: var(--mono);
  font-size: 13px;
  line-height: 1;
  border: 1px solid var(--line);
  background: var(--surface);
  color: var(--muted);
  border-radius: 6px;
  padding: 5px 9px;
  cursor: pointer;
  transition: color .15s, border-color .15s;
}
.theme-toggle:hover, .theme-toggle:focus-visible{ color: var(--ink); border-color: var(--accent); }
.led{
  display:inline-flex; align-items:center; gap:6px;
  color: var(--online);
}
.led::before{
  content:"";
  width:7px; height:7px; border-radius:50%;
  background: var(--online);
  box-shadow: 0 0 0 3px var(--online-soft);
  animation: blink 2.4s ease-in-out infinite;
}
@keyframes blink{ 0%,100%{opacity:1;} 50%{opacity:.4;} }
@media (prefers-reduced-motion: reduce){ .led::before{ animation:none; } }

/* Overall status severity — escalates from a few outages to many */
.led.led-warn{ color: var(--pending); }
.led.led-warn::before{ background: var(--pending); box-shadow: 0 0 0 3px var(--pending-soft); }
.led.led-warn-strong{ color: var(--warn-strong); }
.led.led-warn-strong::before{ background: var(--warn-strong); box-shadow: 0 0 0 3px var(--warn-strong-soft); }
.led.led-danger{ color: var(--down); }
.led.led-danger::before{ background: var(--down); box-shadow: 0 0 0 3px var(--down-soft); }
.led.led-danger-flash{ animation: dangerFlash .9s ease-in-out infinite; }
.led.led-danger-flash::before{ animation: dangerFlash .9s ease-in-out infinite; }
@keyframes dangerFlash{ 0%,100%{opacity:1;} 50%{opacity:.3;} }
@media (prefers-reduced-motion: reduce){ .led.led-danger-flash, .led.led-danger-flash::before{ animation:none; } }

/* Hero */
.hero{ padding: 76px 0 52px; }
.eyebrow{
  font-family: var(--mono);
  font-size: 12.5px;
  color: var(--muted);
  margin-bottom: 16px;
  letter-spacing: .03em;
}
h1{
  font-family: var(--sans);
  font-size: clamp(34px, 5vw, 62px);
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 10px;
}
h2{ font-family: var(--sans); font-size: clamp(22px, 3vw, 30px); font-weight: 700; margin: 0 0 14px; }
h3{ font-family: var(--sans); font-size: 18px; font-weight: 600; margin: 24px 0 8px; }
.role{ font-size: 19px; color: var(--muted); margin: 0 0 26px; max-width: 54ch; }

.hero-links{ display:flex; flex-wrap:wrap; gap: 10px; }
.pill{
  font-family: var(--mono);
  font-size: 13px;
  text-decoration:none;
  border: 1px solid var(--line);
  background: var(--surface);
  padding: 8px 14px;
  border-radius: 6px;
  transition: border-color .15s, transform .15s, background .15s;
  display: inline-block;
}
.pill:hover, .pill:focus-visible{ border-color: var(--accent); transform: translateY(-1px); }
.pill.solid{ background: var(--ink); color: var(--bg); border-color: var(--ink); }
.pill.solid:hover{ background: var(--accent); border-color: var(--accent); }
.pill.yt{ background: #FF0000; color:#fff; border-color:#FF0000; }
.pill.yt:hover{ background:#d90000; border-color:#d90000; }

.connect-btn{
  display: inline-flex;
  align-items: center;
  gap: 22px;
  background: var(--ink);
  color: var(--bg);
  text-decoration: none;
  border-radius: 10px;
  padding: 16px 20px 16px 22px;
  border: 1px solid var(--ink);
  transition: background .18s ease, border-color .18s ease, transform .18s ease;
}
.connect-btn:hover, .connect-btn:focus-visible{
  background: var(--accent);
  border-color: var(--accent);
  transform: translateY(-1px);
}
.connect-btn-text{ display:flex; flex-direction: column; gap: 3px; }
.connect-btn-label{
  font-family: var(--sans);
  font-size: 13.5px;
  color: var(--on-ink-muted);
}
.connect-btn-url{
  font-family: var(--mono);
  font-size: 16px;
  font-weight: 600;
}
.connect-btn-arrow{
  font-size: 20px;
  transition: transform .18s ease;
}
.connect-btn:hover .connect-btn-arrow{ transform: translateX(4px); }
@media (prefers-reduced-motion: reduce){
  .connect-btn, .connect-btn-arrow{ transition:none; }
}

/* ======================================================================
   Home hero v2 — photo in a spinning ring, aurora glow, typing line,
   live stats, floating badges, and a tech ticker underneath
   ====================================================================== */
.hero-v2{ position: relative; padding: 64px 0 44px; isolation: isolate; }
.hero-grid{ display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 48px; align-items: center; }

/* Soft colour blobs drifting behind the hero */
.hero-aurora{ position: absolute; inset: -60px -20vw -40px; z-index: -1; pointer-events: none; filter: blur(60px); opacity: .55; }
.hero-aurora span{ position: absolute; border-radius: 50%; mix-blend-mode: screen; }
.hero-aurora span:nth-child(1){ width: 46vw; max-width: 560px; aspect-ratio: 1; left: 30%; top: -10%; background: radial-gradient(circle, rgba(124,116,255,.9), transparent 65%); animation: auroraA 18s ease-in-out infinite alternate; }
.hero-aurora span:nth-child(2){ width: 38vw; max-width: 460px; aspect-ratio: 1; left: 58%; top: 25%; background: radial-gradient(circle, rgba(52,211,153,.75), transparent 65%); animation: auroraB 22s ease-in-out infinite alternate; }
.hero-aurora span:nth-child(3){ width: 30vw; max-width: 360px; aspect-ratio: 1; left: 10%; top: 45%; background: radial-gradient(circle, rgba(255,0,80,.45), transparent 65%); animation: auroraC 26s ease-in-out infinite alternate; }
@keyframes auroraA{ to{ transform: translate(-12%, 18%) scale(1.15); } }
@keyframes auroraB{ to{ transform: translate(-25%, -12%) scale(.9); } }
@keyframes auroraC{ to{ transform: translate(30%, -20%) scale(1.2); } }
:root[data-theme="light"] .hero-aurora{ opacity: .32; }
:root[data-theme="light"] .hero-aurora span{ mix-blend-mode: multiply; }

/* Name: slow shimmering gradient */
.hero-name{
  font-size: clamp(40px, 6.2vw, 74px); line-height: 1.02; margin: 0 0 14px;
  background: linear-gradient(100deg, var(--ink) 0%, var(--ink) 30%, #8F88FF 45%, #34D399 55%, var(--ink) 70%, var(--ink) 100%);
  background-size: 250% 100%; background-position: 100% 0;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: nameShimmer 9s ease-in-out infinite;
}
@keyframes nameShimmer{ 0%, 15%{ background-position: 100% 0; } 55%, 100%{ background-position: 0% 0; } }

/* Typing line */
.hero-typing{ font-family: var(--mono); font-size: 15px; margin: 0 0 18px; min-height: 1.6em; color: var(--ink); }
.hero-prompt{ color: var(--online); }
.hero-caret{ display: inline-block; width: 9px; height: 1.1em; margin-left: 2px; vertical-align: -3px; background: var(--accent); animation: caretBlink 1s steps(1) infinite; }
@keyframes caretBlink{ 50%{ opacity: 0; } }

/* Live numbers */
.hero-stats{ display: flex; flex-wrap: wrap; gap: 10px 26px; margin: 0 0 26px; }
.hero-stat{ display: flex; flex-direction: column; }
.hero-stat strong{ font-family: var(--sans); font-size: 28px; font-weight: 700; line-height: 1.1; color: var(--ink); }
.hero-stat span{ font-family: var(--mono); font-size: 11.5px; color: var(--muted); }

/* Photo with a spinning conic ring + gentle float */
.hero-visual{ display: flex; justify-content: center; }
.hero-photo{
  position: relative; width: min(340px, 78vw); aspect-ratio: 1;
  transform-style: preserve-3d; transition: transform .25s ease-out;
  animation: photoFloat 7s ease-in-out infinite;
}
@keyframes photoFloat{ 50%{ translate: 0 -10px; } }
.hero-ring{
  position: absolute; inset: -10px; border-radius: 50%;
  background: conic-gradient(from 0deg, #7C74FF, #34D399, #FF0050, #FFB020, #7C74FF);
  animation: ringSpin 8s linear infinite;
  filter: drop-shadow(0 0 28px rgba(124,116,255,.45));
}
.hero-ring::after{ content: ''; position: absolute; inset: 6px; border-radius: 50%; background: var(--bg); }
@keyframes ringSpin{ to{ transform: rotate(360deg); } }
.hero-photo img{
  position: absolute; inset: 0; width: 100%; height: 100%; border-radius: 50%; object-fit: cover; display: block;
  border: 4px solid var(--bg);
}

/* Floating badges around the photo */
.hero-badge{
  position: absolute; display: inline-flex; align-items: center; gap: 7px;
  font-family: var(--mono); font-size: 12.5px; font-weight: 600; white-space: nowrap;
  color: var(--ink); background: var(--surface-translucent, rgba(18,24,21,.82));
  border: 1px solid var(--line); border-radius: 999px; padding: 7px 13px;
  backdrop-filter: blur(8px); box-shadow: 0 8px 26px rgba(0,0,0,.28);
  animation: badgeBob 5s ease-in-out infinite;
}
.hero-badge.b1{ top: 6%; left: -14%; }
.hero-badge.b2{ bottom: 14%; right: -16%; animation-delay: -1.7s; }
.hero-badge.b3{ bottom: -4%; left: 4%; animation-delay: -3.2s; }
.hero-badge .dot{ width: 9px; height: 9px; border-radius: 50%; background: var(--online); box-shadow: 0 0 0 0 rgba(52,211,153,.7); animation: dotPulse 2s infinite; }
.hero-badge .yt{ font-style: normal; color: #FF0033; font-size: 11px; }
@keyframes badgeBob{ 50%{ transform: translateY(-7px); } }
@keyframes dotPulse{ 70%{ box-shadow: 0 0 0 8px rgba(52,211,153,0); } 100%{ box-shadow: 0 0 0 0 rgba(52,211,153,0); } }

/* Tech ticker: full-bleed band that scrolls sideways forever */
.ticker{
  width: calc(100vw / var(--z)); margin-left: calc(50% - 50vw / var(--z)); overflow: hidden;
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  background: linear-gradient(90deg, rgba(124,116,255,.10), rgba(52,211,153,.10), rgba(255,0,80,.08));
  padding: 14px 0;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
          mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.ticker-track{ display: flex; width: max-content; align-items: center; gap: 22px; animation: tickerMove 45s linear infinite; font-family: var(--mono); font-size: 14px; font-weight: 600; }
.ticker-track span{ color: var(--ink); white-space: nowrap; }
.ticker-track i{ font-style: normal; color: var(--accent); }
.ticker-track i:nth-of-type(3n+2){ color: var(--online); }
.ticker-track i:nth-of-type(3n){ color: #FF4D7D; }
.ticker:hover .ticker-track{ animation-play-state: paused; }
@keyframes tickerMove{ to{ transform: translateX(-50%); } }
.ticker + section{ border-top: none; }

@media (max-width: 860px){
  .hero-grid{ grid-template-columns: 1fr; gap: 34px; }
  .hero-visual{ order: -1; }
  .hero-photo{ width: min(250px, 64vw); }
  .hero-badge{ font-size: 11.5px; padding: 6px 11px; }
  .hero-badge.b1{ left: -22%; }
  .hero-badge.b2{ right: -24%; }
}
@media (max-width: 420px){
  .hero-badge.b1{ left: -12%; top: 0; }
  .hero-badge.b2{ right: -12%; }
  .hero-stat strong{ font-size: 24px; }
}
@media (prefers-reduced-motion: reduce){
  .hero-aurora span, .hero-name, .hero-caret, .hero-photo, .hero-ring, .hero-badge, .hero-badge .dot, .ticker-track{ animation: none; }
  .hero-name{ background-position: 0 0; }
  .ticker{ overflow-x: auto; }
}

/* Dark theme: the "everything else" button a notch dimmer than pure white */
:root[data-theme="dark"] .connect-btn{ background: #C3CBC7; border-color: #C3CBC7; }
:root[data-theme="dark"] .connect-btn:hover, :root[data-theme="dark"] .connect-btn:focus-visible{ background: var(--accent); border-color: var(--accent); }

/* Home hero: the three main socials, above the "everything else" button */
.social-row{ display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 14px; }
.social-btn{
  display: inline-flex; align-items: center; gap: 9px;
  font-family: var(--sans); font-size: 15px; font-weight: 600;
  color: var(--ink); text-decoration: none;
  background: var(--surface); border: 1px solid var(--line); border-radius: 10px;
  padding: 11px 16px;
  transition: border-color .18s ease, transform .18s ease, color .18s ease;
}
.social-btn svg{ width: 20px; height: 20px; fill: currentColor; flex-shrink: 0; }
.social-btn:hover, .social-btn:focus-visible{ transform: translateY(-1px); }
.social-btn.yt svg{ color: #FF0033; }
.social-btn.yt:hover, .social-btn.yt:focus-visible{ border-color: #FF0033; }
.social-btn.tt svg{ color: var(--ink); }
.social-btn.tt:hover, .social-btn.tt:focus-visible{ border-color: #25F4EE; }
.social-btn.ig svg{ color: #E1306C; }
.social-btn.ig:hover, .social-btn.ig:focus-visible{ border-color: #E1306C; }
/* three brand buttons share the first row, sejbosejbo.fyi gets its own full row */
.social-row .social-btn{ flex: 1 1 0; justify-content: center; }
.social-row .social-btn.sb{ flex-basis: 100%; }
/* sejbosejbo.fyi — his other site: logo + its own tagline */
.social-row .social-btn.sb{ justify-content: flex-start; gap: 12px; padding: 8px 14px 8px 8px; text-align: left; }
.social-btn.sb:hover, .social-btn.sb:focus-visible{ border-color: #FF66CC; box-shadow: 0 0 22px rgba(255,102,204,.25); }
.sb-logo{ width: 44px; height: 44px; flex-shrink: 0; transition: transform .25s cubic-bezier(.3,1.6,.5,1); }
.social-btn.sb:hover .sb-logo{ transform: rotate(-8deg) scale(1.1); }
.sb-text{ display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.sb-name{ font-weight: 700; letter-spacing: .04em; color: #FF66CC; }
.sb-tag{ font-size: 12.5px; font-weight: 400; color: var(--muted); line-height: 1.35; }
.sb-url{ font-family: var(--mono); font-size: 12px; color: var(--muted); white-space: nowrap; }
@media (max-width: 520px){ .sb-url{ display: none; } }
@media (prefers-reduced-motion: reduce){ .sb-logo{ transition: none; } }
@media (prefers-reduced-motion: reduce){ .social-btn{ transition: none; } }

/* Contact page extras */
.contact-note{ color: var(--muted); font-size: 14px; margin: 0; }
.contact-social-link{ font-family: var(--mono); font-size: 13px; color: var(--accent); text-decoration: none; align-self: flex-start; }
.contact-social-link:hover, .contact-social-link:focus-visible{ text-decoration: underline; }
.contact-privacy{ color: var(--muted); font-size: 12.5px; margin: 4px 0 0; }
.contact-privacy a{ color: var(--accent); }

/* Home "latest": newest video next to a contact card */
.latest-grid{ display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 16px; align-items: stretch; }
.latest-video .video-card{ height: 100%; }
.contact-cta{ display: flex; flex-direction: column; }
.contact-cta p{ flex: 1; }
@media (max-width: 760px){
  .latest-grid{ grid-template-columns: 1fr; }
  .social-btn{ flex: 1 1 0; justify-content: center; padding: 11px 10px; }
}

section{ padding: 56px 0; border-top: 1px solid var(--line); }
section.no-border{ border-top: none; }
.section-head{
  font-family: var(--mono);
  font-size: 13px;
  color: var(--muted);
  margin-bottom: 24px;
  display:flex; align-items:center; gap:8px;
}
.section-head .tag{ color: var(--accent); }

/* Page hero (used by sub-pages that aren't the homepage) */
.page-hero{ padding: 56px 0 40px; }
.page-hero .eyebrow{ margin-bottom: 14px; }
.page-hero p.lede{ font-size: 17px; color: var(--muted); max-width: 62ch; margin: 0; }
.back-link{ font-family: var(--mono); font-size: 13px; color: var(--muted); text-decoration: none; display: inline-block; margin-bottom: 24px; }
.back-link:hover, .back-link:focus-visible{ color: var(--ink); }

/* Live status list (built from real data at runtime) */
.rack{
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 14px;
}
.rack-header{
  display:flex; justify-content:space-between; align-items:center;
  font-family: var(--mono); font-size: 11.5px; color: var(--muted);
  padding: 0 4px 10px;
}
.rack-loading, .rack-error{
  font-family: var(--mono);
  font-size: 13px;
  color: var(--muted);
  padding: 14px;
}
.rack-error{ color: var(--down, #DC2626); }
.rack-error a{ color: inherit; text-decoration: underline; }
.unit-grid{
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
}
.unit-grid .unit{ margin-bottom: 0; }
@media (max-width: 560px){
  .unit-grid{ grid-template-columns: 1fr; }
}
.unit{
  display:flex;
  align-items:center;
  gap: 14px;
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: 10px 14px;
  margin-bottom: 6px;
  font-family: var(--mono);
  font-size: 13.5px;
  transition: transform .15s ease, border-color .15s ease, box-shadow .15s ease;
}
.unit:last-child{ margin-bottom:0; }
.unit:hover{
  transform: translateY(-2px);
  border-color: var(--accent);
  box-shadow: 0 6px 16px rgba(0,0,0,.18);
}
@media (prefers-reduced-motion: reduce){
  .unit{ transition: none; }
  .unit:hover{ transform: none; }
}
.unit .u-dot{
  width:8px; height:8px; border-radius:50%;
  background: var(--line);
  flex-shrink:0;
}
.unit.status-up .u-dot{ background: var(--online); box-shadow: 0 0 0 3px var(--online-soft); }
.unit.status-down .u-dot{ background: var(--down); box-shadow: 0 0 0 3px var(--down-soft); }
.unit.status-pending .u-dot{ background: var(--pending); box-shadow: 0 0 0 3px var(--pending-soft); }
.unit .u-main{
  display:flex;
  flex-direction:column;
  min-width:0;
  gap: 1px;
}
.unit .u-name{
  font-weight:600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.unit .u-meta{
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
}
.unit .u-status-label{
  margin-left: auto;
  font-size: 11.5px;
  color: var(--muted);
  flex-shrink: 0;
}
.unit.status-down .u-status-label{ color: var(--down); }

.rack-footnote{
  font-family: var(--mono);
  font-size: 11.5px;
  color: var(--muted);
  padding: 10px 4px 0;
}
.rack-footnote a{ color: var(--accent); text-decoration: none; }
.rack-footnote a:hover, .rack-footnote a:focus-visible{ text-decoration: underline; }

/* Infra / stack cards (servers page) */
.infra-grid{
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 16px;
}
.infra-card{
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 20px;
}
.infra-card h3{ margin-top: 0; }
.infra-card p{ color: var(--muted); font-size: 14px; margin: 0; }
/* Stack cards link to each product's site: whole card, or per-product links */
.infra-card{ display: flex; flex-direction: column; }
.infra-card p{ flex: 1; }
a.infra-card{ color: inherit; text-decoration: none; transition: border-color .15s; }
a.infra-card:hover, a.infra-card:focus-visible{ border-color: var(--accent); }
.infra-site{ margin-top: 14px; font-family: var(--mono); font-size: 12px; color: var(--accent); }
.infra-site a{ color: var(--accent); text-decoration: none; }
.infra-site a:hover, .infra-site a:focus-visible, a.infra-card:hover .infra-site{ text-decoration: underline; }

/* Videos */
.video-grid{
  display:grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
  align-items: start;
}
.video-card{
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow:hidden;
}
.video-card iframe{
  width:100%; aspect-ratio: 16/9; display:block; border:0;
}
.video-card .thumb-wrap{
  position: relative;
  aspect-ratio: 16/9;
  background: #000;
  cursor: pointer;
  border: 0;
  padding: 0;
  width: 100%;
  display: block;
}
.video-card .thumb-wrap img{
  width: 100%; height: 100%; object-fit: cover; display: block;
}
.video-card .duration-badge{
  position: absolute; right: 8px; bottom: 8px;
  background: rgba(0,0,0,.78); color: #fff;
  font-family: var(--mono); font-size: 11.5px; font-weight: 600;
  padding: 2px 6px; border-radius: 4px; pointer-events: none;
}

/* /youtube: "load more" under the grid */
.load-more-wrap{ display:flex; justify-content:center; margin-top:24px; }
.load-more{ cursor:pointer; font-size:14px; padding:10px 22px; color: var(--ink); }
.load-more:hover, .load-more:focus-visible{ border-color: var(--accent); }
.load-more:disabled{ opacity:.6; cursor:progress; transform:none; }
.load-more[hidden]{ display:none; }

/* /youtube: live channel stats under the title */
.yt-stats{ display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; min-height: 30px; }
.yt-stat{
  font-family: var(--mono); font-size: 12.5px; color: var(--muted);
  background: var(--surface); border: 1px solid var(--line); border-radius: 20px; padding: 5px 12px;
}
.yt-stat strong{ color: var(--ink); font-weight: 600; }

/* /youtube: short clips as a swipeable row of vertical cards */
.shorts-row{
  display: grid; grid-auto-flow: column; grid-auto-columns: 168px; gap: 12px;
  overflow-x: auto; padding-bottom: 10px; scroll-snap-type: x proximity;
  scrollbar-width: thin;
}
.short-card{ display: flex; flex-direction: column; gap: 8px; text-decoration: none; color: var(--ink); scroll-snap-align: start; }
.short-thumb{
  position: relative; display: block; aspect-ratio: 9/16; border-radius: 10px; overflow: hidden;
  background: #000; border: 1px solid var(--line); transition: border-color .15s, transform .15s;
}
.short-thumb img{ width: 100%; height: 100%; object-fit: cover; display: block; }
.short-card:hover .short-thumb, .short-card:focus-visible .short-thumb{ border-color: var(--accent); transform: translateY(-2px); }
.short-views{
  position: absolute; left: 8px; bottom: 8px; color: #fff; font-family: var(--mono); font-size: 12px; font-weight: 600;
  text-shadow: 0 1px 3px rgba(0,0,0,.8);
}
.short-title{
  font-size: 13.5px; font-weight: 600; line-height: 1.35;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
@media (prefers-reduced-motion: reduce){ .short-thumb{ transition: none; } }
.video-card .play-icon{
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
}
.video-card .play-icon span{
  width: 52px; height: 52px;
  border-radius: 50%;
  background: rgba(0,0,0,.62);
  display:flex; align-items:center; justify-content:center;
  transition: background .15s ease, transform .15s ease;
}
.video-card .play-icon span::after{
  content:"";
  border-style: solid;
  border-width: 9px 0 9px 15px;
  border-color: transparent transparent transparent #fff;
  margin-left: 3px;
}
.video-card:hover .play-icon span{ background: var(--accent); transform: scale(1.06); }
.video-card .new-badge{
  position: absolute; top: 10px; left: 10px;
  font-family: var(--mono); font-size: 11px; font-weight:600;
  background: var(--accent); color: #fff;
  padding: 4px 9px; border-radius: 5px;
  letter-spacing: .02em;
}
.video-card .video-title{
  padding: 12px 14px 4px;
  font-size: 14px;
  font-weight: 600;
  display: block;
  color: inherit;
  text-decoration: none;
}
.video-card .video-title:hover,
.video-card .video-title:focus-visible{
  text-decoration: underline;
}
.video-card .video-meta{
  font-family: var(--mono);
  font-size: 11px;
  color: var(--muted);
  padding: 0 14px 12px;
}
.video-card.featured{ grid-column: 1 / -1; }
.video-card.featured .video-title{ font-size: 19px; padding: 18px 20px 6px; }
.video-card.featured .video-meta{ padding: 0 20px 16px; }
.video-card.featured .play-icon span{ width: 68px; height: 68px; }
.video-card.featured .play-icon span::after{ border-width: 12px 0 12px 20px; }

.channel-note{
  font-family: var(--mono);
  font-size: 12px;
  color: var(--muted);
  margin-top: 14px;
}
.channel-note a{ color: var(--accent); text-decoration:none; }
.channel-note a:hover, .channel-note a:focus-visible{ text-decoration:underline; }

/* Stack pills */
.stack{ display:flex; flex-wrap:wrap; gap:8px; }
.stack span{
  font-family: var(--mono);
  font-size: 12.5px;
  background: var(--surface);
  border: 1px solid var(--line);
  padding: 6px 11px;
  border-radius: 5px;
  color: var(--muted);
}

/* About page */
.about-head{ display: flex; align-items: flex-start; gap: 24px; flex-wrap: wrap; }
.avatar-badge{
  flex-shrink: 0;
  width: 84px; height: 84px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--accent), var(--online));
  display: flex; align-items: center; justify-content: center;
  font-family: var(--sans); font-weight: 700; font-size: 28px; color: #fff;
  letter-spacing: -0.02em;
  position: relative; overflow: hidden;
}
/* Photo sits on top of the initials; if it fails to load it removes itself
   and the initials show through */
.avatar-photo{
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover; display: block;
}
.about-head-text{ flex: 1 1 320px; min-width: 240px; }
.facts{ display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; }
.facts span{
  font-family: var(--mono); font-size: 12.5px; color: var(--muted);
  background: var(--surface); border: 1px solid var(--line);
  padding: 6px 12px; border-radius: 20px;
}
.skill-group{ margin-bottom: 22px; }
.skill-group:last-child{ margin-bottom: 0; }
.skill-group h3{ font-family: var(--mono); font-size: 12.5px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; margin: 0 0 10px; }

/* Vertical timeline — connecting line + dot markers */
.timeline{ position: relative; padding-left: 28px; }
.timeline::before{
  content: ""; position: absolute; left: 5px; top: 6px; bottom: 6px; width: 2px;
  background: var(--line);
}
.timeline-item{ position: relative; padding-bottom: 30px; }
.timeline-item:last-child{ padding-bottom: 0; }
.timeline-item::before{
  content: ""; position: absolute; left: -28px; top: 4px;
  width: 10px; height: 10px; border-radius: 50%;
  background: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft);
}
.timeline-item .t-when{ font-family: var(--mono); font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; margin-bottom: 4px; }
.timeline-item h3{ margin: 0 0 6px; }
.timeline-item p{ margin: 0; color: var(--muted); font-size: 14.5px; max-width: 60ch; }

/* Two columns (both grids hold 4 cards → a tidy 2×2 instead of 3 + 1),
   one column on phones */
.project-grid{
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}
@media (max-width: 600px){
  .project-grid{ grid-template-columns: 1fr; }
}
.project-card{
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 22px;
  transition: border-color .15s, transform .15s;
  text-decoration: none;
  display: block;
}
.project-card:hover{ border-color: var(--accent); transform: translateY(-2px); }
.project-card h3{ margin-top: 0; }
.project-card p{ color: var(--muted); font-size: 14px; margin: 0 0 14px; }
.project-card a{ font-family: var(--mono); font-size: 12.5px; text-decoration: none; color: var(--accent); }
.project-card a:hover{ text-decoration: underline; }

/* Prose (privacy policy, long-form text pages) */
.prose{ max-width: 68ch; }
.prose p{ color: var(--muted); font-size: 15px; margin: 0 0 16px; }
.prose h2{ margin-top: 40px; }
.prose h2:first-child{ margin-top: 0; }
.prose ul{ color: var(--muted); font-size: 15px; padding-left: 22px; margin: 0 0 16px; }
.prose li{ margin-bottom: 6px; }
.prose a{ color: var(--accent); }

/* Contact */
.contact-card{
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 28px;
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  flex-wrap: wrap;
  gap: 28px;
}
.contact-copy{
  display:flex;
  flex-direction:column;
  gap:16px;
  flex: 1 1 220px;
}
.contact-copy p{ margin:0; color: var(--muted); font-size: 14.5px; max-width: 36ch; }
.contact-copy .pill{ align-self: flex-start; }
.contact-copy strong{ color: var(--ink); font-weight: 600; }

.contact-form{
  display:flex;
  flex-direction:column;
  gap:10px;
  flex: 1 1 280px;
  min-width: 240px;
}
.contact-form input,
.contact-form textarea{
  font-family: var(--sans);
  font-size: 14px;
  color: var(--ink);
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: 10px 12px;
  resize: vertical;
}
.contact-form input:focus,
.contact-form textarea:focus{
  outline: none;
  border-color: var(--accent);
}
.contact-form button{
  font-family: var(--mono);
  border: none;
  cursor: pointer;
  align-self: flex-start;
}
.contact-form .hp-field{
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  opacity: 0;
}
.contact-status{
  margin: 0;
  font-family: var(--mono);
  font-size: 12.5px;
  min-height: 1.4em;
}
.contact-status.ok{ color: var(--online); }
.contact-status.err{ color: var(--down); }

footer{
  padding: 30px 0 50px;
  font-family: var(--mono);
  font-size: 12px;
  color: var(--muted);
  text-align:center;
  position: relative; z-index: 1; /* above the background layers (canvas, servers scan line) */
}
footer a{ color: var(--muted); text-decoration: none; }
footer a:hover, footer a:focus-visible{ color: var(--ink); text-decoration: underline; }

:focus-visible{ outline: 2px solid var(--accent); outline-offset: 2px; }

/* 3D scroll-driven reveal — transform/opacity are set continuously by JS as
   a function of live scroll position (see site.js), so the effect replays
   every time a section/card crosses into or out of view in either scroll
   direction. These rules are just the will-change hint plus the
   reduced-motion escape hatch; the resting state (no inline style yet) is
   normal opaque/untransformed so nothing breaks without JS. */
.reveal, .reveal .unit, .reveal .video-card, .reveal .infra-card, .reveal .project-card, .reveal .timeline-item, .reveal .post-card{ will-change: transform, opacity; }
@media (prefers-reduced-motion: reduce){
  .reveal, .reveal .unit, .reveal .video-card, .reveal .infra-card, .reveal .project-card, .reveal .timeline-item, .reveal .post-card{ opacity: 1 !important; transform: none !important; }
}

/* Mobile */
@media (max-width: 680px){
  .wrap{ padding: 0 18px; }
  .statusbar-inner{
    padding: 10px 18px;
    flex-wrap: wrap;
    row-gap: 10px;
    column-gap: 14px;
  }
  /* Promote nav/lang-switch/theme-toggle to direct flex items of
     statusbar-inner so nav can wrap onto its own full-width row while
     uptime + lang-switch + theme-toggle stay together on row one. */
  .statusbar-right{ display: contents; }
  .lang-switch{ order: 1; margin-left: auto; }
  .theme-toggle{ order: 2; }
  /* One evenly spaced row with finger-sized tap areas. On very narrow
     phones it scrolls sideways inside itself rather than wrapping. */
  .statusbar nav{
    order: 3;
    flex-basis: 100%;
    justify-content: space-between;
    flex-wrap: nowrap;
    gap: 0;
    margin: -4px -6px -6px;
    overflow-x: auto;
    scrollbar-width: none;
  }
  .statusbar nav::-webkit-scrollbar{ display: none; }
  .statusbar nav a{ padding: 9px 6px; white-space: nowrap; }
  .lang-switch button{ padding: 7px 12px; }
  .theme-toggle{ padding: 8px 11px; }
  .hero{ padding: 48px 0 36px; }
  .connect-btn{
    width: 100%;
    justify-content: space-between;
    padding: 14px 16px 14px 18px;
  }
  .contact-card{ padding: 20px; }
}

/* Boot overlay */
.boot-overlay{
  position: fixed;
  inset: 0;
  background: var(--bg);
  color: #8FE3B3;
  font-family: var(--mono);
  font-size: 13.5px;
  line-height: 1.9;
  padding: 40px;
  z-index: 999;
  display:flex;
  flex-direction: column;
  justify-content: flex-end;
  max-width: none;
  transition: opacity .55s ease;
}
.boot-overlay.boot-done{ opacity: 0; pointer-events: none; }
/* Pale terminal green is unreadable on the light background */
:root[data-theme="light"] .boot-overlay{ color: var(--online); }
.boot-lines div{ white-space: pre; }
@media (max-width: 600px){ .boot-lines div{ white-space: pre-wrap; overflow-wrap: anywhere; } }
.boot-cursor{
  display:inline-block; width: 8px; height: 14px;
  background: #8FE3B3;
  vertical-align: -2px;
  animation: blink 1s step-end infinite;
}

/* Hidden terminal command palette — press "/" (or "`") anywhere to open */
.cmdk-overlay{
  position: fixed; inset: 0; z-index: 998;
  background: rgba(11,15,13,.75);
  backdrop-filter: blur(4px);
  display: flex; align-items: flex-start; justify-content: center;
  padding-top: 12vh;
  opacity: 0;
  pointer-events: none;
  transition: opacity .15s ease;
}
.cmdk-overlay.open{ opacity: 1; pointer-events: auto; }
.cmdk-box{
  width: min(640px, 90vw);
  max-height: 70vh;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 10px;
  box-shadow: 0 24px 70px rgba(0,0,0,.55);
  font-family: var(--mono);
  font-size: 13.5px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.cmdk-output{
  overflow-y: auto;
  padding: 16px;
  color: var(--muted);
  line-height: 1.7;
}
.cmdk-output .line{ white-space: pre-wrap; word-break: break-word; }
.cmdk-output .line.cmd{ color: var(--ink); }
.cmdk-output .line.out{ color: var(--online); }
.cmdk-inputline{
  display: flex; align-items: center; gap: 8px;
  border-top: 1px solid var(--line);
  padding: 10px 16px;
  flex-shrink: 0;
}
.cmdk-prompt{ color: var(--accent); white-space: nowrap; }
.cmdk-inputline input{
  flex: 1; min-width: 0;
  background: transparent; border: none; color: var(--ink);
  font-family: var(--mono); font-size: 13.5px; padding: 0; outline: none;
}
@media (prefers-reduced-motion: reduce){ .cmdk-overlay{ transition: none; } }

/* `party` terminal command / Konami code easter egg */
/* The colour cycling lives on its own see-through layer: a filter on <body>
   would unpin everything fixed to the screen (terminal, status bar, canvas). */
.party-layer{
  position: fixed; inset: 0; z-index: 1000; pointer-events: none;
  animation: partyHue 1.2s linear infinite;
}
@keyframes partyHue{
  from{ -webkit-backdrop-filter: hue-rotate(0deg) saturate(1.5); backdrop-filter: hue-rotate(0deg) saturate(1.5); }
  to{ -webkit-backdrop-filter: hue-rotate(360deg) saturate(1.5); backdrop-filter: hue-rotate(360deg) saturate(1.5); }
}
.party-confetti{ position: fixed; inset: 0; z-index: 1001; pointer-events: none; overflow: hidden; }
.party-confetti span{ position: absolute; top: -40px; font-size: 22px; line-height: 1; will-change: transform; }
.party-confetti i{ position: absolute; top: -20px; width: 9px; height: 14px; border-radius: 2px; will-change: transform; }

/* ======================================================================
   Sub-page glow-up — the same life as the home hero, one theme per page
   ====================================================================== */

/* Aurora behind every page title; colours come from the page's glow-* class */
.page-hero{
  position: relative; isolation: isolate;
  --g1: rgba(124,116,255,.55); --g2: rgba(52,211,153,.38); --g3: rgba(255,0,80,.22);
}
.page-hero.glow-aurora::before{
  content: ""; position: absolute; inset: -60px -22vw -30px; z-index: -1; pointer-events: none;
  background:
    radial-gradient(38% 60% at 22% 35%, var(--g1), transparent 70%),
    radial-gradient(34% 55% at 78% 22%, var(--g2), transparent 70%),
    radial-gradient(30% 50% at 55% 92%, var(--g3), transparent 70%);
  filter: blur(42px); opacity: .7;
  animation: pageAurora 20s ease-in-out infinite alternate;
}
@keyframes pageAurora{ to{ transform: translate3d(4%, 7%, 0) scale(1.08) rotate(2deg); } }
:root[data-theme="light"] .page-hero.glow-aurora::before{ opacity: .4; }
.page-hero.glow-green{ --g1: rgba(52,211,153,.55); --g2: rgba(56,189,248,.35); --g3: rgba(124,116,255,.3); }
.page-hero.glow-red{ --g1: rgba(255,0,51,.42); --g2: rgba(255,150,0,.28); --g3: rgba(124,116,255,.3); }
.page-hero.glow-purple{ --g1: rgba(124,116,255,.6); --g2: rgba(236,72,153,.32); --g3: rgba(52,211,153,.25); }
.page-hero.glow-calm{ --g1: rgba(124,116,255,.32); --g2: rgba(52,211,153,.22); --g3: transparent; }
.page-hero.glow-glitch{ --g1: rgba(255,0,80,.45); --g2: rgba(0,229,255,.4); --g3: rgba(124,116,255,.3); }

/* Shimmering gradient titles (same as the home page name) */
.page-hero h1, .blog-hero h1{
  background: linear-gradient(100deg, var(--ink) 0%, var(--ink) 30%, #8F88FF 45%, #34D399 55%, var(--ink) 70%, var(--ink) 100%);
  background-size: 250% 100%; background-position: 100% 0;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: nameShimmer 9s ease-in-out infinite;
}
.page-hero.glow-red h1{ background-image: linear-gradient(100deg, var(--ink) 0%, var(--ink) 30%, #FF4D6D 45%, #FFB020 55%, var(--ink) 70%, var(--ink) 100%); }
.page-hero.glow-green h1{ background-image: linear-gradient(100deg, var(--ink) 0%, var(--ink) 30%, #34D399 45%, #38BDF8 55%, var(--ink) 70%, var(--ink) 100%); }

/* "/ section" headings trail off into a gradient line */
.section-head::after{
  content: ""; flex: 1; height: 1px; margin-left: 10px;
  background: linear-gradient(90deg, var(--accent), rgba(52,211,153,.6) 40%, transparent);
  opacity: .55;
}

/* Cards lift with a soft coloured glow */
.project-card, a.infra-card, .video-card, .post-card, .contact-cta{ transition: border-color .18s, transform .18s, box-shadow .18s; }
.project-card:hover, a.infra-card:hover, .video-card:hover{
  box-shadow: 0 14px 34px -14px rgba(124,116,255,.55), 0 0 0 1px rgba(124,116,255,.25);
}
a.infra-card:hover{ transform: translateY(-2px); }

/* --- About: photo in the rainbow ring, colourful facts, glowing timeline --- */
.avatar-wrap{ position: relative; flex-shrink: 0; width: 104px; height: 104px; }
.avatar-wrap .hero-ring{ inset: -6px; animation-duration: 6s; }
.avatar-wrap .hero-ring::after{ inset: 4px; }
.avatar-wrap .avatar-badge{ position: absolute; inset: 0; width: 100%; height: 100%; font-size: 32px; border: 3px solid var(--bg); }
.facts span{ transition: border-color .18s, transform .18s; }
.facts span:nth-child(4n+1){ border-color: rgba(124,116,255,.45); }
.facts span:nth-child(4n+2){ border-color: rgba(255,0,51,.4); }
.facts span:nth-child(4n+3){ border-color: rgba(52,211,153,.45); }
.facts span:nth-child(4n+4){ border-color: rgba(255,176,32,.45); }
.facts span:hover{ transform: translateY(-2px); }
.timeline::before{ background: linear-gradient(180deg, #7C74FF, #34D399 55%, #FFB020); opacity: .8; }
.timeline-item::before{ background: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft), 0 0 14px rgba(124,116,255,.7); }
.timeline-item:nth-child(3n+2)::before{ background: #34D399; box-shadow: 0 0 0 3px rgba(52,211,153,.18), 0 0 14px rgba(52,211,153,.7); }
.timeline-item:nth-child(3n)::before{ background: #FFB020; box-shadow: 0 0 0 3px rgba(255,176,32,.18), 0 0 14px rgba(255,176,32,.7); }
.timeline-item:last-child::before{ animation: nowPulse 2s ease-out infinite; }
.timeline-item:last-child .t-when{ color: var(--online); font-weight: 600; }
@keyframes nowPulse{ 0%{ box-shadow: 0 0 0 0 rgba(255,176,32,.7); } 100%{ box-shadow: 0 0 0 14px rgba(255,176,32,0); } }
#skills .stack span{ transition: border-color .18s, color .18s, transform .18s; }
#skills .stack span:hover{ border-color: var(--accent); color: var(--ink); transform: translateY(-2px); }

/* --- Servers: healthy units glow green, broken ones pulse red --- */
.unit.status-up{ border-left: 3px solid var(--online); }
.unit.status-up:hover{ box-shadow: 0 8px 22px -10px rgba(52,211,153,.6); border-color: var(--online); }
.unit.status-down{ border-left: 3px solid var(--down); animation: downPulse 2.4s ease-in-out infinite; }
@keyframes downPulse{ 50%{ box-shadow: 0 0 0 1px rgba(248,113,113,.45), 0 0 22px -4px rgba(248,113,113,.55); } }

/* --- YouTube: the newest video gets a living rainbow border --- */
/* The gradient lives in the element's own border box (padding-box keeps the
   surface colour inside), so it can't overlap content whatever the stacking */
@property --spin{ syntax: "<angle>"; inherits: false; initial-value: 0deg; }
@keyframes borderSpin{ to{ --spin: 360deg; } }
.video-card.featured{
  border: 2px solid transparent;
  background: linear-gradient(var(--surface), var(--surface)) padding-box,
              conic-gradient(from var(--spin), #FF0033, #FFB020, #34D399, #7C74FF, #FF0033) border-box;
  animation: borderSpin 6s linear infinite;
}

/* --- Contact: form card with a slowly rotating gradient border --- */
#contact .contact-card{
  border: 1.5px solid transparent;
  background: linear-gradient(var(--surface), var(--surface)) padding-box,
              conic-gradient(from var(--spin), #7C74FF, #EC4899, #34D399, #7C74FF) border-box;
  animation: borderSpin 8s linear infinite;
}
#contact .contact-form button{ background: linear-gradient(90deg, #7C74FF, #34D399); border-color: transparent; color: #0B0F0D; }
#contact .contact-form button:hover{ filter: brightness(1.1); }

/* --- Servers: a green scan line sweeps down the whole screen, like a monitor --- */
.scanline{ position: fixed; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.scanline::after{
  content: ""; position: absolute; left: 0; right: 0; height: 90px; top: -90px;
  /* faint on purpose: it sweeps behind the content like part of the grid */
  background: linear-gradient(180deg, transparent, rgba(52,211,153,.025) 70%, rgba(52,211,153,.12) 98%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 20%, #000 80%, transparent);
          mask-image: linear-gradient(90deg, transparent, #000 20%, #000 80%, transparent);
  animation: scanDown 7s cubic-bezier(.45,0,.55,1) infinite;
}
@keyframes scanDown{ 0%{ top: -90px; opacity: 0; } 6%{ opacity: 1; } 88%{ opacity: 1; } 100%{ top: 100%; opacity: 0; } }

/* --- YouTube: a red player progress bar under the title that keeps filling --- */
.yt-progress{
  position: relative; height: 4px; width: min(320px, 70%); margin: 4px 0 18px;
  background: rgba(255,255,255,.12); border-radius: 2px;
}
:root[data-theme="light"] .yt-progress{ background: rgba(0,0,0,.1); }
.yt-progress::after{
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 0; border-radius: 2px;
  background: #FF0033; box-shadow: 0 0 10px rgba(255,0,51,.6);
  animation: ytFill 7s linear infinite;
}
.yt-progress::before{
  content: ""; position: absolute; top: 50%; width: 12px; height: 12px; margin: -6px 0 0 -6px; border-radius: 50%; z-index: 1;
  background: #FF0033; left: 0; animation: ytKnob 7s linear infinite;
}
@keyframes ytFill{ 0%{ width: 0; } 92%{ width: 100%; } 100%{ width: 100%; opacity: 0; } }
@keyframes ytKnob{ 0%{ left: 0; } 92%{ left: 100%; } 100%{ left: 100%; opacity: 0; } }

/* --- 404: old-monitor scanlines over the header --- */
.page-hero.fx-crt{ isolation: isolate; }
.page-hero.fx-crt::after{
  content: ""; position: absolute; inset: -20px -10vw; z-index: -1; pointer-events: none;
  background: repeating-linear-gradient(180deg, rgba(255,255,255,.035) 0 1px, transparent 1px 4px);
}
:root[data-theme="light"] .page-hero.fx-crt::after{ background: repeating-linear-gradient(180deg, rgba(0,0,0,.04) 0 1px, transparent 1px 4px); }

/* --- 404: big glitching number above the title --- */
.big-404{
  font-family: var(--mono); font-weight: 700; font-size: clamp(84px, 16vw, 168px); line-height: .9; margin-bottom: 12px;
  background: linear-gradient(100deg, #FF0050, #7C74FF 50%, #00E5FF);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.glitch{ position: relative; display: inline-block; }
.glitch::before, .glitch::after{ content: attr(data-text); position: absolute; inset: 0; pointer-events: none; }
.glitch::before{ -webkit-text-fill-color: #FF0050; animation: glitchA 2.6s steps(1) infinite; }
.glitch::after{ -webkit-text-fill-color: #00E5FF; animation: glitchB 2.6s steps(1) infinite; }
@keyframes glitchA{ 0%, 86%, 100%{ transform: none; clip-path: inset(100% 0 0 0); } 88%{ transform: translate(-3px, -1px); clip-path: inset(10% 0 55% 0); } 92%{ transform: translate(3px, 1px); clip-path: inset(60% 0 8% 0); } }
@keyframes glitchB{ 0%, 88%, 100%{ transform: none; clip-path: inset(100% 0 0 0); } 90%{ transform: translate(3px, 1px); clip-path: inset(30% 0 40% 0); } 94%{ transform: translate(-3px, 0); clip-path: inset(70% 0 2% 0); } }

/* --- Blog list: a header like the other pages + glowing featured post --- */
.blog-hero{ position: relative; isolation: isolate; padding: 8px 0 26px; }
.blog-hero .eyebrow{ margin-bottom: 10px; }
.blog-hero .lede{ font-size: 17px; color: var(--muted); max-width: 60ch; margin: 0; }
.post-card.featured{ box-shadow: 0 18px 40px -18px rgba(124,116,255,.7); }

@media (prefers-reduced-motion: reduce){
  .page-hero.glow-aurora::before, .page-hero h1, .blog-hero h1,
  .scanline::after, .yt-progress::after, .yt-progress::before,
  .timeline-item:last-child::before, .unit.status-down,
  .video-card.featured, #contact .contact-card,
  .glitch::before, .glitch::after{ animation: none; }
  .page-hero h1, .blog-hero h1{ background-position: 0 0; }
}

/* /servers → /kaboom teaser */
.kaboom-link{
  display: inline-block; margin-top: 22px; padding: 10px 16px; border-radius: 999px;
  font-family: var(--mono); font-size: 13px; text-decoration: none; color: var(--ink);
  border: 1px dashed #FF8A1F; background: rgba(255,138,31,.08);
  transition: transform .15s, background .15s, box-shadow .15s;
}
.kaboom-link:hover, .kaboom-link:focus-visible{ background: rgba(255,138,31,.18); transform: translateY(-1px) rotate(-1deg); box-shadow: 0 0 22px rgba(255,138,31,.35); }

/* No text selection with the mouse anywhere on the site — except where you
   type (forms, the terminal, the blog admin editor). */
body{ -webkit-user-select: none; user-select: none; }
input, textarea, select, [contenteditable="true"]{ -webkit-user-select: text; user-select: text; }

/* /privacy holds two documents: the privacy policy and the terms of use */
.pp-jump{ margin-top: 10px; font-family: var(--mono); font-size: 13px; }
.pp-jump a{ color: var(--accent); }
.prose h2.pp-part{ margin-top: 56px; padding-bottom: 10px; border-bottom: 1px solid var(--line); font-size: 1.6em; scroll-margin-top: 80px; }
.prose h2.pp-part:first-child{ margin-top: 0; }

/* Footer: second line with socials */
.footer-social{ margin-top: 6px; }
