/* ===== 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}.form-grid>.field.full{grid-column:1/-1}.form-grid>.field.approval-right{grid-column:2}@media(max-width:767px){.form-grid,.form-grid.three{grid-template-columns:1fr}.form-grid>.field.approval-right{grid-column:auto}}.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)}
.rac-table-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.rac-table-actions form{margin:0}

/* 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}
}

/* RAC strict overlay merged into the single local CSS file. */
/* RAC exact package overlay. The base visual system is copied from APS aps.css. */
:root{--primary:#005BAC;--primary-2:#043A70;--primary-soft:rgba(0,91,172,.10);--primary-line:rgba(0,91,172,.22)}
.maze-sidebar-logo,.maze-mark{background:#005BAC;color:#fff}
.login-visual{background:linear-gradient(135deg,#043A70 0%,#005BAC 58%,#0A7BCE 100%)}
.login-visual::after{display:none}
body[data-service="RAC"] .store-sel .ic{background:var(--primary-soft);color:var(--primary)}
.rac-func{margin-top:20px}
.rac-form-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;align-items:end}
.rac-form-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.rac-form-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:991px){.rac-form-grid,.rac-form-grid.two,.rac-form-grid.three{grid-template-columns:1fr 1fr}}
@media(max-width:575px){.rac-form-grid,.rac-form-grid.two,.rac-form-grid.three{grid-template-columns:1fr}}
.rac-alert{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:8px;background:var(--primary-soft);border:1px solid var(--primary-line);color:var(--primary);font-weight:700;font-size:12.5px;margin-bottom:12px}
.rac-alert.err{background:rgba(220,38,38,.10);border-color:rgba(220,38,38,.24);color:#b91c1c}
.rac-secret{padding:14px;border-radius:8px;border:1px dashed var(--primary-line);background:var(--primary-soft);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;word-break:break-all}
.rac-actions{display:flex;gap:6px;flex-wrap:wrap}
.rac-muted{color:var(--text-2);font-size:12px;line-height:1.6}
.auth-page .login-card .content{padding:0}
.s-nav a.active{background:var(--primary-soft);color:var(--primary);border-color:var(--primary-line)}
.s-nav .grp.open>.s-sub{display:block}
.s-nav .grp.open>.grp-btn .chev{transform:rotate(90deg)}
.rac-sitemap-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.rac-sitemap-list a{display:flex;gap:8px;align-items:center;padding:10px;border:1px solid var(--border);border-radius:8px;text-decoration:none;color:inherit;background:var(--surface)}
@media(max-width:991px){.rac-sitemap-list{grid-template-columns:1fr 1fr}}
@media(max-width:575px){.rac-sitemap-list{grid-template-columns:1fr}}
/* build 20260704op1 */

/* =========================================================
   RAC full-site APS style repair 20260704
   - Generated pages use card2, matching the design system.
   - Login refinements are scoped to body.auth-page only.
   ========================================================= */
.card2 .hd .tile,
.card2 .hd .ico{
  width:36px;
  height:36px;
  border-radius:10px;
  display:grid;
  place-items:center;
  flex:0 0 36px;
  background:var(--primary-soft);
  color:var(--primary);
  font-size:17px;
}
.card2 .hd .tile i,
.card2 .hd .ico i{line-height:1}
.card2 .hd .chip.ml-auto{margin-left:auto}
.card2 .empty{
  padding:18px 2px;
}
.card2 .empty>i{
  width:46px;
  height:46px;
  display:grid;
  place-items:center;
  border-radius:12px;
  background:var(--primary-soft);
  color:var(--primary);
  font-size:20px;
  margin-bottom:16px;
}
.card2 .empty h3{
  margin:0 0 10px;
  font-size:22px;
  font-weight:800;
  letter-spacing:0;
}
.card2 .empty p{
  margin:0 0 18px;
  color:var(--text-2);
  line-height:1.7;
  max-width:900px;
}
.card2 .contract{
  display:grid;
  gap:8px;
  padding:14px;
  border:1px solid var(--border);
  border-radius:12px;
  background:var(--surface-2);
}
.card2 .contract div{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
}
.card2 .contract b{
  color:var(--text);
  font-size:12px;
}
.card2 .contract code{
  color:#db2777;
  background:transparent;
  font-size:12px;
  padding:0;
}
.foot{
  margin:14px 0 24px;
  color:var(--text-muted);
  font-size:11.5px;
  line-height:1.5;
}
.split + .split{margin-top:var(--gap)}
.tl .ico{
  width:34px;
  height:34px;
  border-radius:11px;
  display:grid;
  place-items:center;
  flex:0 0 34px;
  background:var(--primary-soft);
  color:var(--primary);
}
body.auth-page{
  min-height:100vh;
  background:#f4f8fc;
}
body.auth-page .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%);
}
body.auth-page .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%);
}
body.auth-page .login-visual::after{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  display:block;
  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));
}
body.auth-page .brand-big,
body.auth-page .login-copy,
body.auth-page .metrics{
  position:relative;
  z-index:1;
}
body.auth-page .brand-big{
  display:inline-flex;
  align-items:center;
  gap:14px;
  width:max-content;
  color:#fff;
  text-decoration:none;
}
body.auth-page .brand-big .brand-copy{
  display:flex;
  flex-direction:column;
  line-height:1.08;
}
body.auth-page .brand-big strong{
  font-size:22px;
  font-weight:900;
  letter-spacing:0;
}
body.auth-page .brand-big small{
  margin-top:7px;
  font-size:12px;
  font-weight:800;
  color:rgba(255,255,255,.70);
  letter-spacing:.04em;
}
body.auth-page .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);
}
body.auth-page .maze-mark.small{
  width:42px;
  height:42px;
  border-radius:10px;
  font-size:24px;
  box-shadow:none;
}
body.auth-page .login-copy{max-width:720px}
body.auth-page .login-eyebrow{
  margin-bottom:16px;
  color:#7FF1D0;
  font-size:13px;
  font-weight:900;
  letter-spacing:.08em;
}
body.auth-page .login-visual h1{
  margin:0;
  color:#fff;
  font-size:clamp(38px,5vw,64px);
  line-height:1.08;
  font-weight:900;
  letter-spacing:0;
}
body.auth-page .login-visual p{
  max-width:660px;
  margin:22px 0 0;
  color:rgba(255,255,255,.78);
  font-size:16px;
  line-height:1.75;
}
body.auth-page .metrics{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:12px;
  max-width:760px;
}
body.auth-page .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);
}
body.auth-page .metrics b{
  display:block;
  color:#fff;
  font-size:19px;
  font-weight:900;
}
body.auth-page .metrics span{
  display:block;
  margin-top:8px;
  color:rgba(255,255,255,.72);
  font-size:12px;
  font-weight:800;
}
body.auth-page .login-panel{
  min-height:100vh;
  display:grid;
  align-items:center;
  padding:48px;
  background:#f4f8fc;
}
body.auth-page .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);
}
body.auth-page .login-card-head{
  display:flex;
  align-items:center;
  gap:14px;
  margin-bottom:26px;
}
body.auth-page .login-card h2{
  margin:0;
  color:#111827;
  font-size:28px;
  font-weight:900;
  letter-spacing:0;
}
body.auth-page .login-card .hint{
  margin-top:6px;
  color:#6b7c93;
  font-size:13px;
  line-height:1.5;
}
body.auth-page .login-form .field{
  margin-top:16px;
  margin-bottom:0;
}
body.auth-page .login-form .field label{
  display:block;
  margin:0 0 8px;
  color:#344256;
  font-size:13px;
  font-weight:800;
}
body.auth-page .login-form .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;
}
body.auth-page .login-form .inp:focus{
  border-color:#005BAC;
  box-shadow:0 0 0 4px rgba(0,91,172,.12);
}
body.auth-page .login-form .toggle-row{
  display:flex;
  align-items:center;
  gap:16px;
  margin:18px 0;
  padding:16px;
  border:1px solid #d6e2ee;
  border-radius:14px;
  background:#f7fbff;
}
body.auth-page .auth-submit{
  height:44px;
  min-height:44px;
  border-radius:12px;
  font-weight:700;
  box-shadow:none;
}
body.auth-page .auth-links{
  display:flex;
  justify-content:space-between;
  gap:14px;
  margin-top:16px;
  font-size:13px;
  font-weight:800;
}
body.auth-page .auth-links a,
body.auth-page .auth-links .link-btn{
  color:#005BAC;
  text-decoration:none;
}
body.auth-page .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;
}
@media (max-width:991.98px){
  body.auth-page .login-wrap{
    grid-template-columns:1fr;
    background:#f4f8fc;
  }
  body.auth-page .login-visual{
    min-height:auto;
    padding:34px 24px;
  }
  body.auth-page .login-visual h1{font-size:34px}
  body.auth-page .metrics{grid-template-columns:1fr}
  body.auth-page .login-panel{
    min-height:auto;
    padding:24px;
  }
  body.auth-page .login-card{padding:26px}
}

