/* ============================================================================
   GLITCH ARTWORKS — SHARED CORE  (glitch-core.css)
   Single source of truth for the chrome shared by every page:
   theme tokens · grain · orbs · scanline · header/nav · social icons ·
   day-night toggle · footer · lightning image-protection.

   Per-page setup (in each page's <head>, AFTER linking this file):
     :root{ --accent:#xxxxxx; }                 night/dark accent
     :root{ --accent:#xxxxxx; --accent-day:#yyyyyy; }   if day needs a darker one
   Then mark the current nav link with class "active".
   ============================================================================ */

@import url('https://fonts.googleapis.com/css2?family=Syne:wght@300;400;500;600&family=Cormorant+Garamond:ital,wght@0,300;0,600;1,300;1,600&display=swap');

*{margin:0;padding:0;box-sizing:border-box;}

/* ── Theme tokens ─────────────────────────────────────────────────────────── */
:root{
  --bg:#080808;
  --surface:rgba(8,7,6,0.6);
  --bone:#f0ebe0;
  --ink:#0d0c0b;
  --muted:#7a7268;
  --muted-inv:#888078;
  --border:rgba(240,235,224,0.07);
  --border-inv:rgba(13,12,11,0.08);
  --line-stroke:rgba(255,255,255,0.09);
  --gold:#ffbe35;
  --util-red:#ff4c4c;       /* non-category header links: Contact, active Home */
  --orb1-col:#ffbe35;
  --orb2-col:#00e5b0;
  --text:#ffffff;
  --text-muted:rgba(255,255,255,0.72);
  --text-dim:rgba(255,255,255,0.35);
  --card-bg:rgba(8,8,8,0.6);
  --card-border:rgba(240,235,224,0.08);
  --logo-filter:none;
  --header-bg:rgba(8,8,8,0.0);
  --footer-bg:rgba(8,7,6,0.0);
  --scan-col:rgba(240,235,224,0.03);
  --grain-opacity:0.35;

  /* Category palette — the single, canonical source of truth.
     Used by the nav links so all six always render identically site-wide. */
  --cat-branding:#4a7fc1;
  --cat-uiux:#fff34f;       /* bright lemon — night */
  --cat-uiux-day:#c9962a;   /* deeper amber — day, legible on light bg */
  --cat-digital:#3aad6e;
  --cat-art:#c13a3a;
  --cat-3d:#7c5cbf;
  --cat-arch:#ff7f00;

  /* Effective page accent. Pages set --accent (and optionally --accent-day).
     Chrome reads --accent-eff so day/night swaps happen automatically. */
  --accent:var(--gold);
  --accent-eff:var(--accent);

  transition: background 0.6s ease, color 0.6s ease;
}
:root.day{
  --bg:#f8f6f1;
  --surface:rgba(248,246,241,0.75);
  --bone:#f0ebe0;
  --muted:#999188;
  --border:rgba(13,12,11,0.07);
  --line-stroke:rgba(0,0,0,0.07);
  --text:#000000;
  --text-muted:rgba(0,0,0,0.82);
  --text-dim:rgba(0,0,0,0.55);
  --card-bg:rgba(248,246,241,0.82);
  --card-border:rgba(13,12,11,0.09);
  --logo-filter:invert(1) brightness(0.05);
  --header-bg:rgba(248,246,241,0.45);
  --scan-col:rgba(0,0,0,0.015);
  --grain-opacity:0.18;

  --cat-uiux:var(--cat-uiux-day); /* lemon → amber for legibility on light */
  --accent-eff:var(--accent-day, var(--accent));
}

html,body{width:100%;min-height:100vh;background:var(--bg);color:var(--text);font-family:"Syne",sans-serif;overflow-x:hidden;transition:background 0.6s ease,color 0.6s ease;}

