/* Layout: 지층 단면 — 허브는 세 지층(사암·셰일·석회암)을 위에서 아래로 쌓은 주상도, 각 작업 화면은 같은 지층 기호를 머리띠로 이어받는다 */
:root{
  --paper:#EEF0EB; --surface:#F9FAF7; --raised:#FFFFFF;
  --ink:#17201B; --muted:#56625B; --faint:#86918B;
  --line:#D3D9D0; --line-strong:#B5BEB3;
  --accent:#2148B0; --accent-ink:#FFFFFF; --accent-soft:#E2E8F7;
  --sand:#E6D282; --shale:#A3AEB6; --lime:#A3CADA; --cong:#D3A58E; --pat:rgba(23,32,27,.5);
  --ok:#2C7549; --ok-soft:#DFEFE4; --warn:#94590A; --warn-soft:#F5E8D0; --bad:#AE2A21; --bad-soft:#F6E0DD;
  --tY:#2148B0; --tQ:#A8B2B9; --tN:#DCE1D9;
  --shadow:0 1px 0 rgba(23,32,27,.04),0 10px 24px -16px rgba(23,32,27,.35);
  --font-display:"Hahmlet","Noto Serif KR","Nanum Myeongjo",serif;
  --font-body:"IBM Plex Sans KR","Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif;
  --font-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --fs-xs:12px; --fs-s:13px; --fs-m:15px; --fs-l:18px; --fs-xl:24px; --fs-xxl:clamp(28px,4.2vw,42px);
  --r:10px;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --paper:#0F1311; --surface:#151A17; --raised:#1B211E;
  --ink:#E1E7E2; --muted:#9AA59F; --faint:#6D7872;
  --line:#27302B; --line-strong:#39433E;
  --accent:#8FAAFF; --accent-ink:#0D1431; --accent-soft:#1D2646;
  --sand:#B5A257; --shale:#6C7981; --lime:#5C8FA3; --cong:#8E6A59; --pat:rgba(8,11,9,.55);
  --ok:#6CBE8A; --ok-soft:#163020; --warn:#E2A548; --warn-soft:#38290F; --bad:#F08479; --bad-soft:#3B1A18;
  --tY:#8FAAFF; --tQ:#5B666E; --tN:#2C3530;
  --shadow:0 1px 0 rgba(0,0,0,.35),0 12px 26px -16px rgba(0,0,0,.7);
  color-scheme:dark;
}}
:root[data-theme="dark"]{
  --paper:#0F1311; --surface:#151A17; --raised:#1B211E;
  --ink:#E1E7E2; --muted:#9AA59F; --faint:#6D7872;
  --line:#27302B; --line-strong:#39433E;
  --accent:#8FAAFF; --accent-ink:#0D1431; --accent-soft:#1D2646;
  --sand:#B5A257; --shale:#6C7981; --lime:#5C8FA3; --cong:#8E6A59; --pat:rgba(8,11,9,.55);
  --ok:#6CBE8A; --ok-soft:#163020; --warn:#E2A548; --warn-soft:#38290F; --bad:#F08479; --bad-soft:#3B1A18;
  --tY:#8FAAFF; --tQ:#5B666E; --tN:#2C3530;
  --shadow:0 1px 0 rgba(0,0,0,.35),0 12px 26px -16px rgba(0,0,0,.7);
  color-scheme:dark;
}
*{box-sizing:border-box}
[hidden]{display:none !important}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:var(--fs-m);line-height:1.6;-webkit-font-smoothing:antialiased}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:40;background:var(--paper)}
a{color:var(--accent)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
.wrap{max-width:1180px;margin:0 auto;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.mono{font-family:var(--font-mono)}
.num{font-variant-numeric:tabular-nums}
.eyebrow{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0}
h1,h2,h3{text-wrap:balance;margin:0}
.display{font-family:var(--font-display);font-weight:700;letter-spacing:-.01em}
.muted{color:var(--muted)}
.small{font-size:var(--fs-s)}
.xs{font-size:var(--fs-xs)}

/* ── 지층 기호 (지질도 관례: 사암=점, 셰일=파선, 석회암=벽돌) */
.lith{position:relative;background:var(--lith-bg);overflow:hidden}
.lith::after{content:"";position:absolute;inset:0;background:var(--pat);-webkit-mask:var(--lith-mask) repeat;mask:var(--lith-mask) repeat}
[data-lith="sand"]{--lith-bg:var(--sand);--lith-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10'%3E%3Ccircle cx='2.5' cy='2.5' r='1.1'/%3E%3Ccircle cx='7.5' cy='7.5' r='1.1'/%3E%3C/svg%3E")}
[data-lith="shale"]{--lith-bg:var(--shale);--lith-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='8'%3E%3Crect x='1' y='1.4' width='11' height='1.3'/%3E%3Crect x='11' y='5.4' width='11' height='1.3'/%3E%3Crect x='-9' y='5.4' width='11' height='1.3'/%3E%3C/svg%3E")}
[data-lith="lime"]{--lith-bg:var(--lime);--lith-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='12'%3E%3Cpath d='M0 0.6H24M0 6.6H24M6 0.6V6.6M18 6.6V12.6' fill='none' stroke='black' stroke-width='1.1'/%3E%3C/svg%3E")}
[data-lith="cong"]{--lith-bg:var(--cong);--lith-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='20'%3E%3Cg fill='none' stroke='black' stroke-width='1.1'%3E%3Cellipse cx='6' cy='6' rx='3.2' ry='2.4'/%3E%3Ccircle cx='17' cy='5' r='1.7'/%3E%3Cellipse cx='23' cy='13' rx='2.9' ry='2.2'/%3E%3Ccircle cx='10' cy='15' r='2'/%3E%3Ccircle cx='17.5' cy='15.5' r='1.1'/%3E%3C/g%3E%3C/svg%3E")}

/* ── 헤더 */
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:30;background:var(--paper);border-bottom:1px solid var(--line)}
.top-in{display:flex;align-items:center;gap:16px;padding-block:10px;flex-wrap:wrap}
.brand{display:flex;flex-direction:column;line-height:1.25;min-width:0}
.brand b{font-family:var(--font-display);font-weight:700;font-size:var(--fs-l)}
.nav{display:flex;gap:4px;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}
.nav::-webkit-scrollbar{display:none}
.nav a,.nav button{font:inherit;font-size:var(--fs-s);white-space:nowrap;border:1px solid transparent;background:none;color:var(--ink);padding:6px 12px;border-radius:999px;cursor:pointer;text-decoration:none}
.nav button[aria-current="page"]{background:var(--ink);color:var(--paper)}
.nav a:hover,.nav button:hover{border-color:var(--line-strong)}
.who{display:flex;align-items:center;gap:8px;font-size:var(--fs-s);color:var(--muted);margin-left:auto}
.who img{width:26px;height:26px;border-radius:50%;border:1px solid var(--line)}
.who .role{font-family:var(--font-mono);font-size:var(--fs-xs);border:1px solid var(--line-strong);border-radius:999px;padding:1px 8px;color:var(--ink)}
@media (max-width:720px){.nav{order:3;flex-basis:100%}.who{margin-left:auto}}

main{padding-block:28px 56px}
.banner{border:1px solid var(--line-strong);background:var(--surface);border-radius:var(--r);padding:12px 14px;font-size:var(--fs-s);margin-bottom:18px}

/* ── 홈 */
.hero{display:grid;gap:10px;margin-bottom:26px;max-width:760px}
.hero h1{font-size:var(--fs-xxl);line-height:1.15}
.lede{color:var(--muted);margin:0;max-width:62ch}
.pulse{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.pill{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-s);border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:4px 12px}
.dot{width:8px;height:8px;border-radius:50%;background:var(--faint);flex:none}
.dot.ok{background:var(--ok)}.dot.warn{background:var(--warn)}.dot.bad{background:var(--bad)}

.column{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:var(--shadow)}
.stratum{display:grid;grid-template-columns:68px minmax(0,1fr) auto;align-items:stretch}
.stratum+.stratum{border-top:1px solid var(--line-strong)}
.stratum .lith{display:flex;align-items:center;justify-content:center}
.lith-label{position:relative;z-index:1;writing-mode:vertical-rl;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.2em;background:var(--surface);color:var(--ink);padding:8px 3px;border-radius:4px}
.st-body{padding:22px 24px;display:grid;gap:10px;min-width:0}
.st-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.st-no{font-family:var(--font-mono);font-size:var(--fs-s);color:var(--muted)}
.st-head h2{font-family:var(--font-display);font-size:var(--fs-xl);font-weight:700}
.tag{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:0 6px}
.st-body p{margin:0;color:var(--muted);max-width:66ch}
.st-meta{display:flex;flex-wrap:wrap;gap:18px;margin-top:2px}
.kv{display:grid;gap:0}
.kv b{font-size:var(--fs-xl);font-weight:600;font-variant-numeric:tabular-nums;line-height:1.2}
.kv span{font-size:var(--fs-xs);color:var(--muted)}
.st-side{display:flex;flex-direction:column;justify-content:center;align-items:flex-end;gap:8px;padding:22px 24px 22px 0}
.links{display:flex;flex-wrap:wrap;gap:8px}
@media (max-width:720px){
  .stratum{grid-template-columns:34px minmax(0,1fr)}
  .st-side{grid-column:2;align-items:flex-start;padding:0 16px 18px}
  .st-body{padding:18px 16px 10px}
  .lith-label{display:none}
}
.spark{display:flex;align-items:flex-end;gap:2px;height:34px;min-width:120px}
.spark i{display:block;width:6px;background:var(--tY);border-radius:2px 2px 0 0;min-height:1px}
.legend{display:flex;flex-wrap:wrap;gap:14px;margin-top:14px;font-size:var(--fs-xs);color:var(--muted)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend .lith{width:22px;height:12px;border-radius:2px;display:inline-block}

/* ── 버튼·컨트롤 */
.btn{font:inherit;font-size:var(--fs-s);font-weight:500;display:inline-flex;align-items:center;gap:6px;border-radius:8px;padding:8px 14px;border:1px solid var(--line-strong);background:var(--raised);color:var(--ink);cursor:pointer;text-decoration:none;white-space:nowrap}
.btn:hover{border-color:var(--ink)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.primary:hover{filter:brightness(1.08)}
.btn.danger{color:var(--bad);border-color:var(--bad)}
.btn.sm{padding:4px 10px;font-size:var(--fs-xs)}
.btn[disabled]{opacity:.5;cursor:not-allowed}
.seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:9px;padding:2px;background:var(--surface);gap:2px;flex-wrap:wrap}
.seg button{font:inherit;font-size:var(--fs-s);border:0;background:none;color:var(--muted);padding:5px 12px;border-radius:7px;cursor:pointer}
.seg button[aria-pressed="true"]{background:var(--ink);color:var(--paper)}
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:22px 0 16px;overflow-x:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tabs button{font:inherit;font-size:var(--fs-m);background:none;border:0;border-bottom:2px solid transparent;padding:10px 14px;color:var(--muted);cursor:pointer;white-space:nowrap;margin-bottom:-1px}
.tabs button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--ink);font-weight:600}
input[type=text],input[type=url],input[type=date],input[type=search],input[type=email],select,textarea{font:inherit;font-size:var(--fs-s);color:var(--ink);background:var(--raised);border:1px solid var(--line-strong);border-radius:8px;padding:7px 10px;min-width:0;max-width:100%}
textarea{width:100%;resize:vertical;line-height:1.5}
label.f{display:grid;gap:4px;font-size:var(--fs-xs);color:var(--muted);min-width:0}
label.f > span{font-family:var(--font-mono);letter-spacing:.04em}
.toggle{display:inline-flex;align-items:center;gap:8px;font-size:var(--fs-s);cursor:pointer;border:1px solid var(--line-strong);border-radius:9px;padding:5px 12px;background:var(--surface)}
.toggle[aria-pressed="true"]{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}

/* ── 작업 화면 머리 */
.vhead{display:grid;grid-template-columns:8px minmax(0,1fr) auto;gap:18px;align-items:stretch}
.vhead .lith{border-radius:4px}
.vhead h1{font-size:clamp(26px,3.4vw,36px);line-height:1.2}
.vhead .txt{display:grid;gap:6px;min-width:0}
.runbox{border:1px solid var(--line);background:var(--surface);border-radius:var(--r);padding:12px 14px;font-size:var(--fs-s);display:grid;gap:4px;min-width:220px;align-self:start}
.runbox b{font-weight:600}
@media (max-width:720px){.vhead{grid-template-columns:6px minmax(0,1fr)}.runbox{grid-column:1/-1}}
.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:18px}
.filters input[type=search]{flex:1 1 200px}

/* ── 대시보드 */
.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
@media (max-width:820px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}
.kpi{border:1px solid var(--line);background:var(--surface);border-radius:var(--r);padding:12px 14px;display:grid;gap:2px}
.kpi b{font-size:26px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1.2}
.kpi span{font-size:var(--fs-xs);color:var(--muted)}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
@media (max-width:900px){.grid2{grid-template-columns:minmax(0,1fr)}}
.panel{border:1px solid var(--line);background:var(--surface);border-radius:var(--r);padding:16px;min-width:0}
.panel h3{font-size:var(--fs-m);font-weight:600;margin-bottom:12px;display:flex;justify-content:space-between;gap:8px;align-items:baseline;flex-wrap:wrap}
.panel h3 small{font-weight:400;color:var(--muted);font-size:var(--fs-xs)}
.hbar{display:grid;grid-template-columns:minmax(64px,108px) minmax(0,1fr) auto;gap:10px;align-items:center;padding:5px 0;font-size:var(--fs-s)}
.hbar .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.track{display:flex;height:14px;background:var(--paper);border-radius:3px;overflow:hidden}
.track i{display:block;height:100%}
.sY{background:var(--tY)}.sQ{background:var(--tQ)}.sN{background:var(--tN)}
.hbar .v{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--muted);white-space:nowrap}
.keys{display:flex;flex-wrap:wrap;gap:6px}
.keys span{font-size:var(--fs-s);border:1px solid var(--line);background:var(--raised);border-radius:999px;padding:2px 10px}
.keys span em{font-style:normal;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--muted);margin-left:4px}
.daily{display:flex;align-items:flex-end;gap:3px;height:120px;border-bottom:1px solid var(--line-strong);padding-top:8px}
.daily .c{flex:1;display:flex;flex-direction:column;justify-content:flex-end;height:100%;min-width:3px}
.daily .c i{display:block;width:100%}
.axis{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--muted);margin-top:4px}
.lgd{display:flex;gap:12px;font-size:var(--fs-xs);color:var(--muted);flex-wrap:wrap}
.lgd i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;vertical-align:-1px}
.feed{display:grid;gap:0;margin:0;padding:0;list-style:none}
.feed li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;padding:7px 0;border-top:1px solid var(--line);font-size:var(--fs-s)}
.feed li:first-child{border-top:0}
.feed .when{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--muted);white-space:nowrap;padding-top:2px}