/* ---------- RAC operational dark-theme hardening ---------- */
.theme-dark .card2,
.theme-dark .mini-kpi,
.theme-dark .store,
.theme-dark .eng,
.theme-dark .action,
.theme-dark .dev,
.theme-dark .modal,
.theme-dark .auth-pop,
.theme-dark .rac-sitemap-list a,
.theme-dark .gw-detail-hero,
.theme-dark .aps-entity-card,
.theme-dark .aps-doc-grid button{
  background:var(--surface)!important;
  color:var(--text)!important;
  border-color:var(--border)!important;
}
.theme-dark .card2 .hd,
.theme-dark .tbl thead th,
.theme-dark .tbl tbody td{
  border-color:var(--border-soft)!important;
}
.theme-dark .tbl tbody tr:hover,
.theme-dark .row-link:hover td,
.theme-dark .sm-list a:hover{
  background:var(--surface-2)!important;
}
.theme-dark .inp,
.theme-dark .search input,
.theme-dark textarea,
.theme-dark select,
.theme-dark .store-sel,
.theme-dark .profile,
.theme-dark .icon-btn,
.theme-dark .toggle-row,
.theme-dark .tl .tx,
.theme-dark .ai-comment,
.theme-dark .aps-meta-grid div,
.theme-dark .panel-note,
.theme-dark .empty-state,
.theme-dark .rac-secret{
  background:var(--surface-2)!important;
  color:var(--text)!important;
  border-color:var(--border)!important;
}
.theme-dark .sub,
.theme-dark .hint,
.theme-dark .help,
.theme-dark .desc,
.theme-dark .muted,
.theme-dark .menu-subtitle,
.theme-dark .foot,
.theme-dark .foot-note{
  color:var(--text-muted)!important;
}
.theme-dark .aps-map,
.theme-dark .live-box,
.theme-dark .prep-meter,
.theme-dark .funnel-row .bar,
.theme-dark .progress,
.theme-dark .bar,
.theme-dark .hbar .hb-track{
  background:var(--surface-3)!important;
  border-color:var(--border)!important;
}
.theme-dark .aps-map .node{
  background:var(--surface)!important;
  color:var(--text)!important;
  border-color:color-mix(in srgb,var(--primary) 36%,var(--border))!important;
}
.theme-dark .maze-sidebar-logo,
.theme-dark .maze-mark,
.theme-dark .profile .av,
.theme-dark .s-logo{
  background:linear-gradient(135deg,var(--primary),var(--primary-2))!important;
  color:#fff!important;
}
body.auth-page.theme-dark .login-panel,
body.auth-page.theme-dark .login-wrap{
  background:var(--bg)!important;
}
body.auth-page.theme-dark .login-card{
  background:var(--surface)!important;
  border-color:var(--border)!important;
  box-shadow:var(--shadow-lg)!important;
}
body.auth-page.theme-dark .login-card h2,
body.auth-page.theme-dark .login-form .field label{
  color:var(--text)!important;
}
body.auth-page.theme-dark .login-card .hint{
  color:var(--text-muted)!important;
}
body.auth-page.theme-dark .login-form .inp,
body.auth-page.theme-dark .login-form .toggle-row{
  background:var(--surface-2)!important;
  color:var(--text)!important;
  border-color:var(--border)!important;
}