/* ── Grain ────────────────────────────────────────────────────────────────── */
body::after{content:"";position:fixed;inset:0;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");pointer-events:none;z-index:50;opacity:var(--grain-opacity);transition:opacity 0.6s;}

/* ── Orbs ─────────────────────────────────────────────────────────────────── */
.orb{position:fixed;border-radius:50%;filter:blur(130px);opacity:0.06;pointer-events:none;z-index:0;transition:opacity 0.6s,background 0.6s;}
.orb1{width:700px;height:700px;background:var(--accent-eff);top:-250px;left:-250px;}
.orb2{width:600px;height:600px;background:var(--orb2-col);bottom:-200px;right:-200px;}
.orb3{width:350px;height:350px;background:var(--accent-eff);top:30%;left:38%;transform:translate(-50%,-50%);transition:background 0.8s ease;}
:root.day .orb{opacity:0.05;} :root.day .orb1{opacity:0.04;} :root.day .orb2{opacity:0 !important;} :root.day .orb3{opacity:0.04;}

/* ── HEADER ───────────────────────────────────────────────────────────────── */
header{
  position:fixed;top:0;left:0;right:0;z-index:100;
  height:50px;
  display:flex;align-items:center;justify-content:space-between;
  padding:0 28px;
  background:var(--header-bg);
  backdrop-filter:blur(16px) saturate(150%);-webkit-backdrop-filter:blur(16px) saturate(150%);
  border-bottom:none;
  transition:background 0.6s,border-color 0.6s;
}
.hdr-logo span{display:none;}
/* Full-bleed gallery pages: the floating header would vanish over the artwork,
   so give it a solid bar with a hairline edge. Other pages stay transparent. */
:root.is-gallery header{background:linear-gradient(180deg,rgba(255,255,255,0.07),rgba(255,255,255,0) 65%),rgba(8,7,6,0.18);border-bottom:none;box-shadow:inset 0 1px 0 rgba(255,255,255,0.11);}
:root.day.is-gallery header{background:linear-gradient(180deg,rgba(255,255,255,0.62),rgba(255,255,255,0.16) 70%),rgba(248,246,241,0.22);border-bottom:none;box-shadow:inset 0 1px 0 rgba(255,255,255,0.85);}
/* Transparent glass needs a touch of shadow so text stays legible over bright artwork */
:root.is-gallery .nav-link,:root.is-gallery .foot-l,:root.is-gallery .foot-c,:root.is-gallery .foot-r{text-shadow:0 1px 6px rgba(0,0,0,0.55);}
:root.day.is-gallery .nav-link,:root.day.is-gallery .foot-l,:root.day.is-gallery .foot-c,:root.day.is-gallery .foot-r{text-shadow:0 1px 6px rgba(255,255,255,0.65);}
.hdr-left{display:flex;align-items:center;gap:32px;}
.hdr-logo{
  width:30px;height:30px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  text-decoration:none;
  background:linear-gradient(155deg,rgba(64,61,74,0.80),rgba(22,20,28,0.74));
  border:0.5px solid rgba(255,255,255,0.10);
  box-shadow:0 2px 8px rgba(0,0,0,0.45),0 1px 0 rgba(255,255,255,0.10) inset;
  backdrop-filter:blur(8px) saturate(140%);-webkit-backdrop-filter:blur(8px) saturate(140%);
  transition:transform 0.18s,box-shadow 0.22s,background 0.6s;
  opacity:0.90;position:relative;overflow:hidden;
}
:root.day .hdr-logo{
  background:linear-gradient(155deg,rgba(255,255,255,0.78),rgba(255,255,255,0.45));
  border:0.5px solid rgba(0,0,0,0.08);
  box-shadow:0 1px 4px rgba(60,50,35,0.07),0 1px 0 rgba(255,255,255,1) inset;
}
.hdr-logo::before{
  content:"";position:absolute;top:0;left:10%;width:80%;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,0.22),transparent);
  pointer-events:none;
}
.hdr-logo:hover{opacity:1;transform:scale(1.10) translateY(-1px);}
.hdr-logo.active{background:color-mix(in srgb,var(--util-red) 22%,transparent);border-color:color-mix(in srgb,var(--util-red) 38%,transparent);}
.hdr-logo.active svg{fill:var(--util-red);filter:drop-shadow(0 0 4px var(--util-red));}
.hdr-logo svg{width:14px;height:14px;fill:var(--text);transition:fill 0.6s;position:relative;z-index:1;}
nav{display:flex;align-items:center;gap:24px;}
.nav-link{
  font-size:11.3px;letter-spacing:0.28em;text-transform:uppercase;
  color:var(--text-muted);text-decoration:none;
  transition:color 0.25s,border-color 0.25s;padding:2px 0;
  border-bottom:0.5px solid transparent;
}
.nav-link:hover{color:var(--cat,var(--gold));border-bottom-color:var(--cat,var(--gold));}
.nav-link.active{color:var(--cat,var(--gold));border-bottom-color:var(--cat,var(--gold));}
.hdr-right{display:flex;align-items:center;gap:14px;}

