:root{--bg:#f4f7fb;--panel:#fff;--ink:#111827;--muted:#6b7280;--line:#e5e7eb;--blue:#2563eb;--blue2:#1d4ed8;--green:#16a34a;--yellow:#f59e0b;--red:#dc2626;--nav:#0f172a}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Pretendard,Roboto,sans-serif;background:var(--bg);color:var(--ink)}.app-shell{display:flex;min-height:100vh}.sidebar{width:268px;background:linear-gradient(180deg,#111827,#0f172a);color:#fff;padding:26px 20px;display:flex;flex-direction:column;gap:28px}.brand{display:flex;gap:12px;align-items:center}.brand-mark{width:44px;height:44px;border-radius:14px;background:#2563eb;display:grid;place-items:center;font-weight:900}.brand span,.side-card span,.side-card small{display:block;color:#aab3c5;font-size:13px}nav{display:flex;flex-direction:column;gap:8px}nav a{padding:12px 14px;border-radius:12px;color:#cbd5e1;text-decoration:none}nav a.active,nav a:hover{background:rgba(255,255,255,.12);color:#fff}.side-card{margin-top:auto;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.1);border-radius:18px;padding:18px}.side-card strong{display:block;font-size:34px;margin:8px 0}main{flex:1;padding:30px;overflow:auto}.topbar{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;margin-bottom:24px}.eyebrow{margin:0 0 6px;color:var(--blue);font-weight:700;font-size:13px;text-transform:uppercase;letter-spacing:.08em}h1{margin:0;font-size:32px}h2{margin:0;font-size:18px}.sub,.panel p{color:var(--muted)}.header-actions{display:flex;gap:10px}button{border:0;border-radius:12px;padding:12px 16px;font-weight:700;cursor:pointer}.primary{background:var(--blue);color:white}.primary:hover{background:var(--blue2)}.ghost{background:white;border:1px solid var(--line);color:#374151}.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(160px,1fr));gap:16px;margin-bottom:18px}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:20px;box-shadow:0 8px 30px rgba(15,23,42,.05)}.kpi span{color:var(--muted);font-size:14px}.kpi strong{display:block;font-size:30px;margin:8px 0}.kpi small{color:var(--muted)}.kpi .up{color:var(--green)}.kpi.warning{border-color:#fde68a}.kpi.danger{border-color:#fecaca}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:18px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:22px;padding:20px;box-shadow:0 8px 30px rgba(15,23,42,.05)}.panel.large{grid-row:span 2}.panel-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:16px}.panel-head.compact{align-items:center}.panel-head p{margin:5px 0 0;font-size:14px}input,select{width:100%;border:1px solid var(--line);border-radius:12px;padding:11px 12px;background:#fff;color:var(--ink)}.panel-head input{max-width:220px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:13px 10px;border-bottom:1px solid var(--line);font-size:14px}th{color:var(--muted);font-weight:700;background:#f9fafb}.status{display:inline-flex;align-items:center;border-radius:999px;padding:5px 10px;font-size:12px;font-weight:800}.ok{background:#dcfce7;color:#166534}.low{background:#fef3c7;color:#92400e}.expire{background:#fee2e2;color:#991b1b}.badge{font-size:12px;background:#eff6ff;color:#1d4ed8;border-radius:999px;padding:6px 10px;font-weight:800}.badge.green{background:#dcfce7;color:#166534}.quick-form{display:grid;gap:12px}.quick-form label{font-size:13px;color:var(--muted);font-weight:700}.quick-form input,.quick-form select{margin-top:6px}.full{width:100%;margin-top:4px}.activity{display:grid;gap:12px}.event{display:flex;gap:10px;align-items:flex-start;padding:12px;border:1px solid var(--line);border-radius:14px}.dot{width:10px;height:10px;border-radius:50%;margin-top:5px;background:var(--blue)}.event strong{display:block;font-size:14px}.event small{color:var(--muted)}.bars{display:grid;gap:18px;margin-top:18px}.bars div{display:grid;grid-template-columns:70px 1fr 42px;gap:10px;align-items:center;font-size:13px;color:var(--muted)}.bars b{height:12px;border-radius:999px;background:linear-gradient(90deg,#60a5fa,#2563eb);display:block}.bars em{font-style:normal;color:#111827;font-weight:800}@media(max-width:1000px){.sidebar{display:none}.kpi-grid,.content-grid{grid-template-columns:1fr}.topbar{flex-direction:column}}
body.flash .panel.large{box-shadow:0 0 0 4px rgba(37,99,235,.14),0 18px 40px rgba(37,99,235,.18)}
body.flash .activity .event:first-child{background:#eff6ff;border-color:#93c5fd}
.client-logo-card{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);border-radius:18px;padding:16px}.client-logo-card span,.client-logo-card small{display:block;color:#aab3c5;font-size:13px}.client-logo{height:76px;border:1px dashed rgba(255,255,255,.35);border-radius:16px;display:grid;place-items:center;margin:10px 0;color:#fff;font-size:28px;font-weight:900;letter-spacing:.08em;background:rgba(255,255,255,.08)}.marketing-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:18px}.marketing-strip article{background:linear-gradient(135deg,#eff6ff,#fff);border:1px solid #bfdbfe;border-radius:18px;padding:16px}.marketing-strip strong{display:block;color:#1d4ed8;margin-bottom:5px}.marketing-strip span{color:#4b5563;font-size:13px}@media(max-width:1000px){.marketing-strip{grid-template-columns:1fr}}
.proposal-banner{display:flex;justify-content:space-between;gap:18px;align-items:center;background:linear-gradient(135deg,#0f172a,#1d4ed8);color:#fff;border-radius:22px;padding:20px;margin-bottom:18px}.proposal-banner.slim{padding:16px 18px}.proposal-banner strong{display:block;font-size:18px;margin-bottom:5px}.proposal-banner span{color:#dbeafe}.logo-slots{display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end}.logo-slots span{min-width:104px;text-align:center;border:1px dashed rgba(255,255,255,.45);border-radius:14px;padding:12px 10px;color:#fff;font-weight:900;background:rgba(255,255,255,.08);font-size:12px}.table-scroll{width:100%;overflow:auto}.filters{display:flex;gap:10px;align-items:center}.filters input,.filters select{min-width:180px}.tx-form{grid-template-columns:repeat(2,minmax(0,1fr))}.tx-form .wide,.tx-form .full{grid-column:1/-1}.issue-list{margin:14px 0 0;padding-left:20px;color:#374151;line-height:1.9}.dot.red{background:var(--red)}.report-tabs{display:flex;gap:10px;margin:0 0 20px}.report-tabs a{background:#fff;border:1px solid var(--line);border-radius:999px;padding:10px 14px;color:#374151;text-decoration:none;font-weight:800;font-size:14px}.report-section{background:rgba(255,255,255,.45);border:1px solid #e8edf5;border-radius:26px;padding:22px;margin-bottom:22px}.report-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.report-title p{margin:5px 0 0;color:var(--muted)}.report-kpis{margin-bottom:16px}.report-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:16px}.report-grid.three{grid-template-columns:repeat(3,1fr);margin-bottom:16px}.score span{display:block;color:var(--muted);font-weight:800}.score strong{display:block;font-size:34px;margin:10px 0}.score small{color:var(--muted)}.toast{position:fixed;right:24px;bottom:24px;background:#111827;color:#fff;border-radius:14px;padding:14px 18px;box-shadow:0 18px 40px rgba(15,23,42,.25);opacity:0;transform:translateY(12px);pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:translateY(0)}
@media(max-width:1000px){.proposal-banner{align-items:flex-start;flex-direction:column}.logo-slots{justify-content:flex-start}.report-grid,.report-grid.three{grid-template-columns:1fr}.report-tabs{flex-wrap:wrap}.tx-form{grid-template-columns:1fr}.filters{flex-direction:column;align-items:stretch}.panel-head{flex-direction:column}.panel-head input{max-width:100%}}
.client-logo img{max-width:92%;max-height:64px;object-fit:contain;border-radius:10px}.login-body{min-height:100vh;background:radial-gradient(circle at top left,#dbeafe,#f8fafc 45%,#eef2ff);display:grid;place-items:center;padding:28px}.login-shell{width:min(1120px,100%);display:grid;grid-template-columns:420px 1fr;gap:22px;align-items:stretch}.login-card,.login-hero{background:rgba(255,255,255,.88);border:1px solid rgba(148,163,184,.35);border-radius:28px;padding:34px;box-shadow:0 24px 70px rgba(15,23,42,.12);backdrop-filter:blur(8px)}.login-brand{color:#111827;margin-bottom:28px}.login-brand .brand span{color:#64748b}.login-card h1{font-size:34px;margin-bottom:8px}.login-card p{color:#64748b;margin:0 0 22px}.login-hint{margin-top:18px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:16px;padding:14px}.login-hint strong,.login-hint span{display:block}.login-hint span{color:#1d4ed8;margin-top:4px}.login-hero{background:linear-gradient(135deg,#0f172a,#1d4ed8);color:white;display:flex;flex-direction:column;justify-content:center}.login-hero .eyebrow{color:#bfdbfe}.login-hero h2{font-size:36px;line-height:1.2;margin:0 0 24px}.login-hero ul{line-height:2;color:#dbeafe;font-weight:700}@media(max-width:900px){.login-shell{grid-template-columns:1fr}.login-hero h2{font-size:28px}}
.logo-slots .logo-slot{min-width:118px;min-height:58px;text-align:center;border:1px dashed rgba(255,255,255,.45);border-radius:14px;padding:8px 10px;color:#fff;font-weight:900;background:rgba(255,255,255,.08);font-size:12px;text-decoration:none;display:grid;gap:4px;place-items:center}.logo-slots .logo-slot:hover{background:rgba(255,255,255,.16);transform:translateY(-1px)}.logo-slots .logo-slot span{font-size:11px;color:#bfdbfe}.logo-slots .logo-slot strong{font-size:14px;color:#fff}.logo-slots .logo-slot img{max-width:96px;max-height:28px;object-fit:contain;border-radius:6px}.logo-config-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:8px 0}.logo-config-card{border:1px solid var(--line);border-radius:18px;padding:14px;background:#f8fafc;display:grid;gap:10px}.logo-config-card small{color:var(--muted)}@media(max-width:1200px){.logo-config-grid{grid-template-columns:1fr}}
button.mini{padding:7px 10px;border-radius:9px;font-size:12px}.quick-form small{display:block;margin-top:5px;color:var(--muted);font-weight:500}
.barcode-input{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:16px;letter-spacing:.04em}code{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:8px;padding:3px 6px;font-size:12px;color:#334155}
.scanner-panel{grid-column:1/-1;border:1px solid #bfdbfe;background:#eff6ff;border-radius:18px;padding:14px;display:grid;gap:10px}.scanner-panel[hidden]{display:none}.scanner-head{display:flex;justify-content:space-between;align-items:center}.scanner-video{width:100%;max-height:320px;background:#0f172a;border-radius:14px;object-fit:cover}.scanner-status{color:#1e3a8a}.camera-scan-btn{grid-column:1/-1}
.realtime-strip{display:grid;grid-template-columns:repeat(4,minmax(160px,1fr));gap:14px;margin-bottom:18px}.realtime-strip article{background:#0f172a;color:white;border-radius:18px;padding:16px;box-shadow:0 10px 28px rgba(15,23,42,.18)}.realtime-strip article span{display:block;color:#93c5fd;font-size:12px;font-weight:900;letter-spacing:.08em}.realtime-strip article strong{display:block;font-size:24px;margin:6px 0}.realtime-strip article small{color:#cbd5e1}.realtime-strip article.danger{background:#7f1d1d}.realtime-strip article.danger span{color:#fecaca}@media(max-width:1000px){.realtime-strip{grid-template-columns:1fr}}
.master-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.master-card .panel-head{margin-bottom:10px}.chip-list{display:flex;flex-wrap:wrap;gap:8px;min-height:42px;margin:8px 0 12px}.chip{display:inline-flex;align-items:center;gap:7px;background:#f1f5f9;border:1px solid #dbe3ee;border-radius:999px;padding:7px 10px;font-size:13px;font-weight:800;color:#334155}.chip button{border:0;background:#e2e8f0;color:#475569;border-radius:999px;width:20px;height:20px;padding:0;line-height:20px}.master-form{display:grid;grid-template-columns:1fr auto;gap:8px}.master-form input{margin:0}.master-form button{padding:10px 14px}.field-note{display:block;color:var(--muted);font-size:12px;margin-top:6px}@media(max-width:1000px){.master-grid{grid-template-columns:1fr}.master-form{grid-template-columns:1fr}}
.realtime-strip{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}
.mobile-nav-toggle{display:none;align-items:center;gap:4px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:10px 12px;color:#111827;box-shadow:0 8px 24px rgba(15,23,42,.08)}.mobile-nav-toggle span{display:block;width:18px;height:2px;background:#111827;border-radius:999px}.mobile-nav-toggle b{margin-left:6px;font-size:13px}.mobile-nav-backdrop{display:none;position:fixed;inset:0;background:rgba(15,23,42,.48);z-index:40}@media(max-width:1000px){main{padding:18px}.mobile-nav-toggle{display:inline-flex;position:relative;z-index:60}.topbar{align-items:center}.topbar>div:first-of-type{min-width:0}.topbar h1{font-size:24px}.sidebar{display:flex!important;position:fixed;left:0;top:0;bottom:0;width:min(82vw,310px);z-index:55;transform:translateX(-105%);transition:transform .22s ease;box-shadow:18px 0 50px rgba(15,23,42,.28);overflow:auto}.mobile-nav-open .sidebar{transform:translateX(0)}.mobile-nav-open .mobile-nav-backdrop{display:block}.app-shell{display:block}.header-actions{width:100%;justify-content:flex-start;flex-wrap:wrap}.proposal-banner.slim{margin-top:6px}nav a{font-size:15px}.client-logo-card,.side-card{margin-top:0}}
@media(max-width:720px){.table-scroll{overflow:visible}.table-scroll table{display:block;width:100%;border-collapse:separate}.table-scroll thead{display:none}.table-scroll tbody{display:grid;gap:12px}.table-scroll tr{display:block;background:#fff;border:1px solid var(--line);border-radius:18px;padding:10px;box-shadow:0 8px 22px rgba(15,23,42,.05)}.table-scroll td{display:grid;grid-template-columns:104px 1fr;gap:8px;align-items:center;border-bottom:1px solid #eef2f7;padding:9px 4px;font-size:13px}.table-scroll td:last-child{border-bottom:0}.table-scroll td::before{content:attr(data-label);color:#64748b;font-weight:900}.table-scroll td .status{justify-self:start}.mobile-sticky-submit{position:sticky;bottom:12px;z-index:12;box-shadow:0 14px 34px rgba(37,99,235,.28)}.tx-form{padding-bottom:8px}.kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.kpi{padding:14px;border-radius:16px}.kpi strong{font-size:24px}.content-grid{gap:12px}.panel{padding:15px;border-radius:18px}.panel-head.compact{flex-direction:row}.report-section{padding:14px;border-radius:18px}.report-grid.three{grid-template-columns:1fr}.master-grid{gap:12px}.chip-list{max-height:180px;overflow:auto}.logo-config-grid{grid-template-columns:1fr}.proposal-banner .logo-slots{width:100%}.logo-slots .logo-slot{min-width:0;flex:1}.realtime-strip article strong{font-size:20px}}
@media(max-width:720px){.topbar{gap:12px}.mobile-nav-toggle{gap:3px;padding:9px 10px}.mobile-nav-toggle span{width:16px}.mobile-nav-toggle b{font-size:12px}.proposal-banner{overflow:hidden}.proposal-banner span{overflow-wrap:anywhere}.kpi strong{font-size:21px;line-height:1.12;word-break:break-word}.kpi small{font-size:12px}.realtime-strip article{min-width:0}.realtime-strip article strong{word-break:break-word}.bars div{grid-template-columns:58px 1fr 36px}.header-actions button{padding:10px 12px}.table-scroll td{word-break:break-word}.table-scroll td::before{word-break:keep-all}}
.remember-row{display:flex!important;align-items:center;gap:8px;flex-direction:row!important;font-size:13px;color:#475569}.remember-row input{width:auto!important;min-height:auto!important}.login-hint span{line-height:1.45}