/* =========================================================
   RAC common compact operations layout 20260707
   Controlled by account-center/common/RacUi.php.
   ========================================================= */
body[data-service="RAC"].rac-ui-compact .content{max-width:1280px;padding-top:26px}
body[data-service="RAC"].rac-ui-compact .page-head{align-items:center;justify-content:space-between;gap:18px;padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--border)}
body[data-service="RAC"].rac-ui-compact .page-head h2{font-size:22px;line-height:1.25}
body[data-service="RAC"].rac-ui-compact .page-head .desc{max-width:920px}
body[data-service="RAC"].rac-ui-compact .page-actions{display:flex;align-items:center;gap:10px;margin-left:auto}
body[data-service="RAC"].rac-ui-compact .grid-kpi{display:none!important}
body[data-service="RAC"].rac-ui-compact .rac-card{border-radius:12px;box-shadow:none}
body[data-service="RAC"].rac-ui-compact .rac-card + .rac-card,
body[data-service="RAC"].rac-ui-compact .rac-card + .split,
body[data-service="RAC"].rac-ui-compact .split + .rac-card,
body[data-service="RAC"].rac-ui-compact .split + .split{margin-top:12px}
body[data-service="RAC"].rac-ui-compact .rac-card .hd{min-height:56px;padding:12px 16px}
body[data-service="RAC"].rac-ui-compact .rac-card .hd .tile,
body[data-service="RAC"].rac-ui-compact .rac-card .hd .ico{width:32px;height:32px;flex-basis:32px;border-radius:9px;font-size:15px}
body[data-service="RAC"].rac-ui-compact .rac-card .hd h6{font-size:14px}
body[data-service="RAC"].rac-ui-compact .rac-card .hd .sub{font-size:11.5px;line-height:1.35}
body[data-service="RAC"].rac-ui-compact .rac-card .bd{padding:14px 16px}
body[data-service="RAC"].rac-ui-compact .rac-filter-card .bd{padding:14px 16px 16px}
body[data-service="RAC"].rac-ui-compact .rac-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px 12px;align-items:end}
body[data-service="RAC"].rac-ui-compact .rac-filter-card .rac-form-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}
body[data-service="RAC"].rac-ui-compact .field{margin-bottom:0}
body[data-service="RAC"].rac-ui-compact .field label{margin-bottom:6px;font-size:11.5px}
body[data-service="RAC"].rac-ui-compact .inp,
body[data-service="RAC"].rac-ui-compact .form-control,
body[data-service="RAC"].rac-ui-compact .form-select{min-height:40px;padding:9px 11px;border-radius:10px}
body[data-service="RAC"].rac-ui-compact textarea.inp{min-height:74px}
body[data-service="RAC"].rac-ui-compact .btn{min-height:40px}
body[data-service="RAC"].rac-ui-compact .rac-alert{margin-bottom:0;padding:10px 12px;border-radius:10px}
body[data-service="RAC"].rac-ui-compact .rac-data-card .bd{min-height:0}
body[data-service="RAC"].rac-ui-compact .empty-state{padding:26px 16px}
body[data-service="RAC"].rac-ui-compact .empty-state i{font-size:28px}
body[data-service="RAC"].rac-ui-compact .empty-state h5{margin-top:10px;font-size:18px}
body[data-service="RAC"].rac-ui-compact .table-wrap .tbl th,
body[data-service="RAC"].rac-ui-compact .table-wrap .tbl td{padding:10px 14px;vertical-align:middle}
body[data-service="RAC"].rac-ui-compact .split.equal{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px!important}
body[data-service="RAC"].rac-ui-compact .rac-dashboard-panel .bd{min-height:96px}
body[data-service="RAC"].rac-ui-compact .rac-func{margin-top:0}
body[data-service="RAC"].rac-ui-compact .rac-accordion > .hd{cursor:pointer;user-select:none}
body[data-service="RAC"].rac-ui-compact .rac-accordion > .hd::after{content:"\F282";font-family:"bootstrap-icons";margin-left:8px;color:var(--text-muted);transition:transform .16s var(--ease)}
body[data-service="RAC"].rac-ui-compact .rac-accordion.is-open > .hd::after{transform:rotate(180deg)}
body[data-service="RAC"].rac-ui-compact .rac-accordion:not(.is-open) > .bd{display:none}
body[data-service="RAC"].rac-ui-compact .rac-upload-card .rac-form-grid{grid-template-columns:minmax(140px,.8fr) minmax(160px,1fr) minmax(220px,1.25fr) minmax(180px,1fr) minmax(150px,.75fr)}
body[data-service="RAC"].rac-ui-compact .foot{margin:12px 0 18px}
@media(max-width:1199.98px){
  body[data-service="RAC"].rac-ui-compact .content{padding-left:28px;padding-right:28px}
  body[data-service="RAC"].rac-ui-compact .rac-upload-card .rac-form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:767.98px){
  body[data-service="RAC"].rac-ui-compact .page-actions{width:100%;justify-content:flex-start;flex-wrap:wrap}
  body[data-service="RAC"].rac-ui-compact .split.equal,
  body[data-service="RAC"].rac-ui-compact .rac-upload-card .rac-form-grid{grid-template-columns:1fr}
}