/* ── Social icons — glass app-icon style ──────────────────────────────────── */
.soc-icon{
  width:30px;height:30px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  text-decoration:none;flex-shrink:0;color:#fff;
  position:relative;overflow:hidden;
  background:linear-gradient(155deg,rgba(64,61,74,0.80),rgba(22,20,28,0.74));
  border:0.5px solid rgba(255,255,255,0.10);
  box-shadow:0 2px 8px rgba(0,0,0,0.45),0 1px 0 rgba(255,255,255,0.10) inset;
  backdrop-filter:blur(8px) saturate(140%);-webkit-backdrop-filter:blur(8px) saturate(140%);
  transition:transform 0.18s,box-shadow 0.22s;
  opacity:0.90;
}
.soc-icon::after{
  content:"";position:absolute;
  bottom:-4px;left:10%;width:80%;height:55%;
  border-radius:50%;filter:blur(7px);
  opacity:0.75;z-index:0;transition:opacity 0.2s,transform 0.2s;
}
.soc-icon::before{
  content:"";position:absolute;
  top:0;left:10%;width:80%;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,0.22),transparent);
  z-index:2;pointer-events:none;
}
.soc-icon svg{position:relative;z-index:1;width:14px;height:14px;}
.soc-icon:hover{
  opacity:1;transform:scale(1.12) translateY(-1px);
  box-shadow:0 6px 18px rgba(0,0,0,0.55),0 1px 0 rgba(255,255,255,0.10) inset;
}
.soc-icon:hover::after{opacity:1;transform:scaleX(1.2);}

