/* Hallodex Lab — a bright professor's lab on blueprint grid; the red scan station is the one piece of hardware; its readout is a pale-green handheld LCD. Card yellow and type colors are the only other accents. One deliberate light theme. */
@font-face{font-family:"Big Shoulders Display";src:url(/fonts/big-shoulders.woff2) format("woff2");font-weight:100 900;font-display:swap}
@font-face{font-family:"Instrument Sans";src:url(/fonts/instrument-sans.woff2) format("woff2");font-weight:400 700;font-display:swap}
@font-face{font-family:"IBM Plex Mono";src:url(/fonts/plex-mono-500.woff2) format("woff2");font-weight:500;font-display:swap}

:root{
  --lab:#EEF2F6; --bench:#FFFFFF; --grid:rgba(38,99,201,.075); --rule:rgba(20,26,36,.13);
  --ink:#141A24; --muted:#556070; --blue:#2663C9; --blue-hi:#A6D4FF;
  --red:#D2281C; --red-hi:#EE4A38; --red-dk:#8A140C; --bezel:#1A1D24;
  --lcd:#CFE7B4; --lcd-ink:#1D3A17; --lcd-dim:#5F7F52; --lcd-line:rgba(29,58,23,.18);
  --yellow:#F6C935; --yellow-dk:#C99A0A; --beam:#3DDC84;
  --hp:#3FBF5B; --led-g:#45D16B; --led-r:#FF6B5B; --label:#FFFDF7;
  --t-fire:#EE8130; --t-fighting:#C22E28; --t-colorless:#A8A77A; --t-water:#6390F0; --t-electric:#F7D02C; --t-psychic:#F95587; --t-grass:#7AC74C; --t-dark:#705746;
  --display:"Big Shoulders Display","Arial Narrow","Helvetica Neue",sans-serif;
  --body:"Instrument Sans",ui-sans-serif,"Segoe UI",system-ui,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,"SF Mono",Menlo,monospace;
  color-scheme:light;
}
*,*::before,*::after{box-sizing:border-box}
body{
  margin:0;overflow-x:hidden;color:var(--ink);font-family:var(--body);font-size:17px;line-height:1.55;-webkit-font-smoothing:antialiased;
  background-color:var(--lab);
  background-image:radial-gradient(900px 520px at 78% 6%,rgba(210,40,28,.10),transparent 65%),
    linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);
  background-size:auto,32px 32px,32px 32px;
}
img{max-width:100%;height:auto;display:block}
a{color:inherit}
p{margin:0}
h1,h2,h3{font-family:var(--display);font-weight:900;text-transform:uppercase;line-height:.9;margin:0;text-wrap:balance}
h2{font-size:clamp(44px,6.4vw,84px)}
:focus-visible{outline:3px solid var(--blue);outline-offset:3px;border-radius:4px}
.skip-link{position:absolute;left:16px;top:-60px;z-index:10;background:var(--ink);color:#fff;padding:8px 14px;border-radius:6px;font-weight:700}
.skip-link:focus{top:12px}
.mono,.eyebrow{font-family:var(--mono);font-weight:500;font-size:12.5px;letter-spacing:.12em;text-transform:uppercase}
.eyebrow{color:var(--blue);display:flex;align-items:center;gap:10px}
.lede{font-size:clamp(18px,1.8vw,20px);color:var(--muted);max-width:44ch}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--led-g);box-shadow:0 0 6px var(--led-g);animation:blink 1.6s steps(2) infinite}
@keyframes blink{50%{opacity:.25}}