/* ================================================================
   RAC 재구성 전용 스타일 (하단 추가분, body[data-service="RAC"] 스코프)
   ================================================================ */
body[data-service="RAC"] .field{min-width:0}
body[data-service="RAC"] .field .inp,
body[data-service="RAC"] .field select,
body[data-service="RAC"] .field textarea{max-width:100%;min-width:0;box-sizing:border-box}
body[data-service="RAC"] .field [aria-invalid="true"]{border-color:var(--danger);box-shadow:0 0 0 3px var(--danger-soft)}
body[data-service="RAC"] .rac-field-error{margin-top:6px;color:var(--danger);font-size:11px;font-weight:700}

/* 한 줄 업무 폼: 1280px↑ 한 줄, 1024px↓ 2열, 모바일 1열 */
body[data-service="RAC"] .rac-row-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px;align-items:end}
body[data-service="RAC"] .rac-row-form .field{margin-bottom:0}
body[data-service="RAC"] .rac-row-form .rac-run{display:flex;justify-content:flex-end}
@media (min-width:1280px){
  body[data-service="RAC"] .rac-row-form{grid-template-columns:var(--rac-row-cols,repeat(7,minmax(0,1fr)))}
  body[data-service="RAC"] .rac-row-form .btn{width:auto}
}
@media (max-width:1023.98px){
  body[data-service="RAC"] .rac-row-form{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:639.98px){
  body[data-service="RAC"] .rac-row-form{grid-template-columns:1fr}
  body[data-service="RAC"] .rac-row-form .btn{width:100%}
}

body[data-service="RAC"] .rac-inline-form{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:flex-end}
body[data-service="RAC"] .rac-inline-form .field{flex:1 1 150px;margin-bottom:0;min-width:130px}
body[data-service="RAC"] .rac-inline-form .field.grow{flex:2 1 220px}
body[data-service="RAC"] .rac-inline-form .field.fit{flex:0 0 auto;min-width:0}
@media (max-width:639.98px){
  body[data-service="RAC"] .rac-inline-form .field{flex:1 1 100%}
}

body[data-service="RAC"] .rac-action-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}