.soc-ig::after,.soc-fb::after,.soc-wa::after,.soc-li::after,.soc-yt::after,.soc-tt::after{background:#ff4c4c;}

:root.day .soc-icon{
  background:linear-gradient(155deg,rgba(255,255,255,0.78),rgba(255,255,255,0.45));
  border:0.5px solid rgba(0,0,0,0.08);
  box-shadow:0 1px 4px rgba(60,50,35,0.07),0 1px 0 rgba(255,255,255,1) inset;
  color:#1a1a1a;
}
:root.day .soc-icon::before{background:linear-gradient(90deg,transparent,rgba(255,255,255,0.7),transparent);}
:root.day .soc-icon::after{opacity:0.16;}
:root.day .soc-icon:hover{box-shadow:0 3px 10px rgba(60,50,35,0.10),0 1px 0 rgba(255,255,255,1) inset;}
:root.day .soc-icon:hover::after{opacity:0.80;}
:root.day .soc-ig svg,:root.day .soc-fb svg,:root.day .soc-wa svg,
:root.day .soc-li svg,:root.day .soc-yt svg,:root.day .soc-tt svg{color:#1a1a1a;}

/* ── Neumorphic day/night toggle ──────────────────────────────────────────── */
.theme-float{
  position:fixed;top:58px;right:22px;z-index:110;
  width:34px;height:34px;border-radius:50%;
  background:transparent;border:none;cursor:pointer;padding:0;
  display:flex;align-items:center;justify-content:center;
  color:var(--text-muted);
  transition:color .3s,transform .35s cubic-bezier(.34,1.4,.5,1);
}
.theme-float:hover{color:var(--text);transform:scale(1.14) rotate(10deg);}
:root.day .theme-float{color:#d99a1f;}
:root.day .theme-float:hover{color:#e8a820;}
.theme-float svg{display:block;}

/* ── Custom cursor — dot + ring + glow, white on dark / black on light ─────── */
#cursor{position:fixed;pointer-events:none;z-index:9999;top:0;left:0;}
#cursor .dot{width:5px;height:5px;border-radius:50%;background:var(--cursor-col,var(--text));position:absolute;transform:translate(-50%,-50%);box-shadow:0 0 8px var(--cursor-col,var(--text)),0 0 16px color-mix(in srgb,var(--cursor-col,var(--text)) 45%,transparent);transition:transform 0.15s,background 0.6s,box-shadow 0.6s;}
#cursor .ring{width:28px;height:28px;border-radius:50%;border:0.5px solid color-mix(in srgb,var(--cursor-col,var(--text)) 40%,transparent);position:absolute;transform:translate(-50%,-50%);transition:width 0.3s,height 0.3s,border-color 0.3s;}
#cursor.hover .dot{transform:translate(-50%,-50%) scale(2.5);}
#cursor.hover .ring{width:48px;height:48px;border-color:color-mix(in srgb,var(--cursor-col,var(--text)) 70%,transparent);}
#cursor-glow{position:fixed;pointer-events:none;z-index:8999;width:480px;height:480px;border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--cursor-col,var(--text)) 11%,transparent) 0%,color-mix(in srgb,var(--cursor-col,var(--text)) 4%,transparent) 40%,transparent 70%);transform:translate(-50%,-50%);opacity:0;transition:opacity 0.4s;top:0;left:0;}
/* Hide the native pointer only on real mouse devices; leave touch untouched */
@media (hover:hover) and (pointer:fine){ *{cursor:none !important;} }
@media (hover:none),(pointer:coarse){ #cursor,#cursor-glow{display:none !important;} }
/* Plain pages (Home / About / Contact): no cursor glow in either mode — clean dot + ring.
   Category pages keep their accent glow (set via JS at line ~36, untouched here). */
:root.plain-cursor #cursor-glow{display:none;}
:root.plain-cursor #cursor .dot{box-shadow:none;}

/* ── Generic scanline ─────────────────────────────────────────────────────── */
/* Reads --accent-eff so each page's category colour applies automatically.
   Home and Architecture override this locally (see their own <style> blocks). */
.scanline{position:fixed;top:-2px;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent-eff) 22%,transparent),transparent);animation:scan 18s linear infinite;z-index:40;pointer-events:none;}
@keyframes scan{0%{top:-2px}100%{top:100vh}}

/* ── FOOTER ───────────────────────────────────────────────────────────────── */
footer{
  position:relative;z-index:1;
  padding:20px 40px;
  display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;
}
.foot-l{font-size:11.5px;letter-spacing:0.22em;color:var(--text);transition:color 0.6s;}
.foot-c{font-size:10.3px;letter-spacing:0.28em;text-transform:uppercase;color:var(--text);transition:color 0.6s;}
.foot-r{font-family:"Cormorant Garamond",serif;font-style:italic;font-size:14.9px;color:var(--text);transition:color 0.6s;}

/* ── Galleries: footer pinned as a slim bottom scrim ──────────────────────────
   Full-bleed gallery pages are fixed-height and non-scrolling, so a normal-flow
   footer has no bottom of the document to sit at. On .is-gallery we pin it as a
   glossy glass bar along the bottom edge. pointer-events:none keeps the gallery
   fully interactive underneath. */

/* Gallery height standard: content fills to the very bottom edge so the fixed
   footer reads as transparent glass over the artwork (as on the Art page). This
   out-specifies any per-page `.shell{bottom:NNpx}` without editing the page. */
:root.is-gallery .shell{bottom:0;}

:root.is-gallery footer{
  display:flex;          /* override any stray per-page footer{display:none} */
  position:fixed;left:0;right:0;bottom:0;z-index:60;
  padding:11px 30px;
  /* glossy transparent glass: top sheen, faint body, no dark divider line */
  background:linear-gradient(180deg,rgba(255,255,255,0.07) 0%,rgba(255,255,255,0.012) 50%,rgba(8,7,6,0.05) 100%);
  -webkit-backdrop-filter:blur(13px) saturate(155%);backdrop-filter:blur(13px) saturate(155%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.12);
  border:none;
  pointer-events:none;
}
/* Lift any bottom-pinned gallery UI (e.g. the project progress dots) clear of the bar */
/* ── Scroll progress — horizontal centred dots; active stretches to a pill,
   coloured by the page's own accent. Standard across all category pages. ──── */
.progress{position:fixed;bottom:46px;left:50%;transform:translateX(-50%);display:flex;gap:8px;z-index:210;align-items:center;pointer-events:auto;padding:8px 12px;}
.prog-dot{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,0.18);transition:all 0.35s;cursor:none;pointer-events:auto;}
.prog-dot:hover{background:var(--accent);opacity:0.55;}
.prog-dot.active{background:var(--accent);width:24px;border-radius:3px;opacity:1;}
:root.day .prog-dot{background:rgba(0,0,0,0.2);}
:root.day .prog-dot.active{background:var(--accent);opacity:1;}
:root.is-gallery .progress{bottom:54px;}   /* clear the slim gallery footer */
/* Day-mode gallery footer — light glossy glass */
:root.day.is-gallery footer{
  background:linear-gradient(180deg,rgba(255,255,255,0.55) 0%,rgba(255,255,255,0.18) 55%,rgba(248,246,241,0.06) 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.8);
}

/* ── Scrollbar ────────────────────────────────────────────────────────────── */
::-webkit-scrollbar{width:0;height:0;background:transparent;}

/* ── LIGHTNING image-protection ───────────────────────────────────────────── */
#lightning{position:fixed;inset:0;z-index:99999;pointer-events:none;display:flex;align-items:center;justify-content:center;opacity:0;}
#lightning.strike{animation:strikeSeq 1.3s forwards;}
@keyframes strikeSeq{0%{opacity:0;background:transparent;}6%{opacity:1;background:rgba(255,20,20,0.12);}12%{opacity:0;background:transparent;}18%{opacity:1;background:rgba(255,20,20,0.22);}24%{opacity:0;background:transparent;}30%{opacity:1;background:rgba(255,30,30,0.35);}42%{opacity:0;background:transparent;}100%{opacity:0;}}
#lightning svg{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);opacity:0;filter:drop-shadow(0 0 24px #ff2200) drop-shadow(0 0 60px #ff4400);}
#lightning.strike svg{animation:boltFlash 1.3s forwards;}
@keyframes boltFlash{0%{opacity:0;transform:translate(-50%,-50%) scale(0.7);}8%{opacity:1;transform:translate(-50%,-50%) scale(1.05);}16%{opacity:0;}22%{opacity:0.95;transform:translate(-50%,-50%) scale(1);}32%{opacity:0;}40%{opacity:1;transform:translate(-50%,-50%) scale(1.02);}58%{opacity:0;transform:translate(-50%,-50%) scale(1);}100%{opacity:0;}}
#lightning-msg{position:absolute;bottom:18%;left:50%;transform:translateX(-50%);font-family:"Syne",sans-serif;font-size:11.5px;letter-spacing:0.35em;text-transform:uppercase;color:#ff4422;opacity:0;text-shadow:0 0 14px rgba(255,60,20,0.9);white-space:nowrap;}
#lightning.strike #lightning-msg{animation:msgFlash 1.3s forwards;}
@keyframes msgFlash{0%{opacity:0;}42%{opacity:0;}52%{opacity:1;}88%{opacity:1;}100%{opacity:0;}}

/* ── Stars: client / coursework badges (shared semantic legend) ───────────────
   Tag a project rc (real client) or hw (coursework); call GLITCH.makeStar(type).
   Blue pulsing = coursework · orange = real client. Same colours on every page. */
.star-badge{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;cursor:none;position:relative;}
.star-badge svg{width:12px;height:12px;}
.star-badge.hw svg{animation:starPulse 2s ease-in-out infinite;}
@keyframes starPulse{0%,100%{opacity:0.5;filter:drop-shadow(0 0 2px #4a9eff);}50%{opacity:1;filter:drop-shadow(0 0 8px #4a9eff) drop-shadow(0 0 16px rgba(74,158,255,0.6));}}
.star-badge.rc svg{filter:drop-shadow(0 0 4px #ff8c42);}
.star-badge.pw svg{filter:drop-shadow(0 0 3px rgba(74,158,255,0.85));}
.pi-name .pi-star{display:inline-flex;vertical-align:middle;margin-left:10px;cursor:none;}
/* glass info card — shown next to a star on tap, auto-hides */
.star-card{position:fixed;z-index:9990;background:linear-gradient(180deg,rgba(255,255,255,0.06),rgba(255,255,255,0) 55%),var(--card-bg);border:0.5px solid var(--card-border);backdrop-filter:blur(18px) saturate(150%);-webkit-backdrop-filter:blur(18px) saturate(150%);padding:12px 16px;border-radius:6px;pointer-events:none;opacity:0;transition:opacity 0.25s,transform 0.25s;transform:translateY(4px) scale(0.96);min-width:220px;max-width:280px;box-shadow:0 8px 32px rgba(0,0,0,0.5);}
.star-card::before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.1),transparent);}
.star-card.show{opacity:1;transform:translateY(0) scale(1);}
.star-card-label{font-size:8.8px;letter-spacing:0.25em;text-transform:uppercase;display:block;margin-bottom:5px;}
.star-card.hw .star-card-label{color:rgba(74,158,255,0.85);}
.star-card.pw .star-card-label{color:rgba(74,158,255,0.85);}
.star-card.rc .star-card-label{color:rgba(255,140,66,0.9);}
.star-card-msg{font-family:"Cormorant Garamond",serif;font-style:italic;font-size:14.3px;font-weight:300;color:var(--text-muted);line-height:1.6;}

/* ── Galleries: shared readable type scale ────────────────────────────────────
   Scoped to .is-gallery so it overrides the per-page sizes on specificity;
   bump the small body / meta / tag text once for every gallery. */
:root.is-gallery .sidebar-label{font-size:9px;}
:root.is-gallery .tab-name{font-size:17px;}
:root.is-gallery .brief-type{font-size:9.5px;}
:root.is-gallery .brief-text{font-size:15px;}
:root.is-gallery .brief-tag{font-size:9.5px;}
:root.is-gallery .pi-num{font-size:10.5px;}
:root.is-gallery .pi-col-label{font-size:9.5px;}
:root.is-gallery .pi-col-val{font-size:15px;}
:root.is-gallery .cpt-label{font-size:9.5px;}
:root.is-gallery .cpt-body{font-size:15.5px;}

/* ── Small screens — keep the nav from overflowing the bar ─────────────────── */
@media (max-width:680px){
  nav{gap:14px;}
  .nav-link{font-size:10px;letter-spacing:0.18em;}
  header{padding:0 16px;}
}
:root.day .knockout{filter:invert(1) hue-rotate(180deg) brightness(.85) contrast(1.08);}

/* ── Contact orb — neon-green glass beacon (all pages) ───────────────────── */
.contact-orb{--orb-rgb:43,255,136;--orb-neon:#2bff88;position:fixed;right:30px;bottom:54px;width:60px;height:60px;z-index:70;font-family:"Syne",sans-serif;transition:transform .55s cubic-bezier(.6,0,.2,1);}
:root.day .contact-orb{--orb-neon:#0fa85c;--orb-rgb:15,168,92;}
:root.is-gallery .contact-orb{bottom:72px;}
.contact-orb.open{transform:translate(-66px,-66px);}

/* transparent frosted glass: faint film + top sheen + neon edge */
.orb-core{position:absolute;inset:0;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--orb-neon);
  background:linear-gradient(155deg,rgba(255,255,255,0.12),rgba(var(--orb-rgb),0.05) 62%);
  border:1px solid rgba(var(--orb-rgb),0.32);backdrop-filter:blur(16px) saturate(170%);-webkit-backdrop-filter:blur(16px) saturate(170%);
  filter:drop-shadow(0 5px 16px rgba(0,0,0,.25));box-shadow:0 0 22px rgba(var(--orb-rgb),.34),inset 0 1px 0 rgba(255,255,255,.22),inset 0 0 14px rgba(var(--orb-rgb),.10);
  animation:orb-pulse 2.6s ease-in-out infinite;transition:color .3s,box-shadow .3s;z-index:3;}
.orb-core:hover{color:#eaffef;}
.orb-icon{display:flex;transition:transform .5s cubic-bezier(.34,1.3,.5,1);}
.contact-orb.open .orb-core{animation:none;box-shadow:0 0 30px rgba(var(--orb-rgb),.55),inset 0 1px 0 rgba(255,255,255,.22);}
.contact-orb.open .orb-icon{transform:rotate(45deg) scale(.9);}
@keyframes orb-pulse{0%,100%{box-shadow:0 0 0 0 rgba(var(--orb-rgb),.30),0 0 20px rgba(var(--orb-rgb),.32),inset 0 1px 0 rgba(255,255,255,.22);}50%{box-shadow:0 0 0 11px rgba(var(--orb-rgb),0),0 0 34px rgba(var(--orb-rgb),.6),inset 0 1px 0 rgba(255,255,255,.22);}}

/* rotating CTA pill — visible at rest, brightens on hover (pre-click prompt) */
.orb-cta{position:absolute;top:50%;right:74px;transform:translateY(-50%);display:flex;align-items:center;height:30px;padding:0 15px;border-radius:16px;white-space:nowrap;cursor:pointer;
  background:linear-gradient(155deg,rgba(255,255,255,0.10),rgba(var(--orb-rgb),0.05) 62%);
  border:1px solid rgba(var(--orb-rgb),0.28);backdrop-filter:blur(13px) saturate(160%);-webkit-backdrop-filter:blur(13px) saturate(160%);
  box-shadow:0 0 16px rgba(var(--orb-rgb),.16);opacity:.8;transition:opacity .3s,transform .3s,box-shadow .3s;}
.orb-cta-txt{font-family:"Syne",sans-serif;font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--orb-neon);text-shadow:0 0 8px rgba(var(--orb-rgb),.5);transition:opacity .35s;}
.contact-orb:hover .orb-cta{opacity:1;transform:translateY(-50%) translateX(-3px);box-shadow:0 0 24px rgba(var(--orb-rgb),.34);}
.contact-orb.open .orb-cta{opacity:0;pointer-events:none;transform:translateY(-50%) scale(.9);}

.orb-ring{position:absolute;left:30px;top:30px;width:220px;height:220px;margin:-110px 0 0 -110px;pointer-events:none;opacity:0;transform:scale(.35);transition:transform .55s cubic-bezier(.34,1.35,.5,1),opacity .4s;z-index:1;}
.contact-orb.open .orb-ring{opacity:1;transform:scale(1);}
.orb-ring-svg{width:100%;height:100%;display:block;animation:orb-spin 28s linear infinite;filter:drop-shadow(0 0 6px rgba(var(--orb-rgb),.3));}
@keyframes orb-spin{to{transform:rotate(360deg);}}
.orb-ring-text{font-family:"Syne",sans-serif;font-size:10.5px;font-weight:600;letter-spacing:1.2px;text-transform:uppercase;fill:var(--orb-neon);}
.orb-dot{font-size:1.5em;}  /* separator dot size in the ring — bump this to make the dots bigger */

.orb-sat{position:absolute;left:30px;top:30px;width:46px;height:46px;margin:-23px 0 0 -23px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--text-muted);text-decoration:none;
  background:linear-gradient(155deg,rgba(255,255,255,0.12),rgba(var(--orb-rgb),0.05) 62%);
  border:1px solid rgba(var(--orb-rgb),0.26);backdrop-filter:blur(14px) saturate(160%);-webkit-backdrop-filter:blur(14px) saturate(160%);
  box-shadow:0 6px 20px rgba(0,0,0,.3),0 0 16px rgba(var(--orb-rgb),.14),inset 0 1px 0 rgba(255,255,255,.2);
  opacity:0;transform:translate(0,0) scale(.2);transition:transform .5s cubic-bezier(.34,1.3,.5,1),opacity .4s,color .25s,box-shadow .25s;z-index:2;}
.orb-sat:hover{color:var(--orb-neon);box-shadow:0 6px 22px rgba(0,0,0,.34),0 0 22px rgba(var(--orb-rgb),.34),inset 0 1px 0 rgba(255,255,255,.2);}
:root.day .orb-core{filter:drop-shadow(0 3px 12px rgba(60,50,35,.12));}
:root.day .orb-sat{box-shadow:0 3px 12px rgba(60,50,35,.10),0 0 16px rgba(var(--orb-rgb),.14),inset 0 1px 0 rgba(255,255,255,.7);}
:root.day .orb-sat:hover{box-shadow:0 5px 16px rgba(60,50,35,.12),0 0 22px rgba(var(--orb-rgb),.30),inset 0 1px 0 rgba(255,255,255,.7);}
:root.day .orb-cta{box-shadow:0 2px 10px rgba(60,50,35,.08);}
.contact-orb.open .orb-sat{opacity:1;}
.contact-orb.open .orb-sat-1{transform:translate(2px,-138px) scale(1);transition-delay:.06s;}
.contact-orb.open .orb-sat-2{transform:translate(-98px,-98px) scale(1);transition-delay:.13s;}
.contact-orb.open .orb-sat-3{transform:translate(-138px,2px) scale(1);transition-delay:.20s;}

@media (prefers-reduced-motion:reduce){.orb-core{animation:none;}.orb-ring-svg{animation:none;}}
@media (max-width:640px){
  .contact-orb{right:20px;bottom:44px;}
  :root.is-gallery .contact-orb{bottom:70px;}
  .contact-orb.open{transform:translate(-56px,-56px);}
  .orb-cta{height:27px;padding:0 12px;right:70px;}
  .orb-cta-txt{font-size:10px;}
  .orb-ring{width:190px;height:190px;margin:-95px 0 0 -95px;}
  .orb-ring-text{font-size:9.5px;letter-spacing:0.7px;}
  .contact-orb.open .orb-sat-1{transform:translate(2px,-120px) scale(1);}
  .contact-orb.open .orb-sat-2{transform:translate(-86px,-86px) scale(1);}
  .contact-orb.open .orb-sat-3{transform:translate(-120px,2px) scale(1);}
}

/* centered nav (wide screens) */
@media (min-width:1100px){nav{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);}}
