/* ===== components.css ===== */
/* =========================================================
   RIZE · Reality Intelligence Platform — Design System (app.css v2)
   Apple · Linear · Stripe · Notion 톤
   ========================================================= */

/* ---------- Tokens ---------- */
:root{
  --primary:#005BAC; --primary-2:#043A70; --primary-soft:rgba(0,91,172,.10);
  --navy:#0e1f44; --navy-2:#142a5c; --navy-line:#22366b;   /* v0.1 examples 네이비 아이덴티티 */
  --success:#16a34a; --success-soft:rgba(22,163,74,.12);
  --warning:#e08a0b; --warning-soft:rgba(224,138,11,.14);
  --danger:#e23b3b;  --danger-soft:rgba(226,59,59,.12);
  --violet:#7b4dff;  --violet-soft:rgba(123,77,255,.14);   /* examples 통합: chip.v / NOC / partner 등 */
  --r-sm:10px; --r:14px; --r-lg:16px;
  --radius:16px;                                            /* examples 컴포넌트의 var(--radius) 별칭 */
  --ease:cubic-bezier(.22,.61,.36,1);
}
.theme-light{
  --bg:#eef1f8; --surface:#ffffff; --surface-2:#f7f9fc; --surface-3:#f1f4fa;
  --border:#e6eaf3; --border-soft:#e6eaf3;
  --text:#13203b; --text-2:#4a5b7c; --text-muted:#697995;
  --side-bg:var(--navy); --side-border:var(--navy-line); --side-hover:var(--navy-2);
  --side-text:#b9c6e6; --side-muted:#8ea2cf;
  --shadow-sm:0 3px 12px rgba(20,38,80,.05);
  --shadow:0 6px 22px rgba(20,38,80,.07);
  --shadow-lg:0 14px 36px rgba(20,38,80,.14);
}
.theme-dark{
  --bg:#0A0E16; --surface:#111725; --surface-2:#161D2C; --surface-3:#1B2333;
  --border:#222B3B; --border-soft:#222B3B;
  --text:#E6ECF7; --text-2:#A6B3C9; --text-muted:#6B7A93;
  --side-bg:#0a1530; --side-border:#1c2e5c; --side-hover:#0f1f44; --side-text:#b9c6e6; --side-muted:#8ea2cf;
  --navy:#0a1530; --navy-2:#0f1f44; --navy-line:#1c2e5c;
  --primary-soft:rgba(0,91,172,.10);
  --success-soft:#0e2920; --warning-soft:#2a2310; --danger-soft:#2a1517;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3);
  --shadow:0 1px 3px rgba(0,0,0,.4), 0 6px 18px rgba(0,0,0,.3);
  --shadow-lg:0 12px 34px rgba(0,0,0,.5);
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--text);
  font-family:"NanumBarunGothic","Nanum Gothic","NanumGothic","Malgun Gothic","Apple SD Gothic Neo",system-ui,sans-serif;
  font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  transition:background .3s var(--ease),color .3s var(--ease);
}
a{text-decoration:none;color:inherit}
.muted{color:var(--text-muted)!important}
.t2{color:var(--text-2)!important}
.ml-auto{margin-left:auto}
.tnum{font-variant-numeric:tabular-nums}

/* ============ LAYOUT ============ */
.app{display:flex;min-height:100vh}
.sidebar{
  width:256px;flex-shrink:0;background:var(--side-bg);border-right:1px solid var(--side-border);
  display:flex;flex-direction:column;position:fixed;inset:0 auto 0 0;z-index:1040;
  transition:transform .26s var(--ease),background .3s var(--ease),border-color .3s var(--ease);
}
.main{flex:1;min-width:0;margin-left:256px;display:flex;flex-direction:column}
@media (max-width:991.98px){
  .sidebar{transform:translateX(-100%)}
  .sidebar.open{transform:translateX(0);box-shadow:var(--shadow-lg)}
  .main{margin-left:0}
}