/* 고급 옵션 접힘 */
body[data-service="RAC"] details.rac-adv{grid-column:1/-1;border:1px dashed var(--border);border-radius:10px;padding:8px 12px;background:var(--surface-2)}
body[data-service="RAC"] details.rac-adv summary{cursor:pointer;font-size:12px;font-weight:800;color:var(--text-muted);list-style:none;display:flex;align-items:center;gap:6px}
body[data-service="RAC"] details.rac-adv summary::-webkit-details-marker{display:none}
body[data-service="RAC"] details.rac-adv[open] summary{margin-bottom:10px;color:var(--primary)}
body[data-service="RAC"] details.rac-adv .rac-adv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 12px}

/* 세그먼트 필터 */
body[data-service="RAC"] .rac-seg{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 14px}
body[data-service="RAC"] .rac-seg button{border:1px solid var(--border);background:var(--surface);color:var(--text-2);font-size:12px;font-weight:700;border-radius:999px;padding:6px 13px;transition:.15s}
body[data-service="RAC"] .rac-seg button .cnt{margin-left:5px;font-size:11px;color:var(--text-muted);font-variant-numeric:tabular-nums}
body[data-service="RAC"] .rac-seg button:hover{border-color:var(--primary);color:var(--primary)}
body[data-service="RAC"] .rac-seg button.on{background:var(--primary);border-color:var(--primary);color:#fff}
body[data-service="RAC"] .rac-seg button.on .cnt{color:rgba(255,255,255,.75)}

/* 탭바 + 패널 */
body[data-service="RAC"] .rac-tabbar{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1px solid var(--border);margin:2px 0 16px}
body[data-service="RAC"] .rac-tabbar button{border:0;background:transparent;color:var(--text-muted);font-size:13px;font-weight:800;padding:9px 14px;border-bottom:2px solid transparent;margin-bottom:-1px;transition:.15s}
body[data-service="RAC"] .rac-tabbar button:hover{color:var(--primary)}
body[data-service="RAC"] .rac-tabbar button.on{color:var(--primary);border-bottom-color:var(--primary)}
body[data-service="RAC"] [data-tab-panel]{display:none}
body[data-service="RAC"] [data-tab-panel].on{display:block}

/* 레이어 팝업/우측 드로어 */
body[data-service="RAC"] .rac-layer-backdrop{position:fixed;inset:0;background:rgba(9,14,26,.45);z-index:1080;opacity:0}
body[data-service="RAC"] .rac-layer-backdrop.show{opacity:1;transition:opacity .15s}
body[data-service="RAC"] .rac-layer-pop{position:fixed;inset:0;z-index:1081;display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px;overflow:auto}
body[data-service="RAC"] .rac-layer-card{position:relative;width:min(760px,100%);background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 24px 60px rgba(9,14,26,.28);padding:22px}
body[data-service="RAC"] .rac-layer-close{position:absolute;top:12px;right:12px}
body[data-service="RAC"] .rac-layer-body h5{font-weight:800;margin:0 0 4px;padding-right:34px}
body[data-service="RAC"] .rac-layer-body .rac-layer-desc{font-size:12.5px;color:var(--text-muted);margin-bottom:14px}
body[data-service="RAC"] button.profile{font:inherit;color:inherit;text-align:left}
body[data-service="RAC"] .rac-self-account-pop .rac-layer-card{width:min(940px,100%)}
body[data-service="RAC"] .rac-self-account{display:grid;gap:14px}
body[data-service="RAC"] .rac-self-account>.rac-layer-desc{margin-bottom:0}
body[data-service="RAC"] .rac-self-section{border:1px solid var(--border);border-radius:13px;background:var(--surface-2);padding:16px}
body[data-service="RAC"] .rac-self-section h6{display:flex;align-items:center;gap:7px;margin:0 0 12px;font-size:14px;font-weight:800;color:var(--text)}
body[data-service="RAC"] .rac-self-section h6 i{color:var(--primary)}
body[data-service="RAC"] .rac-self-readonly-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:14px}
body[data-service="RAC"] .rac-self-readonly-grid>div{min-width:0;border:1px solid var(--border);border-radius:10px;background:var(--surface);padding:10px 12px}
body[data-service="RAC"] .rac-self-readonly-grid span{display:block;margin-bottom:4px;color:var(--text-muted);font-size:11px;font-weight:700}
body[data-service="RAC"] .rac-self-readonly-grid strong{display:block;overflow-wrap:anywhere;color:var(--text);font-size:12.5px}
body[data-service="RAC"] .rac-self-grid{grid-template-columns:repeat(4,minmax(0,1fr));align-items:end}
body[data-service="RAC"] .rac-self-grid .full{grid-column:span 2}
body[data-service="RAC"] .rac-self-submit .btn{width:100%;min-height:40px}
body[data-service="RAC"] .rac-self-current-address{margin:0 0 10px;color:var(--text-muted);font-size:12px}
body[data-service="RAC"] .rac-self-current-address strong{color:var(--text)}
body[data-service="RAC"] .rac-self-phone-message,body[data-service="RAC"] .rac-self-load-error{margin-top:10px}
@media (max-width:900px){
  body[data-service="RAC"] .rac-self-readonly-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  body[data-service="RAC"] .rac-self-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:560px){
  body[data-service="RAC"] .rac-layer-pop{padding:12px 8px}
  body[data-service="RAC"] .rac-self-readonly-grid,body[data-service="RAC"] .rac-self-grid{grid-template-columns:1fr}
  body[data-service="RAC"] .rac-self-grid .full{grid-column:auto}
}

