/* RackTracker System (RTDS) — graphite 모노크롬 토큰 + 키오스크 공통 CSS.
   원본: Claude Design 프로젝트 rtds/tokens/*.css (colors·typography·spacing·effects·fonts) 를
   한 파일로 합치고, 키오스크 화면 문법(레일·헤더·카드·드로어·모션)을 아래에 붙였다.
   새 색·새 radius·그라데이션 추가 금지 — 토큰만 쓴다. */

/* ── 폰트 (self-host, 폐쇄망) ─────────────────────────────────────── */
@font-face{font-family:'Roboto';src:url('fonts/roboto-latin-wght-normal.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'JetBrains Mono';src:url('fonts/jetbrains-mono-latin-wght-normal.woff2') format('woff2');font-weight:100 800;font-style:normal;font-display:swap}
@font-face{font-family:'Pretendard';src:url('fonts/PretendardVariable.woff2') format('woff2');font-weight:45 920;font-style:normal;font-display:swap}

/* ── 색 ───────────────────────────────────────────────────────────── */
:root{
--color-primary-50:#F1F2F4;--color-primary-100:#E2E4E8;--color-primary-200:#C6CAD2;--color-primary-300:#A0A6B1;--color-primary-400:#6F7683;--color-primary-500:#3F444D;--color-primary-600:#33373F;--color-primary-700:#272B32;--color-primary-800:#1C1F24;--color-primary-900:#121418;
--color-secondary-500:#0B0C0F;--color-secondary-600:#14161C;
--color-neutral-0:#FFFFFF;--color-neutral-50:#F7F8FA;--color-neutral-100:#EFF1F4;--color-neutral-200:#E3E6EB;--color-neutral-300:#C9CED6;--color-neutral-500:#99A0AB;--color-neutral-700:#666D79;--color-neutral-800:#3F444D;--color-neutral-900:#1B1E24;--color-neutral-1000:#0B0C0F;
--color-success-bg:#EAF1ED;--color-success-fg:#3E8E63;
--color-warning-bg:#F5EFE1;--color-warning-fg:#A67C2E;
--color-error-bg:#F6E9E8;--color-error-fg:#B04A42;
--color-info-bg:#EFF1F4;--color-info-fg:#3F444D;
--bg-base:#F7F8FA;--bg-subtle:#EFF1F4;--bg-elevated:#FFFFFF;--bg-overlay:rgba(11,12,15,0.45);
--text-primary:#0B0C0F;--text-secondary:#3F444D;--text-tertiary:#666D79;--text-on-primary:#FFFFFF;--text-inverse:#FFFFFF;--text-link:#33373F;--text-disabled:#99A0AB;
--border-default:#E3E6EB;--border-subtle:#EFF1F4;--border-strong:#C9CED6;--border-focus:#3F444D;
--accent:#3F444D;
/* 타이포 */
--font-sans:'Roboto','Pretendard',-apple-system,'Noto Sans KR',sans-serif;
--font-mono:'JetBrains Mono','Pretendard','SF Mono',Consolas,monospace;
--type-display:700 32px/1.2 var(--font-sans);
--type-h1:600 24px/1.3 var(--font-sans);
--type-h2:600 20px/1.3 var(--font-sans);
--type-h3:600 16px/1.35 var(--font-sans);
--type-body-lg:400 15px/1.55 var(--font-sans);
--type-body:400 14px/1.5 var(--font-sans);
--type-body-sm:500 12px/1.4 var(--font-sans);
--type-code:400 13px/1.6 var(--font-mono);
--type-caption:500 11px/1.3 var(--font-sans);
--type-kiosk-gauge:700 26px/1.1 var(--font-mono);
--type-kiosk-banner:600 22px/1.3 var(--font-sans);
--type-kiosk-label:500 11px/1.3 var(--font-sans);
--letter-spacing-tight:-0.003em;
/* 간격 */
--space-xs:4px;--space-sm:8px;--space-md:12px;--space-lg:16px;--space-xl:24px;--space-2xl:32px;--space-3xl:48px;
/* 효과 */
--radius-none:0;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--radius-full:9999px;
--shadow-none:none;
--shadow-sm:0 1px 2px rgba(10,11,13,0.05);
--shadow-md:0 4px 12px rgba(10,11,13,0.08);
--shadow-lg:0 12px 32px rgba(10,11,13,0.16);
--shadow-card:0 1px 3px rgba(11,12,15,.10),0 2px 8px rgba(11,12,15,.06);
--shadow-drawer:0 -12px 32px rgba(11,12,15,.28);
/* 모션 — Docker Desktop 톤: 색 150ms · 구조 200~300ms · 감속 커브 */
--duration-fast:120ms;--duration-base:200ms;--duration-slow:320ms;
--ease-out:cubic-bezier(0.4,0,0.2,1);
--ease-travel:linear;
--ease-decay:cubic-bezier(0,0,0.2,1);
--ease-enter:cubic-bezier(.05,.7,.1,1);
--ease-exit:cubic-bezier(.4,0,1,1);
}
[data-theme="dark"]{
--color-primary-50:#121418;--color-primary-100:#1C1F24;--color-primary-200:#272B32;--color-primary-300:#33373F;--color-primary-400:#3F444D;--color-primary-500:#C9CED6;--color-primary-600:#D8DCE2;--color-primary-700:#E3E6EB;--color-primary-800:#EFF1F4;--color-primary-900:#F7F8FA;
--color-secondary-500:#C9CED6;--color-secondary-600:#99A0AB;
--color-neutral-0:#0B0C0F;--color-neutral-50:#0E0F14;--color-neutral-100:#14161C;--color-neutral-200:#2A2D38;--color-neutral-300:#3A3E4C;--color-neutral-500:#666D79;--color-neutral-700:#99A0AB;--color-neutral-800:#C9CED6;--color-neutral-900:#E3E6EB;--color-neutral-1000:#FFFFFF;
--color-success-bg:#12271C;--color-success-fg:#6FB893;
--color-warning-bg:#2A2210;--color-warning-fg:#CDA055;
--color-error-bg:#2E1614;--color-error-fg:#D98079;
--color-info-bg:#272B32;--color-info-fg:#C9CED6;
--bg-base:#0E0F14;--bg-subtle:#0A0B0F;--bg-elevated:#1A1C24;--bg-overlay:rgba(5,6,9,0.62);
--text-primary:#FFFFFF;--text-secondary:#C9CED6;--text-tertiary:#99A0AB;--text-on-primary:#14161C;--text-inverse:#14161C;--text-link:#C9CED6;--text-disabled:#666D79;
--border-default:#2A2D38;--border-subtle:#1A1C24;--border-strong:#3A3E4C;--border-focus:#C9CED6;
--accent:#C9CED6;
--shadow-sm:0 1px 2px rgba(0,0,0,0.40);
--shadow-md:0 4px 12px rgba(0,0,0,0.50);
--shadow-lg:0 12px 32px rgba(0,0,0,0.62);
--shadow-card:0 1px 3px rgba(0,0,0,.40),0 2px 8px rgba(0,0,0,.30);
--shadow-drawer:0 -12px 32px rgba(0,0,0,.6);
}
a{color:var(--text-link);text-decoration:none}

/* ── 키오스크 기본 ────────────────────────────────────────────────── */
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:var(--bg-subtle);color:var(--text-primary);font-family:var(--font-sans);letter-spacing:var(--letter-spacing-tight);-webkit-font-smoothing:antialiased;overscroll-behavior:none;-webkit-tap-highlight-color:transparent;user-select:none}
button{font-family:var(--font-sans)}
code,.mono{font-family:var(--font-mono)}
#root{height:100%}

/* 800×1280 세로 무대. 실제 탭에서는 화면을 채우고, 노트북에서는 가운데 무대로 보인다. */
.rt-stage{position:relative;width:100%;height:100%;display:flex;background:var(--bg-subtle);color:var(--text-primary);overflow:hidden}
@media (min-width:900px) and (min-height:1300px){
  body{display:grid;place-items:center;background:#101014}
  .rt-stage{width:800px;height:1280px;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.4)}
}
body.rt-fixed{display:grid;place-items:center;background:#101014;height:100vh}
body.rt-fixed .rt-stage{width:800px;height:1280px;border-radius:8px}
/* 레일 구분선은 헤더 밑선과 같은 1px --border-default (디자인 파일의 2px 진한 선은 검수에서 기각) */
.rt-stage nav{border-right:1px solid var(--border-default) !important;transition:background var(--duration-fast) var(--ease-out)}
.rt-stage nav button{transition:background var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out)}
.rt-stage nav button:hover:not(:disabled){background:var(--bg-subtle)}
.rt-body{flex:1;min-width:0;display:flex;flex-direction:column;position:relative}
.rt-header{height:56px;flex:none;display:flex;align-items:center;gap:10px;padding:0 16px;background:var(--bg-elevated);border-bottom:1px solid var(--border-default)}
.rt-header .rt-title{font:var(--type-h3);font-size:17px;white-space:nowrap}
.rt-header .rt-sub{font:var(--type-caption);color:var(--text-tertiary);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rt-header .rt-mono{font:var(--type-caption);font-family:var(--font-mono);color:var(--text-tertiary)}
.rt-back{flex:none;display:flex;align-items:center;justify-content:center;width:30px;height:30px;margin-left:-6px;border:0;background:transparent;border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;padding:0}
.rt-back:hover{background:var(--bg-subtle)}
.rt-main{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px;padding:14px 16px;transition:background var(--duration-slow) var(--ease-out)}
/* 본문 스크롤바는 자리를 차지하지 않는다 — 생기는 순간 본문이 9px 좁아져 바닥 버튼·드로어와 어긋나고 내용이 움직이던 것.
   키오스크는 터치 스크롤이라 막대 없이도 되고, 노트북에선 휠로 넘긴다 (카드 안 목록의 .rt-scroll 은 그대로) */
.rt-main.rt-scroll{overflow-y:auto;scrollbar-width:none}
.rt-main.rt-scroll::-webkit-scrollbar{display:none;width:0}
/* 바닥 슬롯 — 본문(rt-main)이 스크롤돼도 버튼 줄·드로어는 제자리. 패딩은 rt-main 과 같은 16px */
.rt-foot{flex:none;display:flex;flex-direction:column;gap:10px;padding:0 16px 14px;transition:background var(--duration-slow) var(--ease-out)}
.rt-main.tone-error,.rt-foot.tone-error{background:var(--color-error-bg)}
.rt-main.tone-success,.rt-foot.tone-success{background:var(--color-success-bg)}
.rt-main.tone-warning,.rt-foot.tone-warning{background:var(--color-warning-bg)}
.rt-main.tone-info,.rt-foot.tone-info{background:var(--color-primary-50)}

/* 화면 전환 — 이전 화면을 그대로 밑에 두고 새 화면만 페이드인 (이동 없음: 레일·헤더는 정지) */
.rt-screen{position:absolute;inset:0;display:flex;flex-direction:row;min-height:0}
.rt-screen.enter{animation:rt-screen-in 160ms ease-out both}
.rt-screen.leave{pointer-events:none}
@keyframes rt-screen-in{from{opacity:0}to{opacity:1}}
@media (prefers-reduced-motion:reduce){.rt-screen.enter{animation:none}}

/* 카드 */
.rt-card{flex:none;background:var(--bg-elevated);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-card);overflow:hidden}
.rt-card-h{display:flex;align-items:center;gap:10px;padding:14px 18px}
.rt-card-h .rt-card-title{flex:none;font:600 16px/1.3 var(--font-sans);white-space:nowrap}
.rt-card-foot{border-top:1px solid var(--border-subtle);padding:11px 18px;font:600 12px/1.5 var(--font-mono);color:var(--text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rt-dot{flex:none;box-sizing:border-box;width:10px;height:10px;border-radius:var(--radius-full);transition:background var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out)}
.rt-dot.lg{width:12px;height:12px}
.rt-dot.ok{background:var(--color-success-fg)}
.rt-dot.warn{background:var(--color-warning-fg)}
.rt-dot.bad{background:var(--color-error-fg)}
.rt-dot.info{background:var(--color-primary-500)}
.rt-dot.idle{background:var(--color-neutral-300)}
.rt-dot.hold{background:transparent;border:2px solid var(--border-strong)}
.rt-dot.pulse{animation:rt-pulse 1.2s ease-in-out infinite}
@keyframes rt-pulse{0%,100%{opacity:1}50%{opacity:.35}}
.rt-rows{padding:0 18px 6px 46px;display:flex;flex-direction:column}
.rt-grid5{display:grid;grid-template-columns:10px 128px 70px 84px minmax(0,1fr);align-items:center;gap:12px}
.rt-grid5.head{grid-template-columns:10px 156px 70px 84px minmax(0,1fr);padding:14px 18px}
.rt-row{padding:8px 0;border-top:1px solid var(--border-subtle)}
.rt-row .name{font:700 13.5px/1.3 var(--font-mono);white-space:nowrap}
.rt-row .val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;font:600 12px/1.4 var(--font-mono);white-space:nowrap}
.rt-cell5{grid-column:5;display:flex;align-items:center;gap:10px;min-width:0}
.rt-btnw button{width:84px;justify-content:center}
.rt-btnw3 button{width:67px;justify-content:center}
.rt-summary{min-width:0;overflow:hidden;text-overflow:ellipsis;font:600 12.5px/1.4 var(--font-mono);color:var(--text-tertiary);white-space:nowrap}

/* 배너(상태 문장) */
.rt-banner{flex:none;padding:6px 4px 4px;display:flex;flex-direction:column;gap:8px}
.rt-banner .line{display:flex;align-items:center;gap:12px}
.rt-banner .h{font:700 22px/1.25 var(--font-sans);min-width:0}
.rt-banner .h.sm{font-size:16px;line-height:1.3}
.rt-banner .meta{margin-left:auto;font:600 12px/1 var(--font-mono);white-space:nowrap}
.rt-banner .p{font:400 14px/1.6 var(--font-sans);color:var(--text-secondary)}
.rt-banner .p b{color:var(--text-primary)}

/* 접힘 행 (진단 장비 행) */
.rt-layer{display:flex;align-items:center;gap:12px;padding:14px 18px;cursor:pointer;border-top:1px solid var(--border-subtle);transition:background var(--duration-fast) var(--ease-out)}
.rt-layer:first-child{border-top:0}
.rt-layer:hover{background:var(--bg-base)}
.rt-layer .lname{flex:none;font:600 16px/1.3 var(--font-sans);white-space:nowrap}
.rt-layer .lsum{min-width:0;overflow:hidden;text-overflow:ellipsis;font:600 12.5px/1.4 var(--font-mono);color:var(--text-tertiary);white-space:nowrap}
.rt-chev{flex:none;transition:transform var(--duration-base) var(--ease-out)}
.rt-chev.open{transform:rotate(180deg)}
.rt-grow{overflow:hidden}
.rt-grow.in{animation:rt-grow-in 280ms var(--ease-enter)}
@keyframes rt-grow-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.rt-detail{margin:0 18px 12px;background:var(--bg-base);border:1px solid var(--border-default);border-radius:var(--radius-sm);padding:12px 14px;display:flex;flex-direction:column;gap:5px;font:600 12px/1.6 var(--font-mono);color:var(--text-tertiary)}
.rt-actions{margin:0 18px 16px;border-radius:var(--radius-sm);padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.rt-actions.error{background:var(--color-error-bg)}
.rt-actions.warning{background:var(--color-warning-bg)}
.rt-actions .k{display:flex;align-items:baseline;gap:8px}
.rt-actions .kt{font:700 11px/1 var(--font-sans);letter-spacing:.08em;white-space:nowrap}
.rt-actions .ks{font:600 11px/1 var(--font-mono);color:var(--text-tertiary);white-space:nowrap}
.rt-actions .step{display:flex;gap:12px;align-items:baseline}
.rt-actions .step .n{font:600 13px/1.4 var(--font-mono);color:var(--text-tertiary);flex:none}
.rt-actions .step .t{font:400 15px/1.5 var(--font-sans)}

/* 드로어 (바닥 패널) — 접힘 바 1줄, 펼치면 같은 x·폭으로 위로 자라는 오버레이 */
.rt-drawer-slot{flex:none;height:44px}
.rt-drawer{flex:none;display:flex;flex-direction:column;background:var(--bg-base);border:1px solid var(--border-default);border-radius:var(--radius-md);overflow:hidden}
/* 열림·열린 상태·닫힘 내내 접힌 폭 그대로: rt-body(레일 다음) 기준이라 rt-main 패딩(16px)과 같은 left/right — 화면 기준 72px 를 쓰면 레일 폭만큼 좁아진다 */
.rt-drawer.open,.rt-drawer.closing{position:absolute;left:16px;right:16px;bottom:14px;z-index:60;box-shadow:var(--shadow-drawer)}
.rt-drawer.open{animation:rt-drawer-up 300ms var(--ease-enter) both}
.rt-drawer.closing{animation:rt-drawer-down 240ms var(--ease-enter) both}
/* 자기 wrapper(position:relative) 안에 있는 드로어는 wrapper 폭 그대로 — 화면 기준 72/16 을 쓰면 폭이 72px 줄어든다 */
.rt-drawer-host .rt-drawer.open,.rt-drawer-host .rt-drawer.closing{left:0;right:0;bottom:0}
@keyframes rt-drawer-up{from{height:44px}to{height:640px}}
@keyframes rt-drawer-down{from{height:640px}to{height:44px}}
.rt-drawer-bar{flex:none;display:flex;align-items:center;gap:10px;padding:13px 14px;cursor:pointer;height:44px}
.rt-drawer.open .rt-drawer-bar{border-bottom:1px solid var(--border-subtle)}
.rt-drawer-bar .t{font:700 11px/1 var(--font-sans);letter-spacing:.08em;color:var(--text-secondary);white-space:nowrap}
.rt-drawer-bar .s{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;font:600 11.5px/1.4 var(--font-mono);color:var(--text-tertiary);white-space:nowrap}
.rt-drawer-bar .r{flex:none;font:600 10.5px/1 var(--font-mono);color:var(--text-disabled)}
.rt-drawer-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
.rt-log{flex:1;min-height:0;overflow-y:auto;padding:10px 14px;font:400 11.5px/1.9 var(--font-mono)}
.rt-log .g{display:grid;grid-template-columns:60px 34px 50px 52px minmax(0,1fr);gap:0 10px}
.rt-log .g .ts{color:var(--text-disabled)}
.rt-log .g .ev{white-space:pre-wrap;word-break:break-word}
.rt-log .g.new{animation:rt-fade-in 240ms var(--ease-decay)}
@keyframes rt-fade-in{from{opacity:0;transform:translateX(-4px)}to{opacity:1;transform:none}}
.rt-log,.rt-scroll{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}
.rt-log::-webkit-scrollbar,.rt-scroll::-webkit-scrollbar{width:9px}
.rt-log::-webkit-scrollbar-track,.rt-scroll::-webkit-scrollbar-track{background:transparent}
.rt-log::-webkit-scrollbar-thumb,.rt-scroll::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:5px;border:2px solid transparent;background-clip:content-box}
.rt-footer{flex:none;display:flex;justify-content:flex-end;gap:10px;padding-top:2px}
.rt-spacer{flex:1}

/* CameraRow 흐름 애니메이션 (번들이 참조) */
@keyframes rt-travel{0%{left:-36px;opacity:1}52%{left:calc(100% - 36px);opacity:1}58%,100%{left:calc(100% - 36px);opacity:0}}
@keyframes rt-arrive{0%,52%{background:var(--border-strong);box-shadow:none}56%{background:#B9E3CC;box-shadow:0 0 8px 2px rgba(111,184,147,.55)}100%{background:var(--color-success-fg);box-shadow:none}}

/* 미리보기 */
.rt-preview{position:relative;background:#191b21;border-radius:var(--radius-sm);overflow:hidden}
.rt-preview img,.rt-preview canvas{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:cover}
/* 가로 센서(16:10)를 90° 세워 단 프레임 — 10:16 상자를 정확히 채운다 (회전 전 1.6W×W → 회전 후 W×1.6W) */
.rt-preview img.rt-portrait,.rt-preview canvas.rt-portrait{inset:auto;left:-30%;top:18.75%;width:160%;height:62.5%;object-fit:fill;transform:rotate(90deg)}
.rt-preview .tag{position:absolute;left:10px;top:8px;font:600 10px/1 var(--font-mono);color:rgba(255,255,255,.75);z-index:3}
.rt-preview .hint{position:absolute;right:4%;top:5%;font:600 15px/1 var(--font-sans);color:var(--color-warning-fg);z-index:3}
.rt-corner{position:absolute;width:7px;height:7px;margin:-3px 0 0 -3px;border-radius:50%;background:var(--color-warning-fg);z-index:2}
.rt-thumb{flex:none;width:100%;aspect-ratio:10/16;position:relative;background:#191b21;border-radius:var(--radius-sm);overflow:hidden;transition:box-shadow var(--duration-fast) var(--ease-out)}
.rt-thumb.bad{box-shadow:inset 0 0 0 2px var(--color-error-fg)}
.rt-thumb .lbl{position:absolute;left:8px;top:8px;display:flex;align-items:center;gap:5px;font:600 10px/1.3 var(--font-mono);color:rgba(255,255,255,.85);z-index:2}
.rt-thumb .lbl.bad{color:var(--color-error-fg)}
.rt-thumb .lbl i{flex:none;width:6px;height:6px;border-radius:50%;display:inline-block}

/* 세그먼트(3D 뷰 등) */
.rt-seg{display:inline-flex;border:1px solid var(--border-default);border-radius:var(--radius-sm);overflow:hidden}
.rt-seg button{padding:7px 14px;font:600 12px/1 var(--font-sans);color:var(--text-secondary);border:0;border-left:1px solid var(--border-default);background:transparent;cursor:pointer}
.rt-seg button:first-child{border-left:0}
.rt-seg button.on{background:var(--color-primary-500);color:var(--text-inverse)}

/* 트랙(산포 대조) */
.rt-track{position:relative;flex:1;height:26px}
.rt-track .base{position:absolute;left:0;right:0;top:12px;height:2px;background:var(--border-default)}
.rt-track .p{position:absolute;top:9px;width:8px;height:8px;margin-left:-4px;border-radius:50%;background:var(--border-strong);opacity:.55;transition:left var(--duration-slow) var(--ease-out)}
.rt-track .sel{position:absolute;top:6px;box-sizing:border-box;width:14px;height:14px;margin-left:-7px;border-radius:50%;border:2.5px solid var(--text-secondary);background:var(--bg-base);transition:left var(--duration-slow) var(--ease-out)}
.rt-track .cur{position:absolute;top:6px;width:14px;height:14px;margin-left:-7px;border-radius:50%;background:var(--color-primary-400);transition:left var(--duration-slow) var(--ease-out)}
.rt-bar{position:relative;height:6px;border-radius:3px;background:var(--bg-subtle);border:1px solid var(--border-subtle)}
.rt-bar .fill{position:absolute;top:0;bottom:0;left:0;border-radius:3px;transition:width var(--duration-slow) var(--ease-out)}

/* 대장 */
.rt-ledger-h{flex:none;display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--border-subtle)}
.rt-ledger-h .t{font:700 10.5px/1 var(--font-sans);letter-spacing:.06em;color:var(--text-disabled)}
.rt-ledger-h .r{margin-left:auto;font:600 10.5px/1 var(--font-mono);color:var(--text-disabled)}

/* 토스트 */
.rt-toast{position:absolute;left:50%;bottom:24px;transform:translateX(-50%);z-index:80;background:var(--color-primary-700);color:#fff;padding:12px 18px;border-radius:var(--radius-md);font:600 14px/1.3 var(--font-sans);box-shadow:var(--shadow-lg);animation:rt-toast-in 200ms var(--ease-decay)}
@keyframes rt-toast-in{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}

/* 데모 스위처(데모 모드에서만 렌더) */
.rt-demo{position:absolute;right:8px;bottom:8px;z-index:90;display:flex;gap:4px;opacity:.35;transition:opacity var(--duration-fast)}
.rt-demo:hover{opacity:1}
.rt-demo select{font:600 11px/1 var(--font-mono);padding:4px 6px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--bg-elevated);color:var(--text-secondary)}