/* ── 표 */
.scroll{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
table.tbl{width:100%;border-collapse:collapse;font-size:var(--fs-s);min-width:760px}
.tbl th{text-align:left;font-family:var(--font-mono);font-weight:500;font-size:var(--fs-xs);letter-spacing:.04em;color:var(--muted);padding:10px 12px;border-bottom:1px solid var(--line-strong);white-space:nowrap;background:var(--surface)}
.tbl td{padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:top}
.tbl tr:last-child td{border-bottom:0}
.tbl .t{font-weight:500}
.tbl .sub{display:block;color:var(--muted);font-size:var(--fs-xs);margin-top:2px}
.chip{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);border-radius:5px;padding:1px 7px;border:1px solid var(--line-strong);white-space:nowrap}
.chip.Y{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.chip.Q{color:var(--muted)}
.chip.N{border-style:dashed;color:var(--faint)}
.cat{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--muted);margin-right:4px}
.st{display:inline-block;font-size:var(--fs-xs);border-radius:999px;padding:1px 8px;white-space:nowrap}
.st.wait{background:var(--warn-soft);color:var(--warn)}
.st.done{background:var(--ok-soft);color:var(--ok)}
.st.err{background:var(--bad-soft);color:var(--bad)}
.plat{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;vertical-align:1px}
.plat.m{background:var(--accent)}.plat.d{background:var(--warn)}
.conf{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--faint)}
.via{font-family:var(--font-mono);font-size:10px;color:var(--faint);border:1px solid var(--line);border-radius:3px;padding:0 4px;margin-left:4px}
.tbl .sub.pt,.feed .pt{color:var(--ink)}
.pt b{font-family:var(--font-mono);font-weight:500;font-size:10px;letter-spacing:.04em;color:var(--accent);margin-right:6px}
/* ── 강사 여론 */
.sent{display:inline-flex;align-items:center;font-size:var(--fs-xs);border-radius:5px;padding:0 7px;white-space:nowrap;border:1px solid transparent;line-height:1.6}
.sent.pos{background:var(--ok-soft);color:var(--ok)}
.sent.neg{background:var(--bad-soft);color:var(--bad)}
.sent.mix{background:var(--warn-soft);color:var(--warn)}
.sent.neu{border-color:var(--line-strong);color:var(--muted)}
.bpos{background:var(--ok)}.bmix{background:var(--warn)}.bneu{background:var(--tQ)}.bneg{background:var(--bad)}
.stance{display:block;margin-top:4px;font-size:var(--fs-s)}
.stance:first-child{margin-top:0}
.stance b{font-weight:600;margin:0 4px}
.digest .hl{display:block;font-family:var(--font-display);font-size:var(--fs-l);font-weight:700;line-height:1.4;margin:0 0 6px}
.wrow td{vertical-align:middle}
.minispark{display:flex;align-items:flex-end;gap:1px;height:22px;width:84px}
.minispark i{display:block;flex:1;background:var(--tY);border-radius:1px 1px 0 0;min-height:1px}
.empty{border:1px dashed var(--line-strong);border-radius:var(--r);padding:28px 20px;text-align:center;color:var(--muted);background:var(--surface)}
.empty b{display:block;color:var(--ink);font-size:var(--fs-l);margin-bottom:6px;font-family:var(--font-display)}
.note{border-left:3px solid var(--line-strong);padding:4px 0 4px 12px;color:var(--muted);font-size:var(--fs-s);margin:0}
.policy{display:grid;gap:8px;margin-top:16px}
.policy p{margin:0}