body[data-service="RAC"] .rac-drawer{position:fixed;top:0;right:0;bottom:0;width:min(460px,94vw);background:var(--surface);border-left:1px solid var(--border);box-shadow:-18px 0 44px rgba(9,14,26,.22);z-index:1082;display:flex;flex-direction:column;transform:translateX(8px);opacity:0}
body[data-service="RAC"] .rac-drawer.show{transform:none;opacity:1;transition:transform .18s ease,opacity .18s ease}
body[data-service="RAC"] .rac-drawer-head{display:flex;align-items:flex-start;gap:12px;padding:18px 18px 12px;border-bottom:1px solid var(--border)}
body[data-service="RAC"] .rac-drawer-head h5{font-weight:800;margin:2px 0 2px;font-size:16px}
body[data-service="RAC"] .rac-drawer-head .icon-btn{margin-left:auto}
body[data-service="RAC"] .rac-drawer-kicker{font-size:10.5px;font-weight:800;letter-spacing:.08em;color:var(--primary)}
body[data-service="RAC"] .rac-drawer-sub{font-size:12px;color:var(--text-muted)}
body[data-service="RAC"] .rac-detail-summary{display:flex;flex-wrap:wrap;gap:6px;padding:12px 18px;border-bottom:1px solid var(--border);background:var(--surface-2)}
body[data-service="RAC"] .rac-drawer-body{flex:1;overflow:auto;padding:14px 18px}
body[data-service="RAC"] .rac-dl{display:grid;grid-template-columns:118px 1fr;gap:8px 12px;margin:0}
body[data-service="RAC"] .rac-dl dt{font-size:11.5px;font-weight:800;color:var(--text-muted);letter-spacing:.01em}
body[data-service="RAC"] .rac-dl dd{font-size:12.5px;margin:0;word-break:break-all}
body[data-service="RAC"] .rac-drawer-foot{display:flex;flex-wrap:wrap;gap:8px;padding:13px 18px;border-top:1px solid var(--border);background:var(--surface-2)}

/* 행 액션 소형 버튼 */
body[data-service="RAC"] .tbl .rac-row-actions{display:flex;gap:6px;justify-content:flex-end;white-space:nowrap}
body[data-service="RAC"] .tbl .rac-row-actions .btn{padding:4px 9px;font-size:11.5px;min-height:0;border-radius:8px}
body[data-service="RAC"] .btn.btn-sm{padding:5px 11px;font-size:12px;min-height:0}
body[data-service="RAC"] .tbl td .chip{font-size:10.5px}
body[data-service="RAC"] .rac-store-chip{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;color:var(--text-2);background:var(--surface-2);border:1px solid var(--border);border-radius:999px;padding:2px 9px;margin:1px 2px 1px 0}
body[data-service="RAC"] .rac-store-chip i{font-size:10px;color:var(--primary)}

/* KPI 소형 통계 */
body[data-service="RAC"] .rac-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:14px}
body[data-service="RAC"] .rac-kpis .kpi{border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:12px 14px}
body[data-service="RAC"] .rac-kpis .kpi .v{font-size:20px;font-weight:800;font-variant-numeric:tabular-nums}
body[data-service="RAC"] .rac-kpis .kpi .l{font-size:11px;color:var(--text-muted);font-weight:700;margin-top:2px}

/* 위험 작업 확인 */
body[data-service="RAC"] .rac-confirm{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--danger);font-weight:700}
body[data-service="RAC"] .rac-confirm input{width:15px;height:15px}

/* 데스크톱 w-100 남발 방지: 한 줄 폼 안에서는 자동 폭 */
@media (min-width:1024px){
  body[data-service="RAC"] .rac-row-form .btn.w-100,
  body[data-service="RAC"] .rac-inline-form .btn.w-100{width:auto}
}

/* RAC design repair 20260707: v2 detail pages must never fall back to raw browser controls. */
body[data-service="RAC"] .page-head{
  display:flex!important;
  align-items:center!important;
  justify-content:space-between!important;
  gap:18px!important;
  padding-bottom:18px!important;
  margin-bottom:18px!important;
  border-bottom:1px solid var(--border)!important;
}
body[data-service="RAC"] .page-head>div:first-child{min-width:0;flex:1 1 auto}
body[data-service="RAC"] .page-actions{
  display:flex!important;
  align-items:center!important;
  justify-content:flex-end!important;
  gap:10px!important;
  flex-wrap:wrap!important;
  margin-left:auto!important;
}
body[data-service="RAC"] .page-actions .btn{white-space:nowrap}
body[data-service="RAC"] .page-actions .btn,
body[data-service="RAC"] .page-actions .btn.btn-primary,
body[data-service="RAC"] .page-actions .btn.btn-soft{
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  gap:8px!important;
  min-width:112px!important;
  min-height:40px!important;
  padding:9px 18px!important;
  border-radius:12px!important;
  font-size:13px!important;
  font-weight:800!important;
  line-height:1!important;
}

