:root{--bg:#f4f6f8;--panel:#fff;--line:#e5e7eb;--line-strong:#d1d5db;--ink:#0f172a;--ink-soft:#475569;--ink-mute:#94a3b8;--brand:#0ea5a4;--brand-ink:#0d8584;--brand-soft:#ccfbf1;--blue:#2563eb;--blue-soft:#dbeafe;--green:#16a34a;--green-soft:#dcfce7;--red:#dc2626;--red-soft:#fee2e2;--yellow:#ca8a04;--yellow-soft:#fef9c3;--purple:#7c3aed;--purple-soft:#ede9fe;--teal:#0d9488;--teal-soft:#ccfbf1;--shadow-sm:0 1px 2px #0f172a0a;--shadow-md:0 4px 12px #0f172a14;--shadow-lg:0 12px 40px #0f172a2e;--radius:10px;--radius-sm:6px;--radius-lg:14px;--sidebar-w:240px}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font-family:Pretendard,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5}.mono{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em}button{font-family:inherit}.layout{grid-template-columns:var(--sidebar-w) 1fr;min-height:100vh;display:grid}.layout__main{flex-direction:column;min-width:0;display:flex}.content{flex:1;padding:28px 32px 60px;overflow-y:auto}.sidebar{color:#e2e8f0;background:#0f172a;border-right:1px solid #1e293b;flex-direction:column;display:flex}.sidebar__brand{border-bottom:1px solid #1e293b;align-items:center;gap:12px;padding:20px 18px;display:flex}.sidebar__logo{background:var(--brand);color:#fff;letter-spacing:.4px;border-radius:8px;place-items:center;width:38px;height:38px;font-weight:800;display:grid}.sidebar__title{color:#f1f5f9;font-size:15px;font-weight:700}.sidebar__sub{color:#94a3b8;font-size:11.5px}.sidebar__nav{flex-direction:column;flex:1;gap:2px;padding:12px 10px;display:flex;overflow-y:auto}.navlink{color:#cbd5e1;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:10px;padding:9px 12px;font-size:13.5px;transition:background .12s,color .12s;display:flex;position:relative}.navlink:hover{color:#f1f5f9;background:#ffffff0d}.navlink.is-active{color:#99f6e4;background:#0ea5a42e}.navlink__ico{color:inherit;opacity:.85;display:inline-flex}.navlink__dot{background:var(--brand);color:#fff;text-align:center;border-radius:999px;min-width:22px;margin-left:auto;padding:2px 7px;font-size:11px;font-weight:700}.sidebar__foot{border-top:1px solid #1e293b;padding:14px 16px}.sidebar__role{align-items:center;gap:10px;display:flex}.sidebar__role-ico{color:#94a3b8;background:#1e293b;border-radius:999px;justify-content:center;align-items:center;width:32px;height:32px;display:inline-flex}.sidebar__role-name{color:#f1f5f9;font-size:13px;font-weight:600}.sidebar__role-sub{color:#94a3b8;font-size:11px}.topbar{background:var(--panel);border-bottom:1px solid var(--line);z-index:5;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:12px 24px;display:flex;position:sticky;top:0}.topbar__breadcrumb{align-items:center;gap:6px;font-size:13px;display:flex}.topbar__crumb{color:var(--ink);font-weight:600}.topbar__crumb--mute{color:var(--ink-mute);font-weight:500}.topbar__crumb-sep{color:var(--ink-mute)}.topbar__right{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.topbar__roletoggle{background:#f1f5f9;border-radius:999px;padding:3px;display:inline-flex}.pill{color:var(--ink-soft);cursor:pointer;background:0 0;border:none;border-radius:999px;padding:5px 14px;font-size:12.5px;font-weight:600}.pill.is-on{background:var(--panel);color:var(--ink);box-shadow:var(--shadow-sm)}.page{flex-direction:column;gap:20px;max-width:1320px;margin:0 auto;display:flex}.page__head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.page__title{margin:0 0 4px;font-size:22px;font-weight:700}.page__sub{color:var(--ink-soft);margin:0;font-size:13px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden}.card__head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:12px;padding:16px 20px;display:flex}.card__title{color:var(--ink);margin:0;font-size:15px;font-weight:700}.card__sub{color:var(--ink-soft);margin:4px 0 0;font-size:12.5px}.card__body{padding:18px 20px}.card__body--flush{padding:0}.card__right{flex-shrink:0}.grid-2{grid-template-columns:1fr 1fr;gap:20px;display:grid}@media (width<=1000px){.grid-2{grid-template-columns:1fr}}.kpi-row{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;display:grid}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:16px}.kpi--positive{border-color:var(--brand-soft);background:linear-gradient(#f0fdfa,#fff)}.kpi--warn{background:linear-gradient(#fffbeb,#fff);border-color:#fde68a}.kpi__label{color:var(--ink-soft);font-size:12px;font-weight:500}.kpi__value{color:var(--ink);letter-spacing:-.3px;margin-top:6px;font-size:22px;font-weight:700}.kpi__hint{color:var(--ink-mute);margin-top:4px;font-size:11.5px}.badge{color:var(--ink-soft);background:#f1f5f9;border:1px solid #0000;border-radius:999px;align-items:center;gap:4px;padding:3px 8px;font-size:11.5px;font-weight:600;display:inline-flex}.badge--gray{color:#475569;background:#f1f5f9}.badge--blue{background:var(--blue-soft);color:var(--blue)}.badge--green{background:var(--green-soft);color:var(--green)}.badge--yellow{background:var(--yellow-soft);color:var(--yellow)}.badge--red{background:var(--red-soft);color:var(--red)}.badge--purple{background:var(--purple-soft);color:var(--purple)}.badge--teal{background:var(--teal-soft);color:var(--teal)}.btn{cursor:pointer;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:8px 14px;font-size:13px;font-weight:600;transition:background .12s,border .12s,transform .12s;display:inline-flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--full{width:100%}.btn--sm{border-radius:6px;padding:5px 10px;font-size:12px}.btn--lg{border-radius:10px;padding:11px 18px;font-size:14px}.btn--primary{background:var(--brand);color:#fff}.btn--primary:not(:disabled):hover{background:var(--brand-ink)}.btn--secondary{background:var(--panel);border-color:var(--line-strong);color:var(--ink)}.btn--secondary:not(:disabled):hover{background:#f8fafc}.btn--ghost{border-color:var(--line);color:var(--ink);background:0 0}.btn--ghost:not(:disabled):hover{background:#f1f5f9}.btn--danger{background:var(--red);color:#fff}.btn--danger:not(:disabled):hover{background:#b91c1c}.btn--success{background:var(--green);color:#fff}.btn--success:not(:disabled):hover{background:#15803d}.input,.select{border:1px solid var(--line-strong);background:var(--panel);width:100%;color:var(--ink);border-radius:8px;outline:none;padding:8px 10px;font-family:inherit;font-size:13px;transition:border .12s,box-shadow .12s}.input:focus,.select:focus{border-color:var(--brand);box-shadow:0 0 0 3px #0ea5a42e}.input--cell{text-align:right;padding:5px 8px;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:13px}.select{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--ink-soft) 50%), linear-gradient(135deg, var(--ink-soft) 50%, transparent 50%);background-position:calc(100% - 17px),calc(100% - 12px);background-repeat:no-repeat;background-size:5px 5px;padding-right:28px}.form{flex-direction:column;gap:10px;display:flex}.form__label{color:var(--ink-soft);font-size:12px;font-weight:600}.form__row{gap:10px;margin-top:6px;display:flex}.form__row--split{justify-content:space-between;font-size:12.5px}.form2{grid-template-columns:1fr 1fr;gap:12px 14px;display:grid}.field{flex-direction:column;gap:4px;display:flex}.field--span2{grid-column:span 2}.field label{color:var(--ink-soft);font-size:12px;font-weight:600}.checkbox{align-items:center;gap:6px;font-size:13px;display:inline-flex}.linkbtn{color:var(--brand-ink);cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:600}.linkbtn:hover{text-decoration:underline}.hint{color:var(--ink-mute);margin:4px 0 0;font-size:12px}.table-wrap{border-radius:var(--radius-sm);border:1px solid var(--line);overflow:auto}.table{border-collapse:collapse;background:var(--panel);width:100%;font-size:13px}.table th,.table td{text-align:left;border-bottom:1px solid var(--line);vertical-align:middle;padding:10px 12px}.table th{color:var(--ink-soft);border-bottom:1px solid var(--line);white-space:nowrap;background:#f8fafc;font-size:12px;font-weight:600}.table tbody tr:hover{background:#fbfdff}.table tbody tr:last-child td{border-bottom:none}.table tfoot td{background:#f8fafc;font-size:13px}.table--compact th,.table--compact td{padding:7px 10px}.ta-r{text-align:right}.ta-c{text-align:center}.cell-strong{color:var(--ink);font-weight:600}.cell-mute{color:var(--ink-mute);font-size:11.5px}.row-gap{flex-wrap:wrap;gap:6px;display:inline-flex}.row-bad{background:#fff1f2}.row-bad:hover{background:#ffe4e6!important}.matrix .input--cell{width:130px}.matrix tr.is-dirty{background:#fef9c3!important}.matrix .pos{color:var(--green);font-weight:600}.matrix .neg{color:var(--red);font-weight:600}.filterbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.filterbar__group{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.chip{background:var(--panel);border:1px solid var(--line-strong);color:var(--ink-soft);cursor:pointer;border-radius:999px;padding:5px 11px;font-size:12.5px;font-weight:600}.chip.is-on{background:var(--ink);color:#fff;border-color:var(--ink)}.chip:not(.is-on):hover{background:#f8fafc}.matrix-controls{flex-wrap:wrap;justify-content:space-between;gap:14px;margin-bottom:14px;display:flex}.matrix-controls__left{flex-direction:column;gap:6px;display:flex}.matrix-controls__right{flex-wrap:wrap;align-items:flex-end;gap:8px;display:inline-flex}.matrix-summary{border:1px solid var(--line);border-radius:var(--radius-sm);background:#f8fafc;flex-wrap:wrap;gap:26px;margin-bottom:14px;padding:10px 14px;font-size:13px;display:flex}.catalog{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;display:grid}.catalog__card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);flex-direction:column;gap:8px;padding:14px;display:flex}.catalog__head{justify-content:space-between;align-items:center;display:flex}.catalog__code{color:var(--ink-mute);font-size:11px}.catalog__name{color:var(--ink);min-height:38px;font-size:14px;font-weight:600;line-height:1.35}.catalog__meta{color:var(--ink-mute);font-size:12px}.catalog__pricerow{justify-content:space-between;align-items:center;margin-top:4px;display:flex}.catalog__base{color:var(--ink-mute);font-size:11.5px;text-decoration:line-through}.catalog__price{color:var(--brand-ink);letter-spacing:-.3px;font-size:17px;font-weight:700}.catalog__cart{gap:6px;margin-top:8px;display:flex}.status-row{grid-template-columns:repeat(6,1fr);gap:10px;display:grid}.status-cell{border:1px solid var(--line);border-radius:var(--radius-sm);text-align:center;background:#f8fafc;padding:12px}.status-cell__num{color:var(--ink);margin-top:8px;font-size:22px;font-weight:700}.bar-list{flex-direction:column;gap:7px;display:flex}.bar-list__row{grid-template-columns:18px 1fr 120px 50px;align-items:center;gap:10px;font-size:12.5px;display:grid}.bar-list__rank{color:var(--ink-mute);font-size:11.5px;font-weight:700}.bar-list__name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bar-list__bar{background:#f1f5f9;border-radius:999px;height:10px;overflow:hidden}.bar-list__fill{background:linear-gradient(90deg, var(--brand), var(--teal));border-radius:999px;height:100%;display:block}.bar-list__num{text-align:right;color:var(--ink-soft);font-family:IBM Plex Mono,monospace;font-size:12.5px}.flow{flex-wrap:wrap;align-items:stretch;gap:8px;display:flex}.flow__step,.flow__step--ok{border:1px solid var(--line);border-radius:var(--radius-sm);min-width:160px;color:var(--ink-soft);background:#f8fafc;flex:1;align-items:center;gap:8px;padding:10px 12px;font-size:12.5px;display:flex}.flow__step--ok{background:var(--brand-soft);border-color:var(--brand);color:var(--brand-ink);font-weight:600}.flow__step b,.flow__step--ok b{background:var(--ink);color:#fff;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;font-size:11px;display:inline-flex}.flow__step--ok b{background:var(--brand)}.flow__arrow{color:var(--ink-mute);align-self:center}.bullets{color:var(--ink-soft);padding-left:18px;font-size:13px}.bullets li{margin-bottom:6px}.modal{z-index:50;place-items:center;display:grid;position:fixed;inset:0}.modal__backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0f172a80;position:absolute;inset:0}.modal__panel{background:var(--panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);flex-direction:column;width:90vw;max-height:88vh;display:flex;position:relative;overflow:hidden}.modal__panel--sm{max-width:420px}.modal__panel--md{max-width:620px}.modal__panel--lg{max-width:880px}.modal__panel--xl{max-width:1100px}.modal__head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:14px 20px;display:flex}.modal__head h3{margin:0;font-size:15px;font-weight:700}.modal__close{color:var(--ink-mute);cursor:pointer;background:0 0;border:none;border-radius:6px;width:28px;height:28px;font-size:16px}.modal__close:hover{background:#f1f5f9}.modal__body{padding:18px 20px;overflow-y:auto}.modal__foot{border-top:1px solid var(--line);justify-content:flex-end;gap:8px;padding:12px 20px;display:flex}.toast-host{z-index:100;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background:var(--ink);color:#fff;box-shadow:var(--shadow-md);border-radius:10px;padding:10px 16px;font-size:13px;animation:.2s toast-in}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.toast--ok{background:var(--green)}.toast--warn{background:var(--yellow)}.toast--err{background:var(--red)}.toast--info{background:var(--blue)}.empty{text-align:center;color:var(--ink-mute);padding:36px 20px;font-size:13px}.order-detail__head{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:20px;margin-bottom:12px;padding:10px 0 18px;display:flex}.order-detail__head>div>div:first-child{color:var(--ink-mute);font-size:11.5px}.login{place-items:center;min-height:100vh;padding:40px 20px;display:grid;position:relative;overflow:hidden}.login__bg{z-index:0;background:radial-gradient(circle at 20% 30%,#0ea5a426,#0000 40%),radial-gradient(circle at 80% 70%,#2563eb1f,#0000 45%),linear-gradient(#f8fafc 0%,#e0f2fe 100%);position:absolute;inset:0}.login__shell{z-index:1;flex-direction:column;gap:16px;width:100%;max-width:460px;display:flex;position:relative}.login__brand{align-items:center;gap:12px;padding-bottom:8px;display:flex}.login__logo{background:var(--brand);color:#fff;border-radius:10px;place-items:center;width:46px;height:46px;font-size:18px;font-weight:800;display:grid}.login__title{color:var(--ink);font-size:18px;font-weight:800}.login__sub{color:var(--ink-soft);font-size:12px}.login__notice{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--line);border-radius:var(--radius);color:var(--ink-soft);background:#fff9;flex-direction:column;gap:4px;padding:12px 14px;font-size:12px;display:flex}.upload{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.upload__chip{color:var(--brand-ink);background:var(--brand-soft);border-radius:999px;padding:4px 10px;font-size:12px}.license-preview{flex-direction:column;gap:12px;display:flex}.license-preview__doc{background:#fffbeb;border:1px dashed #ca8a04;border-radius:8px;padding:22px;position:relative}.license-preview__title{text-align:center;letter-spacing:8px;color:#78350f;margin-bottom:18px;font-size:18px;font-weight:800}.license-preview__grid{grid-template-columns:110px 1fr;gap:8px 14px;font-size:13px;display:grid}.license-preview__grid>div:nth-child(odd){color:var(--ink-mute);font-weight:600}.license-preview__stamp{border:3px solid var(--red);width:80px;height:80px;color:var(--red);letter-spacing:2px;opacity:.7;border-radius:50%;place-items:center;font-size:13px;font-weight:800;display:grid;position:absolute;bottom:22px;right:22px;transform:rotate(-12deg)}@media print{.sidebar,.topbar,.toast-host,.modal__head,.modal__foot{display:none!important}body{background:#fff}}@media (width<=800px){.layout{grid-template-columns:1fr}.sidebar{display:none}.content{padding:20px 16px}.status-row{grid-template-columns:repeat(3,1fr)}}
