/* MapToNap Lab */
:root{--bg:#0b0c10;--panel:#14161c;--panel2:#1b1e26;--line:#262a34;--ink:#f3f1ec;--mut:#9aa0ad;--red:#e5392f;--top:58px;--bar:62px;--safe:env(safe-area-inset-bottom,0px)}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;background:var(--bg);color:var(--ink);font:500 14px/1.45 Inter,system-ui,-apple-system,"PingFang SC",sans-serif;-webkit-font-smoothing:antialiased}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
a{color:inherit}

/* top bar */
.lb-top{position:sticky;top:0;z-index:50;height:var(--top);display:flex;align-items:center;gap:18px;padding:0 18px;background:rgba(11,12,16,.94);border-bottom:1px solid var(--line)}
.lb-brand{display:flex;align-items:center;gap:8px;font-weight:800;font-size:16px;text-decoration:none;white-space:nowrap;flex:none}
.lb-brand img{border-radius:7px}
.lb-brand .r{color:var(--red);margin-left:-8px}
.lb-brand .lb-sub{font-style:normal;font-weight:600;font-size:13px;color:var(--mut);margin-left:2px;letter-spacing:0}
@media(max-width:700px){.lb-brand .lb-sub{display:none}}
.lb-brand em{font-style:normal;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;background:var(--red);color:#fff;border-radius:999px;padding:3px 8px;margin-left:2px}
.lb-tabs{display:flex;gap:4px;flex:1 1 auto;min-width:0;overflow-x:auto;scrollbar-width:none}
.lb-tabs::-webkit-scrollbar{display:none}
.lb-tabs button{position:relative;flex:none;height:var(--top);padding:0 12px;border:0;border-radius:0;background:transparent;color:var(--mut);font-weight:700;white-space:nowrap;display:inline-flex;align-items:center;gap:7px}
.lb-tabs button i{font:700 9.5px/1 ui-monospace,SFMono-Regular,Menlo,monospace;font-style:normal;letter-spacing:.06em;color:#5d6270}
.lb-tabs button:hover{color:var(--ink)}
.lb-tabs button.on{color:var(--ink)}
.lb-tabs button.on i{color:var(--red)}
.lb-tabs button:after{content:"";position:absolute;left:12px;right:12px;bottom:-1px;height:2px;border-radius:2px;background:var(--red);transform:scaleX(0);transition:transform .25s ease}
.lb-tabs button.on:after{transform:scaleX(1)}
.lb-topr{display:flex;gap:8px;flex:none}
.lb-pill{height:38px;padding:0 14px;border:1px solid var(--line);border-radius:12px;background:var(--panel);font-weight:700;display:inline-flex;align-items:center;text-decoration:none;white-space:nowrap}
.lb-pill:hover{border-color:#3a3f4b}
.lb-pill.dark{background:var(--ink);color:#111;border-color:var(--ink)}

/* site bar */
.lb-sitebar{display:flex;align-items:center;gap:10px;padding:10px 18px;border-bottom:1px solid var(--line);min-height:var(--bar);flex-wrap:wrap}
.lb-sitecur{display:flex;align-items:baseline;gap:8px;min-width:0;max-width:300px}
.lb-sitecur span{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--red)}
.lb-sitecur b{font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lb-search{flex:1 1 280px;display:flex;gap:6px;min-width:0}
.lb-search input{flex:1 1 auto;min-width:0;height:40px;border:1px solid var(--line);border-radius:12px;background:var(--panel);padding:0 14px;font-size:15px;outline:none}
.lb-search input:focus{border-color:#4a505e}
.lb-search button{height:40px;padding:0 16px;border:0;border-radius:12px;background:var(--red);color:#fff;font-weight:800}
.lb-search button:disabled{opacity:.6}
.lb-r{display:flex;align-items:center;gap:6px;color:var(--mut);font-weight:700;font-size:12px}
.lb-r select{height:40px;border:1px solid var(--line);border-radius:12px;background:var(--panel);padding:0 10px;font-weight:700}

/* experiment layout */
.lb-exp{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:0;height:calc(100dvh - var(--top) - var(--bar) - 1px);min-height:520px}
.lb-stagewrap{display:flex;flex-direction:column;min-width:0;min-height:0;padding:16px 16px 14px}
.lb-stage{position:relative;flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center}
.lb-canvas{display:block;border-radius:22px;touch-action:none}
.lb-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:12px;background:rgba(11,12,16,.72);border-radius:22px;font-weight:700}
.lb-loading[hidden]{display:none}
.lb-spin{width:20px;height:20px;border-radius:50%;border:2.5px solid #ffffff33;border-top-color:#fff;animation:lbspin 1s linear infinite}
@keyframes lbspin{to{transform:rotate(360deg)}}
.lb-timeline{flex:none;display:flex;align-items:center;gap:12px;margin-top:12px}
.lb-play{flex:none;width:48px;height:48px;border-radius:16px;border:0;background:var(--red);color:#fff;font-size:16px;font-weight:800}
.lb-track{--x:33%;position:relative;flex:1 1 auto;height:56px;border-radius:14px;background:var(--panel);overflow:hidden;cursor:ew-resize;touch-action:none}
.lb-track:after{content:"";position:absolute;top:0;bottom:0;left:var(--x);width:2px;margin-left:-1px;background:#fff;box-shadow:0 0 0 3px #e5392f55}
.lb-spark{position:absolute;inset:0;width:100%;height:100%}
.lb-range{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none}
.lb-panel{border-left:1px solid var(--line);overflow-y:auto;padding:16px 18px 24px;display:flex;flex-direction:column;gap:14px}
.lb-block{background:var(--panel);border-radius:18px;padding:14px}
.lb-h{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--mut);margin-bottom:10px}
.lb-chips{display:flex;flex-wrap:wrap;gap:6px}
.lb-chips+.lb-chips{margin-top:8px}
.lb-chips button{height:34px;padding:0 12px;border-radius:11px;border:1px solid var(--line);background:var(--panel2);font-weight:700;font-size:13px}
.lb-chips button.on{background:var(--ink);color:#111;border-color:var(--ink)}
.lb-stats{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.lb-stats div{display:flex;flex-direction:column;gap:2px}
.lb-stats b{font-size:24px;font-weight:800;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.lb-stats span{font-size:12px;color:var(--mut);font-weight:600}
.lb-toggles{display:grid;gap:8px}
.lb-toggles label{display:flex;align-items:center;gap:10px;font-weight:700;cursor:pointer}
.lb-toggles input{width:18px;height:18px;accent-color:var(--red)}
.lb-legend{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:12px;font-size:12px;color:var(--mut);font-weight:600}
.lb-legend span{display:inline-flex;align-items:center;gap:6px}
.lb-legend i{width:9px;height:9px;border-radius:50%;display:inline-block}
.lb-legend i.ring{background:transparent;border:2px solid}
.lb-actions{display:grid;gap:8px;background:transparent;padding:0}
.lb-btn{height:48px;border-radius:14px;border:1px solid var(--line);background:var(--panel);font-weight:800}
.lb-btn.primary{background:var(--ink);color:#111;border-color:var(--ink)}
.lb-btn.busy{background:var(--red);color:#fff;border-color:var(--red)}
.lb-note{margin:0;font-size:12px;line-height:1.55;color:#7f8593}
.lb-soon{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--mut);text-align:center;padding:40px}
.lb-soon b{font-size:22px;color:var(--ink)}
.lb-toast{position:fixed;left:50%;bottom:calc(20px + var(--safe));transform:translateX(-50%);z-index:100;max-width:min(520px,calc(100vw - 32px));background:var(--ink);color:#111;border-radius:14px;padding:12px 16px;font-weight:700;box-shadow:0 14px 40px #0008}
.lb-toast[hidden]{display:none}

/* shared panels */
.lb-stagewrap{position:relative}
.lb-row{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.lb-mini{height:32px;padding:0 10px;border-radius:10px;border:1px solid var(--line);background:var(--panel);font-weight:700;font-size:12px;display:inline-flex;align-items:center;text-decoration:none;color:var(--ink)}

/* inside the workspace frame: the workspace already has a top bar */
.lb-embedded .lb-brand,.lb-embedded .lb-topr a{display:none}

/* phones */
@media (max-width:860px){
  .lb-top{gap:10px;padding:0 12px}
  .lb-brand{font-size:15px}
  .lb-topr a{display:none}
  .lb-tabs{position:fixed;left:0;right:0;top:var(--top);z-index:49;height:50px;padding:0 6px;background:rgba(11,12,16,.97);border-bottom:1px solid var(--line)}
  .lb-tabs button{height:50px}
  .lb-sitebar{margin-top:50px;padding:10px 12px;gap:8px}
  .lb-sitecur{max-width:none;flex:1 1 100%}
  .lb-search{flex:1 1 100%}
  .lb-search input{height:46px;font-size:16px}
  .lb-search button{height:46px}
  .lb-r select,.lb-sitebar .lb-pill{height:40px}
  .lb-exp{display:block;height:auto;min-height:0}
  .lb-stagewrap{padding:12px}
  .lb-stage{flex:none;width:100%;aspect-ratio:1/1}
  .lb-panel{border-left:0;padding:0 12px calc(28px + var(--safe));overflow:visible}
}

/* simple panels */
.lb-how b{display:block;font-size:17px;font-weight:800;margin-bottom:4px}
.lb-how>span{display:block;color:var(--mut);font-weight:600;font-size:13px;margin-bottom:12px}
.lb-how .lb-chips{margin-top:0}
.lb-more{background:var(--panel);border-radius:18px;padding:0 14px}
.lb-more>summary{list-style:none;cursor:pointer;min-height:48px;display:flex;align-items:center;justify-content:space-between;font-weight:800}
.lb-more>summary::-webkit-details-marker{display:none}
.lb-more>summary:after{content:"+";font-size:20px;color:var(--mut)}
.lb-more[open]>summary:after{content:"–"}
.lb-more[open]{padding-bottom:14px}
.lb-more>.lb-h{margin:14px 0 8px}
.lb-more .lb-btn{width:100%;margin-top:14px}
.lb-more .lb-note{margin-top:12px}
.lb-more .lb-stats{margin-top:14px}
.lb-mini-stats{display:flex;gap:16px;flex-wrap:wrap;margin:12px 0 0;color:var(--mut);font-size:12px;font-weight:700}
.lb-mini-stats b{color:var(--ink)}
.lb-panel>.lb-btn{width:100%}
/* Max gate */
.lb-gate{position:fixed;inset:0;z-index:200;background:rgba(5,6,8,.72);display:flex;align-items:center;justify-content:center;padding:16px}
.lb-gatebox{position:relative;width:min(420px,100%);background:var(--panel);border:1px solid var(--line);border-radius:22px;padding:26px 22px 20px;display:flex;flex-direction:column;gap:10px}
.lb-gatebox em{align-self:flex-start;font-style:normal;font-size:11px;font-weight:800;letter-spacing:.1em;background:var(--red);color:#fff;border-radius:999px;padding:4px 10px}
.lb-gatebox h2{margin:4px 0 0;font-size:22px;font-weight:800;letter-spacing:-.01em}
.lb-gatebox p{margin:0 0 6px;color:#c3c7d0;font-weight:600}
.lb-gatebox .lb-btn{display:flex;align-items:center;justify-content:center;text-decoration:none;color:var(--ink)}
.lb-gatebox .lb-btn.primary{color:#111}
.lb-link{color:var(--mut);font-size:13px;font-weight:700;text-align:center;margin-top:4px}
.lb-x{position:absolute;top:10px;right:12px;width:36px;height:36px;border-radius:12px;border:0;background:transparent;color:var(--mut);font-size:24px}

/* walk pulse, sightlines */
.lb-tap{cursor:crosshair}
.lb-walkbar{position:relative;flex:1 1 auto;height:48px;border-radius:14px;background:var(--panel);overflow:hidden;display:flex;align-items:center;padding:0 16px}
.lb-walkbar i{position:absolute;left:0;top:0;bottom:0;width:0;background:linear-gradient(90deg,#8a2a17,#c45632 45%,#ecbf9f);opacity:.28}
.lb-walkbar span{position:relative;font-weight:800;font-variant-numeric:tabular-nums}

/* 15-minute city: the walks from the red point, one bar per need */
.lb-needlist{list-style:none;margin:0;padding:0;display:grid;gap:9px}
.lb-needlist li{display:grid;grid-template-columns:92px minmax(0,1fr) 58px;align-items:center;column-gap:10px;font-size:13px;font-weight:700}
.lb-needlist .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lb-needlist .bar{position:relative;height:6px;border-radius:3px;background:var(--panel2)}
.lb-needlist .bar i{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:#93ad74}
.lb-needlist .bar em{position:absolute;top:-4px;bottom:-4px;width:1.5px;background:#f3f1ec;opacity:.55}
.lb-needlist b{text-align:right;font-variant-numeric:tabular-nums}
.lb-needlist small{grid-column:2/4;margin-top:-4px;font-size:11px;color:var(--mut);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lb-needlist li.miss .bar i{background:#c86a4a}
.lb-needlist li.miss b{color:#e3967a}
.lb-needlist .nm{display:flex;align-items:center;gap:7px}
.lb-needlist .nm .dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--c)}
.lb-needlist .bar i{background:var(--c)!important}
.lb-needlist li.miss .bar i{background:repeating-linear-gradient(90deg,var(--c) 0 4px,transparent 4px 7px)!important}
.lb-needlist li.miss b{color:#e3967a}
.lb-cdot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--c);margin-right:6px;vertical-align:1px}

/* footfall: streets at the red point */
.lb-frontage{list-style:none;margin:0;padding:0;display:grid;gap:9px}
.lb-frontage li{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) 40px;align-items:center;column-gap:10px;font-size:13px;font-weight:700}
.lb-frontage .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lb-frontage .bar{height:6px;border-radius:3px;background:var(--panel2);position:relative}
.lb-frontage .bar i{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:#8d87cf}
.lb-frontage b{text-align:right;font-variant-numeric:tabular-nums}
.lb-frontage li.none{display:block;color:var(--mut);font-weight:600}
.lb-stats b.lb-long{font-size:17px;line-height:1.25;letter-spacing:0;overflow-wrap:anywhere}

/* design impact: sliders and the three result cards */
.lb-slide{display:grid;grid-template-columns:54px minmax(0,1fr) 92px;align-items:center;gap:10px;margin-top:10px;font-size:13px;font-weight:700}
.lb-slide input{width:100%;accent-color:#a8587b}
.lb-slide output{text-align:right;font-variant-numeric:tabular-nums;color:var(--ink);font-size:12.5px}
.lb-impact{display:grid;gap:8px}
.lb-impact .ic{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"tag num" "lbl lbl" "sub sub";align-items:baseline;gap:4px 12px;text-align:left;padding:13px 14px;border:1px solid var(--line);border-radius:16px;background:var(--panel);color:var(--ink);font:inherit;cursor:pointer;transition:border-color .2s,background .2s}
.lb-impact .ic i{grid-area:tag;font-style:normal;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--mut)}
.lb-impact .ic b{grid-area:num;justify-self:end;font-size:22px;font-weight:800;font-variant-numeric:tabular-nums}
.lb-impact .ic span{grid-area:lbl;font-size:12.5px;color:#c3c7d0;font-weight:600}
.lb-impact .ic small{grid-area:sub;font-size:11.5px;color:var(--mut);font-weight:600;line-height:1.45}
.lb-impact .ic small:empty{display:none}
.lb-impact .ic:hover{border-color:#3a3f4b}
.lb-impact .ic.on{border-color:#c98aa0;background:#1f171c}
.lb-impact .ic.on i{color:#e2b8c4}
/* design impact: the list of blocks */
.lb-blocks .lb-h .i-gfa{text-transform:none;letter-spacing:0;font-weight:700;color:#c3c7d0}
.lb-blist{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.lb-blist li{display:grid;grid-template-columns:26px minmax(0,1fr);grid-template-areas:"i b" "i s";column-gap:10px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:12px;cursor:pointer}
.lb-blist li i{grid-area:i;width:26px;height:26px;border-radius:8px;background:#2a1f27;color:#fff;display:flex;align-items:center;justify-content:center;font-style:normal;font-weight:800;font-size:13px;border:1px solid #4a3a44}
.lb-blist li b{grid-area:b;font-size:13px}
.lb-blist li span{grid-area:s;font-size:11.5px;color:var(--mut);font-weight:600}
.lb-blist li.on{border-color:#e5392f;background:#1f171c}
.lb-blist li.on i{background:#e5392f;border-color:#e5392f}
.lb-blist li.none{display:block;cursor:default;color:var(--mut);font-weight:600;font-size:13px}
.lb-bedit{margin-top:6px}
.lb-bedit .lb-row{margin-top:10px}