body[data-service="RAC"] .field label{
  min-height:17px!important;
  margin-bottom:7px!important;
  line-height:1.2!important;
}
body[data-service="RAC"] .inp,
body[data-service="RAC"] input.inp,
body[data-service="RAC"] select.inp{
  min-height:40px!important;
  height:40px!important;
  padding:8px 13px!important;
  font-size:13px!important;
  line-height:1.2!important;
  border-radius:12px!important;
}
body[data-service="RAC"] textarea.inp{
  min-height:88px!important;
  height:auto!important;
  padding:10px 13px!important;
  line-height:1.5!important;
}
body[data-service="RAC"] input[type="file"].inp{
  padding:6px 10px!important;
}
body[data-service="RAC"] .rac-filter-card .btn,
body[data-service="RAC"] .rac-func .btn,
body[data-service="RAC"] .rac-upload-card .btn,
body[data-service="RAC"] .rac-inline-form .btn,
body[data-service="RAC"] .rac-row-form .btn,
body[data-service="RAC"] .rac-form-grid .btn{
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  gap:7px!important;
  min-height:40px!important;
  height:40px!important;
  padding:8px 16px!important;
  border-radius:12px!important;
  font-size:13px!important;
  font-weight:800!important;
  line-height:1!important;
  white-space:nowrap!important;
}
body[data-service="RAC"] .rac-filter-card .field.fit,
body[data-service="RAC"] .rac-row-form .field.fit,
body[data-service="RAC"] .rac-inline-form .field.fit{
  align-self:end!important;
}

body[data-service="RAC"] .rac-kpis{
  display:grid!important;
  grid-template-columns:repeat(auto-fit,minmax(138px,1fr))!important;
  gap:10px!important;
  margin:0 0 14px!important;
}
body[data-service="RAC"] .rac-kpis .kpi{
  display:flex!important;
  flex-direction:column!important;
  justify-content:center!important;
  min-height:74px!important;
  border:1px solid var(--border)!important;
  border-radius:12px!important;
  background:var(--surface)!important;
  padding:12px 14px!important;
  box-shadow:var(--shadow-sm)!important;
}
body[data-service="RAC"] .rac-kpis .kpi .v{
  display:block!important;
  font-size:21px!important;
  line-height:1.05!important;
  font-weight:800!important;
  color:var(--text)!important;
  font-variant-numeric:tabular-nums!important;
  letter-spacing:0!important;
  margin:0 0 5px!important;
}
body[data-service="RAC"] .rac-kpis .kpi .l{
  display:block!important;
  font-size:11.5px!important;
  line-height:1.3!important;
  color:var(--text-muted)!important;
  font-weight:700!important;
  margin:0!important;
}

body[data-service="RAC"] .rac-seg{
  display:flex!important;
  align-items:center!important;
  flex-wrap:wrap!important;
  gap:8px!important;
  margin:0 0 14px!important;
}
body[data-service="RAC"] .rac-seg button,
body[data-service="RAC"] .rac-tabbar button{
  appearance:none!important;
  -webkit-appearance:none!important;
  font-family:inherit!important;
  cursor:pointer!important;
}
body[data-service="RAC"] .rac-seg button{
  display:inline-flex!important;
  align-items:center!important;
  gap:5px!important;
  min-height:32px!important;
  border:1px solid var(--border)!important;
  border-radius:12px!important;
  background:var(--surface)!important;
  color:var(--text-2)!important;
  padding:7px 14px!important;
  font-size:13px!important;
  font-weight:800!important;
  line-height:1!important;
  box-shadow:none!important;
}
body[data-service="RAC"] .rac-seg button:hover,
body[data-service="RAC"] .rac-seg button.on{
  border-color:var(--primary)!important;
  background:var(--primary-soft)!important;
  color:var(--primary)!important;
}
body[data-service="RAC"] .rac-seg button .cnt{
  margin-left:2px!important;
  color:var(--text-muted)!important;
  font-size:11px!important;
  font-weight:800!important;
}

body[data-service="RAC"] .rac-tabbar{
  display:flex!important;
  flex-wrap:wrap!important;
  align-items:center!important;
  gap:4px!important;
  margin:0 0 14px!important;
  padding:4px!important;
  border:1px solid var(--border)!important;
  border-radius:12px!important;
  background:var(--surface-2)!important;
}
body[data-service="RAC"] .rac-tabbar button{
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  min-height:32px!important;
  border:0!important;
  border-radius:9px!important;
  background:transparent!important;
  color:var(--text-2)!important;
  padding:7px 13px!important;
  margin:0!important;
  font-size:12.5px!important;
  font-weight:800!important;
  line-height:1!important;
  box-shadow:none!important;
}
body[data-service="RAC"] .rac-tabbar button:hover,
body[data-service="RAC"] .rac-tabbar button.on{
  background:var(--surface)!important;
  color:var(--primary)!important;
  box-shadow:var(--shadow-sm)!important;
}

