/* ── App mockups (pure CSS/SVG, animated) ─────────────────────────── */
.mocks{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:22px;margin:40px 0 8px;justify-items:center}
.mock{width:100%;max-width:230px;text-align:center}
.mock figcaption{margin-top:12px;font-size:.9rem;color:var(--dim)}
.mock figcaption strong{display:block;color:var(--text);font-size:.95rem;margin-bottom:2px}
.phone{position:relative;aspect-ratio:390/844;width:100%;border-radius:38px;background:#000;padding:8px;box-shadow:0 30px 60px -20px rgba(0,0,0,.8),0 0 0 1px #2a2f36 inset}
.phone::before{content:"";position:absolute;top:18px;left:50%;transform:translateX(-50%);width:34%;height:22px;background:#000;border-radius:14px;z-index:3}
.screen{position:absolute;inset:8px;border-radius:32px;overflow:hidden;background:#0B0D10}
.screen svg{display:block;width:100%;height:100%}
.ui{position:absolute;inset:0;text-align:left;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans TC",sans-serif;color:#fff;pointer-events:none}
.chip{position:absolute;top:44px;left:12px;background:#161A1F;border:1px solid #252B33;border-radius:999px;padding:5px 10px;font-size:9px;font-weight:700;display:flex;align-items:center;gap:5px}
.chip i{width:6px;height:6px;border-radius:50%;background:#FFD54A}
.tabs{position:absolute;left:0;right:0;bottom:0;height:46px;background:#0B0D10;border-top:1px solid #252B33;display:flex;justify-content:space-around;align-items:center;font-size:7px;color:#6B7482}
.tabs span{display:flex;flex-direction:column;align-items:center;gap:3px}
.tabs b{width:12px;height:12px;border-radius:3px;background:#3a414b}
.tabs .on{color:#FF2E93}.tabs .on b{background:#FF2E93}
.cta{position:absolute;left:10px;right:10px;bottom:56px;display:flex;gap:6px}
.cta .b{flex:1;background:#FF2E93;color:#0B0D10;font-weight:800;font-size:10px;border-radius:999px;padding:9px 0;text-align:center}
.cta .g{flex:0 0 38%;background:#161A1F;color:#fff;font-weight:700;font-size:10px;border-radius:999px;padding:9px 0;text-align:center;border:1px solid #252B33}
/* run HUD */
.hud{position:absolute;top:44px;left:10px;right:10px;background:rgba(16,20,25,.88);border:1px solid #252B33;border-radius:16px;padding:10px 12px}
.hud .big{font-size:30px;font-weight:800;letter-spacing:-1px;font-variant-numeric:tabular-nums;line-height:1}
.hud .unit{font-size:8px;color:#9AA4B2;text-transform:uppercase;letter-spacing:.06em;margin-top:2px}
.hud .row{display:flex;gap:14px;margin-top:8px}
.hud .row div{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums}
.hud .row small{display:block;font-size:7px;color:#9AA4B2;font-weight:600;text-transform:uppercase;letter-spacing:.06em}
.runctl{position:absolute;left:10px;right:10px;bottom:56px;display:flex;gap:6px}
.runctl .p{flex:1;background:#161A1F;border:1px solid #252B33;color:#fff;border-radius:999px;padding:9px 0;text-align:center;font-size:10px;font-weight:700}
.runctl .s{flex:0 0 32%;background:#E5484D;color:#fff;border-radius:999px;padding:9px 0;text-align:center;font-size:10px;font-weight:700}
/* radar list */
.list{position:absolute;top:40px;left:10px;right:10px;bottom:52px;overflow:hidden}
.list h4{font-size:13px;font-weight:800;margin:0 0 2px}
.list .sub{font-size:8px;color:#9AA4B2;margin-bottom:8px}
.list .sec{font-size:8px;color:#9AA4B2;font-weight:700;margin:8px 0 5px;text-transform:uppercase;letter-spacing:.06em}
.card{background:#161A1F;border:1px solid #252B33;border-radius:12px;padding:8px;display:flex;gap:8px;align-items:center;margin-bottom:6px}
.card .av{width:24px;height:24px;border-radius:50%;background:#FF2E93;color:#0B0D10;font-weight:800;font-size:11px;display:grid;place-items:center;flex:none}
.card .av.f{background:#FFD54A}
.card .t{flex:1;min-width:0}
.card .t b{display:block;font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card .t span{font-size:7.5px;color:#9AA4B2}
.card .j{font-size:8px;font-weight:800;color:#FF2E93}
.card .live{width:6px;height:6px;border-radius:50%;background:#FF2E93;animation:blink 1.2s infinite}
/* mission card */
.mcard{position:absolute;left:10px;right:10px;bottom:56px;background:#161A1F;border:1px solid #252B33;border-radius:14px;padding:10px;display:flex;gap:10px;align-items:center}
.mcard .logo{width:34px;height:34px;border-radius:10px;background:#FFB020;display:grid;place-items:center;flex:none}
.mcard .t{flex:1;min-width:0}
.mcard .t small{display:block;font-size:7px;color:#FFB020;font-weight:800;text-transform:uppercase;letter-spacing:.06em}
.mcard .t b{display:block;font-size:10px;margin:1px 0}
.mcard .t span{font-size:7px;color:#9AA4B2;line-height:1.3;display:block}
.ring{width:30px;height:30px;flex:none;border-radius:50%;background:conic-gradient(#FFB020 var(--p,60%),#252B33 0);display:grid;place-items:center;font-size:7px;font-weight:800}
.ring i{width:22px;height:22px;border-radius:50%;background:#161A1F;display:grid;place-items:center;font-style:normal}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.3}}
@keyframes pulse{0%{transform:scale(.6);opacity:.8}100%{transform:scale(2.2);opacity:0}}
@keyframes dash{to{stroke-dashoffset:0}}
.pulse{transform-box:fill-box;transform-origin:center;animation:pulse 1.8s ease-out infinite}
.route{stroke-dasharray:900;stroke-dashoffset:900;animation:dash 6s linear infinite}
.mover{offset-path:path("M60 560 C 90 500, 140 520, 170 460 S 230 380, 250 330 S 300 250, 330 220");animation:move 6s linear infinite}
@keyframes move{from{offset-distance:0%}to{offset-distance:100%}}
@media (prefers-reduced-motion:reduce){.pulse,.route,.mover,.card .live{animation:none}.route{stroke-dashoffset:0}}

/* ── real map inside phone ── */
.gl{position:absolute;inset:0}
.gl .mapboxgl-ctrl-attrib{font-size:7px;opacity:.6}
.gl .mapboxgl-ctrl-top-right{top:34px}
.gl-dot{position:relative;width:14px;height:14px}
.gl-dot i{position:absolute;inset:-9px;border-radius:50%;background:var(--c);opacity:.35;animation:pulse 1.8s ease-out infinite}
.gl-dot b{position:absolute;inset:0;border-radius:50%;background:var(--c);border:2px solid #0B0D10}
.gl-dot.big{width:16px;height:16px}
.gl-shop{width:32px;height:32px;border-radius:50%;background:#FFB020;border:3px solid #0B0D10;display:grid;place-items:center;position:relative}
.gl-shop.on::before{content:"";position:absolute;inset:-10px;border-radius:50%;background:#FFB020;opacity:.35;animation:pulse 1.8s ease-out infinite;z-index:-1}
