:root{
  --bg:#03111f;
  --panel:rgba(8,18,34,.78);
  --panel-solid:#081222;
  --line:rgba(148,163,184,.26);
  --text:#f8fafc;
  --muted:#b7c6db;
  --accent:#38bdf8;
  --accent2:#34d399;
  --warn:#fbbf24;
  --safe-top:env(safe-area-inset-top,0px);
  --safe-bottom:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;width:100%;height:100%;overflow:hidden;overscroll-behavior:none;touch-action:none}
body{
  position:fixed;inset:0;
  font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans KR",sans-serif;
  color:var(--text);
  background:
    radial-gradient(circle at 80% 8%, rgba(56,189,248,.18), transparent 30%),
    radial-gradient(circle at 12% 84%, rgba(52,211,153,.12), transparent 30%),
    linear-gradient(135deg,#020617 0%,#061525 48%,#0f172a 100%);
}
body:before{
  content:"";position:fixed;inset:0;pointer-events:none;opacity:.34;
  background-image:radial-gradient(#e0f2fe 1px, transparent 1px);
  background-size:36px 36px;
  mask-image:linear-gradient(180deg,rgba(0,0,0,.86),rgba(0,0,0,.18));
}
.app-shell{
  position:relative;z-index:1;width:100vw;height:100svh;min-height:100svh;overflow:hidden;padding:0;
}
.scene-panel{
  position:relative;overflow:hidden;width:100%;height:100%;min-height:100svh;
  background:radial-gradient(circle at center,rgba(30,64,175,.18),rgba(2,6,23,.94) 64%);
}
.scene-panel:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(255,255,255,.08),transparent 18%,rgba(0,0,0,.28));mix-blend-mode:screen}
#space{display:block;width:100%;height:100%;touch-action:none;user-select:none}
.topbar{
  position:absolute;z-index:4;left:12px;right:12px;top:calc(10px + var(--safe-top));
  display:grid;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;gap:8px;pointer-events:none;
}
.icon-link,.icon-button,.title-chip,.hud,.ops-panel,.legend,.filter-bar,.control-dock,.bottom-panel{
  border:1px solid var(--line);background:rgba(15,23,42,.72);box-shadow:0 14px 36px rgba(0,0,0,.24);backdrop-filter:blur(14px);
}
.icon-link,.icon-button{
  pointer-events:auto;width:44px;height:44px;border-radius:999px;display:grid;place-items:center;color:#e0f2fe;text-decoration:none;font-size:21px;font-weight:950;
}
.icon-button{cursor:pointer;font-family:inherit}.icon-link:hover,.icon-button:hover{background:rgba(30,41,59,.88)}
.title-chip{min-width:0;justify-self:center;max-width:min(260px,100%);border-radius:999px;padding:8px 15px;text-align:center;pointer-events:auto}
.eyebrow{display:block;margin:0;color:var(--accent);font-size:10px;font-weight:950;letter-spacing:.14em}.title-chip strong{display:block;margin-top:1px;color:#fff;font-size:16px;letter-spacing:-.03em}
.hud,.legend,.filter-bar{position:absolute;z-index:3;display:inline-flex;align-items:center;color:#cbd5e1;font-weight:850}
.hud{left:12px;right:12px;bottom:calc(146px + var(--safe-bottom));justify-content:center;gap:8px;border-radius:999px;padding:8px 10px;font-size:11px;pointer-events:auto}.live-dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 18px #22c55e}
.ops-panel{position:absolute;z-index:5;left:12px;right:12px;top:calc(68px + var(--safe-top));display:grid;gap:6px;border-radius:18px;padding:7px;background:rgba(2,6,23,.86);pointer-events:auto;color:#dbeafe;font-size:9px;box-shadow:0 0 24px rgba(56,189,248,.14),0 14px 36px rgba(0,0,0,.36);overflow:hidden}.ops-toggle{width:100%;border:0;background:transparent;color:#e0f2fe;display:grid;grid-template-columns:auto auto auto auto auto;gap:6px;align-items:center;padding:0;font:inherit;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-weight:950;cursor:pointer;text-align:left}.ops-toggle b{font-size:9px;letter-spacing:.10em;color:#e0f2fe}.ops-toggle span{white-space:nowrap;color:#d9f99d}.ops-toggle span:nth-child(3){color:#fde68a}.ops-toggle span:nth-child(4){color:#86efac}.ops-toggle em{justify-self:end;font-style:normal;color:#93c5fd;font-size:8px}.ops-body{display:grid;grid-template-columns:1fr;gap:6px;max-height:210px;opacity:1;transition:max-height .18s ease,opacity .18s ease}.ops-panel.collapsed .ops-body{max-height:0;opacity:0;overflow:hidden}.ops-kpis{display:flex;gap:7px;color:#93c5fd;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-weight:850}.link-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.link-grid label{display:grid;gap:3px;min-width:0}.link-grid label span{color:#94a3b8;font-weight:950}.link-grid select{width:100%;min-width:0;border:1px solid rgba(148,163,184,.28);border-radius:9px;background:#07111f;color:#e0f2fe;padding:5px 6px;font:inherit;font-weight:850}.link-grid>button{grid-column:1/-1;border:0;border-radius:10px;padding:7px 8px;background:linear-gradient(135deg,#67e8f9,#34d399);color:#022c22;font-weight:950;font-size:10px}.route-list{display:grid;gap:4px;max-height:82px;overflow:auto;touch-action:pan-y}.route-list em{color:#64748b;font-style:normal}.route-row{display:grid;grid-template-columns:10px 1fr auto;gap:6px;align-items:center;border:1px solid var(--route-color,#67e8f9);border-radius:10px;padding:5px 6px;background:linear-gradient(90deg,rgba(15,23,42,.72),rgba(15,23,42,.55));cursor:pointer;transition:border-color .16s ease,background .16s ease,box-shadow .16s ease}.route-row .route-color{width:9px;height:28px;border-radius:999px;background:var(--route-color,#67e8f9);box-shadow:0 0 14px var(--route-color,#67e8f9)}.route-row.selected{border-color:var(--route-color,#67e8f9);background:rgba(15,23,42,.72);box-shadow:0 0 18px var(--route-color,#67e8f9)}.route-row span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#d9f99d;font-weight:950}.route-row.selected span{color:#e0f2fe}.route-row small{display:block;color:#93c5fd;font-size:8px;font-weight:850}.route-row.selected small{color:#bae6fd}.route-row button{border:0;border-radius:8px;background:rgba(248,113,113,.18);color:#fecaca;font-weight:950;font-size:9px;padding:5px 6px}
.legend{left:50%;top:calc(68px + var(--safe-top));transform:translateX(-50%);gap:5px;border-radius:999px;padding:5px;font-size:8.6px;pointer-events:auto;max-width:calc(100vw - 16px);overflow:hidden}
.legend button{border:0;border-radius:999px;background:rgba(255,255,255,.06);color:#dbeafe;padding:6px 7px;display:inline-flex;align-items:center;gap:4px;font:inherit;font-weight:950;cursor:pointer;white-space:nowrap}.legend i{width:8px;height:8px;border-radius:50%;display:inline-block;box-shadow:0 0 14px currentColor}.legend .leo{background:#67e8f9;color:#67e8f9}.legend .polar{background:#a78bfa;color:#a78bfa}.legend .geo{background:#fbbf24;color:#fbbf24}.legend .starlink{background:#34d399;color:#34d399}
.filter-bar{left:50%;bottom:calc(102px + var(--safe-bottom));transform:translateX(-50%);gap:5px;border-radius:999px;padding:5px;font-size:9.5px;pointer-events:auto;max-width:calc(100vw - 18px);overflow:hidden}
.filter-bar button,.filter-bar .boundary-toggle{border:0;border-radius:999px;background:rgba(255,255,255,.055);color:#cbd5e1;padding:7px 8px;font:inherit;font-weight:950;cursor:pointer;white-space:nowrap}.filter-bar button.active{background:linear-gradient(135deg,#67e8f9,#34d399);color:#022c22;box-shadow:0 0 22px rgba(52,211,153,.32)}.filter-bar .boundary-toggle{display:inline-flex;align-items:center;gap:4px;background:rgba(15,23,42,.74);border:1px solid rgba(248,255,143,.28);color:#f8ff8f}.filter-bar .boundary-toggle input{width:13px;height:13px;margin:0;accent-color:#d9f99d;touch-action:manipulation}.filter-bar .boundary-toggle output{color:#d9f99d;font-size:.86em}
.control-dock{
  position:absolute;z-index:4;left:10px;right:10px;bottom:calc(10px + var(--safe-bottom));
  display:grid;grid-template-columns:1fr auto;gap:8px;align-items:stretch;padding:10px;border-radius:24px;pointer-events:auto;
}
.control-dock label{display:grid;grid-template-columns:1fr auto;gap:4px;color:#dbeafe;font-size:11px;font-weight:950;min-width:0}.control-dock output{color:#67e8f9}.control-dock input{grid-column:1/-1;width:100%;height:28px;accent-color:#38bdf8;touch-action:pan-x}.control-dock .boundary-toggle input{justify-self:center;width:32px;height:28px;cursor:pointer;touch-action:manipulation}.control-dock .boundary-toggle output{color:#d9f99d}.control-dock .desktop-zoom-control{display:none}.control-dock button{border:0;border-radius:16px;min-width:76px;padding:10px;background:#d1fae5;color:#064e3b;font-weight:950;cursor:pointer;font-size:12px}.control-dock button:hover{background:#a7f3d0}
[data-tip]{position:relative}
.hud[data-tip],.ops-panel[data-tip]{position:absolute}
[data-tip]::before{
  content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 9px);transform:translateX(-50%) translateY(4px);
  width:max-content;max-width:min(260px,78vw);padding:8px 10px;border-radius:12px;background:rgba(2,6,23,.94);border:1px solid rgba(148,163,184,.34);color:#e2e8f0;font-size:11px;line-height:1.35;font-weight:850;text-align:center;opacity:0;pointer-events:none;transition:.16s ease;box-shadow:0 14px 36px rgba(0,0,0,.36);z-index:8;
}
[data-tip]:hover::before,[data-tip]:focus-visible::before,[data-tip].show-tip::before{opacity:1;transform:translateX(-50%) translateY(0)}
.topbar [data-tip]::before{bottom:auto;top:calc(100% + 9px)}
.info-modal{border:0;padding:0;background:transparent;color:var(--text);max-width:min(92vw,540px);max-height:min(88svh,720px);overflow:visible}.info-modal::backdrop{background:rgba(2,6,23,.72);backdrop-filter:blur(8px)}
.modal-card{position:relative;max-height:min(88svh,720px);overflow:auto;overscroll-behavior:contain;touch-action:pan-y;padding:24px;border:1px solid var(--line);border-radius:28px;background:rgba(8,18,34,.96);box-shadow:0 28px 90px rgba(0,0,0,.52)}
.modal-close{position:sticky;top:0;float:right;width:38px;height:38px;margin:-8px -8px 4px 12px;border:1px solid var(--line);border-radius:999px;background:rgba(15,23,42,.88);color:#fff;font-size:24px;line-height:1;cursor:pointer}.modal-card h1{clear:none;margin:6px 0 12px;font-size:clamp(28px,7vw,44px);line-height:1.06;letter-spacing:-.06em}.lead{margin:0;color:var(--muted);font-size:14px;line-height:1.72;word-break:keep-all}.stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:16px 0 10px}.stats div{border:1px solid var(--line);border-radius:16px;padding:10px;background:rgba(255,255,255,.055);min-width:0}.stats span{display:block;color:#94a3b8;font-size:11px;white-space:nowrap}.stats strong{display:block;margin-top:3px;font-size:clamp(20px,7vw,28px);color:#fff;letter-spacing:-.04em;overflow:hidden;text-overflow:ellipsis}.mission-list{display:grid;gap:7px;margin:10px 0}.mission-list p{margin:0;border:1px solid rgba(148,163,184,.18);border-radius:13px;padding:9px 10px;background:rgba(15,23,42,.5);color:#cbd5e1;font-size:12px;line-height:1.35}.mission-list b{display:inline-block;margin-right:6px;color:#7dd3fc;letter-spacing:.04em}.hint{margin:12px 0 0;color:#94a3b8;font-size:12px;line-height:1.5}.credit{margin:8px 0 0;color:#64748b;font-size:10px;line-height:1.35}
@media(max-width:380px){
  .topbar{left:8px;right:8px;grid-template-columns:40px minmax(0,1fr) 40px}.icon-link,.icon-button{width:40px;height:40px}.title-chip{padding:7px 12px}.title-chip strong{font-size:13px}.legend{top:calc(62px + var(--safe-top));gap:3px;font-size:7.5px}.legend button{padding:5px 5px}.ops-panel{left:8px;right:8px;top:calc(103px + var(--safe-top));padding:6px;font-size:7.8px}.ops-toggle{gap:4px}.ops-toggle b{font-size:7.8px}.ops-toggle em{font-size:7px}.link-grid select{padding:4px 5px}.link-grid>button{padding:6px 7px}.route-list{max-height:70px}.filter-bar{bottom:calc(88px + var(--safe-bottom));gap:3px;font-size:8.3px}.filter-bar button{padding:6px 7px}.control-dock{left:8px;right:8px;gap:6px;border-radius:20px}.control-dock button{min-width:68px;padding:9px 8px;font-size:11px}.hud{bottom:calc(126px + var(--safe-bottom));font-size:10px}.modal-card{padding:20px;border-radius:24px}.lead{font-size:13px}.stats div{padding:8px}.mission-list p{font-size:11.5px}
}
@media(min-width:760px){
  .control-dock .desktop-zoom-control{display:grid}body:before{background-size:44px 44px;opacity:.42}.app-shell{padding:18px}.scene-panel{border:1px solid var(--line);border-radius:32px;box-shadow:0 24px 70px rgba(0,0,0,.36);min-height:calc(100svh - 36px)}.topbar{left:28px;right:28px;top:28px;grid-template-columns:48px auto 48px}.icon-link,.icon-button{width:48px;height:48px}.title-chip{max-width:320px;padding:9px 18px}.title-chip strong{font-size:18px}.legend{left:auto;right:28px;top:92px;transform:none;font-size:12px;padding:8px;gap:8px}.legend button{padding:8px 11px}.ops-panel{left:28px;right:auto;top:92px;width:288px;font-size:10.5px;padding:10px}.ops-body{max-height:260px}.ops-panel.collapsed .ops-body{max-height:260px;opacity:1;overflow:visible}.ops-toggle em{display:none}.route-list{max-height:124px}.filter-bar{left:50%;bottom:102px;font-size:11px;padding:7px;gap:7px;max-width:calc(100vw - 56px)}.filter-bar button{padding:8px 12px}.filter-bar .boundary-toggle{padding:8px 11px}.hud{left:28px;right:auto;bottom:28px;padding:10px 13px;font-size:12px}.control-dock{left:50%;right:auto;bottom:28px;transform:translateX(-50%);width:min(620px,56vw);grid-template-columns:1fr 1fr auto;padding:12px}.control-dock label{font-size:12px}.control-dock button{min-width:96px;font-size:13px}.modal-card{padding:30px}.credit{font-size:10.5px}
}

/* Collapsible mobile control panels */
.panel-toggle{border:0;border-radius:999px;background:rgba(255,255,255,.055);color:#e0f2fe;padding:7px 10px;display:inline-flex;align-items:center;justify-content:center;gap:7px;font:inherit;font-weight:950;cursor:pointer;white-space:nowrap}.panel-toggle b{letter-spacing:.08em}.panel-toggle span{color:#67e8f9}.panel-toggle em{font-style:normal;color:#93c5fd;font-size:.82em}.collapsible-panel .panel-body{display:flex;align-items:center;gap:5px}.collapsible-panel.collapsed .panel-body{display:none}.legend .panel-toggle,.filter-bar .panel-toggle{display:none}.control-dock>.panel-toggle{display:none}.pause-icon{width:42px!important;min-width:42px!important;height:42px;padding:0!important;border-radius:999px!important;font-size:18px!important;line-height:1!important;display:grid;place-items:center}
@media(max-width:759px){
  .hud{display:none}.ops-panel{top:calc(72px + var(--safe-top));left:10px;right:10px}.legend,.filter-bar,.control-dock{position:absolute;z-index:5;top:auto;transform:none;display:grid;grid-template-columns:1fr;align-items:center;gap:6px;width:auto;max-width:calc(100vw - 20px);border-radius:20px;padding:7px;background:rgba(2,6,23,.84)}.legend{left:10px;right:auto;bottom:calc(10px + var(--safe-bottom))}.filter-bar{left:50%;right:auto;bottom:calc(10px + var(--safe-bottom));transform:translateX(-50%)}.control-dock{left:auto;right:10px;bottom:calc(10px + var(--safe-bottom));grid-template-columns:1fr}.legend .panel-toggle,.filter-bar .panel-toggle,.control-dock>.panel-toggle{display:inline-flex}.legend .panel-body,.filter-bar .panel-body{flex-wrap:wrap;justify-content:center}.control-dock .control-body{display:grid;grid-template-columns:1fr auto;align-items:end;min-width:min(330px,calc(100vw - 28px))}.control-dock.collapsed .control-body{display:none}.control-dock label{min-width:0}.control-dock .desktop-zoom-control{display:none!important}.filter-bar button,.filter-bar .boundary-toggle,.legend button{padding:7px 8px}.pause-icon{align-self:end}.collapsible-panel:not(.collapsed){left:10px;right:10px;width:auto;transform:none}.filter-bar:not(.collapsed),.control-dock:not(.collapsed),.legend:not(.collapsed){bottom:calc(10px + var(--safe-bottom))}.filter-bar:not(.collapsed) .panel-body,.legend:not(.collapsed) .panel-body{max-width:100%;overflow:auto;touch-action:pan-x}.title-chip{max-width:min(220px,100%)}
}
@media(min-width:760px){
  .collapsible-panel.collapsed .panel-body{display:flex}.panel-toggle{display:none!important}.control-dock>.panel-toggle{display:none!important}.pause-icon{width:44px!important;min-width:44px!important;height:44px}
}

/* Unified bottom panel + calmer radius */
.ops-panel,.bottom-panel{border-radius:14px!important}.panel-toggle{border-radius:10px!important}.bottom-panel{position:absolute;z-index:5;left:10px;right:10px;bottom:calc(10px + var(--safe-bottom));display:grid;gap:7px;padding:8px;background:rgba(2,6,23,.86);pointer-events:auto;color:#dbeafe;font-size:9px;box-shadow:0 14px 32px rgba(0,0,0,.30);overflow:hidden}.bottom-panel-body{display:grid!important;grid-template-columns:1fr;gap:7px}.bottom-panel.collapsed .bottom-panel-body{display:none!important}.panel-group{display:flex;align-items:center;gap:5px;min-width:0}.panel-group button,.panel-group .boundary-toggle{border:0;border-radius:9px;background:rgba(255,255,255,.06);color:#dbeafe;padding:7px 8px;display:inline-flex;align-items:center;gap:4px;font:inherit;font-weight:950;cursor:pointer;white-space:nowrap}.panel-group button.active{background:linear-gradient(135deg,#67e8f9,#34d399);color:#022c22}.panel-group i{width:8px;height:8px;border-radius:4px;display:inline-block;box-shadow:0 0 12px currentColor}.panel-group .leo{background:#67e8f9;color:#67e8f9}.panel-group .starlink{background:#34d399;color:#34d399}.view-group,.orbit-group{overflow:auto;touch-action:pan-x}.motion-group{display:grid;grid-template-columns:1fr auto;align-items:end}.motion-group label{display:grid;grid-template-columns:1fr auto;gap:4px;color:#dbeafe;font-size:11px;font-weight:950;min-width:0}.motion-group output{color:#67e8f9}.motion-group input{grid-column:1/-1;width:100%;height:26px;accent-color:#38bdf8;touch-action:pan-x}.motion-group .desktop-zoom-control{display:none}.pause-icon{border-radius:10px!important;width:38px!important;min-width:38px!important;height:38px!important;font-size:17px!important}.icon-link,.icon-button{border-radius:12px}.title-chip{border-radius:14px}.modal-card{border-radius:18px}.modal-close{border-radius:12px}.link-grid select,.link-grid>button,.route-row,.route-row button{border-radius:9px!important}
@media(max-width:759px){
  .legend,.filter-bar,.control-dock{display:none!important}.bottom-panel>.panel-toggle{display:inline-flex}.bottom-panel.collapsed{left:50%;right:auto;transform:translateX(-50%);width:auto;min-width:178px}.bottom-panel:not(.collapsed){left:10px;right:10px;transform:none}.bottom-panel:not(.collapsed) .bottom-panel-body{max-height:38svh;overflow-x:hidden;overflow-y:auto;touch-action:pan-y}.bottom-panel .panel-toggle{justify-self:center}.bottom-panel .panel-group{flex-wrap:wrap;overflow:hidden}.bottom-panel input[type="range"]{max-width:100%}.ops-panel{border-radius:14px!important}.ops-toggle{border-radius:10px}.ops-body{max-height:34svh;overflow:auto;touch-action:pan-y}.topbar .icon-link,.topbar .icon-button{border-radius:12px}
}
@media(min-width:760px){
  .bottom-panel{left:50%;right:auto;bottom:28px;transform:translateX(-50%);width:min(720px,64vw);font-size:11px;padding:10px}.bottom-panel.collapsed .bottom-panel-body{display:grid!important}.bottom-panel>.panel-toggle{display:none!important}.bottom-panel-body{grid-template-columns:auto 1fr minmax(220px,1fr);align-items:center}.motion-group{grid-template-columns:1fr 1fr auto}.motion-group .desktop-zoom-control{display:grid}.pause-icon{width:42px!important;min-width:42px!important;height:42px!important}.ops-panel{border-radius:14px!important}.title-chip{border-radius:14px}
}

