/* ============================================================
   IGUAKO INSTITUTE FOR APPLIED UNREALITY
   iguako.tech — global chrome
   Do not read this file. It reads back.
   ============================================================ */

:root{
  --ink:#e8e4dc;
  --ink-dim:#9a948a;
  --void:#07070a;
  --void-2:#0e0d14;
  --void-3:#15131e;
  --bile:#c8ff4d;
  --rot:#7cf03d;
  --blood:#ff2d55;
  --bruise:#8b5cf6;
  --cyan:#22e4ff;
  --hot:#ff4fd8;
  --amber:#ffb020;
  --bone:#efe7d6;

  --mono:ui-monospace,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
  --sans:system-ui,-apple-system,"Segoe UI",Helvetica,Arial,sans-serif;
  --serif:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;

  --gut:clamp(16px,4vw,48px);
  --z-chrome:9000;
}

*,*::before,*::after{box-sizing:border-box}

html{
  background:var(--void);
  color-scheme:dark;
  scroll-behavior:smooth;
  -webkit-text-size-adjust:100%;
}

body{
  margin:0;
  background:var(--void);
  color:var(--ink);
  font-family:var(--sans);
  font-size:16px;
  line-height:1.6;
  overflow-x:hidden;
  min-height:100vh;
  position:relative;
}

img{max-width:100%;height:auto;display:block}
svg{display:block;max-width:100%}
a{color:var(--bile);text-underline-offset:3px}
a:hover{color:var(--hot)}