.type{display:inline-block;font-family:var(--mono);font-weight:500;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:#fff;padding:2px 8px;border-radius:999px;vertical-align:1px;margin-left:6px;text-shadow:0 1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -2px 0 rgba(0,0,0,.18)}
.ty-fire{background:var(--t-fire)}.ty-fighting{background:var(--t-fighting)}.ty-colorless{background:var(--t-colorless)}

.labbar{display:flex;justify-content:space-between;gap:16px;padding:8px clamp(16px,4vw,40px);background:var(--bezel);font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#9AA6B6}
.labbar span{display:inline-flex;align-items:center;gap:8px}
@media (max-width:640px){.labbar .hide-sm{display:none}}

.page{max-width:1240px;margin:0 auto;padding-inline:clamp(16px,4vw,40px);padding-block:0 36px}
main{display:flex;flex-direction:column;gap:clamp(80px,10vw,128px)}
.site-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-block:20px}
.wordmark{display:inline-flex;align-items:center;gap:10px;font-family:var(--display);font-weight:900;font-size:26px;letter-spacing:.06em;text-decoration:none}
.wordmark small{font-family:var(--mono);font-weight:500;font-size:11px;letter-spacing:.14em;color:var(--ink);background:var(--yellow);padding:2px 6px;border-radius:3px;box-shadow:inset 0 -2px 0 var(--yellow-dk)}
.lens-sm{flex:none;width:22px;height:22px;border-radius:50%;background:radial-gradient(circle at 34% 30%,#fff 0 8%,var(--blue-hi) 14%,#2F8CF0 55%,#0C4589);box-shadow:0 0 0 2px #fff,0 0 0 4px var(--ink)}

.btn{display:inline-flex;white-space:nowrap;align-items:center;gap:12px;text-decoration:none;font:700 18px/1 var(--body);border-radius:10px;transition:transform .15s,box-shadow .15s}
.btn:hover{transform:translateY(-2px)}
.btn-scan{background:var(--red);color:#fff;padding:12px 22px 12px 12px;box-shadow:inset 0 1px 0 rgba(255,255,255,.3),inset 0 -3px 0 var(--red-dk),0 10px 24px rgba(210,40,28,.28)}
.btn-scan:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.3),inset 0 -3px 0 var(--red-dk),0 14px 32px rgba(210,40,28,.4)}
.btn-scan .lens-sm{width:34px;height:34px;box-shadow:0 0 0 3px #fff,0 0 0 5px var(--red-dk)}
.btn-sm{font-size:15px;padding:10px 16px}

/* hero */
.hero{display:grid;grid-template-columns:minmax(0,.78fr) minmax(0,1.22fr);gap:clamp(32px,5vw,64px);align-items:center;padding-top:clamp(8px,2vw,24px)}
.hero h1{font-size:clamp(64px,8.8vw,128px);margin-block:18px 24px}
.hero .lede{margin-bottom:32px}
.fine{margin-top:18px;color:var(--muted);font-size:11.5px}
@media (max-width:980px){.hero{grid-template-columns:minmax(0,1fr)}}

/* scan station */
.station{background:linear-gradient(165deg,var(--red-hi),var(--red) 35%,#A91B12);border-radius:18px;padding:16px;box-shadow:inset 0 2px 0 rgba(255,255,255,.35),inset 0 -4px 0 rgba(0,0,0,.25),0 30px 60px rgba(120,20,12,.28),0 0 0 2px var(--red-dk)}
.station-top{display:flex;align-items:center;gap:10px;padding:2px 4px 14px}
.lens{width:42px;height:42px;border-radius:50%;margin-right:6px;background:radial-gradient(circle at 34% 30%,#fff 0 6%,var(--blue-hi) 12%,#2F8CF0 50%,#0A3B78);box-shadow:0 0 0 4px #fff,0 0 0 6px var(--red-dk),0 0 22px rgba(47,140,240,.6)}
.led{width:11px;height:11px;border-radius:50%;box-shadow:inset 0 -2px 0 rgba(0,0,0,.25),0 0 0 2px var(--red-dk)}
.led.r{background:var(--led-r)}.led.y{background:var(--yellow);animation:blink 1.2s steps(2) infinite}.led.g{background:var(--led-g)}
.station-name{margin-left:auto;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#FFE3DD}
.station-body{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr);align-items:start;gap:12px;background:var(--bezel);border-radius:10px;padding:10px;box-shadow:inset 0 2px 6px rgba(0,0,0,.5)}

.chamber{position:relative;aspect-ratio:5/7;border-radius:6px;overflow:hidden;background:#000;cursor:ns-resize;touch-action:none;user-select:none;-webkit-user-select:none;--p:50%}
.chamber img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}
.rawgrid{position:absolute;inset:0;pointer-events:none;clip-path:inset(var(--p) 0 0 0);
  background-image:linear-gradient(rgba(61,220,132,.18) 1px,transparent 1px),linear-gradient(90deg,rgba(61,220,132,.18) 1px,transparent 1px);background-size:24px 24px;mix-blend-mode:screen}
.chamber .out{clip-path:inset(0 0 calc(100% - var(--p)) 0)}
.beam{position:absolute;left:0;right:0;top:var(--p);height:3px;margin-top:-1.5px;background:var(--beam);box-shadow:0 0 14px 3px rgba(61,220,132,.8);pointer-events:none}
.beam::before{content:"";position:absolute;left:0;right:0;bottom:3px;height:70px;background:linear-gradient(transparent,rgba(61,220,132,.24))}
.beam b{position:absolute;right:10px;bottom:8px;font:500 10px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink);background:var(--beam);padding:6px 8px;border-radius:4px;transition:opacity .2s}
.beam b::before{content:"⇕ "}
.chamber.low .beam b{bottom:auto;top:10px}
.chamber.running .beam b{opacity:0}
.tag{position:absolute;left:8px;font-size:10px;padding:3px 7px;border-radius:3px;background:rgba(20,26,36,.82);color:#fff;pointer-events:none;transition:opacity .2s}
.tag-out{top:8px}.tag-in{bottom:8px;background:var(--yellow);color:var(--ink)}
.chamber.all-card .tag-in,.chamber.all-photo .tag-out{opacity:0}

.term{position:relative;background:var(--lcd);border-radius:6px;padding:16px 16px 18px;font-family:var(--mono);font-size:12.5px;line-height:1.45;color:var(--lcd-ink);display:flex;flex-direction:column;gap:6px;overflow:hidden;box-shadow:inset 0 0 0 2px rgba(0,0,0,.15),inset 0 6px 18px rgba(29,58,23,.22)}
.term::after{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(transparent 0 2px,rgba(29,58,23,.05) 2px 3px)}
.t-row{display:flex;justify-content:space-between;gap:12px;text-transform:uppercase;letter-spacing:.08em}
.t-dim{color:var(--lcd-dim)}
.t-amber{color:var(--lcd-ink);font-weight:500}
.t-head{margin-top:10px;color:var(--lcd-dim);text-transform:uppercase;letter-spacing:.14em;font-size:11px;border-top:1px solid var(--lcd-line);padding-top:8px}
.t-evidence{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.t-evidence li{display:grid;grid-template-columns:auto 1fr;gap:8px;color:var(--lcd-dim);transition:color .2s}
.t-evidence li::before{content:"[ ]"}
.t-evidence li.on{color:var(--lcd-ink)}
.t-evidence li.on::before{content:"[✓]"}
.t-reading{font-family:var(--body);font-size:14px;line-height:1.45}
.t-result{transition:opacity .3s}
.t-result.pending{opacity:.2}
.t-name{font-family:var(--display);font-weight:900;font-size:clamp(26px,2.7vw,36px);line-height:1;text-transform:uppercase;color:var(--ink);margin-top:4px}
.t-meta{text-transform:uppercase;letter-spacing:.08em;font-size:11.5px;margin-top:4px}
.hp{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;margin-top:8px;font-size:11px;font-weight:500}
.hp-l{background:var(--ink);color:var(--yellow);padding:1px 5px;border-radius:3px;font-size:10px}
.hp-bar{height:8px;border-radius:4px;background:rgba(29,58,23,.2);box-shadow:inset 0 0 0 1px rgba(29,58,23,.35);overflow:hidden}
.hp-bar i{display:block;height:100%;width:100%;background:var(--hp);transform-origin:left;transition:transform .6s ease-out}
.t-result.pending .hp-bar i{transform:scaleX(0)}

.tray{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:12px}
.spec{display:flex;align-items:center;gap:8px;padding:6px;border-radius:8px;border:0;background:rgba(0,0,0,.18);color:#FFE3DD;font:500 11px/1.1 var(--mono);letter-spacing:.06em;text-transform:uppercase;text-align:left;cursor:pointer;box-shadow:inset 0 -2px 0 rgba(0,0,0,.2);transition:background-color .15s}
.spec img{width:34px;height:42px;object-fit:cover;border-radius:4px;flex:none}
.spec span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.spec em{font-style:normal;opacity:.65}
.spec:hover{background:rgba(0,0,0,.3)}
.spec[aria-pressed="true"]{background:#fff;color:var(--ink);box-shadow:inset 0 -2px 0 rgba(0,0,0,.15),0 0 0 2px var(--yellow)}
@media (max-width:640px){
  .station{padding:10px}.station-body{grid-template-columns:minmax(0,1fr);padding:8px}
  .tray{gap:6px}.spec{flex-direction:column;padding:5px;gap:5px;text-align:center}.spec img{width:100%;height:auto;aspect-ratio:3/4}.spec span{font-size:9.5px;width:100%}
}

.sec-head{display:flex;flex-direction:column;gap:14px;margin-bottom:clamp(30px,4vw,48px)}

/* protocol */
.steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.steps li{display:flex;flex-direction:column;gap:14px;padding:24px;background:var(--bench);border-radius:14px;box-shadow:0 0 0 2px var(--ink),0 6px 0 0 var(--ink)}
.step-no{color:var(--red)}
.steps h3{font-size:clamp(30px,3vw,40px)}
.steps p{color:var(--muted)}
@media (max-width:820px){.steps{grid-template-columns:minmax(0,1fr);gap:22px}}

/* archive */
.slides{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(18px,2.5vw,32px)}
.slide{margin:0;display:flex;flex-direction:column;gap:18px}
.pair{position:relative;padding:0 0 16% 20%}
.p-in{position:absolute;left:0;bottom:0;width:48%;aspect-ratio:3/4;object-fit:cover;border:5px solid var(--label);border-bottom-width:16px;border-radius:2px;transform:rotate(-5deg);box-shadow:0 10px 22px rgba(20,26,36,.28);z-index:2}
.p-out{position:relative;z-index:1;width:100%;border-radius:4.4%/3.2%;box-shadow:0 16px 32px rgba(20,26,36,.28);transition:transform .25s}
.slide:hover .p-out{transform:translate(8px,-6px) rotate(1.5deg)}
.slide figcaption{display:flex;flex-direction:column;gap:5px;font-size:15px;color:var(--muted);border-top:2px solid var(--ink);padding-top:12px}
.slide figcaption .mono{color:var(--ink);font-size:11px}
.slide strong{font-family:var(--display);font-weight:900;font-size:28px;line-height:1;text-transform:uppercase;color:var(--ink)}
@media (max-width:980px){.slides{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:48px}}
@media (max-width:440px){.slides{gap:16px;row-gap:36px}.slide strong{font-size:22px}.slide figcaption{font-size:13px}}

/* output */
.output{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(28px,5vw,72px);align-items:end}
.output .lede{margin-top:18px}
.outs{margin:0;display:flex;flex-direction:column;border-top:2px solid var(--ink)}
.outs div{display:grid;grid-template-columns:90px minmax(0,1fr);gap:16px;padding:18px 0;border-bottom:1px solid var(--rule)}
.outs dt{color:var(--red);padding-top:3px}
.outs dd{margin:0}
@media (max-width:820px){.output{grid-template-columns:minmax(0,1fr)}}

/* closer: game dialog box */
.closer{display:flex;flex-direction:column;align-items:flex-start;gap:26px}
.dialog{width:100%;background:var(--bench);border-radius:16px;padding:clamp(24px,5vw,56px);box-shadow:0 0 0 4px var(--ink),inset 0 0 0 6px var(--bench),inset 0 0 0 8px #B9C3D0}
.dialog h2{font-size:clamp(72px,12vw,168px);margin-block:14px 18px}
.dialog-line{font-size:clamp(19px,2.2vw,26px);font-weight:600;display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.caret{color:var(--red);font-size:.7em;animation:bob 1s ease-in-out infinite}
@keyframes bob{50%{transform:translateY(4px)}}
.site-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px;margin-top:64px;padding-top:20px;border-top:2px solid var(--ink);font-size:14px;color:var(--muted)}
.site-footer .wordmark{font-size:20px;color:var(--ink)}
.site-footer .mono{font-size:11px}

@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