/* ============ SIDEBAR ============ */
.s-head{padding:22px 22px 18px;display:flex;align-items:center;gap:12px}
.s-logo{
  width:40px;height:40px;border-radius:12px;flex-shrink:0;
  background:linear-gradient(135deg,#3a6bff,#7b4dff);
  display:grid;place-items:center;color:#fff;font-weight:800;font-size:18px;letter-spacing:-1px;
  box-shadow:0 4px 14px rgba(58,107,255,.45);
}
.s-head .nm{font-size:18px;font-weight:800;letter-spacing:-.4px;line-height:1.1;color:#fff}
.s-head .tag{font-size:10px;font-weight:700;color:var(--side-muted);letter-spacing:.14em;margin-top:3px}

.s-section{padding:10px 16px 4px;font-size:10.5px;font-weight:700;letter-spacing:.16em;color:#6f83b3;text-transform:uppercase}
.s-nav{padding:4px 12px;flex:1;overflow-y:auto}
.s-nav a, .s-nav .grp-btn{
  display:flex;align-items:center;gap:11px;width:100%;padding:9px 12px;border-radius:10px;
  color:var(--side-text);font-weight:500;font-size:13.5px;margin-bottom:2px;border:0;background:none;
  cursor:pointer;transition:background .16s var(--ease),color .16s var(--ease);text-align:left;
}
.s-nav a i,.s-nav .grp-btn i{font-size:17px;width:20px;text-align:center;stroke-width:1.5}
.s-nav a:hover,.s-nav .grp-btn:hover{background:var(--side-hover);color:#fff}
.s-nav a.active{background:linear-gradient(90deg,var(--primary),#4a6dff);color:#fff;font-weight:700;box-shadow:0 6px 16px rgba(47,91,234,.35)}
.s-nav a.active i{color:#fff}
.s-nav .grp-btn .chev{margin-left:auto;font-size:13px;transition:transform .2s var(--ease)}
.s-nav .grp.open .grp-btn .chev{transform:rotate(90deg)}
.s-nav .grp.open .grp-btn{color:#fff}
.s-sub{max-height:0;overflow:hidden;transition:max-height .26s var(--ease)}
.s-nav .grp.open .s-sub{max-height:280px}
.s-sub a{padding:8px 12px 8px 43px;font-size:13px;color:var(--side-muted)}
.s-sub a.active{background:rgba(74,109,255,.24);color:#fff;font-weight:700}
.s-nav a .pill{margin-left:auto;font-size:10px;font-weight:700;background:rgba(255,255,255,.14);color:#dbe4f7;padding:2px 8px;border-radius:30px}
.s-nav a.active .pill{background:rgba(255,255,255,.22);color:#fff}
.s-nav .lbl{display:flex;flex-direction:column;line-height:1.12;min-width:0}
.menu-title{display:block;font-size:13.5px;font-weight:700}
.menu-subtitle{display:block;font-size:10px;color:var(--side-muted);margin-top:2px;font-weight:500;letter-spacing:.01em}
.s-nav a.active .menu-subtitle{color:rgba(255,255,255,.78);opacity:1}
.s-nav .grp.open .grp-btn .menu-subtitle{color:var(--side-muted)}
.s-sub a .menu-title{font-size:13px;font-weight:600}
.s-sub a .menu-subtitle{font-size:9.5px}
.s-nav a, .s-nav .grp-btn{align-items:center}
.lang-menu{min-width:170px;padding:6px}
.lang-menu .dropdown-item{border-radius:8px;font-size:13px;padding:8px 12px;display:flex;align-items:center;gap:9px}
.lang-menu .dropdown-item.on{background:var(--primary-soft);color:var(--primary);font-weight:600}
.lang-menu .dropdown-item small{color:var(--text-muted);font-weight:500;margin-left:auto}

.s-foot{margin:12px;padding:13px 14px;border-radius:12px;border:1px solid var(--side-border);background:var(--side-hover)}
.s-foot .r1{display:flex;align-items:center;gap:8px;font-weight:700;font-size:12.5px;color:#fff}
.s-foot small{display:block;color:var(--side-muted);font-size:10.5px;margin-top:5px;line-height:1.55}
.live-dot{width:8px;height:8px;border-radius:50%;background:var(--success);box-shadow:0 0 0 0 rgba(16,185,129,.5);animation:pulse 2s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(16,185,129,.5)}70%{box-shadow:0 0 0 7px rgba(16,185,129,0)}100%{box-shadow:0 0 0 0 rgba(16,185,129,0)}}

/* ============ HEADER ============ */
.topbar{
  position:sticky;top:0;z-index:1030;background:color-mix(in srgb,var(--surface) 82%,transparent);
  backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--border);padding:0 28px;height:66px;
  display:flex;align-items:center;gap:14px;transition:background .3s var(--ease),border-color .3s var(--ease);
}
.search{position:relative;max-width:340px;flex:1}
.search i{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--text-muted);font-size:15px}
.search input{width:100%;border:1px solid var(--border);background:var(--surface-2);color:var(--text);
  border-radius:11px;padding:9px 12px 9px 38px;font-size:13px;font-family:inherit;transition:.16s}
.search input:focus{outline:none;border-color:var(--primary);background:var(--surface);box-shadow:0 0 0 3px var(--primary-soft)}
.prod{display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border-radius:30px;background:var(--success-soft);color:var(--success);font-weight:700;font-size:11.5px;border:1px solid color-mix(in srgb,var(--success) 22%,transparent)}
.prod .live-dot{box-shadow:0 0 0 0 rgba(16,185,129,.4)}
.icon-btn{width:40px;height:40px;border-radius:11px;border:1px solid var(--border);background:var(--surface);color:var(--text-2);display:grid;place-items:center;font-size:17px;cursor:pointer;position:relative;transition:.16s}
.icon-btn:hover{border-color:var(--primary);color:var(--primary);background:var(--surface-2)}
.icon-btn .dot{position:absolute;top:9px;right:10px;width:7px;height:7px;border-radius:50%;background:var(--danger);border:2px solid var(--surface)}
.store-sel{display:flex;align-items:center;gap:9px;padding:7px 12px;border:1px solid var(--border);background:var(--surface);border-radius:11px;cursor:pointer;font-size:13px;font-weight:600;transition:.16s}
.store-sel:hover{border-color:var(--primary)}
.store-sel .ic{width:24px;height:24px;border-radius:7px;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center;font-size:13px}
.profile{display:flex;align-items:center;gap:9px;padding:5px 8px 5px 5px;border-radius:11px;border:1px solid var(--border);background:var(--surface);cursor:pointer;transition:.16s}
.profile:hover{border-color:var(--primary)}
.profile .av{width:32px;height:32px;border-radius:9px;background:linear-gradient(135deg,#2f5bea,#7b4dff);color:#fff;display:grid;place-items:center;font-weight:700;font-size:13px}
.profile .nm{font-weight:700;font-size:12.5px;line-height:1.2}
.profile .rl{font-size:10.5px;color:var(--text-muted)}

/* ============ CONTENT ============ */
.content{padding:32px 40px 44px;max-width:1600px;width:100%;margin:0 auto 0 0;animation:fadeUp .5s var(--ease) both}
@media (max-width:575.98px){.content{padding:22px 18px 36px}}
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.page-head{display:flex;align-items:flex-start;gap:14px;margin-bottom:26px;flex-wrap:wrap}
.page-head h2{font-size:22px;font-weight:800;margin:0;letter-spacing:-.4px}
.page-head .desc{color:var(--text-2);font-size:13px;margin-top:4px}
.sec-title{font-size:13px;font-weight:700;letter-spacing:.01em;color:var(--text-2);margin:0 0 13px;display:flex;align-items:center;gap:8px}
.sec-title .live{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--success);font-weight:600;margin-left:auto}

/* stagger reveal */
.reveal{animation:fadeUp .55s var(--ease) both}
.reveal:nth-child(1){animation-delay:.02s}.reveal:nth-child(2){animation-delay:.06s}
.reveal:nth-child(3){animation-delay:.10s}.reveal:nth-child(4){animation-delay:.14s}
.reveal:nth-child(5){animation-delay:.18s}.reveal:nth-child(6){animation-delay:.22s}

/* ============ CARD ============ */
.card2{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);transition:transform .24s var(--ease),box-shadow .24s var(--ease),border-color .24s var(--ease),background .3s var(--ease)}
.card2.hov:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);border-color:color-mix(in srgb,var(--primary) 30%,var(--border))}
.card2 .hd{display:flex;align-items:center;gap:11px;padding:18px 22px;border-bottom:1px solid var(--border)}
.card2 .hd h6{margin:0;font-weight:800;font-size:14.5px;letter-spacing:-.2px}
.card2 .hd .sub{font-size:11.5px;color:var(--text-muted);margin-top:2px}
.card2 .bd{padding:22px}
.ic-tile{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;font-size:17px;flex-shrink:0}
.chip{font-size:11px;font-weight:700;padding:4px 10px;border-radius:30px;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.chip.g{background:var(--success-soft);color:var(--success)}
.chip.b{background:var(--primary-soft);color:var(--primary)}
.chip.w{background:var(--warning-soft);color:var(--warning)}
.chip.r{background:var(--danger-soft);color:var(--danger)}
.chip.n{background:var(--surface-2);color:var(--text-2)}
.dot-s{width:8px;height:8px;border-radius:50%;display:inline-block}
.btn-primary{background:var(--primary);border-color:var(--primary);font-weight:700;font-size:12.5px;box-shadow:0 4px 12px rgba(47,91,234,.25)}
.btn-primary:hover{background:var(--primary-2);border-color:var(--primary-2)}
.btn-soft{background:var(--surface);border:1px solid var(--border);color:var(--text);font-weight:700;font-size:12.5px;border-radius:9px;transition:.16s}
.btn-soft:hover{border-color:var(--primary);color:var(--primary);background:var(--surface-2)}

/* ============ AI HERO (Store Manager) ============ */
.hero{position:relative;overflow:hidden;border-radius:22px;padding:0;color:#eef3ff;
  background:linear-gradient(120deg,#0e1f44 0%,#1b3a86 55%,#3a4fb0 100%);
  box-shadow:0 18px 44px rgba(14,23,70,.32)}
.hero::before{content:"";position:absolute;left:0;right:0;top:0;height:2px;
  background:linear-gradient(90deg,transparent,rgba(120,180,255,.9),transparent);animation:scan 3.2s var(--ease) infinite}
@keyframes scan{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
.hero .glow{position:absolute;right:-60px;top:-80px;width:320px;height:320px;border-radius:50%;
  background:radial-gradient(circle,rgba(124,58,237,.5),transparent 70%);pointer-events:none}
.hero .inner{display:flex;gap:28px;padding:28px 30px;position:relative;flex-wrap:wrap}
.hero .left{flex:1;min-width:280px}
.hero .eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:600;
  background:rgba(255,255,255,.12);padding:6px 12px;border-radius:30px;backdrop-filter:blur(6px)}
.hero .ai-live{width:7px;height:7px;border-radius:50%;background:#7fffd4;box-shadow:0 0 8px #7fffd4;animation:pulse 1.6s infinite}
.hero h3{font-size:25px;font-weight:800;letter-spacing:-.6px;margin:16px 0 4px;color:#fff}
.hero h3 span{color:#9db4ff}
.hero .status-line{font-size:14px;color:#c5d2ff;margin:0 0 18px}
.hero .pos{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:20px}
.hero .pos .p{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:#dbe6ff;
  background:rgba(255,255,255,.1);padding:7px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.12)}
.hero .pos .p i{color:#7fffd4}
.hero .act-lbl{font-size:11px;font-weight:700;letter-spacing:.08em;color:#9db4ff;text-transform:uppercase;margin-bottom:9px}
.hero .acts{display:flex;gap:9px;flex-wrap:wrap}
.hero .acts .a{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:#fff;
  background:rgba(255,255,255,.14);padding:8px 13px;border-radius:30px;border:1px solid rgba(255,255,255,.16);transition:.16s;cursor:pointer}
.hero .acts .a:hover{background:rgba(255,255,255,.24)}
.hero .acts .a i{color:#7fffd4}

/* Store Health ring */
.health{flex-shrink:0;width:230px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);border-radius:18px;padding:22px}
.ring{position:relative;width:140px;height:140px}
.ring svg{transform:rotate(-90deg)}
.ring .val{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.ring .val b{font-size:38px;font-weight:800;color:#fff;line-height:1}
.ring .val span{font-size:11px;color:#9db4ff;font-weight:600}
.health .stars{color:#ffd66e;font-size:15px;letter-spacing:2px;margin:13px 0 5px}
.health .tier{font-size:13px;font-weight:700}
.health .lbl{font-size:11px;color:#9db4ff;margin-top:2px}
@media (max-width:575.98px){.health{width:100%}}

/* ============ KPI ============ */
.kpi .top{display:flex;align-items:center;gap:9px;margin-bottom:14px}
.kpi .top .ic{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-size:16px}
.kpi .top .name{font-size:12.5px;font-weight:600;color:var(--text-2)}
.kpi .val{font-size:30px;font-weight:800;letter-spacing:-1px;line-height:1}
.kpi .row2{display:flex;align-items:center;gap:8px;margin:10px 0 12px}
.kpi .delta{font-size:12px;font-weight:700;display:inline-flex;align-items:center;gap:2px}
.kpi .delta.up{color:var(--success)}.kpi .delta.down{color:var(--danger)}
.kpi .yday{font-size:11.5px;color:var(--text-muted)}
.kpi .ai{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--text-2);background:var(--surface-2);border-radius:9px;padding:8px 10px}
.kpi .ai .b{font-size:9.5px;font-weight:800;color:var(--primary);background:var(--primary-soft);padding:2px 6px;border-radius:5px;letter-spacing:.04em}

/* ============ ACTION (todo) ============ */
.todo{display:flex;align-items:center;gap:13px;padding:13px 0;border-bottom:1px solid var(--border)}
.todo:last-child{border-bottom:0;padding-bottom:0}.todo:first-child{padding-top:0}
.todo .n{width:28px;height:28px;border-radius:9px;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center;font-weight:800;font-size:12px;flex-shrink:0}
.todo .tt{font-weight:600;font-size:13.5px}
.todo .ds{font-size:11.5px;color:var(--text-muted);margin-top:1px}

/* ============ ENGINE GRID ============ */
.eng{border:1px solid var(--border);border-radius:13px;padding:15px;background:var(--surface);transition:.18s}
.eng:hover{border-color:color-mix(in srgb,var(--primary) 28%,var(--border));transform:translateY(-2px)}
.eng .e-top{display:flex;align-items:center;gap:9px;margin-bottom:12px}
.eng .e-ic{width:32px;height:32px;border-radius:9px;background:var(--surface-2);display:grid;place-items:center;font-size:15px;color:var(--text-2)}
.eng .e-nm{font-weight:700;font-size:13px;line-height:1.1}
.eng .e-st{font-size:10.5px;color:var(--success);font-weight:600;display:flex;align-items:center;gap:4px}
.eng .e-meta{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;font-size:11px}
.eng .e-meta div{display:flex;justify-content:space-between}
.eng .e-meta span{color:var(--text-muted)}
.eng .e-meta b{font-weight:600;color:var(--text-2)}

/* ============ EVENT TIMELINE ============ */
.ev{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--border)}
.ev:last-child{border-bottom:0;padding-bottom:0}.ev:first-child{padding-top:0}
.ev .t{font-size:11px;color:var(--text-muted);font-weight:600;width:42px;flex-shrink:0;padding-top:1px}
.ev .dotline{position:relative;width:14px;flex-shrink:0;display:flex;justify-content:center}
.ev .dotline::before{content:"";position:absolute;top:5px;width:9px;height:9px;border-radius:50%;background:var(--primary)}
.ev .ds{font-size:12.5px}
.ev .ds .sub{font-size:11px;color:var(--text-muted)}

/* ============ NOTICE ============ */
.notice{display:flex;gap:12px;padding:12px 0;border-bottom:1px dashed var(--border)}
.notice:last-child{border-bottom:0;padding-bottom:0}.notice:first-child{padding-top:0}
.notice .ic{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;font-size:14px;flex-shrink:0}

/* ============ TABLE ============ */
.tbl{width:100%;border-collapse:separate;border-spacing:0}
.tbl thead th{font-size:11px;letter-spacing:.03em;text-transform:uppercase;color:var(--text-muted);font-weight:700;padding:12px 16px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}
.tbl tbody td{padding:14px 16px;border-bottom:1px solid var(--border);font-size:13px;vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:0}
.tbl tbody tr:hover{background:var(--surface-2)}
.tbl .strong{font-weight:700}
.table-wrap{overflow-x:auto}

/* ============ STORE / DEVICE CARD ============ */
.store{border:1px solid var(--border);border-radius:16px;background:var(--surface);overflow:hidden;box-shadow:var(--shadow-sm);transition:transform .24s var(--ease),box-shadow .24s var(--ease),border-color .24s var(--ease);height:100%}
.store:hover{border-color:color-mix(in srgb,var(--primary) 30%,var(--border));transform:translateY(-3px);box-shadow:var(--shadow-lg)}
.store .cover{height:84px;background:linear-gradient(120deg,#16306b,#3a4fb0);position:relative;display:flex;align-items:flex-end;padding:14px 16px}
.store .cover .st{position:absolute;top:14px;right:14px}
.store .cover .nm{color:#fff;font-weight:800;font-size:15px;letter-spacing:-.2px}
.store .cover .addr{color:#c3d0f3;font-size:11px}
.store .body{padding:16px}
.store .stat{display:flex;justify-content:space-between;padding:6px 0;font-size:12.5px}
.store .stat span{color:var(--text-muted)}.store .stat b{font-weight:700}

/* ============ FORM ============ */
.form-section{display:grid;grid-template-columns:230px 1fr;gap:28px;padding:24px 0;border-bottom:1px solid var(--border)}
.form-section:last-child{border-bottom:0}
.form-section .lead{font-weight:700;font-size:14px}
.form-section .lead p{font-size:12px;color:var(--text-muted);margin:6px 0 0;line-height:1.6;font-weight:400}
@media (max-width:767.98px){.form-section{grid-template-columns:1fr;gap:14px}}
.field{margin-bottom:16px}.field:last-child{margin-bottom:0}
.field label{display:block;font-size:12px;font-weight:600;margin-bottom:7px}
.inp{width:100%;border:1px solid var(--border);background:var(--surface-2);color:var(--text);border-radius:10px;padding:10px 13px;font-size:13px;font-family:inherit;transition:.16s}
.inp:focus{outline:none;border-color:var(--primary);background:var(--surface);box-shadow:0 0 0 3px var(--primary-soft)}
.toggle-row{display:flex;align-items:center;gap:12px;padding:14px;border:1px solid var(--border);border-radius:12px;background:var(--surface-2);margin-bottom:11px}
.toggle-row:last-child{margin-bottom:0}
.toggle-row .t-tt{font-weight:600;font-size:13px}
.toggle-row .t-ds{font-size:11.5px;color:var(--text-muted);margin-top:2px}
.switch{position:relative;width:44px;height:25px;flex-shrink:0}
.switch input{opacity:0;width:0;height:0}
.switch .sl{position:absolute;inset:0;background:var(--surface-3);border:1px solid var(--border);border-radius:30px;cursor:pointer;transition:.22s}
.switch .sl::before{content:"";position:absolute;width:19px;height:19px;left:2px;top:2px;background:#fff;border-radius:50%;transition:.22s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.switch input:checked + .sl{background:var(--primary);border-color:var(--primary)}
.switch input:checked + .sl::before{transform:translateX(19px)}

/* ============ FUNNEL / HEATMAP ============ */
.funnel-row{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.funnel-row:last-child{margin-bottom:0}
.funnel-row .fl-lbl{width:120px;font-size:12.5px;font-weight:600;flex-shrink:0}
.funnel-bar{height:38px;border-radius:10px;background:linear-gradient(90deg,var(--primary),#5a7bff);display:flex;align-items:center;justify-content:flex-end;padding:0 14px;color:#fff;font-weight:700;font-size:13px;min-width:64px}
.funnel-row .fl-pct{width:64px;text-align:right;font-size:12.5px;color:var(--text-muted);flex-shrink:0}
.heat{display:grid;grid-template-columns:auto repeat(12,1fr);gap:5px;font-size:10px;min-width:560px}
.heat .cell{height:26px;border-radius:6px}
.heat .hd-c{display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-weight:700}
.heat .row-l{display:flex;align-items:center;color:var(--text-muted);font-weight:700;padding-right:4px}

/* ============ PERMISSION MATRIX ============ */
.matrix td .switch{margin:0 auto}
.matrix .ro{text-align:center}

/* progress */
.progress{height:6px;background:var(--surface-3);border-radius:30px;overflow:hidden}
.progress-bar{background:var(--primary)}

.scrim{display:none;position:fixed;inset:0;background:rgba(8,13,26,.4);z-index:1035;backdrop-filter:blur(2px)}
.scrim.show{display:block}
@media (max-width:991.98px){.hide-sm{display:none!important}}
.foot-note{text-align:center;color:var(--text-muted);font-size:11.5px;margin:34px 0 6px}

/* =========================================================
   Analytics — 한글 최적화 · 카드 균일 · AI 코멘트 · 색상 규칙
   ========================================================= */
:root{ --c-new:#2f5bea; --c-reg:#16a34a; --c-churn:#e08a0b; --c-vip:#7b4dff;
  --c-new-soft:rgba(47,91,234,.12); --c-reg-soft:rgba(22,163,74,.12);
  --c-churn-soft:rgba(224,138,11,.14); --c-vip-soft:rgba(123,77,255,.14); }

/* 제목/지표명 줄바꿈 — 한글 단어 단위로 끊고 카드 밖으로 안 나가게 */
.card-title{white-space:normal;word-break:keep-all;line-height:1.4;margin:0}
.metric-title{white-space:normal;word-break:keep-all;overflow:hidden;text-overflow:ellipsis;line-height:1.4}
.card2 .hd h6{word-break:keep-all;line-height:1.4}
.chip{white-space:nowrap}

/* 분석 카드 그리드 — Flex/Grid 유동 레이아웃 */
.an-grid{display:grid;gap:20px;grid-template-columns:repeat(12,1fr);align-items:stretch}
.sp-3{grid-column:span 3}.sp-4{grid-column:span 4}.sp-5{grid-column:span 5}
.sp-6{grid-column:span 6}.sp-7{grid-column:span 7}.sp-8{grid-column:span 8}.sp-12{grid-column:span 12}

/* 균일 카드: 동일 높이/패딩/제목위치/차트크기/하단 AI 코멘트 */
.an-card{display:flex;flex-direction:column;min-height:380px;background:var(--surface);
  border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);overflow:hidden;
  transition:transform .24s var(--ease),box-shadow .24s var(--ease),border-color .24s var(--ease),background .3s var(--ease)}
.an-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);border-color:color-mix(in srgb,var(--primary) 26%,var(--border))}
.an-card .an-hd{display:flex;align-items:flex-start;gap:11px;padding:20px 22px 0}
.an-card .an-hd .ic-tile{flex-shrink:0}
.an-card .an-hd .tt{min-width:0;flex:1}
.an-card .an-hd .card-title{font-size:14.5px;font-weight:700}
.an-card .an-hd .sub{font-size:11.5px;color:var(--text-muted);margin-top:3px;word-break:keep-all;line-height:1.45}
.an-card .an-body{flex:1;padding:18px 22px 6px;display:flex;flex-direction:column;justify-content:center;min-height:0}
.an-card .chart-box{position:relative;width:100%;height:260px}        /* 차트 +25% 확대 */
.an-card .chart-box canvas{width:100%!important;height:100%!important}
.an-card .ai-comment{margin:8px 22px 20px}

/* 하단 AI 코멘트 박스 */
.ai-comment{display:flex;gap:11px;align-items:flex-start;padding:13px 15px;background:var(--surface-2);
  border:1px solid var(--border);border-radius:13px}
.ai-comment .ai-b{flex-shrink:0;font-size:10px;font-weight:800;color:var(--primary);background:var(--primary-soft);
  padding:3px 8px;border-radius:7px;letter-spacing:.04em;margin-top:1px}
.ai-comment .ai-tx{font-size:12.5px;color:var(--text-2);line-height:1.65;word-break:keep-all}
.ai-comment .ai-tx b{color:var(--text);font-weight:700}

/* 색상 레전드 (신규/단골/이탈/VIP 공통) */
.legend{display:flex;flex-wrap:wrap;gap:12px 22px;justify-content:center}
.legend .lg{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:600;word-break:keep-all}
.legend .lg .sw{width:12px;height:12px;border-radius:4px;flex-shrink:0}
.legend .lg .pct{font-weight:800;font-variant-numeric:tabular-nums}

/* 가로 막대(구역/구성 비중) */
.hbar{margin-bottom:14px}.hbar:last-child{margin-bottom:0}
.hbar .hb-top{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:6px;word-break:keep-all}
.hbar .hb-top b{font-weight:800;font-variant-numeric:tabular-nums}
.hbar .hb-track{height:12px;border-radius:30px;background:var(--surface-3);overflow:hidden}
.hbar .hb-fill{height:100%;border-radius:30px}

/* 반응형: 320 / 768 / 1024 / 1440 / 1920 / 2560 */
@media (max-width:1199.98px){
  .sp-3,.sp-4,.sp-5{grid-column:span 6}
  .sp-7,.sp-8{grid-column:span 12}
}
@media (max-width:767.98px){
  .an-grid{gap:16px}
  .sp-3,.sp-4,.sp-5,.sp-6,.sp-7,.sp-8{grid-column:span 12}
  .an-card{min-height:340px}
  .an-card .chart-box{height:220px}
}
@media (max-width:359.98px){
  .an-card .an-hd{padding:16px 16px 0}
  .an-card .an-body{padding:14px 16px 4px}
  .an-card .ai-comment{margin:8px 16px 16px}
  .an-card .an-hd .card-title{font-size:13.5px}
}
@media (min-width:1920px){ .an-grid{gap:24px} .an-card .chart-box{height:300px} }
@media (min-width:2560px){ .an-card .chart-box{height:340px} }

/* =========================================================
   통합 레이어 1 — examples(v0.1) 전용 컴포넌트 이식
   ---------------------------------------------------------
   rize_site 디자인 시스템을 베이스로 두고, examples 페이지
   (admin/noc/partner/install/live/store/system-reports/settings)
   에서만 쓰던 클래스를 충돌 없이 보강한다.
   · KPI 변형은 .card2.kpi 로 스코프하여 베이스 .kpi 와 분리.
   · 색상은 통합 토큰(var(--violet) 등)을 사용.
   ========================================================= */

/* ----- 카드 헤더 아이콘 (examples 는 .hd 안에 .ic 사용) ----- */
.card2 .hd .ic{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;font-size:17px;flex-shrink:0}
.icon-tile{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;font-size:17px;flex-shrink:0}

/* ----- KPI 변형(examples): .card2.kpi > .bd > .lbl/.val/.trend ----- */
.card2.kpi .bd{padding:18px 20px}
.card2.kpi .lbl{font-size:12px;color:var(--text-muted);font-weight:600;display:flex;align-items:center;gap:7px}
.card2.kpi .lbl .ic{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-size:15px;flex-shrink:0}
.card2.kpi .val{font-size:27px;font-weight:800;letter-spacing:-.5px;margin:11px 0 3px;line-height:1.05}
.card2.kpi .val small{font-size:14px;font-weight:700;color:var(--text-muted)}
.trend{font-size:11.5px;font-weight:700;display:inline-flex;align-items:center;gap:3px}
.trend.up{color:var(--success)}
.trend.down{color:var(--danger)}

/* ----- chip 보라색(violet) 추가 ----- */
.chip.v{background:var(--violet-soft);color:var(--violet)}

/* ----- 보라 soft 배경(아이콘 타일용) ----- */
.violet-soft-bg{background:var(--violet-soft);color:var(--violet)}

/* ----- AI HERO (examples 점주/관리자 브리핑 배너) ----- */
.ai-hero{border-radius:var(--r-lg);padding:22px 24px;color:#eaf0ff;position:relative;overflow:hidden;
  background:linear-gradient(120deg,#0e1f44 0%,#1b3a86 55%,#3a4fb0 100%);box-shadow:0 12px 30px rgba(14,31,68,.3)}
.ai-hero::after{content:"";position:absolute;right:-40px;top:-40px;width:220px;height:220px;border-radius:50%;
  background:radial-gradient(circle,rgba(123,77,255,.45),transparent 70%);pointer-events:none}
.ai-hero .tag{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;font-weight:700;
  background:rgba(255,255,255,.14);padding:5px 11px;border-radius:30px;position:relative}
.ai-hero h4{font-size:18px;font-weight:800;margin:13px 0 7px;line-height:1.45;position:relative;color:#fff;word-break:keep-all}
.ai-hero p{color:#c3d0f3;margin:0;font-size:13px;line-height:1.6;max-width:760px;position:relative;word-break:keep-all}
.ai-hero .metrics{display:flex;gap:26px;margin-top:16px;flex-wrap:wrap;position:relative}
.ai-hero .metrics div b{display:block;font-size:20px;font-weight:800;color:#fff;font-variant-numeric:tabular-nums}
.ai-hero .metrics div span{font-size:11px;color:#a9bbe8}

/* ----- 리스트 아이템(알림/감지/처리필요) ----- */
.item{display:flex;gap:12px;padding:13px 0;border-bottom:1px dashed var(--border)}
.item:last-child{border-bottom:0;padding-bottom:0}
.item:first-child{padding-top:0}
.item .ic{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;font-size:16px;flex-shrink:0}
.item .tt{font-weight:700;font-size:13.5px}
.item .ds{font-size:12px;color:var(--text-muted);margin-top:2px;line-height:1.5;word-break:keep-all}

/* ----- 액션 카드(추천 액션) ----- */
.action{border:1px solid var(--border);border-radius:13px;padding:14px;background:var(--surface-2);margin-bottom:11px}
.action:last-child{margin-bottom:0}
.action .top{display:flex;align-items:center;gap:9px;margin-bottom:7px}
.action .top .num{width:26px;height:26px;border-radius:8px;background:var(--primary);color:#fff;display:grid;place-items:center;font-weight:800;font-size:12px;flex-shrink:0}
.action .top b{font-size:13.5px}
.action p{margin:0 0 11px;font-size:12px;color:var(--text-muted);line-height:1.55}
.action .ft{display:flex;align-items:center;gap:9px}

/* ----- 디바이스 라인(간단형) ----- */
.dev{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--surface-2);margin-bottom:10px}
.dev:last-child{margin-bottom:0}
.dev .cam{width:42px;height:42px;border-radius:10px;display:grid;place-items:center;font-size:18px;flex-shrink:0}
.dev .nm{font-weight:700;font-size:13px}
.dev .meta{font-size:11px;color:var(--text-muted);margin-top:2px}

/* ----- 타임라인(설치 일정) ----- */
.timeline{position:relative}
.timeline::before{content:"";position:absolute;left:17px;top:4px;bottom:4px;width:2px;background:var(--border)}
.tl{position:relative;display:flex;gap:12px;padding:0 0 18px}
.tl:last-child{padding-bottom:0}
.tl .no{position:relative;width:36px;height:36px;border-radius:11px;background:var(--primary);color:#fff;display:grid;place-items:center;font-weight:800;font-size:12px;flex-shrink:0}
.tl .tx{background:var(--surface-2);border:1px solid var(--border);border-radius:13px;padding:12px;flex:1;min-width:0}
.tl .tx b{font-size:13px}
.tl .tx p{font-size:12px;color:var(--text-muted);margin:4px 0 0;line-height:1.55;word-break:keep-all}

/* ----- Live Relay (영상 저장 없이 박스/이벤트 메타데이터만 표시) ----- */
.live-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.live-box{height:220px;border:1px solid var(--border);border-radius:16px;
  background:linear-gradient(135deg,var(--surface-2),var(--surface-3));position:relative;overflow:hidden}
.live-box .scan{position:absolute;inset:18px;border:1px dashed rgba(47,91,234,.35);border-radius:12px}
.live-box .person{position:absolute;border:2px solid var(--primary);border-radius:10px;background:rgba(47,91,234,.08)}
.live-box .tagg{position:absolute;top:-24px;left:0;background:var(--primary);color:#fff;font-size:10.5px;font-weight:800;padding:3px 7px;border-radius:7px}
.live-box .caption{position:absolute;left:14px;bottom:12px;right:14px;display:flex;align-items:center;justify-content:space-between}

/* ----- 메트릭 라인(파이프라인/구성 비중) ----- */
.metric-list{display:grid;gap:10px}
.metric-line{display:flex;align-items:center;gap:10px}
.metric-line .label{width:90px;font-size:12px;font-weight:800;flex-shrink:0}
.metric-line .bar{height:10px;flex:1;background:var(--surface-3);border-radius:30px;overflow:hidden}
.metric-line .bar span{display:block;height:100%;background:linear-gradient(90deg,var(--primary),var(--violet));border-radius:30px}
.metric-line .val{font-size:12px;color:var(--text-muted);width:50px;text-align:right;flex-shrink:0}

/* ----- Privacy strip (영상 비저장/민감데이터 차단 안내) ----- */
.privacy-strip{display:inline-flex;align-items:center;gap:9px;padding:10px 12px;border-radius:12px;
  background:var(--success-soft);color:var(--success);font-size:12px;font-weight:800;
  border:1px solid color-mix(in srgb,var(--success) 22%,transparent)}

/* ----- 상태 그리드 / 헬스 행 (본사 관리자·시스템 보고서에서 사용) ----- */
.status-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.status-card{padding:14px;border:1px solid var(--border);border-radius:14px;background:var(--surface-2)}
.status-card .x{font-size:11.5px;color:var(--text-muted);font-weight:700}
.status-card .y{font-size:20px;font-weight:900;margin-top:5px;font-variant-numeric:tabular-nums}
.status-card .z{font-size:11px;color:var(--text-muted);margin-top:2px}
.health-row{display:grid;grid-template-columns:1fr auto auto;gap:10px;align-items:center;padding:12px 0;border-bottom:1px dashed var(--border)}
.health-row:last-child{border-bottom:0}
.health-row .nm{font-weight:800;font-size:13px}
.health-row .ds{font-size:11.5px;color:var(--text-muted);margin-top:1px}
.health-row .port{font-size:11px;color:var(--text-muted);font-weight:800}

/* =========================================================
   통합 레이어 2 — 로그인 화면(examples 디자인 우선)
   ========================================================= */
.login-wrap{min-height:100vh;display:grid;grid-template-columns:1.08fr .92fr;background:var(--bg)}
.login-visual{position:relative;padding:56px;background:linear-gradient(135deg,#0e1f44 0%,#1b3a86 58%,#3a4fb0 100%);
  color:#fff;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between}
.login-visual::after{content:"";position:absolute;right:-90px;top:-90px;width:340px;height:340px;border-radius:50%;
  background:radial-gradient(circle,rgba(123,77,255,.55),transparent 68%)}
.login-visual .brand-big{position:relative;display:flex;align-items:center;gap:14px;font-weight:900;font-size:24px;letter-spacing:-.5px;line-height:1.15}
.login-visual .brand-big .mark{width:46px;height:46px;border-radius:15px;background:rgba(255,255,255,.16);display:grid;place-items:center;border:1px solid rgba(255,255,255,.2)}
.login-visual h1{position:relative;font-size:34px;font-weight:900;letter-spacing:-1px;line-height:1.28;margin:0 0 16px;word-break:keep-all}
.login-visual p{position:relative;max-width:620px;color:#c3d0f3;line-height:1.72;margin:0;word-break:keep-all}
.login-visual .metrics{position:relative;display:flex;gap:26px;flex-wrap:wrap;margin-top:10px}
.login-visual .metrics div b{display:block;font-size:15px;font-weight:800;color:#fff;letter-spacing:.02em}
.login-visual .metrics div span{font-size:11px;color:#a9bbe8}
.login-panel{display:flex;align-items:center;justify-content:center;padding:42px}
.login-card{width:min(440px,100%);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:22px;padding:28px}
.login-card h2{font-size:22px;font-weight:900;margin:0 0 6px;letter-spacing:-.3px}
.login-card .hint{color:var(--text-muted);font-size:12.5px;margin-bottom:22px}

/* =========================================================
   통합 레이어 3 — 신규 페이지(index 랜딩 / admin 본사 관리자) 헬퍼
   ========================================================= */
/* 랜딩 진입 화면 */
.landing{min-height:100vh;display:flex;flex-direction:column}
.landing-hero{flex:1;display:grid;place-items:center;padding:48px 22px;position:relative;overflow:hidden;
  background:linear-gradient(135deg,#0e1f44 0%,#1b3a86 58%,#3a4fb0 100%);color:#eef3ff}
.landing-hero::before{content:"";position:absolute;left:0;right:0;top:0;height:2px;
  background:linear-gradient(90deg,transparent,rgba(120,180,255,.9),transparent);animation:scan 3.2s var(--ease) infinite}
.landing-inner{width:min(760px,100%);text-align:center;position:relative}
.landing-badge{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;
  background:rgba(255,255,255,.12);padding:7px 14px;border-radius:30px;backdrop-filter:blur(6px);margin-bottom:22px}
.landing-logo{width:72px;height:72px;border-radius:22px;margin:0 auto 22px;
  background:linear-gradient(135deg,#3a6bff,#7b4dff);display:grid;place-items:center;color:#fff;font-weight:900;font-size:34px;
  box-shadow:0 14px 36px rgba(37,99,235,.42)}
.landing-inner h1{font-size:38px;font-weight:900;letter-spacing:-1.2px;margin:0 0 12px;color:#fff;line-height:1.18;word-break:keep-all}
.landing-inner .lead{font-size:15px;color:#c5d2ff;max-width:560px;margin:0 auto 30px;line-height:1.7;word-break:keep-all}
.landing-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.landing-cta .btn{padding:13px 22px;font-size:14px;border-radius:12px}
.btn-ghost-light{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);color:#fff;font-weight:700}
.btn-ghost-light:hover{background:rgba(255,255,255,.2);color:#fff}
.landing-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:38px}
.landing-grid .lc{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);border-radius:14px;padding:16px 14px;text-align:left}
.landing-grid .lc i{font-size:20px;color:#9db4ff}
.landing-grid .lc .t{font-weight:700;font-size:13px;margin:9px 0 3px;color:#fff}
.landing-grid .lc .d{font-size:11px;color:#9db4ff;line-height:1.5}
.landing-foot{padding:18px;text-align:center;color:var(--text-muted);font-size:11.5px;background:var(--bg)}
@media (max-width:767.98px){
  .landing-inner h1{font-size:28px}
  .landing-grid{grid-template-columns:repeat(2,1fr)}
}

/* =========================================================
   통합 레이어 4 — 반응형 보강 (360 / 768 / 1024 / 1440)
   ========================================================= */
/* 태블릿 이하: 탑바 좌우 여백·간격 축소 */
@media (max-width:991.98px){
  .topbar{padding:0 16px;gap:10px}
  .content{padding:24px 18px 40px}
  .login-wrap{grid-template-columns:1fr}
  .login-visual{display:none}            /* 모바일: 좌측 비주얼 숨김 */
  .login-panel{padding:28px 18px}
  .live-grid{grid-template-columns:1fr}
  .status-grid{grid-template-columns:repeat(2,1fr)}
}
/* 모바일: 프로필 텍스트 숨김은 .hide-sm 로 처리됨. 아이콘 버튼 약간 축소 */
@media (max-width:575.98px){
  .icon-btn{width:38px;height:38px;font-size:16px}
  .topbar{height:60px;gap:8px}
  .profile{padding:4px}
  .page-head h2{font-size:20px}
  .ai-hero{padding:18px 16px}
  .ai-hero .metrics{gap:16px}
  .status-grid{grid-template-columns:1fr}
}
/* 초소형 360px: 그리드/타이포 안전 처리 */
@media (max-width:380px){
  .content{padding:18px 14px 34px}
  .kpi .val{font-size:26px}
  .card2.kpi .val{font-size:24px}
  .landing-inner h1{font-size:25px}
}
/* 터치 타깃 최소 크기 보장 */
.btn,.btn-soft,.btn-primary,.icon-btn{min-height:38px}
.btn-sm{min-height:32px}

/* 모든 테이블은 좁은 화면에서 가로 스크롤 (카드 깨짐 방지) */
.table-wrap{ -webkit-overflow-scrolling:touch }
.table-wrap table{min-width:560px}
@media (max-width:575.98px){ .table-wrap table{min-width:520px} }


/* =========================================================
   RDB Detailed Prototype Extensions · 2026-07-02
   ========================================================= */
:root{--rdb-line:1px solid var(--border)}
.ml-auto{margin-left:auto!important}.muted{color:var(--text-muted)!important}.strong{font-weight:700}.tiny{font-size:11px}.nowrap{white-space:nowrap}
.content.wide{max-width:1560px}.page-actions{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}.page-kicker{font-size:12px;font-weight:800;color:var(--primary);letter-spacing:.08em;text-transform:uppercase;margin-bottom:5px}.page-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}.page-tabs a{padding:8px 12px;border-radius:12px;border:1px solid var(--border);background:var(--surface);font-size:12px;font-weight:700;color:var(--text-2);text-decoration:none}.page-tabs a.active,.page-tabs a:hover{background:var(--primary-soft);border-color:color-mix(in srgb,var(--primary) 35%,var(--border));color:var(--primary)}
.grid-kpi{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;margin-bottom:22px}.grid-kpi.three{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-kpi.two{grid-template-columns:repeat(2,minmax(0,1fr))}@media(max-width:991px){.grid-kpi{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:575px){.grid-kpi,.grid-kpi.three,.grid-kpi.two{grid-template-columns:1fr}}
.mini-kpi{background:var(--surface);border:1px solid var(--border);border-radius:18px;box-shadow:var(--shadow-sm);padding:18px;min-height:126px;position:relative;overflow:hidden}.mini-kpi:after{content:"";position:absolute;right:-30px;top:-45px;width:120px;height:120px;border-radius:50%;background:var(--primary-soft)}.mini-kpi .label{font-size:12px;font-weight:700;color:var(--text-2);display:flex;gap:7px;align-items:center}.mini-kpi .value{font-size:29px;font-weight:800;letter-spacing:-.6px;margin:12px 0 4px;position:relative;z-index:1}.mini-kpi .note{font-size:11.5px;color:var(--text-muted);position:relative;z-index:1}.mini-kpi .delta{font-size:11px;font-weight:800;padding:3px 8px;border-radius:20px;margin-left:auto}.mini-kpi .delta.up{background:var(--success-soft);color:var(--success)}.mini-kpi .delta.down{background:var(--danger-soft);color:var(--danger)}.mini-kpi .delta.flat{background:var(--surface-2);color:var(--text-2)}
.split{display:grid;grid-template-columns:1.2fr .8fr;gap:20px}.split.equal{grid-template-columns:1fr 1fr}.split.three{grid-template-columns:1fr 1fr 1fr}@media(max-width:1199px){.split,.split.equal,.split.three{grid-template-columns:1fr}}
.table-wrap{overflow:auto}.tbl{width:100%;border-collapse:separate;border-spacing:0}.tbl th{font-size:11px;letter-spacing:.02em;color:var(--text-muted);font-weight:800;background:var(--surface-2);border-bottom:1px solid var(--border);padding:12px 14px;white-space:nowrap}.tbl td{padding:13px 14px;border-bottom:1px solid var(--border);font-size:12.5px;vertical-align:middle}.tbl tr:last-child td{border-bottom:0}.tbl .name{font-weight:800;color:var(--text)}.tbl .sub{font-size:11px;color:var(--text-muted);margin-top:2px}.tbl .num{font-variant-numeric:tabular-nums;font-weight:700}.row-link{cursor:pointer}.row-link:hover td{background:var(--surface-2)}
.timeline{display:flex;flex-direction:column;gap:13px}.tl{display:flex;gap:12px;position:relative}.tl:before{content:"";position:absolute;left:16px;top:34px;bottom:-14px;width:1px;background:var(--border)}.tl:last-child:before{display:none}.tl .dot{width:33px;height:33px;border-radius:11px;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center;flex:0 0 auto}.tl .body{padding-bottom:4px}.tl .tt{font-weight:800;font-size:13px}.tl .ds{font-size:11.5px;color:var(--text-muted);margin-top:3px}
.empty-state{text-align:center;padding:44px 20px}.empty-state i{font-size:34px;color:var(--primary)}.empty-state h5{font-weight:800;margin:12px 0 5px}.empty-state p{color:var(--text-muted);font-size:13px;margin:0 auto;max-width:420px}.wizard{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:20px}.wiz{border:1px solid var(--border);border-radius:14px;padding:12px;background:var(--surface)}.wiz.on{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}.wiz .n{font-size:11px;font-weight:800;opacity:.75}.wiz .t{font-size:13px;font-weight:800;margin-top:3px}@media(max-width:767px){.wizard{grid-template-columns:1fr 1fr}}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid.three{grid-template-columns:1fr 1fr 1fr}@media(max-width:767px){.form-grid,.form-grid.three{grid-template-columns:1fr}}.field label{font-weight:800;font-size:11.5px;color:var(--text-2);margin-bottom:7px}.inp,.form-control,.form-select{border-radius:12px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:13px;padding:10px 12px;width:100%}.inp:focus,.form-control:focus,.form-select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 4px var(--primary-soft)}.help{font-size:11px;color:var(--text-muted);margin-top:6px}.divider{height:1px;background:var(--border);margin:18px 0}.panel-note{display:flex;gap:10px;padding:12px 14px;border-radius:14px;background:var(--primary-soft);color:var(--primary);font-size:12.5px;font-weight:700}.panel-note i{font-size:16px}.risk-note{background:var(--danger-soft);color:var(--danger)}
.zone-map{height:330px;border-radius:18px;border:1px dashed color-mix(in srgb,var(--primary) 45%,var(--border));background:linear-gradient(135deg,var(--surface),var(--surface-2));position:relative;overflow:hidden}.zone{position:absolute;border:2px solid color-mix(in srgb,var(--primary) 60%,transparent);background:color-mix(in srgb,var(--primary) 12%,transparent);border-radius:16px;padding:10px;font-size:12px;font-weight:800;color:var(--primary);box-shadow:var(--shadow-sm)}.zone.z1{left:7%;top:12%;width:30%;height:32%}.zone.z2{left:43%;top:10%;width:45%;height:28%}.zone.z3{left:10%;top:55%;width:35%;height:32%}.zone.z4{left:52%;top:50%;width:37%;height:38%}.camera-feed{height:260px;border-radius:18px;background:radial-gradient(circle at 30% 20%,#334155,#020617 70%);position:relative;overflow:hidden;color:#fff;padding:16px}.camera-feed:after{content:"LIVE";position:absolute;right:16px;top:14px;background:rgba(239,68,68,.95);padding:4px 9px;border-radius:20px;font-size:10px;font-weight:900}.camera-feed .gridline{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.07) 1px,transparent 1px);background-size:46px 46px}.camera-feed .caption{position:absolute;left:16px;bottom:14px;font-size:12px;font-weight:700}.heatbar{height:10px;border-radius:99px;background:linear-gradient(90deg,#10B981,#F59E0B,#EF4444);overflow:hidden}.bar-list{display:flex;flex-direction:column;gap:12px}.bar-row{display:grid;grid-template-columns:110px 1fr 58px;gap:10px;align-items:center;font-size:12px}.bar{height:9px;border-radius:99px;background:var(--surface-2);overflow:hidden}.bar span{display:block;height:100%;background:var(--primary);border-radius:99px}.phone-preview{width:260px;max-width:100%;border:10px solid var(--text);border-radius:32px;background:var(--surface);padding:14px;margin:auto;box-shadow:var(--shadow-lg)}.push-card{border:1px solid var(--border);border-radius:18px;padding:14px;background:var(--surface-2)}.kanban{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.kanban-col{background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:12px}.kanban-col h6{font-size:12px;font-weight:900;margin:0 0 10px}.task{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:12px;margin-bottom:10px;font-size:12px}.task b{display:block;font-size:12.5px;margin-bottom:4px}@media(max-width:991px){.kanban{grid-template-columns:1fr 1fr}}@media(max-width:575px){.kanban{grid-template-columns:1fr}}
.auth-links{display:flex;gap:10px;justify-content:space-between;align-items:center;margin-top:12px;font-size:12px}.auth-links a{color:var(--primary);font-weight:800;text-decoration:none}.login-card .code-box{display:flex;gap:8px;justify-content:center;margin:18px 0}.login-card .code-box input{width:42px;height:48px;text-align:center;font-size:20px;font-weight:900;border-radius:12px;border:1px solid var(--border);background:var(--surface)}
.prototype-note{position:fixed;right:16px;bottom:16px;z-index:1000;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-lg);border-radius:14px;padding:10px 12px;font-size:11px;color:var(--text-muted)}


/* ============ RDB MAIN · AI 점장 블루 위젯 ============ */
.rdb-ai-main{
  border:1px solid var(--border); border-radius:26px; background:var(--surface);
  box-shadow:var(--shadow); padding:18px; overflow:hidden;
}
.rdb-ai-main-hd{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:14px;}
.rdb-ai-main-hd h3{margin:4px 0 5px;font-size:20px;font-weight:800;letter-spacing:-.03em;}
.rdb-ai-main-hd p{margin:0;color:var(--text-2);max-width:760px;}
.rdb-ai-main-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;}
.rdb-ai-frame-wrap{border-radius:26px;overflow:hidden;background:#0e1f44;box-shadow:0 26px 70px -38px rgba(14,31,68,.9);}
.rdb-ai-frame{display:block;width:100%;height:360px;border:0;background:transparent;}
@media(max-width:991.98px){
  .rdb-ai-main-hd{flex-direction:column;}
  .rdb-ai-main-actions{justify-content:flex-start;}
  .rdb-ai-frame{height:470px;}
}
@media(max-width:575.98px){.rdb-ai-frame{height:560px;}.rdb-ai-main{padding:12px;border-radius:22px;}}

/* =========================================================
   RIZE design refresh · 2026-07-02
   Scoped as a final layer so the prototype stays easy to diff.
   ========================================================= */
:root{
  --primary:#005BAC;
  --primary-2:#043A70;
  --primary-soft:rgba(0,91,172,.10);
  --accent:#0f9f8a;
  --accent-soft:rgba(15,159,138,.10);
  --r-sm:6px;
  --r:8px;
  --r-lg:8px;
  --radius:8px;
}
.theme-light{
  --bg:#f5f7fb;
  --surface:#ffffff;
  --surface-2:#f8fafc;
  --surface-3:#eef3f8;
  --border:#dde5ef;
  --border-soft:#e8eef6;
  --text:#101828;
  --text-2:#475467;
  --text-muted:#7b8798;
  --side-bg:#ffffff;
  --side-border:#dbe3ee;
  --side-hover:#f3f7ff;
  --side-text:#344054;
  --side-muted:#7b8798;
  --shadow-sm:0 1px 2px rgba(16,24,40,.05);
  --shadow:0 8px 22px rgba(16,24,40,.07);
  --shadow-lg:0 16px 36px rgba(16,24,40,.12);
  --success:#0f9f8a;
  --success-soft:rgba(15,159,138,.10);
  --warning:#b76e00;
  --warning-soft:rgba(183,110,0,.11);
  --danger:#d92d20;
  --danger-soft:rgba(217,45,32,.10);
  --violet:#6941c6;
  --violet-soft:rgba(105,65,198,.10);
}
body{
  background:linear-gradient(180deg,#f8fafc 0%,var(--bg) 100%);
  font-size:13.5px;
}
body, h1, h2, h3, h4, h5, h6, .s-head .nm, .page-head h2, .mini-kpi .value, .kpi .val, .card2.kpi .val{
  letter-spacing:0;
}

.sidebar{
  width:268px;
  background:var(--side-bg);
  border-right:1px solid var(--side-border);
  box-shadow:1px 0 0 rgba(16,24,40,.02);
}
.main{margin-left:268px}
@media (max-width:991.98px){.main{margin-left:0}}
.s-head{
  padding:20px 20px 16px;
  border-bottom:1px solid var(--border-soft);
}
.s-logo{
  width:38px;
  height:38px;
  border-radius:8px;
  background:#315bdc;
  box-shadow:none;
}
.s-head .nm{color:var(--text);font-size:17px}
.s-head .tag{color:var(--text-muted);letter-spacing:.08em}
.s-section{color:#98a2b3;letter-spacing:.08em}
.s-nav{padding:8px 12px}
.s-nav a,
.s-nav .grp-btn{
  border-radius:8px;
  color:var(--side-text);
  font-weight:600;
}
.s-nav a i,
.s-nav .grp-btn i{color:#667085}
.s-nav a:hover,
.s-nav .grp-btn:hover{
  background:var(--side-hover);
  color:var(--text);
}
.s-nav a.active{
  background:#eef4ff;
  color:var(--primary);
  box-shadow:inset 3px 0 0 var(--primary);
}
.s-nav a.active i{color:var(--primary)}
.s-nav a .pill{background:#eef2f6;color:#475467}
.s-nav a.active .pill{background:#dbe7ff;color:var(--primary)}
.s-nav .grp.open .grp-btn{color:var(--text)}
.s-nav .grp.open .grp-btn .menu-subtitle,
.menu-subtitle,
.s-sub a{color:var(--side-muted)}
.s-sub a.active{
  background:#eef4ff;
  color:var(--primary);
}
.s-foot{
  margin:12px;
  border-radius:8px;
  background:#f8fafc;
  border-color:var(--border);
}
.s-foot .r1{color:var(--text)}
.s-foot small{color:var(--text-muted)}

.topbar{
  height:64px;
  background:rgba(255,255,255,.86);
  border-bottom:1px solid var(--border);
  box-shadow:0 1px 0 rgba(16,24,40,.02);
}
.search input,
.store-sel,
.profile,
.icon-btn,
.btn-soft,
.inp,
.form-control,
.form-select{
  border-radius:8px;
}
.icon-btn,
.store-sel,
.profile{box-shadow:var(--shadow-sm)}
.btn-primary{
  background:var(--primary);
  border-color:var(--primary);
  border-radius:8px;
  box-shadow:0 8px 18px rgba(49,91,220,.18);
}
.btn-primary:hover{
  background:var(--primary-2);
  border-color:var(--primary-2);
}
.page-kicker{
  color:var(--accent);
  letter-spacing:.06em;
}
.content{
  padding:30px 40px 44px;
}
.page-head{margin-bottom:24px}
.page-head h2{font-size:24px}

.card2,
.mini-kpi,
.status-card,
.push-card,
.task,
.kanban-col,
.login-card{
  border-radius:8px;
  box-shadow:var(--shadow-sm);
}
.card2.hov:hover,
.eng:hover{
  transform:translateY(-1px);
  box-shadow:var(--shadow);
}
.card2 .hd{padding:16px 20px}
.card2 .bd{padding:20px}
.mini-kpi{
  min-height:116px;
  padding:18px 20px;
}
.mini-kpi:after{display:none}
.mini-kpi .value{font-size:28px}
.mini-kpi .delta{
  border-radius:999px;
  padding:3px 8px;
}
.tbl th{background:#f8fafc}
.tbl tbody tr:hover,
.row-link:hover td{background:#f8fbff}

.rdb-ai-main{
  border:0;
  border-radius:0;
  padding:0;
  background:transparent;
  box-shadow:none;
}
.rdb-ai-main-hd{margin-bottom:14px;padding:0 2px}
.rdb-ai-main-hd h3{font-size:19px;letter-spacing:0}
.rdb-ai-frame-wrap{
  border-radius:8px;
  background:#ffffff;
  box-shadow:var(--shadow-sm);
  border:1px solid var(--border-soft);
}
.rdb-ai-frame{height:380px}

.login-wrap{
  background:linear-gradient(90deg,#111827 0 54%,var(--bg) 54% 100%);
}
.login-visual{
  background:linear-gradient(135deg,#111827 0%,#25354a 58%,#315bdc 100%);
}
.login-visual::after{display:none}
.login-visual .brand-big .mark,
.landing-logo{border-radius:8px}
.login-visual h1{letter-spacing:0}
.login-panel{background:var(--bg)}
.login-card{
  border:1px solid var(--border);
  box-shadow:0 18px 46px rgba(16,24,40,.10);
}
.privacy-strip{
  border-radius:8px;
  background:var(--accent-soft);
  color:var(--accent);
  border-color:rgba(15,159,138,.18);
}

@media (max-width:991.98px){
  .login-wrap{background:var(--bg)}
  .rdb-ai-frame{height:470px}
}
@media(max-width:575.98px){
  .rdb-ai-main{border-radius:8px}
  .rdb-ai-frame-wrap{border-radius:8px}
  .rdb-ai-frame{height:560px}
}
/* MAZE blue primary button normalization. */
:root{
  --primary:#005BAC;
  --primary-2:#043A70;
  --primary-soft:rgba(0,91,172,.10);
}
.btn-primary,
.btn.primary,
.btn.success,
button.btn-primary,
a.btn-primary{
  background:#005BAC!important;
  border-color:#005BAC!important;
  color:#fff!important;
}
.btn-primary:hover,
.btn.primary:hover,
.btn.success:hover,
button.btn-primary:hover,
a.btn-primary:hover{
  background:#043A70!important;
  border-color:#043A70!important;
  color:#fff!important;
}
.btn-primary:focus-visible,
.btn.primary:focus-visible,
.btn.success:focus-visible{
  outline:3px solid rgba(0,91,172,.18)!important;
  outline-offset:2px;
}
.btn-primary i,
.btn.primary i,
.btn.success i{
  color:#fff!important;
}

/* ===== tokens.css ===== */
/* RIZE RDB design tokens. Keep ko-KR/i18n behavior independent from CSS. */
:root{
  --primary:#005BAC;
  --primary-2:#043A70;
  --primary-soft:rgba(0,91,172,.10);
  --accent:#0f9f8a;
  --accent-soft:rgba(15,159,138,.10);
  --r-sm:6px;
  --r:8px;
  --r-lg:8px;
  --radius:8px;
}
.theme-light{
  --bg:#f5f7fb;
  --surface:#ffffff;
  --surface-2:#f8fafc;
  --surface-3:#eef3f8;
  --border:#dde5ef;
  --border-soft:#e8eef6;
  --text:#101828;
  --text-2:#475467;
  --text-muted:#7b8798;
  --side-bg:#ffffff;
  --side-border:#dbe3ee;
  --side-hover:#f3f7ff;
  --side-text:#344054;
  --side-muted:#7b8798;
  --shadow-sm:0 1px 2px rgba(16,24,40,.05);
  --shadow:0 8px 22px rgba(16,24,40,.07);
  --shadow-lg:0 16px 36px rgba(16,24,40,.12);
  --success:#0f9f8a;
  --success-soft:rgba(15,159,138,.10);
  --warning:#b76e00;
  --warning-soft:rgba(183,110,0,.11);
  --danger:#d92d20;
  --danger-soft:rgba(217,45,32,.10);
  --violet:#6941c6;
  --violet-soft:rgba(105,65,198,.10);
}
body{
  background:linear-gradient(180deg,#f8fafc 0%,var(--bg) 100%);
  font-size:13.5px;
}
body, h1, h2, h3, h4, h5, h6, .s-head .nm, .page-head h2, .mini-kpi .value, .kpi .val, .card2.kpi .val{
  letter-spacing:0;
}

/* ===== layout.css ===== */
.app{display:flex;min-height:100vh}
html,body{overflow-x:hidden}
.main{flex:1;min-width:0;margin-left:268px;display:flex;flex-direction:column}
.content{padding:30px 40px 44px}
.page-head{margin-bottom:24px}
.page-head h2{font-size:24px}
.page-kicker{color:var(--accent);letter-spacing:.06em}
.card2,
.mini-kpi,
.status-card,
.push-card,
.task,
.kanban-col{
  border-radius:8px;
  box-shadow:var(--shadow-sm);
}
.card2.hov:hover,
.eng:hover{
  transform:translateY(-1px);
  box-shadow:var(--shadow);
}
.card2 .hd{padding:16px 20px}
.card2 .bd{padding:20px}
.mini-kpi{min-height:116px;padding:18px 20px}
.mini-kpi:after{display:none}
.mini-kpi .value{font-size:28px}
.mini-kpi .delta{border-radius:999px;padding:3px 8px}
.tbl th{background:#f8fafc}
.tbl tbody tr:hover,
.row-link:hover td{background:#f8fbff}
@media (max-width:991.98px){
  .main{margin-left:0}
}

/* ===== topbar.css ===== */
.topbar{
  height:64px;
  background:rgba(255,255,255,.86);
  border-bottom:1px solid var(--border);
  box-shadow:0 1px 0 rgba(16,24,40,.02);
}
.search input,
.store-sel,
.profile,
.icon-btn,
.btn-soft,
.inp,
.form-control,
.form-select{
  border-radius:8px;
}
.icon-btn,
.store-sel,
.profile{box-shadow:var(--shadow-sm)}
.btn-primary{
  background:var(--primary);
  border-color:var(--primary);
  border-radius:8px;
  box-shadow:0 8px 18px rgba(49,91,220,.18);
}
.btn-primary:hover{
  background:var(--primary-2);
  border-color:var(--primary-2);
}

/* ===== sidebar.css ===== */
/* =========================================================
   APS Sidebar — always-expanded, quiet-premium
   색상 토큰은 RIZE RDB 기준 유지, 라운드 8px 통일.
   ========================================================= */
.sidebar{
  width:var(--sidebar-w,216px);
  height:100vh;
  max-height:100vh;
  overflow:hidden;
  display:flex;
  flex-direction:column;
  background:var(--side-bg);
  border-right:1px solid var(--side-border);
  box-shadow:none;
}

/* ---------- Brand head ---------- */
.s-head{
  flex:0 0 auto;
  min-height:76px;
  padding:20px 16px 16px;
  border-bottom:1px solid var(--border-soft);
  display:flex;
  align-items:center;
  gap:12px;
}
.s-brand-link{
  display:flex;
  align-items:center;
  gap:12px;
  min-height:40px;
  text-decoration:none;
  color:inherit;
  cursor:pointer;
}
.s-brand-link:hover{color:inherit}
.s-brand-link:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:12px}
.s-brand-link .s-brand-copy{display:block;min-width:0}
.s-logo{
  width:38px;
  height:38px;
  border-radius:8px;
  background:linear-gradient(135deg,var(--primary) 0%,var(--primary-2) 100%);
  box-shadow:none;
  display:grid;
  place-items:center;
  color:#fff;
  font-weight:800;
  font-size:18px;
  flex-shrink:0;
}
.s-head .nm{color:var(--text);font-size:16.5px;font-weight:800;letter-spacing:-.2px;line-height:1.1}
.s-head .tag{color:var(--text-muted);font-size:10px;font-weight:600;letter-spacing:.1em;margin-top:3px;text-transform:uppercase}

/* ---------- Workspace label ---------- */
.s-section{
  flex:0 0 auto;
  padding:14px 16px 6px;
  font-size:10.5px;
  font-weight:700;
  letter-spacing:.12em;
  line-height:1;
  color:var(--text-muted);
  text-transform:uppercase;
}

/* ---------- Nav scroll area ---------- */
.s-nav{
  flex:1 1 auto;
  min-height:0;
  overflow-y:auto;
  overflow-x:hidden;
  padding:6px 10px 28px;
}

/* ---------- Group (accordion) ----------
   기본 접힘 · 현재 페이지가 속한 그룹은 자동 펼침 · 하나 열면 나머지 닫힘.
   높이 애니메이션은 grid-template-rows 0fr↔1fr 로 처리(내용 길이 제한 없음). */
.s-nav .grp{margin-bottom:2px}
.s-nav .grp-btn{
  display:flex;
  align-items:center;
  gap:10px;
  width:100%;
  min-height:40px;
  margin-bottom:2px;
  padding:8px 10px;
  border:0;
  border-radius:10px;
  background:none;
  color:var(--side-text);
  font-family:inherit;
  font-size:13.5px;
  font-weight:600;
  text-align:left;
  cursor:pointer;
  transition:background .15s var(--ease),color .15s var(--ease);
}
.s-nav .grp-btn i:first-child{
  width:20px;
  min-width:20px;
  display:inline-grid;
  place-items:center;
  font-size:15.5px;
  color:var(--text-muted);
  transition:color .15s var(--ease);
}
.s-nav .grp-btn .lbl{display:flex;min-width:0}
.s-nav .grp-btn .menu-title{font-size:13.5px;font-weight:600}
.s-nav .grp-btn .menu-subtitle{display:none}
.s-nav .grp-btn .chev{
  margin-left:auto;
  font-size:12px;
  color:var(--text-muted);
  transition:transform .2s var(--ease);
}
.s-nav .grp-btn:hover{background:var(--side-hover);color:var(--text)}
.s-nav .grp-btn:hover i:first-child{color:var(--primary)}
.s-nav .grp-btn:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
.s-nav .grp.open .grp-btn{color:var(--text)}
.s-nav .grp.open .grp-btn i:first-child{color:var(--primary)}
.s-nav .grp.open .grp-btn .chev{transform:rotate(90deg)}

/* 접힌 그룹 안에 현재 페이지가 있을 때 위치 표시 점 */
.s-nav .grp.has-active:not(.open) .grp-btn .chev{color:var(--primary)}
.s-nav .grp.has-active:not(.open) .grp-btn{
  color:var(--text);
  box-shadow:inset 2.5px 0 0 var(--primary);
  background:color-mix(in srgb,var(--primary) 4%,transparent);
}

/* Sub items — 접힘/펼침 */
.s-nav .s-sub,
.s-nav .grp.open .s-sub{
  display:grid;
  grid-template-rows:0fr;
  max-height:none!important;
  overflow:hidden;
  transition:grid-template-rows .24s var(--ease);
}
.s-nav .grp.open .s-sub{grid-template-rows:1fr}
.s-sub-in{
  min-height:0;
  overflow:hidden;
  margin:0 0 0 12px;
  padding:0 0 0 8px;
  border-left:1px solid var(--border-soft);
}
.grp.open .s-sub-in{padding-top:1px;padding-bottom:4px}
@media (prefers-reduced-motion:reduce){
  .s-nav .s-sub{transition:none}
}

/* ---------- Items ---------- */
.s-nav a,
.s-sub a{
  display:flex;
  align-items:center;
  gap:7px;
  width:100%;
  min-height:38px;
  margin-bottom:2px;
  padding:8px;
  border-radius:10px;
  color:var(--side-text);
  font-weight:600;
  font-size:13.5px;
  text-align:left;
  transition:background .15s var(--ease),color .15s var(--ease);
}
.s-nav a i{
  width:20px;
  min-width:20px;
  display:inline-grid;
  place-items:center;
  font-size:15.5px;
  color:var(--text-muted);
}
.s-nav a:hover,
.s-sub a:hover{background:var(--side-hover);color:var(--text)}
.s-nav a:hover i{color:var(--primary)}
.s-nav a:focus-visible,
.s-sub a:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}

.s-nav .lbl{display:flex;flex-direction:column;line-height:1.15;min-width:0}
.menu-title{
  display:block;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  font-size:13.5px;
  font-weight:600;
  line-height:1.2;
}
/* 심플 톤: 영문 보조 라벨은 사이드바에서 숨김 */
.s-nav .menu-subtitle{display:none}

/* Sub item look */
.s-sub a{
  min-height:34px;
  padding:6px 8px;
  font-size:12.5px;
  font-weight:500;
  color:var(--side-muted);
}
.s-sub a .menu-title{font-size:12.5px;font-weight:500}
.s-sub a:hover .menu-title{font-weight:600}

/* Active */
.s-nav a.active,
.s-sub a.active{
  background:var(--primary-soft);
  color:var(--primary);
  box-shadow:inset 2.5px 0 0 var(--primary);
}
.s-nav a.active i{color:var(--primary)}
.s-nav a.active .menu-title,
.s-sub a.active .menu-title{color:var(--primary);font-weight:700}

/* Pending badge */
.nav-ready{
  margin-left:auto;
  flex-shrink:0;
  font-style:normal;
  font-size:8.5px;
  font-weight:700;
  letter-spacing:0;
  color:var(--text-muted);
  background:var(--surface-3);
  border:1px solid var(--border-soft);
  border-radius:999px;
  padding:2px 4px;
}
.s-nav a.pending,
.s-sub a.pending{color:var(--text-muted)}
.s-nav a .pill{margin-left:auto;font-size:10px;font-weight:700;background:var(--surface-3);color:var(--text-2);padding:2px 8px;border-radius:999px}
.s-nav a.active .pill{background:color-mix(in srgb,var(--primary) 14%,#fff);color:var(--primary)}

/* ---------- Foot ---------- */
.s-foot{
  flex:0 0 auto;
  margin:10px 12px 12px;
  padding:13px 14px;
  border-radius:12px;
  background:var(--surface-2);
  border:1px solid var(--border-soft);
}
.s-foot .r1{display:flex;align-items:center;gap:8px;font-weight:700;font-size:12.5px;color:var(--text)}
.s-foot small{display:block;color:var(--text-muted);font-size:10.5px;margin-top:5px;line-height:1.55}

/* ---------- Mobile ---------- */
@media (max-width:991.98px){
  .sidebar{transform:translateX(-100%)}
  .sidebar.open{transform:translateX(0);box-shadow:var(--shadow-lg)}
}

/* ===== pages.css ===== */
.rdb-ai-main{
  border:0;
  border-radius:0;
  padding:0;
  background:transparent;
  box-shadow:none;
}
.rdb-ai-main-hd{margin-bottom:14px;padding:0 2px}
.rdb-ai-main-hd h3{font-size:19px;letter-spacing:0}
.rdb-ai-frame-wrap{
  border-radius:8px;
  background:#ffffff;
  box-shadow:var(--shadow-sm);
  border:1px solid var(--border-soft);
}
.rdb-ai-frame{height:380px}
@media (max-width:991.98px){
  .rdb-ai-frame{height:470px}
}
@media(max-width:575.98px){
  .rdb-ai-main{border-radius:8px}
  .rdb-ai-frame-wrap{border-radius:8px}
  .rdb-ai-frame{height:560px}
}

/* ===== auth.css ===== */
.auth-page{
  min-height:100vh;
  background:#f4f8fc;
}
.login-wrap{
  min-height:100vh;
  display:grid;
  grid-template-columns:minmax(0,1.08fr) minmax(420px,.92fr);
  background:linear-gradient(90deg,#005BAC 0 54%,#f4f8fc 54% 100%);
}
.login-visual{
  position:relative;
  min-height:100vh;
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  gap:40px;
  padding:54px 68px;
  overflow:hidden;
  color:#fff;
  background:
    linear-gradient(118deg,rgba(255,255,255,.11) 0%,rgba(255,255,255,0) 32%),
    linear-gradient(145deg,#043A70 0%,#005BAC 54%,#2C8CD6 100%);
}
.login-visual::after{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:
    linear-gradient(rgba(255,255,255,.055) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.04) 1px,transparent 1px);
  background-size:44px 44px;
  mask-image:linear-gradient(90deg,rgba(0,0,0,.42),rgba(0,0,0,.08));
}
.brand-big,
.login-copy,
.metrics{
  position:relative;
  z-index:1;
}
.brand-big{
  display:inline-flex;
  align-items:center;
  gap:14px;
  width:max-content;
  color:#fff;
  text-decoration:none;
}
.brand-big .brand-copy{
  display:flex;
  flex-direction:column;
  line-height:1.08;
}
.brand-big strong{
  font-size:22px;
  font-weight:900;
  letter-spacing:0;
}
.brand-big small{
  margin-top:7px;
  font-size:12px;
  font-weight:800;
  color:rgba(255,255,255,.70);
  letter-spacing:.04em;
}
.maze-mark{
  width:52px;
  height:52px;
  border-radius:12px;
  display:inline-grid;
  place-items:center;
  flex:0 0 auto;
  background:linear-gradient(145deg,#0067bd 0%,#004f97 100%);
  color:#fff;
  font-size:30px;
  font-weight:900;
  line-height:1;
  box-shadow:0 14px 30px rgba(2,32,72,.28),inset 0 1px 0 rgba(255,255,255,.16);
}
.maze-mark.small{
  width:42px;
  height:42px;
  border-radius:10px;
  font-size:24px;
  box-shadow:none;
}
.login-copy{
  max-width:720px;
}
.login-eyebrow{
  margin-bottom:16px;
  color:#7FF1D0;
  font-size:13px;
  font-weight:900;
  letter-spacing:.08em;
}
.login-visual h1{
  margin:0;
  color:#fff;
  font-size:clamp(38px,5vw,64px);
  line-height:1.08;
  font-weight:900;
  letter-spacing:0;
}
.login-visual p{
  max-width:660px;
  margin:22px 0 0;
  color:rgba(255,255,255,.78);
  font-size:16px;
  line-height:1.75;
}
.metrics{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:12px;
  max-width:760px;
}
.metrics>div{
  min-height:92px;
  padding:18px;
  border:1px solid rgba(255,255,255,.22);
  border-radius:14px;
  background:rgba(255,255,255,.10);
  backdrop-filter:blur(12px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.12);
}
.metrics b{
  display:block;
  color:#fff;
  font-size:19px;
  font-weight:900;
}
.metrics span{
  display:block;
  margin-top:8px;
  color:rgba(255,255,255,.72);
  font-size:12px;
  font-weight:800;
}
.login-panel{
  min-height:100vh;
  display:grid;
  align-items:center;
  padding:48px;
  background:#f4f8fc;
}
.login-card{
  width:min(100%,468px);
  margin:0 auto;
  padding:34px;
  border:1px solid #d6e2ee;
  border-radius:18px;
  background:#fff;
  box-shadow:0 26px 70px rgba(14,49,83,.14);
}
.login-card-head{
  display:flex;
  align-items:center;
  gap:14px;
  margin-bottom:26px;
}
.login-card h2{
  margin:0;
  color:#111827;
  font-size:28px;
  font-weight:900;
  letter-spacing:0;
}
.login-card .hint{
  margin-top:6px;
  color:#6b7c93;
  font-size:13px;
  line-height:1.5;
}
.field{
  margin-top:16px;
}
.field label{
  display:block;
  margin:0 0 8px;
  color:#344256;
  font-size:13px;
  font-weight:800;
}
.inp{
  width:100%;
  height:48px;
  padding:0 14px;
  border:1px solid #d6e2ee;
  border-radius:12px;
  background:#fff;
  color:#111827;
  font-size:14px;
  outline:none;
  transition:border-color .16s ease,box-shadow .16s ease;
}
.inp:focus{
  border-color:#005BAC;
  box-shadow:0 0 0 4px rgba(0,91,172,.12);
}
.toggle-row{
  display:flex;
  align-items:center;
  gap:16px;
  margin:18px 0;
  padding:16px;
  border:1px solid #d6e2ee;
  border-radius:14px;
  background:#f7fbff;
}
.t-tt{
  color:#111827;
  font-size:14px;
  font-weight:900;
}
.t-ds{
  margin-top:4px;
  color:#6b7c93;
  font-size:12px;
}
/* 스위치는 앱 정본 스펙(refit.css: 트랙 44×24 · 노브 18)을 그대로 따른다 */
/* 버튼 시스템 lg(44) 규격 준수 — 색·글로우는 buttons.css 소유 */
.auth-submit{
  height:44px;
  min-height:44px;
  border-radius:12px;
  font-weight:700;
  box-shadow:none;
}
.auth-submit:hover,
.auth-submit:focus{
  background:#043A70;
  color:#fff;
}
.auth-submit i{
  color:#fff;
}
.auth-links{
  display:flex;
  justify-content:space-between;
  gap:14px;
  margin-top:16px;
  font-size:13px;
  font-weight:800;
}
.auth-links a{
  color:#005BAC;
  text-decoration:none;
}
.auth-links a:hover{
  color:#043A70;
}
.privacy-strip{
  display:flex;
  align-items:flex-start;
  gap:10px;
  padding:13px 14px;
  border:1px solid rgba(0,91,172,.14);
  border-radius:12px;
  background:rgba(0,91,172,.08);
  color:#005BAC;
  font-size:12px;
  font-weight:800;
  line-height:1.5;
}
.privacy-strip i{
  color:#005BAC;
}
@media (max-width:991.98px){
  .login-wrap{
    grid-template-columns:1fr;
    background:#f4f8fc;
  }
  .login-visual{
    min-height:auto;
    padding:34px 24px;
  }
  .login-visual h1{
    font-size:34px;
  }
  .metrics{
    grid-template-columns:1fr;
  }
  .login-panel{
    min-height:auto;
    padding:24px;
  }
  .login-card{
    padding:26px;
  }
}

/* ---------- Remember ID (커스텀 체크) ---------- */
.remember-row{
  display:flex;
  align-items:center;
  gap:9px;
  margin:2px 0 14px;
  cursor:pointer;
  user-select:none;
}
.remember-row input{position:absolute;opacity:0;width:0;height:0}
.remember-row .box{
  width:19px;
  height:19px;
  display:inline-grid;
  place-items:center;
  border:1.5px solid var(--border);
  border-radius:6px;
  background:var(--surface);
  color:transparent;
  font-size:13px;
  transition:background .15s var(--ease),border-color .15s var(--ease),color .15s var(--ease);
}
.remember-row input:checked + .box{
  background:var(--primary);
  border-color:var(--primary);
  color:#fff;
}
.remember-row input:focus-visible + .box{box-shadow:0 0 0 3px var(--primary-soft)}
.remember-row .txt{font-size:13px;font-weight:600;color:var(--text-2)}
.remember-row:hover .txt{color:var(--text)}

/* 회원가입 보조 버튼 (Soft · lg 규격 공유) */
.auth-signup{justify-content:center}

/* ---------- 2FA Layer Popup ----------
   창 규칙 준수: 라운드 16 · 인셋 22 · 정본 버튼/포커스 링 */
.twofa-backdrop{
  display:none;
  position:fixed;
  inset:0;
  z-index:1080;
  background:rgba(8,13,26,.46);
  backdrop-filter:blur(4px);
  align-items:center;
  justify-content:center;
  padding:24px;
}
.twofa-backdrop.show{display:flex}
.twofa-modal{
  position:relative;
  width:min(400px,100%);
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:16px;
  box-shadow:var(--shadow-lg);
  padding:26px 22px 22px;
  animation:fadeUp .28s var(--ease) both;
}
.twofa-close{position:absolute;top:14px;right:14px}
.twofa-head{text-align:center;margin-bottom:18px}
.twofa-ic{
  width:46px;height:46px;
  display:inline-grid;place-items:center;
  border-radius:12px;
  background:var(--primary-soft);
  color:var(--primary);
  font-size:21px;
  margin-bottom:12px;
}
.twofa-head h3{margin:0 0 6px;font-size:18px;font-weight:800}
.twofa-head p{margin:0;font-size:12.5px;color:var(--text-2)}
.twofa-email{
  display:inline-block;
  margin-top:10px;
  padding:5px 12px;
  border-radius:999px;
  background:var(--surface-2);
  border:1px solid var(--border-soft);
  font-size:12px;
  font-weight:700;
  color:var(--text-2);
}
.otp-row{
  display:flex;
  justify-content:center;
  gap:8px;
  margin:0 0 18px;
}
.otp{
  width:44px;
  height:52px;
  border:1.5px solid var(--border);
  border-radius:12px;
  background:var(--surface-2);
  text-align:center;
  font-size:20px;
  font-weight:800;
  color:var(--text);
  transition:border-color .15s var(--ease),background .15s var(--ease),box-shadow .15s var(--ease);
}
.otp:focus{
  outline:none;
  border-color:var(--primary);
  background:var(--surface);
  box-shadow:0 0 0 3px var(--primary-soft);
}
.twofa-links{
  display:flex;
  justify-content:space-between;
  align-items:center;
  margin-top:14px;
}
.twofa-links .btn-link{font-size:12.5px}
@media (max-width:429.98px){
  .otp{width:38px;height:46px;font-size:18px}
}

/* ---------- Auth Layer (공용: 회원가입·비밀번호찾기) ---------- */
.auth-pop-backdrop{
  display:none;
  position:fixed;
  inset:0;
  z-index:1080;
  background:rgba(8,13,26,.46);
  backdrop-filter:blur(4px);
  align-items:center;
  justify-content:center;
  padding:24px;
  overflow-y:auto;
  scrollbar-width:none;
}
.auth-pop-backdrop.show{display:flex}
.auth-pop{
  position:relative;
  width:min(400px,100%);
  max-height:92vh;
  overflow-y:auto;
  scrollbar-width:none;
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:16px;
  box-shadow:var(--shadow-lg);
  padding:26px 22px 22px;
  animation:fadeUp .28s var(--ease) both;
}
.pop-close{position:absolute;top:14px;right:14px}
.pop-head{text-align:center;margin-bottom:18px}
.pop-ic{
  width:46px;height:46px;
  display:inline-grid;place-items:center;
  border-radius:12px;
  background:var(--primary-soft);
  color:var(--primary);
  font-size:21px;
  margin-bottom:12px;
}
.pop-head h3{margin:0 0 6px;font-size:18px;font-weight:800}
.pop-head p{margin:0;font-size:12.5px;color:var(--text-2)}

/* 하단 링크형 버튼 (auth-links 내부) */
.auth-links .link-btn{
  border:0;
  background:none;
  padding:0;
  font-size:13px;
  font-weight:700;
  color:var(--primary);
  cursor:pointer;
}
.auth-links .link-btn:hover{text-decoration:underline;text-underline-offset:3px}
.auth-links .link-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-soft);border-radius:6px}

/* ===== aps.css ===== */
/* APS source package additions over the RDB visual system. */
:root{
  --aps-blue:#005AA8;
  --aps-navy:#043A70;
  --aps-green:#10B981;
  --aps-yellow:#FACC15;
  --aps-orange:#F97316;
  --aps-red:#DC2626;
}
.maze-sidebar-logo{
  border-radius:12px!important;
  background:linear-gradient(135deg,#005AA8 0%,#043A70 100%)!important;
  color:#fff!important;
  font-size:25px!important;
  font-weight:900!important;
  letter-spacing:-.03em!important;
}
.maze-wordmark{font-weight:900!important;letter-spacing:.02em!important}
.content.wide{max-width:none}
.aps-hero{
  display:grid;
  grid-template-columns:minmax(0,1fr) 180px;
  gap:22px;
  align-items:center;
  margin-bottom:24px;
  padding:24px;
  border-radius:24px;
  background:linear-gradient(105deg,#073763 0%,#07518C 52%,#1B69A0 100%);
  color:#fff;
  overflow:hidden;
  box-shadow:0 18px 40px -30px rgba(5,46,95,.95);
}
.aps-hero h3{margin:14px 0 8px;font-size:24px;font-weight:900;letter-spacing:0}
.aps-hero p{margin:0;color:rgba(223,239,252,.86);line-height:1.65}
.aps-live{display:inline-flex;align-items:center;gap:8px;padding:8px 13px;border-radius:999px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.18);font-size:12px;font-weight:800}
.aps-pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}
.aps-pills span{padding:7px 11px;border-radius:999px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.16);font-size:12px;font-weight:800}
.aps-score{height:150px;border-radius:18px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);display:flex;flex-direction:column;align-items:center;justify-content:center}
.aps-score b{font-size:44px;line-height:1}
.aps-score span{font-size:11px;color:rgba(223,239,252,.86);font-weight:900;letter-spacing:.08em}
.aps-meta-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.aps-meta-grid div{padding:13px;border-radius:16px;background:var(--surface-2);border:1px solid var(--border)}
.aps-meta-grid span{display:block;font-size:11px;color:var(--text-muted);margin-bottom:6px}
.aps-meta-grid b{font-size:12px;word-break:break-all}
.address-lookup{display:flex;align-items:stretch;gap:8px}
.address-lookup .inp{flex:1 1 auto;min-width:0}
.address-lookup .btn{flex:0 0 auto;white-space:nowrap}
.secret-row{display:flex;gap:8px}
.secret-row .inp{flex:1}
.panel-note{border:1px solid var(--border);background:var(--surface-2);border-radius:16px;padding:12px 14px;color:var(--text-2);font-size:12px}
.aps-radar{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;align-items:end;min-height:190px}
.aps-radar div{display:flex;flex-direction:column;align-items:center;gap:8px}
.aps-radar span{width:100%;border-radius:12px 12px 4px 4px;background:linear-gradient(180deg,var(--primary),#8fb7ff)}
.aps-radar b{font-size:11px;color:var(--text-2)}
.aps-radar em{font-size:11px;color:var(--text-muted);font-style:normal}
.aps-map{position:relative;min-height:360px;border-radius:18px;background:linear-gradient(135deg,#f8fbff,#eef5fb);border:1px solid var(--border);overflow:hidden}
.aps-map .node{position:absolute;display:grid;place-items:center;min-width:120px;min-height:56px;border-radius:18px;border:1px solid color-mix(in srgb,var(--primary) 32%,var(--border));background:#fff;box-shadow:var(--shadow);font-weight:900;color:var(--text)}
.aps-map .core{left:50%;top:45%;transform:translate(-50%,-50%);background:linear-gradient(135deg,#005AA8,#043A70);color:#fff}
.aps-map .n1{left:12%;top:16%}.aps-map .n2{right:12%;top:16%}.aps-map .n3{left:10%;bottom:18%}.aps-map .n4{right:10%;bottom:18%}.aps-map .n5{left:50%;bottom:6%;transform:translateX(-50%)}
.aps-map .line{position:absolute;height:2px;background:rgba(0,90,168,.22);transform-origin:left center}
.aps-doc-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.aps-doc-grid button{border:1px solid var(--border);background:var(--surface);border-radius:18px;padding:18px;text-align:left;display:flex;flex-direction:column;gap:8px;color:var(--text);box-shadow:var(--shadow-sm)}
.aps-doc-grid i{font-size:22px;color:var(--primary)}
.aps-doc-grid b{font-size:14px}
.aps-doc-grid span{font-size:12px;color:var(--text-muted);line-height:1.5}
.toast-root{position:fixed;right:18px;bottom:18px;z-index:2000;display:flex;flex-direction:column;gap:8px}
.aps-toast{display:flex;align-items:center;gap:9px;min-width:260px;max-width:360px;padding:12px 14px;border-radius:16px;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-lg);opacity:0;transform:translateY(10px);transition:.22s;color:var(--text)}
.aps-toast.show{opacity:1;transform:translateY(0)}
.aps-toast i{color:var(--success)}
.btn-sm{padding:6px 10px;font-size:12px}
.grid-kpi{margin-bottom:22px}
@media(max-width:991.98px){
  .aps-hero{grid-template-columns:1fr}
  .aps-score{height:120px}
  .aps-doc-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:575.98px){
  .aps-hero{border-radius:22px;padding:18px}
  .aps-meta-grid,.aps-radar,.aps-doc-grid{grid-template-columns:1fr}
  .address-lookup,.secret-row{flex-direction:column}
}


/* APS detail-page enrichment from UIUX_HTML reference. */
.aps-detail-hero{
  display:grid;
  grid-template-columns:minmax(0,1fr) 260px;
  gap:22px;
  align-items:stretch;
  margin-bottom:22px;
  padding:24px;
  border-radius:24px;
  background:var(--surface);
  color:var(--text);
  border:1px solid var(--border);
  overflow:hidden;
  box-shadow:var(--shadow);
  position:relative;
}
.aps-detail-hero:before{
  content:"";
  position:absolute;
  inset:0 auto 0 0;
  width:5px;
  background:linear-gradient(180deg,var(--primary),var(--aps-navy));
}
.aps-detail-hero h3{margin:14px 0 8px;font-size:26px;font-weight:900;letter-spacing:0}
.aps-detail-hero p{margin:0;color:var(--text-2);line-height:1.65}
.aps-detail-hero .aps-live{
  color:var(--primary);
  background:var(--primary-soft);
  border-color:color-mix(in srgb,var(--primary) 24%,var(--border));
}
.aps-detail-hero .aps-pills span{
  color:var(--text);
  background:var(--surface-2);
  border-color:var(--border);
}
.aps-entity-card{
  border:1px solid var(--border);
  background:linear-gradient(180deg,var(--surface-2),var(--surface));
  border-radius:18px;
  padding:18px;
  display:flex;
  flex-direction:column;
  justify-content:center;
  gap:6px;
}
.aps-entity-card b{font-size:36px;line-height:1}
.aps-entity-card small{color:var(--text-muted);font-weight:800}
.aps-preparing{
  display:grid;
  grid-template-columns:minmax(0,1fr) 150px;
  gap:18px;
  align-items:center;
  margin-bottom:22px;
  padding:24px;
  border-radius:24px;
  border:1px dashed color-mix(in srgb,var(--primary) 35%,var(--border));
  background:linear-gradient(135deg,var(--surface),var(--surface-2));
  box-shadow:var(--shadow-sm);
}
.aps-preparing h3{font-size:25px;margin:12px 0 6px;font-weight:900;letter-spacing:0}
.aps-preparing p{margin:0;color:var(--text-2);line-height:1.65}
.prep-meter{
  min-height:124px;
  border-radius:18px;
  border:1px solid var(--border);
  background:var(--surface);
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
}
.prep-meter b{font-size:34px;line-height:1;color:var(--primary)}
.prep-meter span{font-size:12px;color:var(--text-muted);font-weight:900}
.aps-risk-modal h2{font-size:22px;margin:12px 0 8px}
.risk-confirm{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}
.nav-ready{
  margin-left:auto;
  display:inline-flex;
  align-items:center;
  height:16px;
  padding:0 5px;
  border-radius:999px;
  background:var(--primary-soft);
  color:var(--primary);
  font-size:8.5px;
  font-style:normal;
  font-weight:700;
  white-space:nowrap;
}
.s-sub a.pending{opacity:.88}
.aps-lang{position:relative}
.aps-lang .lang-menu{
  display:none;
  position:absolute;
  right:0;
  top:calc(100% + 8px);
  min-width:170px;
  padding:8px;
  border:1px solid var(--border);
  border-radius:16px;
  background:var(--surface);
  box-shadow:var(--shadow-lg);
}
.aps-lang .lang-menu.show{display:block}
.aps-lang .dropdown-item{display:flex;align-items:center;justify-content:space-between;gap:10px;border-radius:10px;font-weight:800}
.aps-lang .dropdown-item.on{background:var(--primary-soft);color:var(--primary)}
.aps-lang .dropdown-item small{color:var(--text-muted)}
.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}

/* APS data-viz color rule: charts and graph bars never use gradients. */
:root{
  --aps-chart-blue:#2F75B5;
  --aps-chart-red:#DC2626;
  --aps-chart-orange:#F97316;
  --aps-chart-yellow:#FACC15;
  --aps-chart-green:#10B981;
}
.bar-list,
.aps-radar,
.metric-line,
.funnel-bar,
.heatbar{
  --chart-color:var(--aps-chart-blue);
}
.bar span,
.metric-line .bar span,
.funnel-bar,
.aps-radar span,
.heatbar{
  background:var(--chart-color)!important;
  background-image:none!important;
}
.chart-blue{--chart-color:var(--aps-chart-blue)!important}
.chart-red{--chart-color:var(--aps-chart-red)!important}
.chart-orange{--chart-color:var(--aps-chart-orange)!important}
.chart-yellow{--chart-color:var(--aps-chart-yellow)!important}
.chart-green{--chart-color:var(--aps-chart-green)!important}
.bar span.chart-red,.aps-radar span.chart-red,.funnel-bar.chart-red,.heatbar.chart-red{background:var(--aps-chart-red)!important}
.bar span.chart-orange,.aps-radar span.chart-orange,.funnel-bar.chart-orange,.heatbar.chart-orange{background:var(--aps-chart-orange)!important}
.bar span.chart-yellow,.aps-radar span.chart-yellow,.funnel-bar.chart-yellow,.heatbar.chart-yellow{background:var(--aps-chart-yellow)!important}
.bar span.chart-green,.aps-radar span.chart-green,.funnel-bar.chart-green,.heatbar.chart-green{background:var(--aps-chart-green)!important}
@media(max-width:991.98px){
  .aps-detail-hero,.aps-preparing{grid-template-columns:1fr}
  .aps-entity-card{min-height:150px}
}
/* MAZE blue primary button normalization. */
:root{
  --primary:#005BAC;
  --primary-2:#043A70;
  --primary-soft:rgba(0,91,172,.10);
}
.btn-primary,
.btn.primary,
.btn.success,
button.btn-primary,
a.btn-primary{
  background:#005BAC!important;
  border-color:#005BAC!important;
  color:#fff!important;
}
.btn-primary:hover,
.btn.primary:hover,
.btn.success:hover,
button.btn-primary:hover,
a.btn-primary:hover{
  background:#043A70!important;
  border-color:#043A70!important;
  color:#fff!important;
}
.btn-primary:focus-visible,
.btn.primary:focus-visible,
.btn.success:focus-visible{
  outline:3px solid rgba(0,91,172,.18)!important;
  outline-offset:2px;
}
.btn-primary i,
.btn.primary i,
.btn.success i{
  color:#fff!important;
}

/* ===== refit.css ===== */
/* =========================================================
   APS Refit — final polish layer (loads last)
   원칙: RIZE 색상 토큰 유지 · 라운드 8px 통일 · 헤어라인 보더
        은은한 그림자 · 플랫한 단색 표면 · 조용한 모션
   ========================================================= */

/* ---------- Token corrections (RDB 기준 확정) ---------- */
:root{
  --r-sm:10px;
  --r:12px;
  --r-lg:16px;
  --radius:16px;
  /* 카드(창) 공통 인셋 — 모든 창의 여백은 이 두 값만 사용한다 */
  --inset:22px;
  --inset-y:18px;
  /* 카드(칸) 사이 간격 — 가로·세로·전 페이지 단일 값 */
  --gap:20px;
  /* 본문 컨테이너 상한 — 이 이상 커지지 않음. 축소는 유동, 좌측 정렬 */
  --content-max:1320px;   /* Bootstrap container-xxl 표준 */
  /* 사이드바 폭 (기존 268 → 20% 축소) */
  --sidebar-w:216px;
}
.theme-light{
  --bg:#f5f7fb;
  --surface:#ffffff;
  --surface-2:#f8fafc;
  --surface-3:#eef3f8;
  --border:#dde5ef;
  --border-soft:#e8eef6;
  --text:#101828;
  --text-2:#475467;
  --text-muted:#7b8798;
  --side-bg:#ffffff;
  --side-border:#dbe3ee;
  --side-hover:#f3f7ff;
  --side-text:#344054;
  --side-muted:#7b8798;
  --shadow-sm:0 1px 2px rgba(16,24,40,.05);
  --shadow:0 6px 18px rgba(16,24,40,.06);
  --shadow-lg:0 14px 32px rgba(16,24,40,.10);
}
.theme-dark{
  --side-bg:#111725;
  --side-border:#222B3B;
  --side-hover:#161D2C;
  --side-text:#A6B3C9;
  --side-muted:#6B7A93;
}

body{
  background:var(--bg);
  font-size:13.5px;
  letter-spacing:0;
}
h1,h2,h3,h4,h5,h6{letter-spacing:0}

/* ---------- Radius normalization (8px 통일) ---------- */
.card2,.mini-kpi,.status-card,.push-card,.task,.kanban-col,.an-card,
.store,.eng,.panel-note,.toggle-row,
.aps-hero,.aps-detail-hero,.aps-score,.aps-map,.aps-map .node,
.aps-meta-grid div,.aps-doc-grid button,.aps-toast,
.rdb-ai-frame-wrap,.zone-map,.camera-feed,.zone,
.modal-content,.dropdown-menu,.drawer,.hero,.health{
  border-radius:16px!important;
}
.inp,.form-select,.form-control,
.store-sel,.profile,.search input{
  border-radius:12px!important;
}
.s-logo,.maze-sidebar-logo{border-radius:12px!important}
.ic-tile,.icon-tile,.profile .av,.store-sel .ic,
.kpi .top .ic,.todo .n,.eng .e-ic,.notice .ic{
  border-radius:10px!important;
}
.chip,.prod,.nav-ready,.aps-live,.aps-pills span,.mini-kpi .delta,
.progress,.hbar .hb-track,.hbar .hb-fill,.heatbar,.bar,.bar span{
  border-radius:999px!important;
}

/* ---------- Layout ---------- */
.sidebar{width:var(--sidebar-w)}
.main{margin-left:var(--sidebar-w)}
@media (max-width:991.98px){.main{margin-left:0}}
.content{padding:30px 40px 48px}
.page-head{margin-bottom:24px}
.page-head h2{font-size:23px;font-weight:800}
.page-head .desc{font-size:13px;color:var(--text-2)}
.page-kicker{color:var(--accent);letter-spacing:.06em}

/* ---------- Topbar (구조·기능 유지, 톤만 정제) ---------- */
.topbar{
  height:64px;
  padding:0 28px;
  background:color-mix(in srgb,var(--surface) 88%,transparent);
  backdrop-filter:saturate(160%) blur(10px);
  border-bottom:1px solid var(--border);
  box-shadow:none;
}
.icon-btn,.store-sel,.profile{
  border:1px solid var(--border);
  background:var(--surface);
  box-shadow:none;
}
.icon-btn:hover,.store-sel:hover,.profile:hover{
  border-color:color-mix(in srgb,var(--primary) 40%,var(--border));
  color:var(--primary);
  background:var(--surface);
}
.profile .av{
  background:linear-gradient(135deg,var(--primary),var(--primary-2));
}
.search input{
  border:1px solid var(--border);
  background:var(--surface-2);
}
.search input:focus{
  border-color:var(--primary);
  background:var(--surface);
  box-shadow:0 0 0 3px var(--primary-soft);
}

/* 언어 드롭다운 — Bootstrap JS/CSS 비의존 */
.aps-lang{position:relative}
.aps-lang .lang-menu{
  display:none;
  position:absolute;
  right:0;
  top:calc(100% + 8px);
  z-index:1050;
  min-width:176px;
  padding:6px;
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:12px!important;
  box-shadow:var(--shadow-lg);
}
.aps-lang .lang-menu.show{display:block}
.aps-lang .dropdown-item{
  display:flex;
  align-items:center;
  gap:9px;
  width:100%;
  padding:8px 12px;
  border:0;
  background:none;
  border-radius:8px;
  font-size:13px;
  font-weight:500;
  color:var(--text);
  text-align:left;
  cursor:pointer;
}
.aps-lang .dropdown-item:hover{background:var(--surface-2)}
.aps-lang .dropdown-item.on{background:var(--primary-soft);color:var(--primary);font-weight:700}
.aps-lang .dropdown-item small{margin-left:auto;color:var(--text-muted);font-weight:500}

/* ---------- Cards ---------- */
.card2,.an-card,.mini-kpi,.store{
  border:1px solid var(--border);
  box-shadow:var(--shadow-sm);
}
.card2 .hd{padding:var(--inset-y) var(--inset);border-bottom:1px solid var(--border-soft)}
.card2 .hd h6{font-weight:700;font-size:14.5px}
.card2 .bd{padding:var(--inset)}
.card2.hov:hover,.an-card:hover,.store:hover,.eng:hover{
  transform:translateY(-1px);
  box-shadow:var(--shadow);
  border-color:color-mix(in srgb,var(--primary) 22%,var(--border));
}
.mini-kpi{min-height:116px;padding:var(--inset)}
.mini-kpi:after{display:none}
.mini-kpi .value{font-size:28px;font-weight:800}
.kpi .val{font-weight:800;letter-spacing:-.5px}

/* Buttons — buttons.css 가 단일 소유 (위계·사이즈·상태 토큰 체계) */

/* ---------- Tables ---------- */
.tbl thead th{
  background:var(--surface-2);
  font-size:11px;
  letter-spacing:.04em;
  color:var(--text-muted);
  border-bottom:1px solid var(--border);
}
.tbl tbody td{border-bottom:1px solid var(--border-soft)}
.tbl tbody tr:hover,.row-link:hover td{background:color-mix(in srgb,var(--primary) 3%,var(--surface))}

/* ---------- Hero (색상 유지, 광택·과장 정리) ---------- */
.aps-hero{
  box-shadow:var(--shadow);
  padding:var(--inset);
}
.aps-hero h3{font-weight:800}
.aps-live,.aps-pills span{font-weight:700}
.aps-detail-hero{
  box-shadow:var(--shadow-sm);
  padding:var(--inset);
}
.aps-detail-hero:before{width:3px;background:var(--primary)}
.aps-detail-hero h3{font-size:24px;font-weight:800}
.hero{box-shadow:var(--shadow)}
.hero::before{display:none}     /* 스캔라인 애니메이션 제거 */
.hero .glow{display:none}       /* 퍼플 글로우 제거 */
.s-logo,.maze-sidebar-logo{box-shadow:none!important}
.store .cover{background:linear-gradient(120deg,var(--primary-2),var(--primary))}

/* ---------- Switch (정본 스펙) ----------
   트랙 44×24 · 노브 18(테두리 여백 3) · 체크 시 20px 이동.
   min-height/외부 치수 강제 금지 — 이 블록이 단일 소유. */
.switch{
  position:relative;
  width:44px;
  height:24px;
  min-height:0;
  flex:0 0 auto;
}
.switch input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
.switch .sl{
  position:absolute;
  inset:0;
  border:1px solid var(--border);
  border-radius:999px;
  background:var(--surface-3);
  cursor:pointer;
  transition:background .18s var(--ease),border-color .18s var(--ease);
}
.switch .sl::before{
  content:"";
  position:absolute;
  width:18px;
  height:18px;
  left:2px;
  top:2px;
  border-radius:50%;
  background:#fff;
  box-shadow:0 1px 3px rgba(16,24,40,.25);
  transition:transform .18s var(--ease);
}
.switch input:checked + .sl{background:var(--primary);border-color:var(--primary)}
.switch input:checked + .sl::before{transform:translateX(20px)}
.switch input:focus-visible + .sl{box-shadow:0 0 0 3px var(--primary-soft)}

/* ---------- Sitemap (전체 메뉴 오버레이) ----------
   탑바 사이트맵 버튼 → 전 메뉴를 그룹 컬럼으로 표시.
   창 규칙 준수: 라운드 16 · 인셋 --inset · 투명 스크롤바.
   사이즈 정책: 최대폭 1040 고정(그 이상 확대 없음), 축소는 유동.
   컬럼은 좌측 정렬(auto-fill, 남는 공간은 우측에 둔다). */
.sitemap-backdrop{
  display:none;
  position:fixed;
  inset:0;
  z-index:1060;
  background:rgba(8,13,26,.44);
  backdrop-filter:blur(3px);
  padding:6vh 24px;
}
.sitemap-backdrop.show{display:flex;align-items:flex-start;justify-content:center}
.sitemap-panel{
  width:min(1040px,100%);   /* 상한 고정 — 이 이상 커지지 않음 */
  max-height:86vh;
  display:flex;
  flex-direction:column;
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:16px;
  box-shadow:var(--shadow-lg);
  overflow:hidden;
  animation:fadeUp .3s var(--ease) both;
}
.sm-top{
  flex:0 0 auto;
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:var(--inset-y) var(--inset);
  border-bottom:1px solid var(--border-soft);
}
.sm-top b{font-size:14px;font-weight:700}
.sm-grid{
  flex:1 1 auto;
  min-height:0;
  overflow-y:auto;
  scrollbar-width:none;
  -ms-overflow-style:none;
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(188px,216px));
  justify-content:start;      /* 좌측 정렬 */
  align-content:start;
  gap:24px 26px;
  padding:var(--inset);
}
.sm-group{min-width:0}
.sm-hd{
  display:flex;
  align-items:center;
  gap:7px;
  padding-bottom:8px;
  margin-bottom:5px;
  border-bottom:1px solid var(--border-soft);
  font-size:12px;
  font-weight:700;
  color:var(--text);
}
.sm-hd i{color:var(--primary);font-size:13px}
.sm-list{display:flex;flex-direction:column}
.sm-list a{
  display:flex;
  align-items:center;
  gap:8px;
  min-height:29px;
  padding:5px 8px;
  margin:0 -8px;
  border-radius:8px;
  font-size:12.5px;
  font-weight:400;
  color:var(--text-2);
  transition:background .14s var(--ease),color .14s var(--ease);
}
.sm-list a:hover{background:var(--surface-2);color:var(--primary)}
.sm-list a:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-soft)}
.sm-list a.active{color:var(--primary);font-weight:700;background:var(--primary-soft)}
.sm-list a.pending{color:var(--text-muted)}
.sm-list .nav-ready{margin-left:auto;font-size:9px;padding:2px 6px}
@media (max-width:767.98px){
  .sitemap-backdrop{padding:0}
  .sitemap-panel{width:100%;max-height:100vh;height:100%;border-radius:0;border:0}
  .sm-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
}
@media (max-width:379.98px){.sm-grid{grid-template-columns:1fr}}

/* ---------- Misc components ---------- */
.ai-comment{border-radius:12px;box-shadow:none}
.aps-toast{box-shadow:var(--shadow-lg)}
.funnel-bar{background:var(--primary);border-radius:10px}
.aps-radar span{background:var(--primary);border-radius:10px 10px 4px 4px}
.progress-bar{background:var(--primary)}
.heatbar{background:linear-gradient(90deg,var(--success),var(--warning),var(--danger))}

/* =========================================================
   Invisible scrollbars — 스크롤 기능은 유지, 표시만 완전 제거
   ========================================================= */
html{scrollbar-width:none;-ms-overflow-style:none}
body,.s-nav,.content,.table-wrap,.modal,.drawer,.lang-menu,
.aps-risk-backdrop,.heat,pre,textarea{
  scrollbar-width:none;
  -ms-overflow-style:none;
}
::-webkit-scrollbar{width:0!important;height:0!important;background:transparent!important}
::-webkit-scrollbar-thumb{background:transparent!important}
::-webkit-scrollbar-track{background:transparent!important}

/* =========================================================
   Responsive hardening
   - 레이아웃 유틸은 CDN(Bootstrap) 없이도 성립해야 한다 (폴백 내장)
   - 가로 스크롤 영역은 투명 스크롤바 환경에서 터치 관성 필수
   ========================================================= */
/* Bootstrap 유틸 폴백 (셸이 사용하는 최소 집합) */
.topbar .ms-auto{margin-left:auto}
.topbar .d-flex{display:flex}
.topbar .align-items-center{align-items:center}
.topbar .gap-2{gap:8px}
@media (min-width:992px){
  #menuBtn,.d-lg-none{display:none!important}
}
/* 표: 투명 스크롤바 + 터치 관성, 모바일에서 컬럼 최소폭 보존 */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
@media (max-width:767.98px){
  .table-wrap .tbl{min-width:560px}
}
/* iOS 세이프 에어리어 */
@media (max-width:575.98px){
  .content{padding-bottom:calc(8px + env(safe-area-inset-bottom,0px))}
  .app-foot{padding-bottom:env(safe-area-inset-bottom,0px)}
}

/* 모션은 절제: 콘텐츠 페이드만 유지, 카드 리빌 지연 축소 */
.reveal{animation-duration:.4s}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}

/* ---------- Footer ---------- */
.app-foot{margin-top:auto;padding:8px 40px 0}
.foot-note{margin:32px 0 28px;color:var(--text-muted);font-size:11.5px;letter-spacing:.01em}

/* =========================================================
   Spacing rhythm — 4px 스케일 기반 여백 정밀화
   페이지: 40(좌우) · 32(상) / 섹션 간 28 / 카드 간 20
   카드 내부: hd 18/22 · bd 22 / 표 셀 14/18
   ========================================================= */
.main{min-height:100vh}
.content{padding:32px 40px 8px;max-width:var(--content-max);margin:0 auto 0 0}
.content.wide{max-width:var(--content-max)}   /* 상한 고정 — 대형 모니터에서 더 커지지 않음 */
.app-foot{max-width:var(--content-max)}
.page-head{margin-bottom:28px;gap:14px}
.page-head h2{line-height:1.25}
.page-head .desc{margin-top:5px;line-height:1.6}

/* 칸 사이 간격 — 전 페이지 동일: --gap 하나만 사용
   (KPI 그리드 / split / bootstrap row 거터 / 카드 하단 / 히어로 하단) */
.aps-hero,.aps-detail-hero{margin-bottom:var(--gap)}
.grid-kpi{gap:var(--gap)!important;margin-bottom:var(--gap)!important}
.split,.split.equal,.split.three{gap:var(--gap)!important}
.content .row{--bs-gutter-x:var(--gap);--bs-gutter-y:var(--gap)}
.content .mb-4{margin-bottom:var(--gap)!important}
.an-grid{gap:var(--gap)}
.kanban{gap:var(--gap)}
.aps-doc-grid{gap:var(--gap)}
.sec-title{margin:0 0 14px}

/* 카드 내부 패딩 통일 — 전 카드 유형 동일 인셋 */
.card2 .hd{padding:var(--inset-y) var(--inset)}
.card2 .bd{padding:var(--inset)}
.an-card .an-hd{padding:var(--inset) var(--inset) 0}
.an-card .an-body{padding:var(--inset-y) var(--inset) 6px}
.an-card .ai-comment{margin:8px var(--inset) var(--inset)}
.store .body{padding:var(--inset)}
.store .cover{padding:14px var(--inset)}
.aps-risk-modal,.modal{padding:var(--inset)}
.aps-meta-grid div,.status-card{padding:14px 16px}
.card2 .hd h6{line-height:1.35}
.card2 .hd .sub{margin-top:3px;line-height:1.5}
.mini-kpi{min-height:118px;padding:var(--inset)}
.mini-kpi .value{margin-top:10px}
.kpi .top{margin-bottom:14px}

/* 표: 행 높이·좌우 패딩 통일, 첫/끝 열은 카드 패딩과 정렬 */
.tbl thead th{padding:12px 18px}
.tbl tbody td{padding:14px 18px}
.tbl thead th:first-child,.tbl tbody td:first-child{padding-left:var(--inset)}
.tbl thead th:last-child,.tbl tbody td:last-child{padding-right:var(--inset)}

/* 폼·리스트 리듬 */
.field{margin-bottom:18px}
.field label{margin-bottom:7px}
.form-section{padding:26px 0;gap:28px}
.toggle-row{padding:14px 16px;margin-bottom:12px}
.todo{padding:14px 0}
.ev{padding:13px 0}

/* 반응형 여백 */
@media (max-width:1199.98px){
  .content{padding:28px 28px 8px}
  .app-foot{padding:8px 28px 0}
}
@media (max-width:575.98px){
  .content{padding:22px 18px 8px}
  .app-foot{padding:8px 18px 0}
  .page-head{margin-bottom:22px}
  :root{--inset:18px;--inset-y:15px;--gap:16px}
}

/* ===== buttons.css ===== */
/* =========================================================================
   APS Button System (buttons.css) — 최종 로드 레이어
   =========================================================================
   설계 원칙
   ─────────────────────────────────────────────────────────────────────────
   1. 위계(Hierarchy) — 한 화면의 행동 강도는 4단계로만 표현한다.
      · Primary : 화면의 주 행동. 한 뷰에 원칙적으로 1개.
      · Soft    : 보조 행동(취소, 새로고침, 내보내기 등). 기본값.
      · Ghost   : 3차 행동. 반복되는 행/카드 내부 액션, 배경 없음.
      · Danger  : 파괴적 행동(삭제, 회전, 롤백). 반드시 확인 절차와 함께.
   2. 사이즈 스케일 — 높이는 4px 그리드: 28 / 32 / 38 / 44.
      좌우 패딩 ≈ 높이의 40%, 폰트는 사이즈당 1px 단계, 라운드는
      전역 정배율(대16/중12/소10)을 따라 xs8 / sm10 / md·lg12.
   3. 상태(State) — hover는 한 톤, active는 두 톤 어둡게. 포커스는
      3px soft ring 하나로 통일. disabled는 채도·투명도로만 표현.
   4. 모든 값은 토큰으로만 정의한다. 개별 컴포넌트에서 px 하드코딩 금지.
   ───────────────────────────────────────────────────────────────────────── */

/* ---------- 1. Tokens ---------- */
:root{
  --btn-h-xs:28px;  --btn-px-xs:11px;  --btn-fs-xs:11.5px; --btn-r-xs:8px;
  --btn-h-sm:32px;  --btn-px-sm:13px;  --btn-fs-sm:12.5px; --btn-r-sm:10px;
  --btn-h-md:38px;  --btn-px-md:16px;  --btn-fs-md:13px;   --btn-r-md:12px;
  --btn-h-lg:44px;  --btn-px-lg:20px;  --btn-fs-lg:14px;   --btn-r-lg:12px;
  --btn-gap:7px;
  --btn-fw:700;
  --btn-border:1px;
  --btn-ease:.16s var(--ease);
  --btn-ring:0 0 0 3px var(--primary-soft);
  --btn-ring-danger:0 0 0 3px var(--danger-soft);
}

/* ---------- 2. Base ---------- */
.btn{
  appearance:none;
  -webkit-appearance:none;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:var(--btn-gap);
  height:var(--btn-h-md);
  min-height:var(--btn-h-md);
  padding:0 var(--btn-px-md);
  border:var(--btn-border) solid transparent;
  border-radius:var(--btn-r-md);
  background:transparent;
  font-family:inherit;
  font-size:var(--btn-fs-md);
  font-weight:var(--btn-fw);
  line-height:1;
  letter-spacing:0;
  white-space:nowrap;
  color:var(--text);
  cursor:pointer;
  user-select:none;
  text-decoration:none;
  vertical-align:middle;
  box-shadow:none;
  transition:background var(--btn-ease),border-color var(--btn-ease),
             color var(--btn-ease),box-shadow var(--btn-ease);
}
.btn i,.btn .bi{font-size:calc(var(--btn-fs-md) + 2px);line-height:1}
.btn:focus{outline:none}
.btn:focus-visible{outline:none;box-shadow:var(--btn-ring)}
.btn:disabled,.btn.disabled{
  opacity:.45;
  cursor:not-allowed;
  pointer-events:none;
}

/* ---------- 3. Hierarchy ---------- */
/* Primary — 화면의 주 행동 (뷰당 1개 원칙) */
.btn-primary{
  background:var(--primary)!important;
  border-color:var(--primary)!important;
  color:#fff!important;
  box-shadow:none!important;
}
.btn-primary:hover{background:var(--primary-2)!important;border-color:var(--primary-2)!important}
.btn-primary:active{background:color-mix(in srgb,var(--primary-2) 88%,#000)!important;border-color:transparent!important}
.btn-primary:focus-visible{box-shadow:var(--btn-ring)!important}
.btn-primary i{color:#fff!important}

/* Soft — 보조 행동 (기본값) */
.btn-soft{
  background:var(--surface);
  border-color:var(--border);
  color:var(--text);
}
.btn-soft:hover{border-color:color-mix(in srgb,var(--primary) 40%,var(--border));color:var(--primary);background:var(--surface)}
.btn-soft:active{background:var(--surface-2)}

/* Ghost — 3차 행동 (배경·보더 없음) */
.btn-ghost{
  background:transparent;
  border-color:transparent;
  color:var(--text-2);
}
.btn-ghost:hover{background:var(--surface-2);color:var(--primary)}
.btn-ghost:active{background:var(--surface-3)}

/* Danger — 파괴적 행동 */
.btn-danger{
  background:var(--danger)!important;
  border-color:var(--danger)!important;
  color:#fff!important;
}
.btn-danger:hover{background:color-mix(in srgb,var(--danger) 84%,#000)!important;border-color:transparent!important}
.btn-danger:focus-visible{box-shadow:var(--btn-ring-danger)!important}
/* Danger Soft — 파괴적 보조 (행 내부의 삭제류) */
.btn-danger-soft{
  background:var(--danger-soft);
  border-color:transparent;
  color:var(--danger);
}
.btn-danger-soft:hover{background:var(--danger);color:#fff}
.btn-danger-soft:focus-visible{box-shadow:var(--btn-ring-danger)}

/* Link — 문장 속 행동 */
.btn-link{
  height:auto;
  min-height:0;
  padding:0;
  border:0;
  background:none;
  color:var(--primary);
  font-weight:600;
}
.btn-link:hover{text-decoration:underline;text-underline-offset:3px}

/* ---------- 4. Sizes ---------- */
.btn-xs{height:var(--btn-h-xs);min-height:var(--btn-h-xs);padding:0 var(--btn-px-xs);font-size:var(--btn-fs-xs);border-radius:var(--btn-r-xs)}
.btn-xs i,.btn-xs .bi{font-size:calc(var(--btn-fs-xs) + 2px)}
.btn-sm{height:var(--btn-h-sm);min-height:var(--btn-h-sm);padding:0 var(--btn-px-sm);font-size:var(--btn-fs-sm);border-radius:var(--btn-r-sm)}
.btn-sm i,.btn-sm .bi{font-size:calc(var(--btn-fs-sm) + 2px)}
.btn-lg{height:var(--btn-h-lg);min-height:var(--btn-h-lg);padding:0 var(--btn-px-lg);font-size:var(--btn-fs-lg);border-radius:var(--btn-r-lg)}
.btn-lg i,.btn-lg .bi{font-size:calc(var(--btn-fs-lg) + 2px)}
.btn-block,.btn.w-100{width:100%}

/* ---------- 5. Icon-only (정사각) ---------- */
/* 탑바의 .icon-btn 은 md(40px) 스퀘어 규격으로 이 시스템에 편입 */
.icon-btn{
  width:40px;height:40px;
  padding:0;
  display:inline-grid;place-items:center;
  border:var(--btn-border) solid var(--border);
  border-radius:var(--btn-r-md);
  background:var(--surface);
  color:var(--text-2);
  font-size:17px;
  cursor:pointer;
  transition:background var(--btn-ease),border-color var(--btn-ease),color var(--btn-ease),box-shadow var(--btn-ease);
}
.icon-btn:hover{border-color:color-mix(in srgb,var(--primary) 40%,var(--border));color:var(--primary)}
.icon-btn:focus-visible{outline:none;box-shadow:var(--btn-ring)}
.icon-btn.sm{width:32px;height:32px;font-size:15px;border-radius:var(--btn-r-sm)}
.icon-btn.lg{width:44px;height:44px;font-size:19px}
.btn-icon{width:var(--btn-h-md);padding:0}
.btn-icon.btn-xs{width:var(--btn-h-xs)}
.btn-icon.btn-sm{width:var(--btn-h-sm)}
.btn-icon.btn-lg{width:var(--btn-h-lg)}

/* ---------- 6. Grouping ---------- */
/* 버튼 사이 간격은 컨테이너가 소유한다. 버튼 자신은 margin 을 갖지 않는다. */
.btn-row{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}
.btn + .btn{margin-left:8px}
.btn-row .btn + .btn{margin-left:0}

/* ---------- 7. Context adapters ---------- */
/* 표 행 액션: sm 스케일 고정 (기존 btn-sm 마크업과 호환) */
.tbl .btn{height:var(--btn-h-sm);min-height:var(--btn-h-sm);padding:0 var(--btn-px-sm);font-size:var(--btn-fs-sm);border-radius:var(--btn-r-sm)}
/* 카드 헤더 액션: sm */
.card2 .hd .btn{height:var(--btn-h-sm);min-height:var(--btn-h-sm);padding:0 var(--btn-px-sm);font-size:var(--btn-fs-sm);border-radius:var(--btn-r-sm)}
/* 페이지 헤드 액션: md 유지, 우측 정렬 그룹 */
.page-head .ms-auto{display:inline-flex;align-items:center;gap:8px}
/* 인증 화면 제출: lg */
.auth-submit{height:var(--btn-h-lg);font-size:var(--btn-fs-lg);border-radius:var(--btn-r-lg)}
/* 모달 확인줄: md, 우측 정렬 */
.risk-confirm{display:flex;justify-content:flex-end;gap:8px}

/* ---------- 8. Legacy aliases ---------- */
/* 구 마크업 호환: 의미상 매핑만 하고 새 값은 위 토큰을 따른다 */
.btn.primary,.btn.success{ /* → primary 로 통일 (components.css 색상 강제와 일치) */
  border-radius:var(--btn-r-md);
}

/* Final auth form corrections. */
body.auth-page .login-form,
body.auth-page #signupForm,
body.auth-page #forgotForm{
  display:flex;
  flex-direction:column;
  gap:14px;
  margin:0;
}
body.auth-page .login-form .field,
body.auth-page #signupForm .field,
body.auth-page #forgotForm .field{
  margin:0;
}
body.auth-page .login-form .remember-row{
  margin:-4px 0 2px;
}
body.auth-page .login-card .auth-signup{
  display:none!important;
}
body.auth-page .login-card .auth-links button.link-btn,
body.auth-page .login-card .auth-links .link-btn{
  -webkit-appearance:none!important;
  appearance:none!important;
  display:inline!important;
  width:auto!important;
  min-width:0!important;
  min-height:0!important;
  height:auto!important;
  margin:0!important;
  padding:0!important;
  border:0!important;
  border-radius:0!important;
  outline:0!important;
  box-shadow:none!important;
  background:transparent!important;
  color:var(--primary)!important;
  font:inherit!important;
  font-size:13px!important;
  font-weight:800!important;
  line-height:1.4!important;
  text-decoration:none!important;
  cursor:pointer!important;
}
body.auth-page .login-card .auth-links button.link-btn:hover,
body.auth-page .login-card .auth-links .link-btn:hover{
  text-decoration:underline!important;
  text-underline-offset:3px!important;
}
body.auth-page .login-card .auth-links button.link-btn:focus-visible,
body.auth-page .login-card .auth-links .link-btn:focus-visible{
  border-radius:6px!important;
  box-shadow:0 0 0 3px var(--primary-soft)!important;
}

/* Gateway detail */
.gw-detail-hero{
  display:grid;
  grid-template-columns:minmax(0,1fr) 220px;
  gap:18px;
  align-items:stretch;
  margin-bottom:var(--gap);
  padding:24px;
  border:1px solid var(--border);
  border-radius:18px;
  background:var(--surface);
  box-shadow:var(--shadow-sm);
}
.gw-detail-hero h3{
  margin:12px 0 8px;
  font-size:26px;
  font-weight:800;
  letter-spacing:0;
}
.gw-detail-hero p{
  margin:0;
  color:var(--text-2);
  line-height:1.65;
  max-width:900px;
}
.gw-detail-hero aside{
  display:flex;
  flex-direction:column;
  justify-content:center;
  gap:8px;
  padding:18px;
  border:1px solid var(--border);
  border-radius:14px;
  background:var(--surface-2);
}
.gw-detail-hero aside b{
  display:block;
  font-size:34px;
  font-weight:900;
  line-height:1;
  color:var(--text);
}
.gw-detail-hero aside small{color:var(--text-muted);font-weight:700}
.gw-state{
  align-self:flex-start;
  display:inline-flex;
  align-items:center;
  min-height:26px;
  padding:5px 10px;
  border-radius:999px;
  background:var(--success-soft);
  color:var(--success);
  font-size:11px;
  font-weight:900;
  letter-spacing:.02em;
}
.gw-state.warn{background:var(--warning-soft);color:var(--warning)}
.gw-control-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:14px;
}
.gw-control-grid .field label{
  display:block;
  margin-bottom:7px;
}
.gw-action-row{
  display:flex;
  justify-content:flex-end;
  gap:8px;
  flex-wrap:wrap;
  margin-top:16px;
}
.gw-policy-stack .toggle-row{align-items:flex-start}
.gw-policy-stack .switch{margin-top:2px}
.tbl td b{font-weight:800}
@media(max-width:991.98px){
  .gw-detail-hero{grid-template-columns:1fr;padding:20px}
  .gw-control-grid{grid-template-columns:1fr}
}

/* Administrator detail screens */
.ops-detail-hero{
  display:grid;
  grid-template-columns:minmax(0,1fr) 210px;
  gap:18px;
  align-items:stretch;
  margin-bottom:var(--gap);
  padding:24px;
  border:1px solid var(--border);
  border-radius:18px;
  background:var(--surface);
  box-shadow:var(--shadow-sm);
}
.ops-detail-hero h3{
  margin:12px 0 8px;
  font-size:24px;
  font-weight:800;
  letter-spacing:0;
  line-height:1.3;
  word-break:break-word;
}
.ops-detail-hero p{
  margin:0;
  color:var(--text-2);
  line-height:1.65;
  max-width:940px;
}
.ops-detail-hero aside{
  display:flex;
  flex-direction:column;
  justify-content:center;
  gap:8px;
  padding:18px;
  border:1px solid var(--border);
  border-radius:14px;
  background:var(--surface-2);
}
.ops-detail-hero aside b{
  font-size:32px;
  font-weight:900;
  line-height:1;
  color:var(--text);
}
.ops-detail-hero aside small{color:var(--text-muted);font-weight:700}
.ops-state{
  align-self:flex-start;
  display:inline-flex;
  align-items:center;
  min-height:26px;
  padding:5px 10px;
  border-radius:999px;
  font-size:11px;
  font-weight:900;
  letter-spacing:.02em;
  background:var(--surface);
  color:var(--text-2);
  border:1px solid var(--border);
}
.ops-state.g{background:var(--success-soft);color:var(--success);border-color:transparent}
.ops-state.b{background:var(--primary-soft);color:var(--primary);border-color:transparent}
.ops-state.w{background:var(--warning-soft);color:var(--warning);border-color:transparent}
.ops-state.r{background:var(--danger-soft);color:var(--danger);border-color:transparent}
.ops-control-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:14px;
}
.ops-control-grid .field label{display:block;margin-bottom:7px}
.ops-action-row{
  display:flex;
  justify-content:flex-end;
  gap:8px;
  flex-wrap:wrap;
  margin-top:16px;
}
.ops-raw-log{
  margin:0;
  padding:16px;
  border:1px solid var(--border);
  border-radius:12px;
  background:#0f172a;
  color:#dbeafe;
  font-size:12px;
  line-height:1.7;
  white-space:pre-wrap;
  word-break:break-word;
}
@media(max-width:991.98px){
  .ops-detail-hero{grid-template-columns:1fr;padding:20px}
  .ops-control-grid{grid-template-columns:1fr}
}

/* Engine live inventory */
.engine-live-hero{
  display:grid;
  grid-template-columns:minmax(0,1fr) 220px;
  gap:18px;
  align-items:stretch;
  margin-bottom:var(--gap);
  padding:24px;
  border:1px solid var(--border);
  border-radius:18px;
  background:var(--surface);
  box-shadow:var(--shadow-sm);
}
.engine-live-hero h3{
  margin:12px 0 8px;
  font-size:25px;
  font-weight:800;
  letter-spacing:0;
  line-height:1.32;
}
.engine-live-hero p{
  margin:0;
  color:var(--text-2);
  line-height:1.65;
}
.engine-live-hero aside{
  display:flex;
  flex-direction:column;
  justify-content:center;
  gap:8px;
  padding:18px;
  border:1px solid var(--border);
  border-radius:14px;
  background:var(--surface-2);
}
.engine-live-hero aside b{
  font-size:32px;
  font-weight:900;
  line-height:1;
  color:var(--text);
}
.engine-live-hero aside small{
  color:var(--text-muted);
  font-weight:700;
}
.engine-source{
  display:inline-flex;
  align-items:center;
  width:max-content;
  min-height:26px;
  padding:5px 10px;
  border-radius:999px;
  background:var(--success-soft);
  color:var(--success);
  font-size:11px;
  font-weight:900;
  letter-spacing:.02em;
}
.engine-source.fallback{
  background:var(--warning-soft);
  color:var(--warning);
}
.engine-error{
  margin-bottom:12px;
  padding:12px 14px;
  border:1px solid var(--warning);
  border-radius:12px;
  background:var(--warning-soft);
  color:var(--warning);
  font-size:12.5px;
  font-weight:800;
}
.live-empty{
  min-height:112px;
  display:flex;
  flex-direction:column;
  justify-content:center;
  gap:7px;
  padding:18px;
  border:1px dashed var(--border);
  border-radius:14px;
  background:var(--surface-2);
  color:var(--text-muted);
}
.live-empty b{
  color:var(--text);
  font-size:13px;
  font-weight:900;
  letter-spacing:.02em;
}
.live-empty span{
  font-size:12px;
  line-height:1.5;
}
.engine-name-link{
  display:block;
  color:inherit;
  text-decoration:none;
}
.engine-name-link:hover b{
  color:var(--primary);
  text-decoration:underline;
  text-underline-offset:3px;
}
@media(max-width:991.98px){
  .engine-live-hero{grid-template-columns:1fr;padding:20px}
}
/* APS_SOURCE_CLEAN_REALDATA_20260705 */
.aps-clean-hero{display:grid;grid-template-columns:minmax(0,1fr) 190px;gap:22px;align-items:center;border:1px solid var(--line,#d8e2ef);background:#fff;border-radius:14px;padding:28px;margin:0 0 20px;box-shadow:0 8px 22px rgba(15,38,72,.06)}
.aps-clean-hero h1{font-size:28px;line-height:1.25;margin:14px 0 8px;color:#101828}
.aps-clean-hero p{margin:0;color:#52627a}
.aps-clean-hero aside{border:1px solid #d7e3f2;border-radius:12px;padding:20px;background:#f8fbff}
.aps-clean-hero aside em{display:inline-flex;border-radius:999px;background:#e8fbf7;color:#008b79;font-style:normal;font-weight:800;font-size:12px;padding:7px 11px}
.aps-clean-hero aside b{display:block;font-size:38px;line-height:1;margin:14px 0 8px;color:#101828}
.aps-clean-hero aside small{color:#6a7890}
.aps-clean-live{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:800;color:#0f172a}
.aps-clean-live i{display:inline-block;width:9px;height:9px;border-radius:50%;background:#13b8a6}
.aps-clean-pills{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}
.aps-clean-pills span{border-radius:999px;background:#f1f6fd;border:1px solid #d9e6f5;padding:7px 11px;font-size:12px;font-weight:700;color:#243348}
.aps-clean-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;margin:0 0 20px}
.aps-clean-stat{border:1px solid #d8e2ef;background:#fff;border-radius:14px;padding:22px;box-shadow:0 8px 22px rgba(15,38,72,.05)}
.aps-clean-stat span{display:block;font-size:13px;color:#637083;font-weight:800}
.aps-clean-stat b{display:block;font-size:30px;margin:14px 0 8px;color:#111827}
.aps-clean-stat small{color:#718096}
.aps-clean-card{border:1px solid #d8e2ef;background:#fff;border-radius:14px;padding:22px;margin:0 0 20px;box-shadow:0 8px 22px rgba(15,38,72,.05)}
.aps-clean-card h2{font-size:18px;margin:0 0 14px;color:#111827}
.aps-clean-table{overflow:auto;border-radius:10px;border:1px solid #e4ebf4}
.aps-clean-table table{width:100%;border-collapse:collapse;background:#fff}
.aps-clean-table th{background:#f6f8fb;color:#75849a;font-size:12px;text-transform:uppercase;letter-spacing:0;font-weight:800;text-align:left;padding:13px 16px;border-bottom:1px solid #dbe5f0}
.aps-clean-table td{padding:15px 16px;border-bottom:1px solid #e7edf5;color:#152033;vertical-align:top}
.aps-clean-table tr:last-child td{border-bottom:0}
.aps-clean-table a{color:#075fb4;text-decoration:none}
.aps-clean-table .sub,.sub{display:block;color:#718096;font-size:12px;margin-top:4px}
.aps-clean-chip{display:inline-flex;align-items:center;border-radius:999px;padding:6px 10px;font-size:12px;font-weight:800;background:#eef2f7;color:#445066}
.aps-clean-chip.good{background:#e6f8f5;color:#008977}
.aps-clean-chip.warn{background:#f8efe2;color:#b86700}
.aps-clean-chip.bad{background:#ffe8e8;color:#d92d20}
.aps-clean-btn{display:inline-flex;align-items:center;justify-content:center;min-height:34px;border-radius:8px;border:1px solid #d8e2ef;background:#fff;color:#075fb4;font-weight:800;padding:7px 12px;text-decoration:none;cursor:pointer}
.aps-clean-btn.primary{background:#075fb4;border-color:#075fb4;color:#fff}
.aps-clean-actions{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0}
.aps-clean-warn{border:1px solid #e19a32;background:#fff7ea;color:#a85b00;border-radius:12px;padding:16px;margin:0 0 20px}
.aps-clean-note{border:1px solid #b9d7f5;background:#f4f9ff;color:#26547c;border-radius:12px;padding:16px;margin:0 0 20px}
.aps-clean-note b{display:block;margin-bottom:7px}
.aps-clean-note p{margin:0 0 8px;word-break:break-word}
.aps-clean-warn b{display:block;margin-bottom:7px}
.aps-clean-warn p{margin:0 0 8px;word-break:break-word}
.aps-clean-source{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.aps-clean-source span,.aps-clean-source b{display:inline-flex;border-radius:999px;border:1px solid #f0cf9b;background:#fffaf1;padding:5px 9px;font-size:12px;color:#965400}
.aps-clean-pre{max-height:360px;overflow:auto;background:#0f172a;color:#e5edf8;border-radius:10px;padding:14px;font-size:12px;white-space:pre-wrap;word-break:break-word}
.aps-q-producer{border:1px solid #d8e2ef;background:#fff;border-radius:14px;padding:22px;margin:0 0 20px;box-shadow:0 8px 22px rgba(15,38,72,.05)}
.aps-q-producer-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:16px}
.aps-q-producer-head strong{font-size:18px;color:#111827}
.aps-q-producer-head p{margin:6px 0 0;color:#64748b}
.aps-q-source{display:inline-flex;border-radius:999px;background:#e8fbf7;border:1px solid #a7f0df;color:#087866;font-size:12px;font-weight:800;padding:8px 12px}
.aps-q-producer-row{display:grid;grid-template-columns:minmax(0,1fr) 150px auto auto;gap:10px}
.aps-q-input,.aps-q-select{min-height:42px;border:1px solid #d7e3f2;border-radius:8px;padding:0 12px;background:#fff;color:#152033}
.aps-q-btn{min-height:42px;border-radius:8px;border:1px solid #cbd9ea;background:#fff;color:#075fb4;font-weight:800;padding:0 14px;cursor:pointer}
.aps-q-btn.primary{background:#075fb4;color:#fff;border-color:#075fb4}
.aps-q-result{margin-top:12px;border:1px solid #d7e3f2;background:#f8fbff;border-radius:8px;padding:12px;color:#334155;display:flex;gap:10px;flex-wrap:wrap}
.aps-q-result .bad,.bad{color:#d92d20}

/* APS_SOURCE_CLEAN_DARK_FIX_20260705: real-data cards follow the global dark theme. */
.theme-dark .aps-clean-hero,
.theme-dark .aps-clean-stat,
.theme-dark .aps-clean-card,
.theme-dark .aps-q-producer{
  background:var(--surface);
  border-color:var(--border);
  color:var(--text);
  box-shadow:var(--shadow-sm);
}
.theme-dark .aps-clean-hero h1,
.theme-dark .aps-clean-stat b,
.theme-dark .aps-clean-card h2,
.theme-dark .aps-q-producer-head strong{
  color:var(--text);
}
.theme-dark .aps-clean-hero p,
.theme-dark .aps-clean-stat span,
.theme-dark .aps-clean-stat small,
.theme-dark .aps-q-producer-head p,
.theme-dark .aps-clean-table .sub,
.theme-dark .sub{
  color:var(--text-2);
}
.theme-dark .aps-clean-hero aside,
.theme-dark .aps-clean-pills span,
.theme-dark .aps-clean-table,
.theme-dark .aps-clean-table table,
.theme-dark .aps-clean-table th,
.theme-dark .aps-q-result,
.theme-dark .aps-q-input,
.theme-dark .aps-q-select{
  background:var(--surface-2);
  border-color:var(--border);
  color:var(--text);
}
.theme-dark .aps-clean-table td{
  color:var(--text);
  border-bottom-color:var(--border);
}
.theme-dark .aps-clean-table th{
  color:var(--text-muted);
}
.theme-dark .aps-clean-table a{
  color:#7ab8ff;
}
.theme-dark .aps-clean-btn,
.theme-dark .aps-q-btn{
  background:var(--surface-2);
  border-color:var(--border);
  color:#8ec5ff;
}
.theme-dark .aps-clean-btn:hover,
.theme-dark .aps-q-btn:hover{
  background:var(--surface-3);
  border-color:color-mix(in srgb,var(--primary) 45%,var(--border));
}
.theme-dark .aps-clean-btn.primary,
.theme-dark .aps-q-btn.primary{
  background:var(--primary);
  border-color:var(--primary);
  color:#fff;
}
.theme-dark .aps-clean-hero aside em,
.theme-dark .aps-q-source,
.theme-dark .aps-clean-chip.good{
  background:#0b3a34;
  color:#7df5df;
}
.theme-dark .aps-clean-chip,
.theme-dark .aps-clean-chip.warn{
  background:#332817;
  color:#ffc46b;
}
.theme-dark .aps-clean-chip.bad{
  background:#3a171a;
  color:#ff9a9a;
}
.theme-dark .aps-clean-warn{
  background:#2a2112;
  border-color:#8a5a14;
  color:#ffd18a;
}
.theme-dark .aps-clean-note{
  background:#111d2e;
  border-color:#294768;
  color:#b9d7ff;
}
.theme-dark .aps-clean-source span,
.theme-dark .aps-clean-source b{
  background:#201a10;
  border-color:#704b16;
  color:#ffc46b;
}
.theme-dark .aps-clean-pre{
  background:#060a12;
  color:#dbeafe;
  border:1px solid var(--border);
}
.theme-dark .aps-q-input::placeholder{
  color:var(--text-muted);
}

/* APS_SOURCE_CLEAN_DARK_COMPAT_20260705: tolerate body/html/data-theme dark toggles. */
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-hero,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-stat,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-card,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-q-producer{
  background:var(--surface)!important;
  border-color:var(--border)!important;
  color:var(--text)!important;
}
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-hero h1,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-stat b,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-card h2,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-q-producer-head strong{
  color:var(--text)!important;
}
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-hero p,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-stat span,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-stat small,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-table .sub,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .sub{
  color:var(--text-2)!important;
}
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-hero aside,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-pills span,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-table,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-table table,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-table th,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-q-result,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-q-input,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-q-select{
  background:var(--surface-2)!important;
  border-color:var(--border)!important;
  color:var(--text)!important;
}
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-table td{
  color:var(--text)!important;
  border-bottom-color:var(--border)!important;
}
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-table a,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-clean-btn,
:where(body.theme-dark, html.theme-dark, body[data-theme="dark"], html[data-theme="dark"], .dark, .dark-mode) .aps-q-btn{
  color:#8ec5ff!important;
}

/* APS_TOTAL_NOC_VIEW_20260706: fullscreen NOC projection from Core/q_s real data. */
.aps-total-noc-top{height:38px;border-radius:9px;display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:900;letter-spacing:.02em;padding:0 14px}
.noc-fullscreen-body{margin:0;overflow:hidden;background:#070f1f}
.noc-fullscreen-main{min-height:100vh;padding:0!important}
.noc-total{--ok:#2EE6A8;--warn:#FFB547;--err:#FF5D73;--off:#7A8AA6;--cyan:#38E0FF;--violet:#9D8CFF;--font-num:"SF Mono","Cascadia Code","JetBrains Mono",ui-monospace,Consolas,monospace;min-height:100vh;height:100vh;padding:14px 16px;display:flex;flex-direction:column;gap:12px;overflow:hidden;font-family:var(--font-ui);transition:background .25s,color .25s}
.noc-total[data-theme="navy"]{--bg:#070F1F;--bg2:#0A1730;--panel:rgba(16,32,64,.55);--panel-solid:#0F1F3D;--stroke:rgba(80,130,220,.24);--stroke-hi:rgba(56,224,255,.48);--tx:#E8F0FF;--tx2:#8CA3C7;--tx3:#5A7195;--chip:rgba(56,224,255,.10);--bar-track:rgba(120,160,230,.14);background:radial-gradient(1200px 600px at 85% -10%,var(--bg2),transparent 60%),radial-gradient(900px 500px at -10% 110%,var(--bg2),transparent 55%),var(--bg);color:var(--tx)}
.noc-total[data-theme="white"]{--bg:#F4F7FC;--bg2:#EAF0F9;--panel:#fff;--panel-solid:#fff;--stroke:#DCE5F2;--stroke-hi:#9CC3E8;--tx:#0E2247;--tx2:#4C6285;--tx3:#8CA0BE;--chip:rgba(20,90,200,.08);--bar-track:#E6ECF6;--cyan:#0E86D4;--violet:#6C5CE7;--ok:#0FB981;--warn:#E8930C;--err:#E4405F;background:radial-gradient(1200px 600px at 85% -10%,var(--bg2),transparent 60%),var(--bg);color:var(--tx)}
.noc-head{display:flex;align-items:center;gap:14px;min-height:52px}
.noc-brand{display:flex;align-items:baseline;gap:10px;white-space:nowrap}
.noc-brand strong{font-size:25px;line-height:1;font-weight:900;letter-spacing:.12em;color:var(--tx)}
.noc-brand strong span{color:var(--cyan)}
.noc-brand em{font-style:normal;font-size:11px;color:var(--tx2);letter-spacing:.28em}
.noc-live{display:inline-flex;align-items:center;gap:7px;color:var(--ok);border:1px solid var(--stroke);border-radius:999px;padding:6px 12px;background:var(--chip);font-size:12px;font-weight:800}
.noc-live i{width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 5px color-mix(in srgb,var(--ok) 18%,transparent)}
.noc-head-spacer{flex:1}
.noc-time-stack{text-align:right;display:flex;flex-direction:column;gap:3px;min-width:150px}
.noc-time-stack div{font-size:12px;color:var(--tx2);font-weight:800}
.noc-time-stack b{font-family:var(--font-num);font-size:22px;letter-spacing:.05em;color:var(--tx)}
.noc-toggle{display:flex;border:1px solid var(--stroke);border-radius:999px;overflow:hidden}
.noc-toggle button,.noc-mini-btn,.noc-home-btn{border:1px solid var(--stroke);background:var(--panel);color:var(--tx2);font-weight:900;border-radius:999px;min-height:34px;padding:0 13px;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.noc-toggle button{border:0;border-radius:0;background:transparent}
.noc-toggle button.on{background:var(--cyan);color:#04101f}
.noc-total[data-theme="white"] .noc-toggle button.on{color:#fff}
.noc-home-btn{background:var(--cyan);border-color:var(--cyan);color:#04101f}
.noc-total[data-theme="white"] .noc-home-btn{color:#fff}
.noc-kpis{display:grid;grid-template-columns:1.15fr 1.15fr .9fr .9fr .9fr 2.2fr;gap:12px}
.noc-panel{background:var(--panel);border:1px solid var(--stroke);border-radius:14px;box-shadow:0 0 24px rgba(56,224,255,.08);backdrop-filter:blur(8px);position:relative;overflow:hidden}
.noc-kpi{padding:12px 15px;min-height:110px}
.noc-kpi.gauge{display:flex;align-items:center;gap:14px}
.noc-gauge{position:relative;width:86px;height:86px;flex:none}
.noc-gauge svg{transform:rotate(-90deg)}
.noc-gauge .val{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.noc-gauge .val b{font-family:var(--font-num);font-size:18px;color:var(--tx)}
.noc-gauge .val s{text-decoration:none;font-size:9px;color:var(--tx3);letter-spacing:.1em}
.noc-kmeta h4{font-size:11px;color:var(--tx2);letter-spacing:.18em;text-transform:uppercase;margin:0 0 5px}
.noc-kmeta .big{font-family:var(--font-num);font-size:15px;color:var(--tx)}
.noc-kmeta .sub{font-size:11px;color:var(--tx3);margin-top:3px}
.noc-ring{width:84px;height:84px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--cyan) calc(var(--p) * 1%),rgba(120,160,230,.15) 0);position:relative;flex:none}
.noc-ring:after{content:"";position:absolute;inset:9px;border-radius:50%;background:var(--panel-solid)}
.noc-ring b,.noc-ring small{position:relative;z-index:1;display:block;text-align:center}
.noc-ring b{font-family:var(--font-num);font-size:18px;color:var(--tx)}
.noc-ring small{font-size:9px;color:var(--tx3);letter-spacing:.1em}
.noc-kpi h3{margin:0 0 6px;font-size:10px;color:var(--tx2);letter-spacing:.18em;text-transform:uppercase}
.noc-kpi p{margin:0;color:var(--tx3);font-size:11px}
.noc-kpi.stat{display:flex;flex-direction:column;justify-content:center}
.noc-kpi.stat .n{display:block;font-family:var(--font-num);font-size:28px;line-height:1.1;margin:7px 0;color:var(--tx)}
.noc-kpi.good b{color:var(--ok)}.noc-kpi.warn b{color:var(--warn)}
.noc-kpi.good .n{color:var(--ok)}.noc-kpi.warn .n{color:var(--warn)}
.clusterChart{padding:9px 12px 4px;display:flex;flex-direction:column;gap:4px}
.clusterChart h4{font-size:10px;color:var(--tx2);letter-spacing:.18em;text-transform:uppercase;display:flex;gap:14px;align-items:center;margin:0}
.clusterChart h4 span{display:flex;align-items:center;gap:5px;font-size:10px;letter-spacing:0;text-transform:none}
.clusterChart h4 span i{width:8px;height:3px;border-radius:2px;display:inline-block}
.clusterChart div{height:74px;min-height:0}
.clusterChart canvas{display:block;width:100%;height:100%}
.noc-failures{border:1px solid color-mix(in srgb,var(--warn) 60%,var(--stroke));background:color-mix(in srgb,var(--warn) 10%,var(--panel));color:var(--warn);border-radius:12px;padding:10px 14px;font-size:12px;display:grid;gap:3px}
.noc-failures span,.noc-failures small{color:var(--tx2);word-break:break-word}
.noc-grid{flex:1;min-height:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:10px;overflow:hidden}
.noc-engine-card{padding:10px 12px 8px;display:flex;flex-direction:column;gap:7px;min-height:0}
.noc-engine-card:hover{border-color:var(--stroke-hi);transform:translateY(-1px)}
.noc-card-link{position:absolute;inset:0;z-index:1}
.noc-card-head{display:flex;align-items:center;gap:8px;min-width:0}
.noc-card-head b{font-family:var(--font-num);font-size:14px;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.noc-card-head small{margin-left:auto;font-family:var(--font-num);font-size:10px;color:var(--tx3)}
.noc-dot{width:10px;height:10px;border-radius:50%;flex:none}.noc-dot.ok{background:var(--ok)}.noc-dot.warn{background:var(--warn)}.noc-dot.off{background:var(--off)}
.noc-kind{font-style:normal;border:1px solid var(--stroke);border-radius:5px;padding:2px 6px;font-size:8.5px;font-weight:900;letter-spacing:.1em;color:var(--cyan);background:var(--chip)}
.noc-kind.engine{color:var(--violet)}.noc-kind.service{color:var(--ok)}.noc-kind.config,.noc-kind.edge{color:var(--warn)}
.noc-engine-card p{margin:0;color:var(--tx2);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.noc-spark{flex:1;min-height:32px;position:relative;border-radius:8px;background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--cyan) 10%,transparent));display:grid;place-items:center}
.noc-spark:after{content:"";position:absolute;inset:0;width:38%;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--cyan) 20%,transparent),transparent);animation:nocSweep 2.8s linear infinite;opacity:.65;pointer-events:none}
.noc-spark canvas{display:block;width:100%;height:100%;position:absolute;inset:0}
.noc-spark-empty{font-family:var(--font-num);font-size:10px;color:var(--tx3);position:relative;z-index:1}
.noc-bars{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.noc-bars span{display:flex;justify-content:space-between;color:var(--tx3);font-size:9px}
.noc-bars b{font-family:var(--font-num);color:var(--tx2)}
.noc-bars i{display:block;height:4px;border-radius:3px;background:var(--bar-track);margin-top:3px;overflow:hidden}
.noc-bars u{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,var(--cyan),var(--ok))}
.noc-engine-card footer{display:flex;justify-content:space-between;gap:5px;font-family:var(--font-num);font-size:9.5px;color:var(--tx3)}
.noc-engine-card footer b{color:var(--tx2)}
.noc-card-source{font-size:8.5px;color:var(--tx3);font-weight:800;letter-spacing:.04em;text-align:right;margin-top:-3px}
.noc-engine-card.off{opacity:.58}
.noc-foot{display:flex;justify-content:space-between;gap:14px;color:var(--tx3);font-size:10.5px;letter-spacing:.04em}
.noc-foot b{color:var(--tx2)}
@keyframes nocSweep{0%{transform:translateX(-120%)}100%{transform:translateX(320%)}}

/* APS_TOTAL_NOC_SCALE_FULLSCREEN_20260706: scale typography/cards with viewport and add browser fullscreen control. */
.noc-total{font-size:var(--noc-font-base,14px);padding:var(--noc-pad-y,14px) var(--noc-pad-x,16px);gap:var(--noc-gap,12px)}
.noc-head{gap:var(--noc-head-gap,14px);min-height:var(--noc-head-h,52px)}
.noc-brand strong{font-size:var(--noc-brand-size,25px)}
.noc-brand em{font-size:var(--noc-brand-sub,11px)}
.noc-live{font-size:var(--noc-live-font,12px);padding:var(--noc-live-pad-y,6px) var(--noc-btn-pad,13px)}
.noc-toggle button,.noc-mini-btn,.noc-home-btn{min-height:var(--noc-btn-h,34px);padding:0 var(--noc-btn-pad,13px);font-size:var(--noc-live-font,12px)}
.noc-fullscreen-btn{border-color:var(--stroke-hi);color:var(--cyan);background:color-mix(in srgb,var(--cyan) 10%,var(--panel))}
.noc-fullscreen-btn.on{background:var(--cyan);border-color:var(--cyan);color:#04101f}
.noc-total[data-theme="white"] .noc-fullscreen-btn.on{color:#fff}
.noc-kpis{gap:var(--noc-gap,12px)}
.noc-kpi{min-height:var(--noc-kpi-h,110px);padding:var(--noc-kpi-pad-y,12px) var(--noc-kpi-pad-x,15px)}
.noc-gauge{width:var(--noc-gauge-size,86px);height:var(--noc-gauge-size,86px)}
.noc-gauge svg{width:var(--noc-gauge-size,86px);height:var(--noc-gauge-size,86px)}
.noc-gauge .val b{font-size:var(--noc-gauge-font,18px)}
.noc-gauge .val s{font-size:var(--noc-gauge-small,9px)}
.noc-kmeta h4,.noc-kpi h3,.clusterChart h4{font-size:var(--noc-card-micro,9.5px)}
.noc-kmeta .big{font-size:var(--noc-card-title,14px)}
.noc-kmeta .sub,.noc-kpi p,.clusterChart h4 span{font-size:var(--noc-card-small,10px)}
.noc-kpi.stat .n{font-size:var(--noc-stat-num,28px)}
.clusterChart div{height:var(--noc-chart-h,74px)}
.noc-grid{grid-template-columns:repeat(auto-fill,minmax(var(--noc-card-min,215px),1fr));grid-auto-rows:minmax(var(--noc-card-row,150px),1fr);gap:var(--noc-card-gap,10px)}
.noc-engine-card{padding:var(--noc-card-pad-y,10px) var(--noc-card-pad-x,12px) var(--noc-card-pad-b,8px);gap:var(--noc-card-inner-gap,7px)}
.noc-card-head{gap:var(--noc-card-head-gap,8px)}
.noc-card-head b{font-size:var(--noc-card-title,14px)}
.noc-card-head small{font-size:var(--noc-card-small,10px)}
.noc-kind{font-size:var(--noc-kind-font,8.5px)}
.noc-engine-card p{font-size:var(--noc-card-small,10px)}
.noc-spark{min-height:var(--noc-spark-min,32px)}
.noc-spark-empty{font-size:var(--noc-card-small,10px)}
.noc-bars span,.noc-engine-card footer{font-size:var(--noc-card-micro,9.5px)}
.noc-card-source{font-size:var(--noc-kind-font,8.5px)}
.noc-bars i{height:var(--noc-bar-h,4px)}
.noc-is-fullscreen{padding:var(--noc-pad-y,14px) var(--noc-pad-x,16px)}

/* APS_SIDEBAR_BRAND_TWO_LINE_20260706: keep RIZE APS and integrated console label on clean separate rows. */
.s-brand-link .s-brand-copy{display:flex!important;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;min-width:0;line-height:1.12}
.s-brand-link .s-brand-copy .nm{display:block;white-space:nowrap;font-size:15.5px;font-weight:900;letter-spacing:-.15px;line-height:1.05;color:var(--text)}
.s-brand-link .s-brand-copy .tag{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:118px;font-size:9px;font-weight:800;letter-spacing:.02em;line-height:1.15;color:var(--muted)}
.s-brand-link .s-logo{width:38px;height:38px}
@media (max-width: 1200px){.noc-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}.noc-grid{overflow:auto}}
@media (max-width: 760px){.noc-fullscreen-body{overflow:auto}.noc-total{height:auto;min-height:100vh;overflow:visible}.noc-head{flex-wrap:wrap}.noc-head-spacer{display:none}.noc-kpis{grid-template-columns:1fr}.noc-grid{grid-template-columns:1fr;overflow:visible}.noc-time-stack{text-align:left}.noc-brand{width:100%}}
@media (max-width: 980px){
  .aps-clean-hero{grid-template-columns:1fr}
  .aps-clean-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .aps-q-producer-row{grid-template-columns:1fr}
}
@media (max-width: 640px){
  .aps-clean-stats{grid-template-columns:1fr}
  .aps-clean-hero h1{font-size:23px}
}


/* APS_EDGE_BINDINGS_WEB_UI_20260706 */
.aps-edge-bindings{padding:24px 32px 48px}
.edge-binding-hero{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:20px}
.edge-binding-hero h1{margin:8px 0 8px;font-size:28px}
.pill-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}
.pill{display:inline-flex;align-items:center;border:1px solid var(--line,#d9e3f2);border-radius:999px;padding:8px 12px;font-weight:700;font-size:13px;background:rgba(255,255,255,.55)}
.hero-metric{min-width:180px;border:1px solid var(--line,#d9e3f2);border-radius:14px;padding:22px;background:rgba(248,251,255,.9)}
.hero-metric span{display:inline-flex;border-radius:999px;padding:6px 10px;background:#dffcf4;color:#008a70;font-weight:800;font-size:12px}
.hero-metric strong{display:block;font-size:42px;margin-top:12px}
.hero-metric small{color:var(--muted,#64748b);font-weight:700}
.edge-binding-grid{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:20px}
.edge-panel{border:1px solid var(--line,#d9e3f2);border-radius:16px;background:var(--panel,#fff);box-shadow:0 10px 24px rgba(15,23,42,.04);padding:22px}
.panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}
.panel-head h2{margin:0 0 6px;font-size:18px}.panel-head p{margin:0;color:var(--muted,#64748b)}
.edge-form-row{display:grid;grid-template-columns:120px minmax(220px,1fr) auto auto;gap:10px;margin-bottom:14px}
.edge-form-stack{display:grid;gap:12px}
.edge-form-row label,.edge-form-stack label{display:grid;gap:6px;font-size:12px;font-weight:800;color:var(--muted,#64748b)}
.edge-form-row input,.edge-form-stack input{height:42px;border:1px solid var(--line,#d9e3f2);border-radius:10px;padding:0 12px;background:var(--input,#fff);color:var(--text,#0f172a)}
.btn{height:42px;border:1px solid var(--line,#d9e3f2);border-radius:10px;background:var(--panel,#fff);color:var(--text,#0f172a);font-weight:800;padding:0 14px;cursor:pointer}
.btn.primary{background:#0969c3;color:#fff;border-color:#0969c3}.btn.danger-soft{background:#fff4f4;color:#c62828;border-color:#ffcaca}.btn.block{width:100%}
.edge-status{margin:10px 0 14px;border:1px solid #b9ecd9;background:#eefdf7;color:#057a61;border-radius:12px;padding:12px;font-weight:800}
.edge-status.bad{border-color:#f7c67a;background:#fff7e8;color:#b75f00}.table-wrap{overflow:auto}.edge-table{width:100%;border-collapse:collapse}
.edge-table th,.edge-table td{border-bottom:1px solid var(--line,#e2e8f0);padding:13px 12px;text-align:left;vertical-align:top}
.edge-table th{background:rgba(148,163,184,.08);font-size:12px;color:var(--muted,#64748b);text-transform:uppercase}.edge-table small{color:var(--muted,#64748b)}
.state-chip{display:inline-flex;border-radius:999px;background:#e9fbf6;color:#008a70;padding:6px 10px;font-weight:800;font-size:12px}
.edge-note{margin-top:16px;border:1px solid #f7c67a;background:#fff7e8;color:#9a5200;border-radius:12px;padding:12px;display:grid;gap:6px;font-size:12px}
html[data-theme="dark"] .edge-panel,html[data-theme="dark"] .hero-metric,html[data-theme="dark"] .pill,body.dark .edge-panel,body.dark .hero-metric,body.dark .pill{background:#111b2d;border-color:#263b5e;color:#e8f1ff}
html[data-theme="dark"] .edge-form-row input,html[data-theme="dark"] .edge-form-stack input,body.dark .edge-form-row input,body.dark .edge-form-stack input{background:#0b1424;border-color:#263b5e;color:#e8f1ff}
html[data-theme="dark"] .edge-table th,body.dark .edge-table th{background:#0b1424}
@media(max-width:1100px){.edge-binding-grid{grid-template-columns:1fr}.edge-form-row{grid-template-columns:1fr}.edge-binding-hero{display:block}.hero-metric{margin-top:16px}}

/* APS_EDGE_BINDINGS_LAYOUT_FIX_20260706: repair standalone page shell, UTF-8 rewrite, and table containment. */
.content.aps-edge-bindings{
  box-sizing:border-box;
  max-width:1600px;
  width:100%;
  margin:0 auto 0 0;
  overflow-x:hidden;
}
.aps-edge-bindings .page-head{
  margin-bottom:18px;
}
.aps-edge-bindings .page-head h2{
  font-size:28px;
  letter-spacing:0;
}
.aps-edge-bindings .edge-binding-hero,
.aps-edge-bindings .edge-panel{
  width:100%;
  max-width:100%;
}
.aps-edge-bindings .table-wrap{
  width:100%;
  overflow:auto;
  border-radius:12px;
}
.aps-edge-bindings .edge-table{
  min-width:920px;
}
html[data-theme="dark"] .aps-edge-bindings .edge-binding-hero,
body.dark .aps-edge-bindings .edge-binding-hero,
.theme-dark .aps-edge-bindings .edge-binding-hero,
html[data-theme="dark"] .aps-edge-bindings .edge-panel,
body.dark .aps-edge-bindings .edge-panel,
.theme-dark .aps-edge-bindings .edge-panel{
  background:#101827;
  border-color:#263b5e;
  color:#e8f1ff;
}
html[data-theme="dark"] .aps-edge-bindings .pill,
body.dark .aps-edge-bindings .pill,
.theme-dark .aps-edge-bindings .pill,
html[data-theme="dark"] .aps-edge-bindings .hero-metric,
body.dark .aps-edge-bindings .hero-metric,
.theme-dark .aps-edge-bindings .hero-metric{
  background:#0b1424;
  border-color:#263b5e;
  color:#e8f1ff;
}

/* APS_EDGE_OWNERSHIP_PAGES_20260706: Edge ownership pages use APS/Fleet ownership data only. */
.aps-edge-owner{
  box-sizing:border-box;
  max-width:1600px;
  width:100%;
  margin:0 auto;
  padding-bottom:48px;
  overflow-x:hidden;
}
.edge-owner-head{
  margin-bottom:18px;
}
.edge-owner-head .page-actions{
  display:flex;
  flex-wrap:wrap;
  gap:10px;
}
.edge-owner-hero{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:24px;
  margin:0 0 20px;
  padding:28px;
  border:1px solid var(--line,#d9e3f2);
  border-radius:16px;
  background:var(--panel,#fff);
  box-shadow:0 12px 28px rgba(15,23,42,.05);
}
.edge-owner-hero.compact{
  align-items:flex-start;
}
.edge-owner-hero h1{
  margin:8px 0;
  font-size:28px;
  line-height:1.35;
  letter-spacing:0;
}
.edge-owner-hero p{
  margin:0;
  color:var(--muted,#64748b);
}
.edge-owner-dot{
  display:inline-block;
  width:9px;
  height:9px;
  margin-right:8px;
  border-radius:999px;
  background:#14b8a6;
  box-shadow:0 0 0 6px rgba(20,184,166,.11);
}
.edge-owner-pills,
.edge-owner-steps{
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  margin-top:18px;
}
.edge-owner-pills span,
.edge-owner-steps span{
  display:inline-flex;
  align-items:center;
  min-height:34px;
  border:1px solid var(--line,#d9e3f2);
  border-radius:999px;
  padding:7px 12px;
  background:rgba(248,251,255,.78);
  font-size:13px;
  font-weight:800;
  color:var(--text,#0f172a);
}
.edge-owner-score{
  min-width:190px;
  border:1px solid var(--line,#d9e3f2);
  border-radius:14px;
  background:rgba(248,251,255,.86);
  padding:22px;
}
.edge-owner-score span{
  display:inline-flex;
  margin-bottom:10px;
  padding:7px 10px;
  border-radius:999px;
  background:#dcfdf4;
  color:#008a70;
  font-size:12px;
  font-weight:900;
}
.edge-owner-score strong{
  display:block;
  font-size:40px;
  line-height:1.1;
}
.edge-owner-score small{
  display:block;
  margin-top:8px;
  color:var(--muted,#64748b);
  font-weight:700;
}
.edge-owner-toolbar{
  display:grid;
  grid-template-columns:140px minmax(260px,1fr) auto auto auto;
  gap:10px;
  align-items:end;
  margin-bottom:12px;
}
.edge-owner-toolbar label,
.edge-owner-form label{
  display:grid;
  gap:7px;
  color:var(--muted,#64748b);
  font-size:12px;
  font-weight:900;
}
.edge-owner-toolbar input,
.edge-owner-form input{
  height:42px;
  width:100%;
  border:1px solid var(--line,#d9e3f2);
  border-radius:10px;
  background:var(--input,#fff);
  color:var(--text,#0f172a);
  padding:0 12px;
  font-size:14px;
}
.edge-owner-status{
  margin:10px 0 18px;
  border:1px solid #b9ecd9;
  border-radius:12px;
  background:#effdf8;
  color:#047860;
  padding:12px 14px;
  font-size:13px;
  font-weight:800;
  line-height:1.5;
}
.edge-owner-status.bad{
  border-color:#f7c67a;
  background:#fff7e8;
  color:#b75f00;
}
.edge-owner-kpis,
.edge-owner-grid.four{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:18px;
  margin-bottom:20px;
}
.edge-owner-grid.two{
  display:grid;
  grid-template-columns:minmax(0,1.05fr) minmax(360px,.95fr);
  gap:20px;
  margin-bottom:20px;
}
.edge-owner-kpis article,
.edge-owner-grid.four article,
.edge-owner-panel{
  border:1px solid var(--line,#d9e3f2);
  border-radius:16px;
  background:var(--panel,#fff);
  box-shadow:0 12px 28px rgba(15,23,42,.04);
}
.edge-owner-kpis article,
.edge-owner-grid.four article{
  min-height:132px;
  padding:22px;
}
.edge-owner-kpis span,
.edge-owner-grid.four span{
  color:var(--muted,#64748b);
  font-size:13px;
  font-weight:800;
}
.edge-owner-kpis strong,
.edge-owner-grid.four strong{
  display:block;
  margin:16px 0 8px;
  font-size:34px;
}
.edge-owner-kpis small,
.edge-owner-grid.four small{
  color:var(--muted,#64748b);
  font-weight:700;
}
.edge-owner-panel{
  margin-bottom:20px;
  padding:22px;
}
.edge-owner-panel .panel-head{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:16px;
  margin-bottom:18px;
}
.edge-owner-panel h3{
  margin:0 0 6px;
  font-size:18px;
}
.edge-owner-panel p{
  margin:0;
  color:var(--muted,#64748b);
}
.edge-owner-form{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:12px;
}
.edge-owner-form .span-2{
  grid-column:span 2;
}
/* APS_EDGE_CREATE_CONTEXT_SPLIT_20260706: auto scope fields are separated from operator-entered serial/model fields. */
.edge-context-box{
  border:1px solid #b9d7ff;
  border-radius:16px;
  background:linear-gradient(180deg,rgba(238,247,255,.92),rgba(248,251,255,.72));
  padding:18px;
}
.edge-context-head{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:16px;
  margin-bottom:14px;
}
.edge-context-head b,
.edge-manual-title b{
  display:block;
  color:var(--text,#0f172a);
  font-size:15px;
  font-weight:900;
}
.edge-context-head small,
.edge-manual-title span,
.edge-context-help{
  display:block;
  color:var(--muted,#64748b);
  font-size:12px;
  font-weight:700;
  line-height:1.5;
}
.edge-force-check{
  display:inline-flex !important;
  align-items:center;
  justify-content:center;
  gap:8px !important;
  min-height:34px;
  padding:7px 12px;
  border:1px solid var(--line,#d9e3f2);
  border-radius:999px;
  background:var(--panel,#fff);
  color:#0b68b7 !important;
  font-size:12px !important;
  font-weight:900 !important;
  white-space:nowrap;
  cursor:pointer;
}
.edge-force-check input{
  width:16px !important;
  height:16px !important;
  min-width:16px;
  padding:0 !important;
  margin:0;
  accent-color:#0b68b7;
  cursor:pointer;
}
.edge-force-check span{
  line-height:1;
}
.edge-context-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:10px;
}
.edge-context-grid input[readonly]{
  background:#eef6ff;
  color:#164e83;
  cursor:not-allowed;
}
.edge-context-grid input.is-context-editable{
  background:#fff;
  border-color:#0b68b7;
  color:var(--text,#0f172a);
  cursor:text;
  box-shadow:0 0 0 3px rgba(11,104,183,.12);
}
.edge-context-help{
  margin:12px 0 0;
}
.edge-manual-title{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:4px 2px 0;
}
.edge-owner-form label em{
  display:inline-flex;
  margin-left:6px;
  color:#0b68b7;
  font-style:normal;
  font-size:11px;
}
.edge-serial-field input{
  height:48px;
  font-size:15px;
  font-weight:800;
  letter-spacing:0;
}
.edge-owner-runbook{
  display:grid;
  gap:12px;
}
.edge-owner-runbook div{
  display:grid;
  grid-template-columns:140px minmax(0,1fr);
  gap:12px;
  align-items:start;
  padding:12px;
  border:1px solid var(--line,#d9e3f2);
  border-radius:12px;
  background:rgba(248,251,255,.68);
}
.edge-owner-runbook b{
  color:#0069c4;
}
.edge-owner-runbook span{
  color:var(--muted,#64748b);
}
.edge-owner-table-wrap{
  width:100%;
  overflow:auto;
  border:1px solid var(--line,#e2e8f0);
  border-radius:12px;
}
.edge-owner-table{
  width:100%;
  min-width:980px;
  border-collapse:collapse;
}
.edge-owner-table th,
.edge-owner-table td{
  padding:14px 16px;
  border-bottom:1px solid var(--line,#e2e8f0);
  text-align:left;
  vertical-align:top;
}
.edge-owner-table th{
  background:rgba(148,163,184,.08);
  color:var(--muted,#64748b);
  font-size:12px;
  text-transform:uppercase;
}
.edge-owner-table small,
.edge-owner-link + small{
  display:block;
  margin-top:5px;
  color:var(--muted,#64748b);
}
.edge-owner-link{
  color:#0969c3;
  font-weight:900;
  text-decoration:none;
}
.edge-owner-link:hover,
.edge-owner-linkbutton:hover{
  text-decoration:underline;
}
.edge-owner-linkbutton{
  appearance:none;
  border:0;
  background:transparent;
  padding:0;
  color:#0969c3;
  font:inherit;
  font-weight:900;
  cursor:pointer;
  text-align:left;
}
.edge-owner-inline-action{
  margin-left:8px;
  border:0;
  background:transparent;
  color:#0969c3;
  font-weight:900;
  cursor:pointer;
}
.edge-owner-chip{
  display:inline-flex;
  align-items:center;
  min-height:28px;
  border-radius:999px;
  padding:5px 10px;
  background:#eef2f7;
  color:#334155;
  font-size:12px;
  font-weight:900;
}
.edge-owner-chip.ready_to_claim,
.edge-owner-chip.claimed,
.edge-owner-chip.active{
  background:#dffcf4;
  color:#008a70;
}
.edge-owner-chip.shipped,
.edge-owner-chip.first_contact_seen{
  background:#eef6ff;
  color:#0969c3;
}
.edge-owner-chip.revoked{
  background:#ffe7e7;
  color:#c62828;
}
.edge-owner-note{
  display:grid;
  gap:6px;
  margin:18px 0 0;
  border:1px solid #f7c67a;
  border-radius:12px;
  background:#fff7e8;
  color:#9a5200;
  padding:12px 14px;
  font-size:12px;
  line-height:1.5;
}
.edge-owner-empty{
  border:1px dashed var(--line,#d9e3f2);
  border-radius:14px;
  padding:24px;
  color:var(--muted,#64748b);
}
.edge-owner-detail-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:12px;
}
.edge-owner-detail-grid div{
  border:1px solid var(--line,#d9e3f2);
  border-radius:12px;
  background:rgba(248,251,255,.68);
  padding:14px;
}
.edge-owner-detail-grid span{
  display:block;
  margin-bottom:8px;
  color:var(--muted,#64748b);
  font-size:12px;
  font-weight:900;
}
.edge-owner-detail-grid b{
  overflow-wrap:anywhere;
}
.edge-owner-secret{
  margin-top:16px;
  border:1px solid #8be8d3;
  border-radius:12px;
  background:#effdf8;
  padding:14px;
}
.edge-owner-secret code{
  display:block;
  margin:10px 0;
  padding:12px;
  border-radius:10px;
  background:#0b1424;
  color:#e8f1ff;
  overflow:auto;
}
.edge-owner-json{
  margin-top:16px;
}
.edge-owner-json pre{
  max-height:340px;
  overflow:auto;
  border:1px solid var(--line,#d9e3f2);
  border-radius:12px;
  background:rgba(15,23,42,.04);
  padding:14px;
  font-size:12px;
}
.theme-dark .edge-owner-hero,
.theme-dark .edge-owner-score,
.theme-dark .edge-owner-kpis article,
.theme-dark .edge-owner-grid.four article,
.theme-dark .edge-owner-panel,
.theme-dark .edge-context-box,
.theme-dark .edge-owner-runbook div,
.theme-dark .edge-owner-detail-grid div{
  background:#101827;
  border-color:#263b5e;
  color:#e8f1ff;
}
.theme-dark .edge-context-head b,
.theme-dark .edge-manual-title b{
  color:#e8f1ff;
}
.theme-dark .edge-force-check{
  background:#0b1424;
  border-color:#263b5e;
  color:#9bd2ff !important;
}
.theme-dark .edge-owner-pills span,
.theme-dark .edge-owner-steps span,
.theme-dark .edge-owner-toolbar input,
.theme-dark .edge-owner-form input{
  background:#0b1424;
  border-color:#263b5e;
  color:#e8f1ff;
}
.theme-dark .edge-context-grid input[readonly]{
  background:#15243a;
  color:#9bd2ff;
}
.theme-dark .edge-context-grid input.is-context-editable{
  background:#07111f;
  border-color:#39c6ff;
  color:#e8f1ff;
}
.theme-dark .edge-owner-table-wrap,
.theme-dark .edge-owner-table th,
.theme-dark .edge-owner-json pre{
  background:#0b1424;
  border-color:#263b5e;
  color:#e8f1ff;
}
.theme-dark .edge-owner-table td,
.theme-dark .edge-owner-table th{
  border-color:#263b5e;
}
.edge-owner-layer[hidden]{
  display:none;
}
.edge-owner-layer{
  position:fixed;
  inset:0;
  z-index:9999;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:24px;
}
.edge-owner-layer-backdrop{
  position:absolute;
  inset:0;
  background:rgba(15,23,42,.58);
  backdrop-filter:blur(4px);
}
.edge-owner-layer-panel{
  position:relative;
  z-index:1;
  width:min(1280px,96vw);
  height:min(860px,92vh);
  display:grid;
  grid-template-rows:auto minmax(0,1fr);
  overflow:hidden;
  border:1px solid var(--line,#d9e3f2);
  border-radius:18px;
  background:var(--panel,#fff);
  box-shadow:0 30px 80px rgba(15,23,42,.34);
}
.edge-owner-layer-panel header{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  padding:14px 18px;
  border-bottom:1px solid var(--line,#d9e3f2);
}
.edge-owner-layer-panel header b{
  display:block;
  font-size:16px;
}
.edge-owner-layer-panel header small{
  color:var(--muted,#64748b);
}
.edge-owner-layer-panel iframe{
  width:100%;
  height:100%;
  border:0;
  background:var(--bg,#f3f6fb);
}
body.edge-owner-layer-open{
  overflow:hidden;
}
.theme-dark .edge-owner-layer-panel{
  background:#101827;
  border-color:#263b5e;
  color:#e8f1ff;
}
.theme-dark .edge-owner-layer-panel header{
  border-color:#263b5e;
}
.edge-layer-body{
  background:var(--bg,#f3f6fb);
}
.edge-layer-body .edge-layer-app,
.edge-layer-body .edge-layer-main{
  display:block;
  min-height:100vh;
}
.edge-layer-body .aps-edge-owner{
  max-width:none;
  padding:18px;
}
.edge-layer-body .page-head{
  display:none;
}
.edge-layer-body .edge-owner-hero{
  margin-top:0;
  padding:20px;
}
.edge-layer-body .edge-owner-panel,
.edge-layer-body .edge-owner-grid{
  margin-top:14px;
}
.theme-dark.edge-layer-body{
  background:#080f1d;
}
@media(max-width:1180px){
  .edge-owner-toolbar,
  .edge-owner-grid.two,
  .edge-owner-detail-grid{
    grid-template-columns:1fr;
  }
  .edge-owner-kpis,
  .edge-owner-grid.four{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
  .edge-context-grid{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
  .edge-owner-hero{
    display:block;
  }
  .edge-owner-score{
    margin-top:18px;
  }
}
@media(max-width:720px){
  .edge-context-grid,
  .edge-owner-form{
    grid-template-columns:1fr;
  }
  .edge-owner-form .span-2{
    grid-column:span 1;
  }
  .edge-context-head,
  .edge-manual-title{
    display:grid;
  }
}
@media(max-width:720px){
  .edge-owner-kpis,
  .edge-owner-grid.four,
  .edge-owner-form{
    grid-template-columns:1fr;
  }
  .edge-owner-form .span-2{
    grid-column:auto;
  }
  .edge-owner-panel .panel-head{
    display:grid;
  }
}

/* APS_OTA_RELEASE_UI_20260706: real ota_e release/rollout/rollback pages. */
.aps-clean-actions{
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  margin:0 0 14px;
}
.aps-ota-form{
  display:grid;
  gap:14px;
}
.aps-ota-form p{
  margin:0;
  color:var(--muted,#64748b);
}
.aps-ota-form-grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:12px;
}
.aps-ota-form label{
  display:grid;
  gap:7px;
  color:var(--muted,#64748b);
  font-size:13px;
  font-weight:700;
}
.aps-ota-form input,
.aps-ota-form select,
.aps-ota-form textarea{
  width:100%;
  min-height:42px;
  border:1px solid var(--line,#d9e3f2);
  border-radius:10px;
  padding:10px 12px;
  background:var(--panel,#fff);
  color:var(--text,#0f172a);
  font:inherit;
  font-weight:600;
}
.aps-ota-form textarea{
  resize:vertical;
  line-height:1.45;
}
.aps-json-inline{
  max-width:100%;
  margin:0;
  white-space:pre-wrap;
  word-break:break-word;
  color:inherit;
  background:transparent;
  font-size:12px;
}
.theme-dark .aps-ota-form input,
.theme-dark .aps-ota-form select,
.theme-dark .aps-ota-form textarea{
  background:#0b1220;
  border-color:#263b5e;
  color:#e8f1ff;
}
.theme-dark .aps-clean-actions .btn-soft{
  color:#dbeafe;
}
@media(max-width:860px){
  .aps-ota-form-grid{
    grid-template-columns:1fr;
  }
}
/* APS_REAL_DB_VIEW_20260706: fullscreen real DB metadata monitor, using bff/lib/Database.php only. */
.aps-real-db-top{
  background:#053f85;
  border-color:#053f85;
}
.aps-real-db-top:hover{
  background:#0759b7;
  border-color:#0759b7;
}
.dbmon-fullscreen-body{
  margin:0;
  overflow:hidden;
  background:#070f1f;
}
.dbmon-total{
  --rize-dbmon-bg:#081020;
  --rize-dbmon-bg2:#0A1730;
  --rize-dbmon-panel:rgba(16,32,64,.58);
  --rize-dbmon-panel-2:rgba(18,35,65,.72);
  --rize-dbmon-line:rgba(80,130,220,.24);
  --rize-dbmon-line-hi:rgba(56,224,255,.48);
  --rize-dbmon-blue:#2F6FED;
  --rize-dbmon-cyan:#38E0FF;
  --rize-dbmon-green:#2EE6A8;
  --rize-dbmon-amber:#F5B62E;
  --rize-dbmon-red:#FF5D73;
  --rize-dbmon-text:#E7EEF8;
  --rize-dbmon-muted:#8CA3C7;
  --rize-dbmon-dim:#5A7195;
  --rize-dbmon-mono:"SF Mono","Cascadia Code","JetBrains Mono",ui-monospace,Consolas,monospace;
  --rize-dbmon-sans:"Malgun Gothic",Pretendard,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  min-height:100vh;
  height:100vh;
  padding:14px 16px;
  display:flex;
  flex-direction:column;
  gap:12px;
  overflow:hidden;
  font-family:var(--rize-dbmon-sans);
  color:var(--rize-dbmon-text);
  background:radial-gradient(1200px 600px at 85% -10%,var(--rize-dbmon-bg2),transparent 60%),radial-gradient(900px 500px at -10% 110%,var(--rize-dbmon-bg2),transparent 55%),var(--rize-dbmon-bg);
}
.dbmon-total[data-theme="white"]{
  --rize-dbmon-bg:#F4F7FC;
  --rize-dbmon-bg2:#EAF0F9;
  --rize-dbmon-panel:#fff;
  --rize-dbmon-panel-2:#fff;
  --rize-dbmon-line:#DCE5F2;
  --rize-dbmon-line-hi:#9CC3E8;
  --rize-dbmon-cyan:#0E86D4;
  --rize-dbmon-green:#0FB981;
  --rize-dbmon-amber:#E8930C;
  --rize-dbmon-red:#E4405F;
  --rize-dbmon-text:#0E2247;
  --rize-dbmon-muted:#4C6285;
  --rize-dbmon-dim:#8CA0BE;
  background:radial-gradient(1200px 600px at 85% -10%,var(--rize-dbmon-bg2),transparent 60%),var(--rize-dbmon-bg);
}
.dbmon-total *{
  box-sizing:border-box;
}
.dbmon-headline{
  flex:0 0 auto;
}
.dbmon-hero{
  display:grid;
  grid-template-columns:minmax(0,1fr) 230px;
  align-items:center;
  gap:16px;
  padding:18px 20px;
  border:1px solid var(--rize-dbmon-line);
  border-radius:12px;
  background:linear-gradient(180deg,rgba(20,40,76,.70),rgba(12,24,48,.62));
  min-height:132px;
}
.dbmon-total[data-theme="white"] .dbmon-hero{
  background:#fff;
}
.dbmon-brand{
  display:flex;
  align-items:center;
  gap:10px;
  margin-bottom:10px;
}
.dbmon-brand strong{
  font-family:var(--rize-dbmon-mono);
  font-size:22px;
  letter-spacing:2px;
  line-height:1;
}
.dbmon-brand strong span{
  color:var(--rize-dbmon-cyan);
}
.dbmon-brand em{
  font-family:var(--rize-dbmon-mono);
  font-size:10px;
  letter-spacing:4px;
  color:var(--rize-dbmon-muted);
  font-style:normal;
}
.dbmon-hero h1{
  margin:0;
  font-size:28px;
  font-weight:900;
  letter-spacing:0;
}
.dbmon-hero p{
  margin:8px 0 0;
  color:var(--rize-dbmon-muted);
  font-size:13px;
}
.dbmon-pills{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  margin-top:14px;
}
.dbmon-pills span{
  display:inline-flex;
  align-items:center;
  min-height:28px;
  padding:0 12px;
  border-radius:999px;
  border:1px solid var(--rize-dbmon-line);
  background:rgba(56,224,255,.08);
  font-size:12px;
  font-weight:800;
}
.dbmon-hero aside{
  min-height:104px;
  border:1px solid var(--rize-dbmon-line);
  border-radius:12px;
  background:rgba(255,255,255,.04);
  padding:18px;
  display:flex;
  flex-direction:column;
  justify-content:center;
}
.dbmon-total[data-theme="white"] .dbmon-hero aside{
  background:#F8FBFF;
}
.dbmon-hero aside span{
  align-self:flex-start;
  padding:7px 11px;
  border-radius:999px;
  background:rgba(46,230,168,.12);
  color:var(--rize-dbmon-green);
  font-size:11px;
  font-weight:900;
}
.dbmon-hero aside b{
  margin-top:10px;
  font-family:var(--rize-dbmon-mono);
  font-size:36px;
  line-height:1;
}
.dbmon-hero aside small{
  margin-top:8px;
  color:var(--rize-dbmon-muted);
  font-weight:800;
}
.dbmon-alert{
  border:1px solid var(--rize-dbmon-amber);
  border-radius:12px;
  background:rgba(245,182,46,.10);
  color:var(--rize-dbmon-amber);
  padding:12px 14px;
  font-weight:800;
}
.dbmon-alert b{
  display:block;
  margin-bottom:4px;
}
.dbmon-alert small{
  display:block;
  margin-top:4px;
  color:var(--rize-dbmon-muted);
}
.rize-dbmon-kpis{
  display:grid;
  grid-template-columns:repeat(5,minmax(0,1fr));
  gap:12px;
  flex:0 0 auto;
}
.rize-dbmon-kpi{
  min-height:94px;
  position:relative;
  overflow:hidden;
  border:1px solid var(--rize-dbmon-line);
  border-radius:12px;
  background:var(--rize-dbmon-panel);
  padding:14px 16px;
}
.rize-dbmon-kpi:before{
  content:"";
  position:absolute;
  inset:0 auto 0 0;
  width:3px;
  background:var(--rize-dbmon-blue);
}
.rize-dbmon-kpi.c-cyan:before{background:var(--rize-dbmon-cyan)}
.rize-dbmon-kpi.c-green:before{background:var(--rize-dbmon-green)}
.rize-dbmon-kpi.c-amber:before{background:var(--rize-dbmon-amber)}
.rize-dbmon-kpi-label{
  color:var(--rize-dbmon-muted);
  font-size:11px;
  font-weight:900;
  letter-spacing:.4px;
  margin-bottom:8px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.rize-dbmon-kpi-val{
  font-family:var(--rize-dbmon-mono);
  font-size:25px;
  font-weight:900;
  line-height:1.1;
  white-space:nowrap;
}
.rize-dbmon-kpi-unit{
  margin-left:5px;
  font-size:12px;
  color:var(--rize-dbmon-muted);
  font-weight:700;
}
.rize-dbmon-kpi-delta{
  margin-top:8px;
  color:var(--rize-dbmon-green);
  font-family:var(--rize-dbmon-mono);
  font-size:11px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.rize-dbmon-main{
  flex:1 1 auto;
  min-height:0;
  display:grid;
  grid-template-columns:minmax(0,1fr) 340px;
  gap:12px;
}
.rize-dbmon-left{
  min-width:0;
  min-height:0;
  display:flex;
  flex-direction:column;
  gap:12px;
}
.rize-dbmon-panel{
  min-width:0;
  min-height:0;
  border:1px solid var(--rize-dbmon-line);
  border-radius:12px;
  background:var(--rize-dbmon-panel);
  overflow:hidden;
}
.rize-dbmon-panel-head{
  min-height:46px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:12px 14px;
  border-bottom:1px solid var(--rize-dbmon-line);
}
.rize-dbmon-panel-title{
  color:var(--rize-dbmon-text);
  font-size:12px;
  font-weight:900;
  letter-spacing:1px;
}
.rize-dbmon-panel-sub{
  color:var(--rize-dbmon-muted);
  font-family:var(--rize-dbmon-mono);
  font-size:11px;
}
.rize-dbmon-chart-wrap{
  padding:10px 14px 14px;
}
.rize-dbmon-chart{
  display:block;
  width:100%;
  height:150px;
}
.rize-dbmon-tables{
  max-height:calc(100vh - 445px);
  overflow:auto;
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(245px,1fr));
  gap:10px;
  padding:14px;
}
.rize-dbmon-tables::-webkit-scrollbar,
.rize-dbmon-feed::-webkit-scrollbar{
  width:6px;
}
.rize-dbmon-tables::-webkit-scrollbar-thumb,
.rize-dbmon-feed::-webkit-scrollbar-thumb{
  background:var(--rize-dbmon-line);
  border-radius:999px;
}
.rize-dbmon-tcard{
  min-width:0;
  border:1px solid var(--rize-dbmon-line);
  border-radius:10px;
  background:var(--rize-dbmon-panel-2);
  padding:12px;
}
.rize-dbmon-tcard-top,
.rize-dbmon-tcard-mid{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:8px;
}
.rize-dbmon-tcard-mid{
  align-items:flex-end;
  margin-top:10px;
}
.rize-dbmon-tname{
  color:var(--rize-dbmon-cyan);
  font-family:var(--rize-dbmon-mono);
  font-weight:900;
  font-size:12px;
  line-height:1.35;
  word-break:break-word;
}
.rize-dbmon-tdesc{
  margin-top:3px;
  color:var(--rize-dbmon-muted);
  font-size:10px;
}
.rize-dbmon-trate{
  color:var(--rize-dbmon-green);
  font-family:var(--rize-dbmon-mono);
  font-weight:900;
  font-size:12px;
  white-space:nowrap;
}
.rize-dbmon-trate.idle{
  color:var(--rize-dbmon-muted);
}
.rize-dbmon-trows{
  font-family:var(--rize-dbmon-mono);
  font-size:18px;
  font-weight:900;
}
.rize-dbmon-trows-label{
  color:var(--rize-dbmon-muted);
  font-size:10px;
}
.rize-dbmon-spark{
  width:96px;
  height:30px;
  flex:0 0 auto;
}
.rize-dbmon-spark polyline{
  fill:none;
  stroke:var(--rize-dbmon-cyan);
  stroke-width:1.5;
}
.rize-dbmon-spark polygon{
  fill:rgba(56,224,255,.10);
}
.dbmon-sizebar{
  height:4px;
  margin-top:10px;
  border-radius:999px;
  background:rgba(140,163,199,.15);
  overflow:hidden;
}
.dbmon-sizebar span{
  display:block;
  height:100%;
  border-radius:999px;
  background:var(--rize-dbmon-blue);
}
.rize-dbmon-tlast{
  margin-top:8px;
  padding-top:8px;
  border-top:1px solid var(--rize-dbmon-line);
  color:var(--rize-dbmon-muted);
  font-family:var(--rize-dbmon-mono);
  font-size:10px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.rize-dbmon-feed-panel{
  display:flex;
  flex-direction:column;
}
.rize-dbmon-feed{
  flex:1;
  min-height:0;
  overflow:auto;
  padding:8px 0;
}
.rize-dbmon-feed-item{
  display:grid;
  grid-template-columns:62px minmax(0,1fr);
  gap:8px;
  padding:8px 14px;
  border-bottom:1px solid rgba(80,130,220,.18);
  font-family:var(--rize-dbmon-mono);
  font-size:11px;
}
.rize-dbmon-feed-time{
  color:var(--rize-dbmon-muted);
}
.rize-dbmon-feed-body{
  min-width:0;
}
.rize-dbmon-feed-table{
  color:var(--rize-dbmon-cyan);
  font-weight:900;
}
.rize-dbmon-feed-detail{
  margin-top:2px;
  color:var(--rize-dbmon-muted);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.rize-dbmon-feed-item.warn .rize-dbmon-feed-table{
  color:var(--rize-dbmon-amber);
}
.dbmon-empty{
  min-height:120px;
  border:1px dashed var(--rize-dbmon-line);
  border-radius:10px;
  display:flex;
  flex-direction:column;
  justify-content:center;
  gap:6px;
  padding:16px;
  color:var(--rize-dbmon-muted);
}
.dbmon-empty b{
  color:var(--rize-dbmon-text);
}
.rize-dbmon-foot{
  flex:0 0 auto;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  color:var(--rize-dbmon-muted);
  font-family:var(--rize-dbmon-mono);
  font-size:10px;
}
@media (max-width:1200px){
  .rize-dbmon-main{grid-template-columns:1fr}
  .rize-dbmon-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rize-dbmon-tables{max-height:none}
  .rize-dbmon-feed-panel{min-height:320px}
}
@media (max-width:760px){
  .dbmon-fullscreen-body{overflow:auto}
  .dbmon-total{height:auto;min-height:100vh;overflow:visible}
  .dbmon-headline{flex-wrap:wrap}
  .dbmon-hero{grid-template-columns:1fr}
  .rize-dbmon-kpis{grid-template-columns:1fr}
  .rize-dbmon-tables{grid-template-columns:1fr}
  .rize-dbmon-foot{flex-direction:column;align-items:flex-start}
}