/* ── 리포트 */
.rep{border:1px solid var(--line);background:var(--surface);border-radius:var(--r);margin-bottom:12px;overflow:hidden}
.rep>button{all:unset;box-sizing:border-box;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:14px;align-items:baseline;width:100%;padding:14px 16px;cursor:pointer}
.rep>button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.rep .wk{font-family:var(--font-mono);font-size:var(--fs-s);color:var(--muted)}
.rep .hl{font-weight:600}
.rep .body{padding:0 16px 16px;display:grid;gap:14px}
.rep .body h4{margin:0 0 4px;font-size:var(--fs-s);font-family:var(--font-mono);color:var(--muted);letter-spacing:.04em}
.rep .body p{margin:0;white-space:pre-line}

/* ── 붙여넣기·폼 */
.form{display:grid;gap:12px}
.row{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}
.row > *{flex:1 1 180px}
.msg{font-size:var(--fs-s);min-height:1.5em}
.msg.bad{color:var(--bad)}.msg.ok{color:var(--ok)}
.steps{margin:0;padding-left:18px;color:var(--muted);font-size:var(--fs-s);display:grid;gap:2px}
.unitpick{display:flex;flex-wrap:wrap;gap:6px}
.unitpick label{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-s);border:1px solid var(--line-strong);border-radius:999px;padding:3px 10px;cursor:pointer;background:var(--raised)}
.unitpick input{accent-color:var(--accent)}
.targets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:18px 0}
@media (max-width:820px){.targets{grid-template-columns:minmax(0,1fr)}}
.target{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:14px 16px;display:grid;gap:6px}
.target b{font-size:var(--fs-l)}
.target .n{font-family:var(--font-mono);font-size:var(--fs-xl);font-variant-numeric:tabular-nums}
.split{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:18px;align-items:start}
@media (max-width:980px){.split{grid-template-columns:minmax(0,1fr)}}
.sticky{position:sticky;top:calc(env(safe-area-inset-top,0px) + 76px)}
@media (max-width:980px){.sticky{position:static}}
footer{border-top:1px solid var(--line);padding-block:20px 32px;color:var(--muted);font-size:var(--fs-xs)}
@media (prefers-reduced-motion:no-preference){.view{animation:rise .28s ease-out}@keyframes rise{from{transform:translateY(4px)}to{transform:none}}}

/* ── 로그인 (hub-shim.js) */
.gate{position:fixed;inset:0;z-index:60;background:var(--paper);display:grid;place-items:center;padding:24px}
.gate-card{width:min(420px,100%);border:1px solid var(--line);background:var(--surface);border-radius:14px;box-shadow:var(--shadow);overflow:hidden}
.gate-card .lith{height:10px}
.gate-body{padding:22px 24px 24px;display:grid;gap:14px}
.gate-body h1{font-size:var(--fs-xl)}
.gate-body p{margin:0}
#hubLogout{margin-left:4px}