body[data-service="RAC"] .rac-inline-form{
  display:flex!important;
  flex-wrap:wrap!important;
  align-items:flex-end!important;
  gap:10px 12px!important;
}
body[data-service="RAC"] .rac-inline-form .field{
  flex:1 1 170px!important;
  min-width:150px!important;
  margin:0!important;
}
body[data-service="RAC"] .rac-inline-form .field.grow{flex:2 1 280px!important}
body[data-service="RAC"] .rac-inline-form .field.fit{flex:0 0 auto!important;min-width:0!important}
body[data-service="RAC"] .rac-row-form{
  display:grid!important;
  gap:10px 12px!important;
  align-items:end!important;
}
body[data-service="RAC"] .rac-action-stack{
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:12px;
  margin-bottom:var(--gap,20px);
}
body[data-service="RAC"] .rac-action-stack .rac-form-grid{
  grid-template-columns:repeat(auto-fit,minmax(170px,1fr));
  align-items:end;
}
body[data-service="RAC"] .rac-role-row{
  cursor:pointer;
}
body[data-service="RAC"] .rac-role-row.is-selected td{
  background:#eaf4ff;
  box-shadow:inset 0 1px 0 #8cbce8,inset 0 -1px 0 #8cbce8;
}
body[data-service="RAC"] .rac-role-row:focus-visible{
  outline:3px solid rgba(20,108,190,.28);
  outline-offset:-3px;
}
@media (min-width:1100px){
  body[data-service="RAC"] .rac-row-form{grid-template-columns:var(--rac-row-cols,repeat(6,minmax(0,1fr)))!important}
}
@media (max-width:1099.98px){
  body[data-service="RAC"] .rac-row-form{grid-template-columns:repeat(2,minmax(0,1fr))!important}
}
@media (max-width:639.98px){
  body[data-service="RAC"] .page-head{align-items:flex-start!important}
  body[data-service="RAC"] .page-actions{justify-content:flex-start!important;width:100%!important}
  body[data-service="RAC"] .rac-kpis{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  body[data-service="RAC"] .rac-inline-form .field,
  body[data-service="RAC"] .rac-inline-form .field.grow,
  body[data-service="RAC"] .rac-inline-form .field.fit{flex:1 1 100%!important}
  body[data-service="RAC"] .rac-row-form{grid-template-columns:1fr!important}
}

/* Local asset cleanup: classes replacing former inline page styles. */
.auth-error-message{color:var(--danger,#dc2626);font-size:13px;line-height:1.55;margin:0 0 2px}
.rac-row-form[data-rac-cols="1"]{--rac-row-cols:repeat(1,minmax(0,1fr))}
.rac-row-form[data-rac-cols="2"]{--rac-row-cols:repeat(2,minmax(0,1fr))}
.rac-row-form[data-rac-cols="3"]{--rac-row-cols:repeat(3,minmax(0,1fr))}
.rac-row-form[data-rac-cols="4"]{--rac-row-cols:repeat(4,minmax(0,1fr))}
.rac-row-form[data-rac-cols="5"]{--rac-row-cols:repeat(5,minmax(0,1fr))}
.rac-row-form[data-rac-cols="6"]{--rac-row-cols:repeat(6,minmax(0,1fr))}
.rac-row-form[data-rac-cols="7"]{--rac-row-cols:repeat(7,minmax(0,1fr))}
.rac-row-form[data-rac-cols="8"]{--rac-row-cols:repeat(8,minmax(0,1fr))}
.rac-form-actions{display:flex;justify-content:flex-end;margin-top:14px}
.rac-mb-10{margin-bottom:10px}
.rac-mb-12{margin-bottom:12px}
.rac-col-check{width:34px}
.rac-bulk-label{font-size:11px;color:var(--text-muted);font-weight:800}
.rac-inline-buttons{display:flex;gap:6px;flex-wrap:wrap}
.rac-detail-summary-framed{border:1px solid var(--border);border-radius:12px;margin-bottom:14px}
.rac-gap-8{gap:8px}
.rac-ico-xs{font-size:11px}
.rac-link-reset{text-decoration:none;color:inherit}
.rac-mt-3{margin-top:3px}
.rac-sitemap-pop{width:min(860px,100%)}

/* RAC session stability: inline unlock action inside the existing auth error area. */
.auth-error-actions{margin-top:8px;display:flex;gap:8px;flex-wrap:wrap}
.auth-inline-action{border:1px solid var(--border);background:var(--surface);color:var(--primary);border-radius:8px;padding:6px 10px;font-size:12px;font-weight:800;cursor:pointer}
.auth-inline-action:hover{border-color:var(--primary);background:rgba(0,91,172,.08)}