::selection{background:var(--bile);color:#000}

/* ---------- film grain / scanline overlay ---------- */
.grain{
  position:fixed;inset:0;pointer-events:none;z-index:8000;
  opacity:.055;mix-blend-mode:overlay;
  background-image:var(--grain-url);
  background-size:180px 180px;
  animation:grainShift .5s steps(6) infinite;
}
@keyframes grainShift{
  0%{transform:translate(0,0)}      16%{transform:translate(-3%,-4%)}
  33%{transform:translate(-6%,2%)}  50%{transform:translate(4%,-3%)}
  66%{transform:translate(-2%,5%)}  83%{transform:translate(3%,3%)}
  100%{transform:translate(0,0)}
}
.scan{
  position:fixed;inset:0;pointer-events:none;z-index:8001;opacity:.28;
  background:repeating-linear-gradient(
    to bottom,
    rgba(0,0,0,0) 0px,
    rgba(0,0,0,0) 2px,
    rgba(0,0,0,.42) 3px,
    rgba(0,0,0,.42) 4px);
}
.vig{
  position:fixed;inset:0;pointer-events:none;z-index:7999;
  background:radial-gradient(ellipse at 50% 45%,transparent 38%,rgba(0,0,0,.72) 100%);
}

/* ---------- cursor trail canvas ---------- */
#igk-trail{position:fixed;inset:0;pointer-events:none;z-index:7998;}

/* ---------- persistent chrome: CALM MODE ---------- */
.igk-calm-btn{
  position:fixed;right:14px;bottom:14px;z-index:var(--z-chrome);
  font-family:var(--mono);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;
  background:#000;color:var(--bile);
  border:1px solid var(--bile);
  padding:9px 13px;border-radius:2px;cursor:pointer;
  box-shadow:0 0 0 1px #000,0 0 22px rgba(200,255,77,.28);
  transition:background .15s,color .15s,box-shadow .15s;
  line-height:1;
}
.igk-calm-btn:hover{background:var(--bile);color:#000}
.igk-calm-btn::before{content:"◉ ";}
[data-calm="1"] .igk-calm-btn{color:var(--cyan);border-color:var(--cyan);box-shadow:0 0 0 1px #000}
[data-calm="1"] .igk-calm-btn::before{content:"○ ";}
[data-calm="1"] .igk-calm-btn:hover{background:var(--cyan);color:#000}

/* ---------- the observer readout ---------- */
.igk-obs{
  position:fixed;left:14px;bottom:14px;z-index:var(--z-chrome);
  font-family:var(--mono);font-size:10px;letter-spacing:.1em;
  color:var(--ink-dim);background:rgba(0,0,0,.68);
  border:1px solid #262230;padding:7px 10px;border-radius:2px;
  pointer-events:none;user-select:none;line-height:1.5;
  max-width:44vw;
}
.igk-obs b{color:var(--blood);font-weight:600}
@media(max-width:640px){.igk-obs{font-size:9px;max-width:52vw}}

/* ---------- nav rail ---------- */
.igk-nav{
  position:sticky;top:0;z-index:6000;
  display:flex;gap:0;flex-wrap:wrap;align-items:stretch;
  background:rgba(4,4,7,.9);
  backdrop-filter:blur(9px) saturate(1.3);
  -webkit-backdrop-filter:blur(9px) saturate(1.3);
  border-bottom:1px solid #23202c;
  font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;
}
.igk-nav a{
  color:var(--ink-dim);text-decoration:none;
  padding:12px 14px;border-right:1px solid #1b1924;
  white-space:nowrap;transition:color .14s,background .14s;
}
.igk-nav a:hover{color:#000;background:var(--bile)}
.igk-nav a.here{color:var(--bile)}
.igk-nav .brand{color:var(--ink);font-weight:700;letter-spacing:.28em}
.igk-nav .brand:hover{background:var(--blood);color:#fff}
.igk-nav .spacer{flex:1;border:0}
@media(max-width:760px){
  .igk-nav{font-size:9px}
  .igk-nav a{padding:10px 9px}
  .igk-nav .spacer{display:none}
}

/* ---------- layout ---------- */
.wrap{max-width:1080px;margin:0 auto;padding:0 var(--gut)}
.wrap-wide{max-width:1400px;margin:0 auto;padding:0 var(--gut)}
.wrap-tight{max-width:680px;margin:0 auto;padding:0 var(--gut)}
section{padding:clamp(48px,9vw,110px) 0}
.pad-sm{padding:clamp(28px,5vw,56px) 0}

h1,h2,h3,h4{line-height:1.05;margin:0 0 .5em;font-weight:800;letter-spacing:-.02em}
h1{font-size:clamp(38px,8vw,96px)}
h2{font-size:clamp(28px,5vw,56px)}
h3{font-size:clamp(19px,2.6vw,28px)}
p{margin:0 0 1.1em;max-width:68ch}
.lede{font-size:clamp(17px,2.1vw,22px);color:#cfc9bd;max-width:60ch}
.dim{color:var(--ink-dim)}
.mono{font-family:var(--mono)}
.tiny{font-size:11px;letter-spacing:.14em;text-transform:uppercase;font-family:var(--mono);color:var(--ink-dim)}
.center{text-align:center}
.mx{margin-left:auto;margin-right:auto}

/* ---------- eyebrow / rule ---------- */
.eyebrow{
  font-family:var(--mono);font-size:11px;letter-spacing:.3em;text-transform:uppercase;
  color:var(--blood);margin-bottom:18px;display:block;
}
hr.rule{border:0;height:1px;background:linear-gradient(90deg,transparent,#33303d,transparent);margin:48px 0}

/* ---------- buttons ---------- */
.btn{
  display:inline-block;font-family:var(--mono);font-size:12px;letter-spacing:.18em;
  text-transform:uppercase;text-decoration:none;
  padding:14px 24px;border:1px solid var(--bile);color:var(--bile);background:transparent;
  cursor:pointer;transition:.16s;border-radius:2px;
}
.btn:hover{background:var(--bile);color:#000;box-shadow:0 0 30px rgba(200,255,77,.4)}
.btn-blood{border-color:var(--blood);color:var(--blood)}
.btn-blood:hover{background:var(--blood);color:#fff;box-shadow:0 0 30px rgba(255,45,85,.4)}
.btn-ghost{border-color:#3a3646;color:var(--ink-dim)}
.btn-ghost:hover{background:#3a3646;color:var(--ink);box-shadow:none}

/* ---------- cards / grid ---------- */
.grid{display:grid;gap:18px}
.g2{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.g4{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.card{
  background:linear-gradient(180deg,var(--void-2),var(--void));
  border:1px solid #221f2b;border-radius:3px;padding:22px;
  position:relative;overflow:hidden;
}
.card h3{margin-bottom:.35em}
.card:hover{border-color:#3a3548}

/* ---------- glitch text ---------- */
.glitch{position:relative;display:inline-block;isolation:isolate}
.glitch::before,.glitch::after{
  content:attr(data-t);position:absolute;left:0;top:0;width:100%;
  pointer-events:none;
}
.glitch::before{color:var(--cyan);animation:gl1 2.7s infinite steps(2);clip-path:inset(0 0 62% 0)}
.glitch::after{color:var(--blood);animation:gl2 3.3s infinite steps(2);clip-path:inset(58% 0 0 0)}
@keyframes gl1{0%,86%,100%{transform:translate(0,0);opacity:0}88%{transform:translate(-3px,-2px);opacity:.9}94%{transform:translate(2px,1px);opacity:.7}}
@keyframes gl2{0%,90%,100%{transform:translate(0,0);opacity:0}92%{transform:translate(3px,2px);opacity:.9}97%{transform:translate(-2px,-1px);opacity:.6}}

/* ---------- flicker ---------- */
.flicker{animation:flick 4.5s infinite}
@keyframes flick{
  0%,88%,100%{opacity:1}89%{opacity:.28}90%{opacity:1}
  93%{opacity:.4}94%{opacity:1}96%{opacity:.65}97%{opacity:1}
}

/* ---------- breathe ---------- */
.breathe{animation:breathe 7s ease-in-out infinite}
@keyframes breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.035)}}

/* ---------- drift ---------- */
.drift{animation:drift 22s ease-in-out infinite alternate}
@keyframes drift{0%{transform:translate(0,0) rotate(0)}100%{transform:translate(18px,-22px) rotate(3deg)}}

/* ---------- shake (chaos) ---------- */
.shaking{animation:shk .34s cubic-bezier(.36,.07,.19,.97) both}
@keyframes shk{
  10%,90%{transform:translate3d(-2px,0,0)}
  20%,80%{transform:translate3d(4px,0,0)}
  30%,50%,70%{transform:translate3d(-7px,0,0)}
  40%,60%{transform:translate3d(7px,0,0)}
}

/* ---------- in-page fake dialog (fully escapable, never a real popup) ---------- */
.igk-dialog-wrap{
  position:fixed;inset:0;z-index:9500;display:grid;place-items:center;
  background:rgba(0,0,0,.55);backdrop-filter:blur(3px);
  animation:fadeIn .18s ease both;
}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.igk-dialog{
  width:min(440px,92vw);
  background:#c9c9c9;color:#111;
  border:2px solid #fff;border-right-color:#5a5a5a;border-bottom-color:#5a5a5a;
  box-shadow:5px 5px 0 rgba(0,0,0,.6);
  font-family:var(--sans);font-size:13px;
}
.igk-dialog .tb{
  background:linear-gradient(90deg,#000080,#1084d0);color:#fff;
  padding:4px 7px;font-weight:700;font-size:12px;
  display:flex;justify-content:space-between;align-items:center;
  cursor:default;user-select:none;
}
.igk-dialog .tb button{
  background:#c9c9c9;border:1px solid #fff;border-right-color:#5a5a5a;border-bottom-color:#5a5a5a;
  width:17px;height:15px;font-size:10px;line-height:1;cursor:pointer;color:#000;padding:0;
}
.igk-dialog .bd{padding:18px;display:flex;gap:14px;align-items:flex-start}
.igk-dialog .bd p{margin:0;color:#111;max-width:none}
.igk-dialog .ft{padding:0 18px 16px;display:flex;gap:9px;justify-content:flex-end}
.igk-dialog .ft button{
  background:#c9c9c9;border:2px solid #fff;border-right-color:#5a5a5a;border-bottom-color:#5a5a5a;
  padding:5px 20px;font-size:12px;cursor:pointer;color:#000;font-family:var(--sans);
}
.igk-dialog .ft button:active{border-color:#5a5a5a;border-right-color:#fff;border-bottom-color:#fff}
.igk-dialog .ico{font-size:30px;line-height:1;flex:none}

/* ---------- marquee (used by the geo wing, and by things that escape it) ---------- */
.mq{overflow:hidden;white-space:nowrap;display:block}
.mq>span{display:inline-block;padding-left:100%;animation:mq 18s linear infinite}
.mq.fast>span{animation-duration:7s}
.mq.rev>span{animation-direction:reverse}
@keyframes mq{0%{transform:translateX(0)}100%{transform:translateX(-200%)}}

/* ---------- blink ---------- */
.blink{animation:blk 1s steps(2) infinite}
@keyframes blk{0%,49%{opacity:1}50%,100%{opacity:0}}

/* ---------- rainbow text ---------- */
.rainbow{
  background:linear-gradient(90deg,#ff0000,#ff8a00,#ffee00,#33ff00,#00ffee,#3300ff,#ff00cc,#ff0000);
  background-size:400% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;
  animation:rb 4s linear infinite;
}
@keyframes rb{0%{background-position:0 0}100%{background-position:400% 0}}

/* ---------- footer ---------- */
.igk-foot{
  border-top:1px solid #1e1b26;padding:44px 0 90px;margin-top:60px;
  font-family:var(--mono);font-size:11px;color:#5c5768;letter-spacing:.08em;
}
.igk-foot a{color:#7a7488;text-decoration:none;border-bottom:1px dotted #3a3646}
.igk-foot a:hover{color:var(--bile);border-color:var(--bile)}
.igk-foot .cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:26px;margin-bottom:32px}
.igk-foot h4{font-size:10px;letter-spacing:.24em;color:var(--ink-dim);margin:0 0 10px;text-transform:uppercase}
.igk-foot ul{list-style:none;margin:0;padding:0}
.igk-foot li{margin-bottom:6px}

/* ---------- the door (portal cards on the atrium) ---------- */
.door{
  position:relative;display:block;text-decoration:none;color:inherit;
  border:1px solid #262231;background:#0a0910;
  padding:0;overflow:hidden;border-radius:3px;
  transition:transform .3s cubic-bezier(.2,.8,.2,1),border-color .3s,box-shadow .3s;
  min-height:280px;
}
.door:hover{transform:translateY(-6px) scale(1.012);border-color:var(--acc,var(--bile));box-shadow:0 22px 60px -18px var(--acc,var(--bile))}
.door .door-art{position:absolute;inset:0;opacity:.55;transition:opacity .3s}
.door:hover .door-art{opacity:.95}
.door .door-txt{position:relative;z-index:2;padding:22px;height:100%;display:flex;flex-direction:column;justify-content:flex-end;min-height:280px;
  background:linear-gradient(180deg,transparent 40%,rgba(4,4,7,.93) 88%)}
.door .num{font-family:var(--mono);font-size:10px;letter-spacing:.3em;color:var(--acc,var(--bile));margin-bottom:8px}
.door h3{font-size:clamp(20px,2.4vw,28px);margin:0 0 6px}
.door .sub{font-size:12.5px;color:var(--ink-dim);margin:0;line-height:1.45}

/* ---------- utility ---------- */
.noise-canvas{width:100%;height:auto;display:block;image-rendering:pixelated}
.stack>*+*{margin-top:14px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.hidden{display:none !important}

/* ============================================================
   CALM MODE — the safety valve.
   Sedates the entire institute. Everything below is the override.
   ============================================================ */
[data-calm="1"] *,
[data-calm="1"] *::before,
[data-calm="1"] *::after{
  animation-duration:.001s !important;
  animation-iteration-count:1 !important;
  transition-duration:.06s !important;
  scroll-behavior:auto !important;
}
[data-calm="1"] .grain,
[data-calm="1"] .scan,
[data-calm="1"] #igk-trail,
[data-calm="1"] .vig{display:none !important}
[data-calm="1"] .glitch::before,
[data-calm="1"] .glitch::after{display:none !important}
[data-calm="1"] .mq>span{padding-left:0;animation:none}
[data-calm="1"] .rainbow{
  -webkit-text-fill-color:currentColor;color:var(--bile);background:none;animation:none;
}
[data-calm="1"] .blink{opacity:1 !important}
[data-calm="1"] .calm-hide{display:none !important}
[data-calm="1"] body{filter:none !important}

/* reduced motion → auto-sedate the loudest things even before JS runs */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001s !important;animation-iteration-count:1 !important;
    transition-duration:.06s !important;scroll-behavior:auto !important;
  }
  .grain,.scan{display:none !important}
}
