:root{
  --cream:#F4F2EC; --paper:#FFFFFF; --ink:#1B1F1D; --ink2:#5B6662; --ink3:#9AA5A0;
  --sage:#8FB5A6; --sage-d:#2E5E4E; --amber:#FFB000; --line:rgba(27,31,29,.10);
  --serif:"Instrument Serif",Georgia,serif; --sans:"Inter",system-ui,sans-serif; --mono:"JetBrains Mono",ui-monospace,monospace;
  --r:18px; --shadow:0 18px 50px rgba(27,31,29,.14), 0 2px 6px rgba(27,31,29,.06);
}
*{box-sizing:border-box} html,body{margin:0;height:100%;overflow:hidden;background:var(--cream);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased}
#scene{position:fixed;inset:0;width:100%;height:100%;display:block;touch-action:none}
[hidden]{display:none!important}
button{font:inherit;cursor:pointer}
a{color:inherit}
kbd{font-family:var(--mono);font-size:.85em;border:1px solid var(--line);border-bottom-width:2px;border-radius:5px;padding:0 5px;background:#fff}

.btn{display:inline-flex;align-items:center;gap:8px;border:0;border-radius:999px;padding:11px 20px;font-weight:600;font-size:14px;text-decoration:none;transition:transform .15s,box-shadow .15s;white-space:nowrap}
.btn:active{transform:translateY(1px)}
.btn-dark{background:var(--ink);color:#fff}
.btn-amber{background:var(--amber);color:var(--ink)}
.btn-ghost{background:rgba(255,255,255,.75);color:var(--ink);border:1px solid var(--line);backdrop-filter:blur(10px)}
.btn-sage{background:var(--sage-d);color:#fff}
.btn-sm{padding:8px 14px;font-size:13px}
.x{border:0;background:transparent;font-size:26px;line-height:1;color:var(--ink2);padding:4px 8px;border-radius:8px}
.x:hover{background:rgba(0,0,0,.05)}

/* intro */
.intro{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:radial-gradient(1200px 700px at 50% 30%,#fff 0%,var(--cream) 70%);padding:20px;transition:opacity .6s}
.intro.out{opacity:0;pointer-events:none}
.intro-card{max-width:520px;text-align:center}
.intro-logo{width:220px;max-width:70%;margin:0 auto 28px;display:block}
.intro-kicker{font-family:var(--mono);font-size:11px;letter-spacing:.22em;color:var(--ink3);margin:0 0 10px}
.intro-title{font-family:var(--serif);font-weight:400;font-size:clamp(38px,6vw,58px);line-height:1;margin:0 0 16px;letter-spacing:-.01em}
.intro-sub{color:var(--ink2);font-size:15px;line-height:1.6;margin:0 auto 26px;max-width:420px}
.intro-hint{font-family:var(--mono);font-size:11px;color:var(--ink3);margin:16px 0 8px;letter-spacing:.08em}
.intro-skip{font-size:12px;color:var(--ink2)}

/* hud */
.hud{position:fixed;top:0;left:0;right:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;pointer-events:none;opacity:0;transition:opacity .5s}
.hud.on{opacity:1}
.hud > *{pointer-events:auto}
.hud-logo img{height:26px;display:block}
.hud-nav{display:flex;gap:4px;background:rgba(255,255,255,.7);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:999px;padding:4px}
.hud-nav button{border:0;background:transparent;border-radius:999px;padding:7px 13px;font-size:13px;font-weight:500;color:var(--ink2)}
.hud-nav button:hover{background:rgba(0,0,0,.05);color:var(--ink)}
.hud-nav button.on{background:var(--ink);color:#fff}
.hud-right{display:flex;gap:8px}
@media (max-width:860px){.hud-nav{display:none}}

/* zone card */
.card{position:fixed;left:50%;top:84px;transform:translateX(-50%) translateY(-6px);z-index:15;background:var(--paper);border-radius:var(--r);box-shadow:var(--shadow);padding:16px 22px 16px;min-width:260px;max-width:min(420px,calc(100vw - 32px));text-align:center;animation:cardIn .35s cubic-bezier(.22,1,.36,1) both}
@keyframes cardIn{from{opacity:0;transform:translateX(-50%) translateY(10px) scale(.97)}to{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}}
.card-kicker{font-family:var(--mono);font-size:10px;letter-spacing:.22em;color:var(--ink3);margin:0 0 4px}
.card-title{font-family:var(--serif);font-weight:400;font-size:28px;line-height:1.05;margin:0 0 6px}
.card-sub{color:var(--ink2);font-size:13px;margin:0;line-height:1.5}
.card-actions{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:12px}
.card-actions:empty{display:none}
.chip{border:1px solid var(--line);background:#fff;border-radius:999px;padding:7px 13px;font-size:12.5px;font-weight:500;color:var(--ink)}
.chip:hover{background:var(--ink);color:#fff;border-color:var(--ink)}

.hint{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);z-index:12;font-family:var(--mono);font-size:11px;color:var(--ink2);background:rgba(255,255,255,.7);backdrop-filter:blur(8px);border:1px solid var(--line);padding:8px 14px;border-radius:999px;white-space:nowrap;opacity:0;transition:opacity .5s}
.hint.on{opacity:1}
@media (pointer:coarse){.hint{display:none}}

/* joystick */
.joy{position:fixed;left:22px;bottom:22px;width:120px;height:120px;border-radius:50%;background:rgba(255,255,255,.55);border:1px solid var(--line);backdrop-filter:blur(8px);z-index:14;display:none;touch-action:none}
.joy-knob{position:absolute;left:50%;top:50%;width:52px;height:52px;margin:-26px 0 0 -26px;border-radius:50%;background:var(--ink);opacity:.85}
@media (pointer:coarse){.joy.on{display:block}}

/* minimap */
.minimap{position:fixed;right:18px;top:70px;z-index:18;background:var(--paper);border-radius:var(--r);box-shadow:var(--shadow);padding:12px 14px;width:260px}
.minimap-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--mono);font-size:11px;letter-spacing:.18em;color:var(--ink3);margin-bottom:8px}
.minimap-floor{position:relative;width:100%;aspect-ratio:60/56;background:var(--cream);border-radius:10px;border:1px solid var(--line);overflow:hidden}
.mm-room{position:absolute;border-radius:6px;background:rgba(143,181,166,.25);border:1px solid rgba(46,94,78,.35);display:grid;place-items:center;font-size:10px;font-weight:600;color:var(--sage-d);text-align:center;padding:2px;line-height:1.1}
.mm-room:hover{background:rgba(143,181,166,.5)}
.mm-you{position:absolute;width:10px;height:10px;border-radius:50%;background:var(--amber);border:2px solid #fff;box-shadow:0 0 0 2px var(--ink);transform:translate(-50%,-50%);pointer-events:none;transition:left .15s linear,top .15s linear}
.minimap-foot{font-size:11px;color:var(--ink3);margin:8px 0 0}
@media (max-width:600px){.minimap{left:12px;right:12px;width:auto;top:66px}}
body.panel-open .card{display:none}
@media (max-width:600px){.panel{left:12px;right:12px;width:auto;top:72px;bottom:12px;padding:22px 18px 26px}.p-title{font-size:30px}.p-specs{grid-template-columns:1fr 1fr 1fr;gap:6px}}

/* detail panel */
.panel{position:fixed;right:18px;top:70px;bottom:18px;width:min(440px,calc(100vw - 36px));z-index:19;background:var(--paper);border-radius:var(--r);box-shadow:var(--shadow);padding:26px 26px 30px;overflow:auto;animation:panelIn .35s cubic-bezier(.22,1,.36,1) both}
@keyframes panelIn{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}
.panel-x{position:absolute;right:12px;top:10px}
.p-kicker{font-family:var(--mono);font-size:10px;letter-spacing:.22em;color:var(--ink3);margin:0 0 6px}
.p-title{font-family:var(--serif);font-weight:400;font-size:34px;line-height:1.02;margin:0 0 12px;letter-spacing:-.01em}
.p-body{color:var(--ink2);font-size:14px;line-height:1.65;margin:0 0 16px}
.p-specs{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0 0 18px}
.p-specs div{background:var(--cream);border-radius:10px;padding:10px 12px}
.p-specs b{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.14em;color:var(--ink3);font-weight:500;margin-bottom:3px}
.p-specs span{font-size:13px;font-weight:600}
.p-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.p-list{list-style:none;padding:0;margin:0 0 16px;display:grid;gap:8px}
.p-list li{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:11px 12px;background:var(--cream);border-radius:12px;font-size:13.5px}
.p-list li small{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--ink3)}
.p-list li b{font-weight:600;white-space:nowrap}
.p-list.link li{cursor:pointer}
.p-list.link li:hover{background:#e8efeb}
.p-cap{margin:0 0 14px}
.p-cap h4{font-family:var(--serif);font-weight:400;font-size:21px;margin:0 0 4px}
.p-cap h4 span{font-family:var(--mono);font-size:11px;color:var(--ink3);margin-right:8px;letter-spacing:.1em}
.p-cap p{margin:0;color:var(--ink2);font-size:13.5px;line-height:1.6}
.p-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px}
.p-grid div{background:var(--cream);border-radius:10px;padding:10px 12px;font-size:12.5px;line-height:1.4}
.p-grid small{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--ink3);margin-bottom:3px}
.p-grid b{display:block;font-weight:600;margin-bottom:2px}
.cfg-step{margin-bottom:14px}
.cfg-step h5{font-family:var(--mono);font-size:10px;letter-spacing:.18em;color:var(--ink3);margin:0 0 8px;font-weight:500}
.cfg-opts{display:flex;flex-wrap:wrap;gap:6px}
.cfg-opts .chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.cfg-out{background:var(--sage-d);color:#fff;border-radius:12px;padding:14px 16px;margin-top:6px}
.cfg-out h5{font-family:var(--mono);font-size:10px;letter-spacing:.18em;margin:0 0 8px;opacity:.75;font-weight:500}
.cfg-out ul{margin:0 0 12px;padding-left:18px;font-size:13.5px;line-height:1.6}
.contact-big{font-family:var(--serif);font-size:26px;margin:0 0 4px;text-decoration:none;display:block}
.contact-row{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--ink2);margin:8px 0 18px}
.contact-row a{text-decoration:none}

/* sitemap */
.sitemap{position:fixed;inset:0;z-index:60;background:var(--cream);overflow:auto}
.sitemap-inner{max-width:760px;margin:0 auto;padding:60px 20px 80px;position:relative}
.sitemap-inner .x{position:absolute;right:12px;top:16px}
.sitemap-logo{width:180px;margin-bottom:20px}
.sitemap h2{font-family:var(--serif);font-weight:400;font-size:40px;line-height:1.05;margin:0 0 12px}
.sitemap h3{font-family:var(--serif);font-weight:400;font-size:28px;margin:36px 0 10px}
.sitemap p{color:var(--ink2);line-height:1.65}
.sitemap ul{padding-left:18px;color:var(--ink2);line-height:1.7}
