@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700;800&display=swap');

:root{font-family:'Noto Sans KR',system-ui,sans-serif;color:#10264d;background:#f4f9ff;font-synthesis:none;--navy:#06295d;--blue:#0878ed;--blue2:#075cc9;--line:#d7e6f7;--muted:#71819a;--bg:#f5faff;--panel:#fff;--green:#12a86b;--orange:#f39a18;--red:#ef5350;}
*{box-sizing:border-box}body{margin:0;background:linear-gradient(135deg,#f7fbff,#eef7ff);color:#10264d}button,input,select,textarea{font:inherit}button{cursor:pointer} .hidden{display:none!important}
.app-shell{min-height:100vh}.login-view{min-height:100vh;display:grid;place-items:center;padding:30px;background:radial-gradient(circle at 15% 20%,#e6f4ff 0,transparent 30%),#f7fbff}.login-card{width:min(1040px,94vw);min-height:590px;background:#fff;border:1px solid #cfe2f8;border-radius:18px;box-shadow:0 24px 70px #144b8a18;display:grid;grid-template-columns:43% 57%;overflow:hidden}.login-brand-panel{padding:55px 52px;background:linear-gradient(145deg,#063a82,#061f49);color:#fff;position:relative;overflow:hidden}.login-brand-panel:after{content:'';position:absolute;width:420px;height:420px;border:1px solid #ffffff22;border-radius:50%;right:-190px;bottom:-180px;box-shadow:0 0 0 45px #ffffff0b,0 0 0 90px #ffffff06}.brand-mark{width:54px;height:54px;border-radius:13px;background:linear-gradient(145deg,#25a7ff,#075bc7);display:grid;place-items:center;font-weight:800;font-size:30px;box-shadow:0 8px 22px #001c4a55}.brand-mark.small{width:34px;height:34px;border-radius:9px;font-size:20px}.brand-name{font-size:29px;font-weight:800;margin-top:18px;letter-spacing:-1px}.login-brand-panel p{color:#bed7f6;margin:7px 0 0}.login-illustration{height:260px;margin-top:65px;position:relative}.cube{position:absolute;width:130px;height:92px;border:1px solid #58b6ff66;background:linear-gradient(135deg,#0c65c9,#0a326e);border-radius:10px;display:grid;place-items:center;font-size:22px;font-weight:800;box-shadow:0 20px 40px #001b4a66}.c1{left:8px;top:55px;transform:rotate(-12deg)}.c2{left:125px;top:15px;transform:rotate(8deg)}.c3{left:180px;top:108px;transform:rotate(-3deg)}.login-form-panel{padding:72px 74px}.eyebrow{font-size:11px;font-weight:800;letter-spacing:1.6px;color:#1375db}.login-heading h1{font-size:29px;margin:10px 0 8px;letter-spacing:-1px}.login-heading p,.page-heading p{margin:0;color:var(--muted);font-size:13px}.login-form-panel form{margin-top:35px}.login-form-panel label,.form-panel label{display:block;font-size:12px;font-weight:700;color:#395170;margin-bottom:17px}.login-form-panel input,.form-panel input,.form-panel select,.form-panel textarea,.filter-bar input,.filter-bar select,.scan-card input{width:100%;border:1px solid #d3e1f0;border-radius:8px;background:#fff;padding:12px 13px;margin-top:7px;outline:none;color:#193457}.login-form-panel input:focus,.form-panel input:focus,.filter-bar input:focus{border-color:#4b9df0;box-shadow:0 0 0 3px #0a7cff12}.form-row{display:flex;justify-content:space-between;align-items:center;margin-top:-2px}.check{font-size:12px!important;font-weight:500!important;margin:0!important}.check input{width:auto!important;margin:0 6px 0 0!important;vertical-align:middle}.link-button{border:0;background:none;color:#0671dd;padding:0;font-size:12px}.primary-button{border:0;border-radius:8px;background:linear-gradient(135deg,#087ef4,#0864d8);color:#fff;padding:11px 18px;font-weight:700;box-shadow:0 6px 15px #087ef426}.primary-button:hover{filter:brightness(1.04)}.outline-button,.small-button{border:1px solid #cddff2;border-radius:8px;background:#fff;color:#27527f;padding:9px 13px;font-weight:600}.login-button{width:100%;margin-top:22px;padding:13px}.form-message{min-height:20px;color:#d43d3d;font-size:12px;margin-top:9px}.login-note{margin-top:30px;border-top:1px solid #edf2f8;padding-top:16px;color:#8a98ab;font-size:11px}
.admin-view{display:flex;min-height:100vh}.sidebar{width:235px;background:linear-gradient(180deg,#062e66,#041f49);color:#d9eaff;flex:0 0 235px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;z-index:20}.sidebar-brand{height:78px;padding:20px 18px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #ffffff12}.sidebar-brand strong{display:block;font-size:18px}.sidebar-brand span{display:block;font-size:9px;color:#8eadd0;margin-top:2px}.main-nav{padding:14px 10px;overflow:auto}.nav-group-label{font-size:9px;color:#7294bc;letter-spacing:1.2px;padding:16px 12px 7px;text-transform:uppercase}.nav-item{border:0;background:transparent;color:#b9d0eb;width:100%;text-align:left;padding:10px 12px;border-radius:7px;display:flex;align-items:center;gap:11px;font-size:12px;margin:2px 0}.nav-item span{width:18px;text-align:center;font-size:15px}.nav-item:hover{background:#ffffff0c;color:#fff}.nav-item.active{background:linear-gradient(90deg,#0879ed,#0863ca);color:#fff;box-shadow:0 7px 18px #0000001e}.nav-badge{margin-left:auto;background:#ef5350;color:#fff;border-radius:20px;padding:2px 6px;font-size:9px}.sidebar-footer{margin-top:auto;padding:17px 20px;border-top:1px solid #ffffff12;color:#8eadd0;font-size:10px}.status-dot{display:inline-block;width:7px;height:7px;background:#29cf8b;border-radius:50%;margin-right:5px}.sidebar-footer small{color:#6688b2}.content-area{min-width:0;flex:1}.topbar{height:78px;background:#ffffffdc;backdrop-filter:blur(10px);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:15}.topbar-left{display:flex;gap:15px;align-items:center}.topbar-left strong{display:block;font-size:17px}.topbar-left span{display:block;color:#8a9ab0;font-size:10px;margin-top:2px}.mobile-menu{display:none}.topbar-actions{display:flex;gap:20px;align-items:center}.header-action{border:0;background:transparent;color:#60758f;font-size:11px;position:relative}.header-action b{position:absolute;top:-5px;right:-7px;background:#ef5350;color:#fff;border-radius:50%;font-size:8px;padding:2px 5px}.user-menu{display:flex;align-items:center;gap:9px}.avatar{width:34px;height:34px;background:#e9f3ff;color:#0872dc;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:12px}.user-menu strong{display:block;font-size:11px}.user-menu span{display:block;color:#8b99aa;font-size:9px}.icon-button{border:0;background:transparent;color:#60758f;padding:5px}.page-container{padding:25px 28px 40px;max-width:1500px;margin:auto}.page{display:none}.page.active{display:block}.page-heading{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:20px}.page-heading h2{margin:4px 0 6px;font-size:24px;letter-spacing:-.7px}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.kpi-card{background:#fff;border:1px solid var(--line);border-radius:10px;padding:17px 18px;box-shadow:0 5px 18px #21568d08;position:relative}.kpi-card span{font-size:11px;color:#71839b}.kpi-card strong{display:block;font-size:25px;margin-top:8px;color:#092e65}.kpi-card small{font-size:9px;color:#98a6b7}.kpi-card small.up{color:#16a76a}.kpi-card small.down{color:#ef625c}.kpi-card small em{font-style:normal;color:#9aa7b6}.kpi-icon{position:absolute;right:16px;top:16px;width:32px;height:32px;border-radius:9px;display:grid;place-items:center;font-weight:800}.kpi-icon.blue{background:#e8f3ff;color:#0875e7}.kpi-icon.green{background:#e7fbf3;color:#12a86b}.kpi-icon.orange{background:#fff4e2;color:#ee9410}.kpi-icon.red{background:#fff0ef;color:#e85450}.dashboard-grid{display:grid;grid-template-columns:1.55fr 1fr;gap:14px;margin-top:14px}.bottom-grid{grid-template-columns:1fr 1fr}.panel{background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 5px 18px #21568d08}.panel-head{display:flex;justify-content:space-between;align-items:center;padding:17px 18px 8px}.panel-head h3,.panel h3{font-size:13px;margin:0;color:#183b68}.panel-head p{font-size:9px;color:#92a0b1;margin:4px 0 0}.panel-head select{border:1px solid #dce8f5;border-radius:6px;padding:6px;font-size:9px;color:#62758d}.chart-panel{min-height:280px}.bar-chart{padding:18px 24px 15px}.chart-bars{height:180px;display:flex;align-items:flex-end;gap:13px;border-bottom:1px solid #e6eef7;padding:0 10px}.chart-bars i{display:block;flex:1;max-width:34px;margin:auto;background:linear-gradient(180deg,#3ba5ff,#0a6bdd);border-radius:5px 5px 0 0;box-shadow:0 2px 6px #147ae522}.chart-labels{display:flex;justify-content:space-between;color:#9aa8b8;font-size:8px;padding:8px 5px}.donut-wrap{display:flex;align-items:center;justify-content:center;gap:28px;min-height:210px}.donut{width:150px;height:150px;border-radius:50%;background:conic-gradient(#12a86b 0 92.4%,#0877ea 92.4% 98.5%,#f3a11c 98.5% 98.9%,#ef5350 98.9% 100%);display:grid;place-items:center;position:relative}.donut:after{content:'';position:absolute;width:100px;height:100px;border-radius:50%;background:#fff}.donut span{position:relative;z-index:1;font-weight:800;font-size:19px;text-align:center}.donut span small{display:block;font-size:9px;color:#91a0b1;font-weight:500}.donut-wrap ul{list-style:none;padding:0;margin:0;min-width:125px}.donut-wrap li{font-size:9px;margin:12px 0;color:#61758f}.donut-wrap li b{float:right;color:#183b68}.dot{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:6px}.dot.green{background:#12a86b}.dot.blue{background:#0877ea}.dot.orange{background:#f3a11c}.dot.red{background:#ef5350}.alert-list{padding:6px 18px 18px}.alert-item{display:flex;gap:9px;align-items:center;padding:11px 0;border-bottom:1px solid #edf2f8}.alert-item:last-child{border-bottom:0}.alert-mark{width:25px;height:25px;border-radius:7px;display:grid;place-items:center;background:#fff1f0;color:#e95450;font-weight:800}.alert-item strong{display:block;font-size:10px}.alert-item span{display:block;font-size:8px;color:#95a1b1;margin-top:2px}.mini-table{padding:5px 18px 18px}.mini-row{display:grid;grid-template-columns:1.2fr 1.3fr .6fr;gap:8px;padding:10px 0;border-bottom:1px solid #edf2f8;font-size:9px}.mini-row.head{color:#95a1b1;font-size:8px}.status{display:inline-block;padding:4px 8px;border-radius:20px;font-size:8px;font-weight:700}.status.success{background:#e7f8f1;color:#0b9a62}.status.warning{background:#fff4df;color:#d58709}.status.danger{background:#fff0ef;color:#db4b47}.filter-bar{display:flex;gap:8px;margin-bottom:14px}.filter-bar input{flex:1;max-width:390px;margin:0}.filter-bar select{width:145px;margin:0}.table-panel{overflow:hidden}.table-toolbar{display:flex;align-items:center;justify-content:space-between;padding:13px 17px;border-bottom:1px solid #e8eff7}.table-toolbar h3{margin:0}.table-toolbar span{font-size:10px;color:#73869e}.table-toolbar b{color:#1c4e84}.table-scroll{overflow:auto}table{width:100%;border-collapse:collapse;min-width:850px}th,td{padding:12px 13px;text-align:left;border-bottom:1px solid #edf2f8;font-size:9px;white-space:nowrap}th{background:#f8fbfe;color:#7a8ca4;font-weight:700}td{color:#34506f}tbody tr:hover{background:#fbfdff}.product-cell{display:flex;align-items:center;gap:8px}.product-thumb{width:30px;height:30px;border-radius:6px;background:linear-gradient(135deg,#f3f7fc,#dbe8f7);display:grid;place-items:center;color:#547493;font-size:8px}.small-button{padding:5px 9px;font-size:9px}.form-layout{display:grid;grid-template-columns:1.6fr 1fr;gap:14px}.form-panel,.upload-panel,.qr-preview{padding:19px}.form-panel h3,.upload-panel h3,.qr-preview h3{margin-bottom:18px}.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0 14px}.form-panel textarea{resize:vertical}.dropzone{border:1.5px dashed #b8d4f0;border-radius:10px;min-height:180px;background:#f7fbff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:#6e86a0}.dropzone>strong{font-size:11px;color:#3f5b78}.dropzone>span{font-size:9px;color:#a0adbc}.dropzone button{margin-top:5px}.upload-thumbs{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}.upload-thumbs div{height:68px;border:1px solid #dce8f4;border-radius:7px;background:#f8fbff;display:grid;place-items:center;color:#9aaabc;font-size:9px}.qr-preview{margin-top:14px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}.qr-preview h3{margin:0 0 5px}.qr-preview p{font-size:9px;color:#8a99aa;margin:0}.qr-placeholder{width:100px;height:100px;border:8px solid #fff;outline:1px solid #d9e5f1;background:repeating-linear-gradient(45deg,#071e40 0 4px,#fff 4px 8px);display:grid;place-items:center;color:#fff;font-weight:900;font-size:18px;text-shadow:0 1px 3px #000}.qr-placeholder.large{width:210px;height:210px}.form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.scan-card{padding:20px;display:flex;align-items:center;gap:15px;margin-bottom:14px}.scan-icon{width:52px;height:52px;border-radius:12px;background:#e8f3ff;color:#0875e7;display:grid;place-items:center;font-size:23px}.scan-card h3{margin:0 0 3px}.scan-card p{font-size:9px;color:#8999aa;margin:0;flex:1}.scan-card input{width:230px;margin:0}.qr-management-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.qr-large{padding:30px;display:flex;flex-direction:column;align-items:center;text-align:center}.qr-large h3{margin-top:20px}.qr-large p{font-size:10px;color:#8898aa}.button-row{display:flex;gap:8px}.timeline-panel{padding:12px 22px}.timeline-item{display:grid;grid-template-columns:18px 1fr auto;gap:12px;align-items:center;padding:17px 0;border-bottom:1px solid #edf2f8}.timeline-item:last-child{border-bottom:0}.timeline-item>i{width:11px;height:11px;border-radius:50%;box-shadow:0 0 0 4px #eaf3fc}.timeline-item>i.green{background:#12a86b}.timeline-item>i.blue{background:#0877ea}.timeline-item>i.gray{background:#9aa9ba}.timeline-item strong{display:block;font-size:11px}.timeline-item span{display:block;font-size:9px;color:#8d9aaa;margin-top:3px}.timeline-item>b{font-size:9px;color:#6f829b}.period-select{border:1px solid #cfe0f2;border-radius:7px;padding:8px}.tall{min-height:330px}.cards-2{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}.company-card{padding:22px}.company-card h3{font-size:16px}.company-card span{display:block;color:#71849d;font-size:10px;margin:5px 0 18px}.company-card strong{font-size:12px}.settings-list{overflow:hidden}.settings-list button{width:100%;border:0;background:#fff;border-bottom:1px solid #edf2f8;text-align:left;padding:17px 20px;display:grid;grid-template-columns:1fr auto;position:relative}.settings-list button:hover{background:#f8fbff}.settings-list span{font-weight:700;font-size:11px}.settings-list small{color:#8998a9;font-size:9px;margin-top:4px}.settings-list b{grid-row:1/3;grid-column:2;align-self:center;color:#9aa9ba;font-size:18px}.event-type{font-weight:800;font-size:9px}.event-type.danger{color:#dc4c48}.event-type.warning{color:#d88908}
@media(max-width:980px){.sidebar{width:205px;flex-basis:205px}.page-container{padding:20px}.kpi-grid{grid-template-columns:repeat(2,1fr)}.dashboard-grid,.bottom-grid,.form-layout,.qr-management-grid{grid-template-columns:1fr}.login-card{grid-template-columns:1fr}.login-brand-panel{display:none}.login-form-panel{padding:50px}.topbar{padding:0 20px}}
@media(max-width:720px){.sidebar{position:fixed;left:-235px;transition:.2s}.sidebar.open{left:0}.mobile-menu{display:block}.topbar-actions .header-action span{display:none}.page-container{padding:16px}.page-heading{align-items:flex-start;gap:12px}.page-heading h2{font-size:20px}.filter-bar{flex-wrap:wrap}.filter-bar input{max-width:none;flex-basis:100%}.filter-bar select{flex:1}.scan-card{flex-wrap:wrap}.scan-card input{width:100%}.kpi-grid{gap:9px}.kpi-card{padding:13px}.kpi-card strong{font-size:21px}.topbar-left span{display:none}.user-menu>div:not(.avatar){display:none}.form-grid{grid-template-columns:1fr}.login-form-panel{padding:35px 25px}.login-card{min-height:auto}.cards-2{grid-template-columns:1fr}}

/* ===== 가독성 개선 ===== */

/* 전체 기본 글자 */
body {
    font-size: 14px;
}

/* 좌측 메뉴 */
.nav-item {
    font-size: 15px;
}

.nav-group-label {
    font-size: 12px;
    font-weight: 600;
}

.nav-badge {
    font-size: 11px;
}

/* 상단 */
.topbar {
    font-size: 14px;
}

.user-menu {
    font-size: 14px;
}

/* 페이지 제목 */
.page-heading h1,
.page-heading h2 {
    font-size: 22px;
}

.page-heading p {
    font-size: 14px;
}

/* 대시보드 KPI 카드 */
.kpi-card {
    font-size: 14px;
}

.kpi-card .label,
.kpi-card .title {
    font-size: 14px;
}

.kpi-card .value {
    font-size: 30px;
    line-height: 1.2;
}

.kpi-card .meta,
.kpi-card small {
    font-size: 13px;
}

/* 패널 제목 */
.panel-head h2,
.panel-head h3 {
    font-size: 16px;
}

.panel-head p {
    font-size: 13px;
}

/* 차트 */
.chart-labels {
    font-size: 12px;
}

.panel.chart-panel {
    font-size: 14px;
}

/* 테이블 */
.mini-table,
.mini-table th,
.mini-table td {
    font-size: 13px;
}

.mini-table th {
    font-weight: 600;
}

/* 상태 표시 */
.status {
    font-size: 12px;
}

/* 일반 버튼 */
.primary-button,
.outline-button,
.small-button,
.link-button {
    font-size: 14px;
}

/* 폼 */
label {
    font-size: 14px;
}

input,
select,
textarea {
    font-size: 14px;
}

/* 보조/설명 텍스트 */
.login-note,
.form-message {
    font-size: 13px;
}


/* ===== 가독성 2차 확대 ===== */

body {
    font-size: 15px;
}

/* 좌측 메뉴 */
.nav-item {
    font-size: 16px !important;
}

.nav-group-label {
    font-size: 13px !important;
}

.nav-badge {
    font-size: 12px !important;
}

/* 상단 */
.topbar {
    font-size: 15px;
}

.user-menu {
    font-size: 15px !important;
}

/* 페이지 제목 */
.page-heading h1,
.page-heading h2 {
    font-size: 24px !important;
}

.page-heading p {
    font-size: 15px !important;
}

/* KPI 카드 */
.kpi-card .label,
.kpi-card .title {
    font-size: 15px !important;
}

.kpi-card .value {
    font-size: 30px !important;
}

.kpi-card .meta,
.kpi-card small {
    font-size: 14px !important;
}

/* 패널 */
.panel-head h2,
.panel-head h3 {
    font-size: 17px !important;
}

.panel-head p {
    font-size: 14px !important;
}

/* 차트 */
.chart-labels {
    font-size: 13px !important;
}

.panel.chart-panel {
    font-size: 15px;
}

/* 표 */
.mini-table,
.mini-table th,
.mini-table td {
    font-size: 14px !important;
}

.mini-table th {
    font-size: 13px !important;
    font-weight: 600;
}

/* 상태 */
.status {
    font-size: 13px !important;
}

/* 버튼 */
.primary-button,
.outline-button,
.small-button,
.link-button {
    font-size: 14px !important;
}

/* 검색/필터/입력 */
label {
    font-size: 15px !important;
}

input,
select,
textarea {
    font-size: 14px !important;
}

/* 설명/보조 문구 */
.login-note,
.form-message {
    font-size: 14px !important;
}


/* ===== 리스트 / 테이블 가독성 3차 확대 ===== */

/* 리스트 영역 기본 글자 */
.table-panel,
.table-scroll,
.table-toolbar,
.filter-bar,
.filter-bar.compact {
    font-size: 15px;
}

/* 일반 테이블 전체 */
.table-panel table,
.table-panel table th,
.table-panel table td,
.table-scroll table,
.table-scroll table th,
.table-scroll table td {
    font-size: 14px !important;
}

/* 테이블 헤더 */
.table-panel table th,
.table-scroll table th {
    font-size: 13px !important;
    font-weight: 600;
}

/* 테이블 본문 */
.table-panel table td,
.table-scroll table td {
    font-size: 14px !important;
}

/* 제품명 / 링크 */
.table-panel table td a,
.table-scroll table td a,
.table-panel table td button,
.table-scroll table td button {
    font-size: 14px !important;
}

/* 리스트 상단 건수 */
.table-toolbar {
    font-size: 14px !important;
}

/* 검색창 */
.filter-bar input,
.filter-bar select,
.filter-bar button,
.filter-bar.compact input,
.filter-bar.compact select,
.filter-bar.compact button {
    font-size: 14px !important;
}

/* CSV / 리스트 버튼 */
.table-toolbar button,
.table-toolbar .primary-button,
.table-toolbar .outline-button,
.table-toolbar .small-button {
    font-size: 14px !important;
}

/* 상태 배지 */
.table-panel .status,
.table-scroll .status {
    font-size: 13px !important;
    font-weight: 600;
}

/* 리스트 안의 일반 텍스트 */
.table-panel td,
.table-scroll td {
    line-height: 1.45;
}

/* 미니 리스트도 동일한 기준 적용 */
.mini-table td {
    font-size: 14px !important;
}

.mini-table th {
    font-size: 13px !important;
}

/* 페이지 내 리스트 설명 */
.page-container .table-panel p,
.page-container .table-panel .panel-head p {
    font-size: 14px !important;
}


/* ===== 화면별 세부 가독성 4차 확대 ===== */

/* 이력 조회 - 타임라인 */
.timeline-item {
    font-size: 15px !important;
}

.timeline-item strong,
.timeline-item .title,
.timeline-item h3 {
    font-size: 15px !important;
    font-weight: 600;
}

.timeline-item p,
.timeline-item small,
.timeline-item .meta,
.timeline-item .date {
    font-size: 13px !important;
}

/* 이력 조회 우측 정보 */
.detail-list {
    font-size: 14px !important;
}

.detail-list dt,
.detail-list dd {
    font-size: 14px !important;
}

/* 이상 이벤트 */
.alert-list {
    font-size: 15px !important;
}

.alert-list table th {
    font-size: 13px !important;
}

.alert-list table td {
    font-size: 14px !important;
}

.alert-list .event-type {
    font-size: 13px !important;
    font-weight: 600;
}

/* 설정 목록 */
.settings-list {
    font-size: 15px !important;
}

.settings-list > *,
.settings-list .setting-item {
    font-size: 15px !important;
}

.settings-list h3,
.settings-list strong,
.settings-list .title {
    font-size: 15px !important;
    font-weight: 600;
}

.settings-list p,
.settings-list small,
.settings-list .description,
.settings-list .meta {
    font-size: 13px !important;
}

/* 대시보드 미니 테이블 */
.mini-table {
    font-size: 14px !important;
}

.mini-table th {
    font-size: 13px !important;
}

.mini-table td {
    font-size: 14px !important;
}

/* 대시보드 차트 설명 */
.chart-panel .panel-head p,
.chart-panel .chart-labels,
.chart-panel small {
    font-size: 13px !important;
}

/* 도넛 차트 범례 */
.donut-wrap {
    font-size: 13px !important;
}

.donut-wrap .legend,
.donut-wrap .legend-item,
.donut-wrap small {
    font-size: 13px !important;
}

/* 대시보드 최근 이벤트 */
.alert-list .mini-row,
.alert-list .mini-row.head {
    font-size: 14px !important;
}

.alert-list .mini-row.head {
    font-size: 13px !important;
}

/* 공통 보조 텍스트 - 지나치게 작은 글씨 방지 */
.page-container small {
    font-size: 13px !important;
}

.page-container .meta {
    font-size: 13px !important;
}

/* 상태/이벤트 배지 */
.event-type,
.status {
    line-height: 1.4;
}

/* 상단 페이지 설명 */
.page-container > .page-heading p,
.page-container .page-heading p {
    font-size: 15px !important;
}

/* 검색/필터 영역 */
.filter-bar input::placeholder {
    font-size: 14px !important;
}


/* ===== 대시보드 최근 등록 제품 가독성 보정 ===== */

.dashboard-grid.bottom-grid .mini-table {
    font-size: 15px !important;
}

.dashboard-grid.bottom-grid .mini-table th {
    font-size: 13px !important;
    font-weight: 600 !important;
    padding-top: 8px !important;
    padding-bottom: 10px !important;
}

.dashboard-grid.bottom-grid .mini-table td {
    font-size: 15px !important;
    line-height: 1.5 !important;
    padding-top: 9px !important;
    padding-bottom: 9px !important;
}

.dashboard-grid.bottom-grid .mini-table td:first-child {
    font-size: 15px !important;
    font-weight: 500 !important;
}

.dashboard-grid.bottom-grid .mini-table td:nth-child(2) {
    font-size: 14px !important;
}

.dashboard-grid.bottom-grid .mini-table .status {
    font-size: 13px !important;
    font-weight: 600 !important;
    padding: 5px 12px !important;
}


/* ===== 대시보드 최근 등록 제품 가독성 보정 ===== */

.dashboard-grid.bottom-grid .mini-table {
    font-size: 15px !important;
}

.dashboard-grid.bottom-grid .mini-table th {
    font-size: 13px !important;
    font-weight: 600 !important;
    padding-top: 8px !important;
    padding-bottom: 10px !important;
}

.dashboard-grid.bottom-grid .mini-table td {
    font-size: 15px !important;
    line-height: 1.5 !important;
    padding-top: 9px !important;
    padding-bottom: 9px !important;
}

.dashboard-grid.bottom-grid .mini-table td:first-child {
    font-size: 15px !important;
    font-weight: 500 !important;
}

.dashboard-grid.bottom-grid .mini-table td:nth-child(2) {
    font-size: 14px !important;
}

.dashboard-grid.bottom-grid .mini-table .status {
    font-size: 13px !important;
    font-weight: 600 !important;
    padding: 5px 12px !important;
}


/* ===== 대시보드 최근 등록 제품 - 실제 구조 기준 ===== */

.dashboard-grid.bottom-grid .mini-table .mini-row {
    font-size: 15px !important;
}

.dashboard-grid.bottom-grid .mini-table .mini-row span {
    font-size: 15px !important;
    line-height: 1.5 !important;
}

.dashboard-grid.bottom-grid .mini-table .mini-row.head span {
    font-size: 13px !important;
    font-weight: 600 !important;
}

.dashboard-grid.bottom-grid .mini-table .mini-row .status {
    font-size: 13px !important;
    font-weight: 600 !important;
}


/* ===== 이상 이벤트 - 이벤트명 가독성 보정 ===== */

.alert-list .event-type,
.alert-list .event-type.danger,
.alert-list .event-type.warning {
    display: inline-block !important;
    font-size: 14px !important;
    line-height: 1.5 !important;
    font-weight: 700 !important;
}

.alert-list td:first-child .event-type,
.table-panel td:first-child .event-type {
    font-size: 14px !important;
    font-weight: 700 !important;
}

/* ===== 4-5단계: 모달 / 스캔 / 교정 ===== */
.modal-overlay{position:fixed;inset:0;background:#06183a99;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto;z-index:100}
.modal-box{background:#fff;border-radius:14px;width:min(560px,100%);box-shadow:0 24px 70px #06183a55}
.modal-box.wide{width:min(780px,100%)}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:15px 20px;border-bottom:1px solid #e8eff7}
.modal-head h3{margin:0;font-size:15px;color:#183b68}
.modal-body.form-panel{padding:20px}
.scan-box{margin-bottom:16px}
.scan-box video{width:100%;max-height:300px;background:#000;border-radius:10px;margin-bottom:8px;object-fit:cover}
.scan-row{display:flex;gap:8px;flex-wrap:wrap}
.form-panel .scan-row input{flex:1;min-width:160px;margin:0}
.scan-info{font-size:12px;color:#64748b;margin-top:8px}
.scan-info.ok{background:#e7f8f1;color:#0b6f48;padding:10px 12px;border-radius:8px}
.scan-info.warn{background:#fff4df;color:#9a6205;padding:10px 12px;border-radius:8px}
.corr-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:18px}
.corr-card{border:1px solid #d7e6f7;border-radius:10px;padding:14px}
.corr-card h4{margin:0 0 6px;font-size:13px}
.corr-card h4 small{color:#8a99aa;font-weight:500}
.corr-card p{font-size:11px;color:#71819a;margin:0 0 12px}
.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);padding:12px 18px;border-radius:9px;color:#fff;font-size:13px;z-index:200;box-shadow:0 10px 30px #0004;max-width:90vw}
.toast.ok{background:#0b9a62}.toast.warn{background:#d58709}.toast.err{background:#d43d3d}
@media(max-width:720px){.modal-overlay{padding:0}.modal-box,.modal-box.wide{width:100%;min-height:100%;border-radius:0}.corr-grid{grid-template-columns:1fr}.scan-row .primary-button,.scan-row .outline-button{flex:1;padding:14px}}


/* ===== 모달 ===== */
.modal-overlay{position:fixed;inset:0;background:#00000055;z-index:200;display:flex;align-items:center;justify-content:center;padding:20px}
.modal-box{background:#fff;border-radius:14px;box-shadow:0 24px 70px #0d2e5e30;width:min(520px,96vw);max-height:90vh;display:flex;flex-direction:column;overflow:hidden}
.modal-box.wide{width:min(860px,96vw)}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px 14px;border-bottom:1px solid var(--line);flex-shrink:0}
.modal-head h3{margin:0;font-size:15px}
.modal-body{padding:22px;overflow-y:auto;flex:1}

/* ===== 토스트 ===== */
.toast{position:fixed;bottom:30px;right:28px;background:#0e2f5a;color:#fff;padding:12px 20px;border-radius:10px;font-size:12px;font-weight:600;box-shadow:0 8px 24px #0c295440;z-index:999;animation:fadeUp .25s ease}
.toast.err{background:#d43d3d}
@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}

/* ===== 스캔 박스 ===== */
.scan-box{background:#f5faff;border:1px solid var(--line);border-radius:10px;padding:16px;margin-bottom:14px}
.scan-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.scan-row input{flex:1;min-width:160px;margin:0}
#scanVideo{width:100%;aspect-ratio:4/3;background:#000;border-radius:8px;margin-bottom:10px;display:block}
.scan-info{min-height:22px;font-size:12px;padding:8px 0}
.scan-info.ok{color:#0b9a62}
.scan-info.warn{color:#c47d0a}

/* ===== 교정 카드 ===== */
.corr-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:18px}
.corr-card{background:#f7fbff;border:1px solid var(--line);border-radius:10px;padding:18px}
.corr-card h4{margin:0 0 6px;font-size:13px}
.corr-card p{font-size:11px;color:#6c7e94;margin:0 0 14px}
.corr-card label{display:block;font-size:11px;font-weight:700;color:#395170;margin-bottom:12px}
.corr-card select,.corr-card textarea{width:100%;border:1px solid #d3e1f0;border-radius:8px;padding:9px 11px;font-size:12px;margin-top:5px}
@media(max-width:720px){.corr-grid{grid-template-columns:1fr}}

/* ===== detail-list ===== */
.detail-list{display:grid;gap:0}
.detail-list div{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid #edf2f8;font-size:12px}
.detail-list span{color:#71819a}
.detail-list b{text-align:right;max-width:60%}

/* ===== compact filter ===== */
.filter-bar.compact{margin-bottom:10px;padding:10px 0}

/* 온라인 / 동기화 상태 칩 */
.sync-chip{display:inline-flex;align-items:center;height:32px;padding:0 12px;border-radius:999px;font-size:12px;font-weight:600;border:1px solid transparent;white-space:nowrap}
.sync-chip.ok{background:#e8f8f0;color:#0b9a62;border-color:#bfe9d5}
.sync-chip.off{background:#fdecec;color:#d43d3d;border-color:#f6c6c6}
.sync-chip.sync{background:#fff6e5;color:#b7791f;border-color:#f3dba8}
@media (max-width:720px){.sync-chip{height:28px;padding:0 9px;font-size:11px}}

/* 제품 상세 / QR 관리의 Serial 목록: 가로 스크롤 없이 한 화면에 보이도록 */
#qrDetailBox table,#qrSerials table{min-width:0;width:100%}
#qrDetailBox .table-scroll,#qrSerials .table-scroll{overflow-x:visible}


/* 출하/입고 상세 모달: Serial 목록(가로 스크롤 없음) + 입고 정보 한 줄 요약 */
.modal-body .sub-title{margin:14px 0 8px;font-size:13px;color:#475569}
.modal-body .sub-title small{font-weight:500;color:#94a3b8}
.modal-serials{border:1px solid #e8eff7;border-radius:8px;max-height:260px;overflow-x:hidden;overflow-y:auto}
.modal-serials table{min-width:0!important;width:100%;table-layout:fixed}
.modal-serials th,.modal-serials td{white-space:normal;word-break:break-all;padding:8px 12px}
.modal-serials thead th{position:sticky;top:0}
.recv-brief{display:flex;align-items:center;flex-wrap:wrap;gap:6px 16px;background:#f8fbfe;border:1px solid #e8eff7;border-radius:8px;padding:10px 14px;font-size:13px;color:#34506f}
.recv-brief.muted{color:#94a3b8}
.recv-brief b{color:#183b68}
.recv-brief .rb-diff{color:#d43d3d}
.recv-brief small{color:#94a3b8}
.recv-brief .rb-note{color:#71819a}

/* 상세 모달 Serial 목록 글씨 키움 */
.modal-serials th{font-size:14px!important;font-weight:600;padding:10px 14px}
.modal-serials td{font-size:16px!important;padding:11px 14px;color:#27415f}
.modal-serials .status{font-size:13px!important;font-weight:700}

/* 이동 이력 Timeline 가독성 + 이상(빨강) 점 */
.timeline-item>i.red{background:#ef5350;box-shadow:0 0 0 4px #fdecec}
.timeline-item span{font-size:13px}
.timeline-item strong{font-size:15px}


/* ===== 이동 현황: 좌(제품명 목록) / 우(이력) 분할 ===== */
.split-view{display:grid;grid-template-columns:280px minmax(0,1fr);gap:14px;align-items:start}
.split-list{position:sticky;top:92px;display:flex;flex-direction:column;max-height:calc(100vh - 116px);overflow:hidden}
.split-search{padding:12px 12px 0}
.split-search input{width:100%;border:1px solid #d3e1f0;border-radius:8px;background:#fff;padding:10px 12px;outline:none;color:#193457;font-size:14px}
.split-search input:focus{border-color:#4b9df0;box-shadow:0 0 0 3px #0a7cff12}
.split-count{padding:9px 14px;font-size:12px;color:#73869e;border-bottom:1px solid #e8eff7}
.split-items{flex:1;min-height:80px;overflow-y:auto}
.split-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:0;border-bottom:1px solid #edf2f8;background:#fff;padding:9px 10px 9px 14px;font-size:15px;color:#34506f;cursor:pointer}
.split-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.split-move{flex:0 0 auto;width:30px;height:30px;border:1px solid #cddff2;border-radius:8px;background:#fff;color:#0864d8;font-size:16px;line-height:1;display:grid;place-items:center;cursor:pointer;padding:0}
.split-move:hover{background:#0878ed;border-color:#0878ed;color:#fff}
.split-item:hover{background:#f5faff}
.split-item.active{background:#e8f3ff;color:#0864d8;font-weight:700;box-shadow:inset 3px 0 0 #0878ed}
.split-empty{padding:48px 28px;text-align:center;color:#64748b;font-size:15px}
@media(max-width:980px){.split-view{grid-template-columns:1fr}.split-list{position:static;max-height:260px}}

/* ===== 제품별 이동 등록 모달 ===== */
.mv-product{display:flex;align-items:baseline;gap:10px;padding:10px 14px;margin-bottom:12px;border:1px solid #cfe2f8;border-radius:10px;background:#f5faff}
.mv-product small{color:#71819a;font-size:12px}.mv-product strong{font-size:17px;color:#0d2e5e}
.mv-serials{border:1px solid var(--line);border-radius:10px;margin-bottom:14px;overflow:hidden}
.mv-serials-head{display:flex;align-items:center;gap:12px;padding:10px 12px;border-bottom:1px solid #e8eff7;background:#f8fbfe}
.mv-serials-head input#mvSerQ{flex:1;min-width:0;margin:0;padding:8px 10px}
.mv-serials-head span{font-size:13px;color:#0864d8;font-weight:700;white-space:nowrap}
.mv-serial-list{max-height:240px;overflow-y:auto}
.mv-row{display:flex!important;align-items:center;gap:10px;padding:9px 14px!important;margin:0!important;border-bottom:1px solid #edf2f8;font-size:14px!important;color:#34506f;cursor:pointer;flex-wrap:wrap}
.mv-row:hover{background:#f5faff}.mv-row.off{opacity:.5;cursor:not-allowed}
.mv-row b{font-weight:700;color:#10264d}.mv-row span:last-child{color:#71819a;font-size:13px}
.mv-empty{padding:26px;text-align:center;color:#64748b;font-size:14px}
.mv-serials-foot{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-top:1px solid #e8eff7;font-size:12px;color:#73869e}

/* 제품 상세 LOT 현황: 가로 스크롤 없이 패널 너비에 맞춤 */
.lot-table{overflow-x:visible !important}
.lot-table table{min-width:0 !important;width:100%;table-layout:auto}
.lot-table th,.lot-table td{white-space:normal;word-break:break-word}

.danger-button{border:1px solid #f0b4b1;border-radius:8px;background:#fff5f4;color:#c93a35;padding:10px 14px;font-weight:700}
.danger-button:hover{background:#ffe9e7}
.danger-button:disabled{opacity:.5;cursor:not-allowed}
.danger-button.hidden{display:none}
.small-button.has-anomaly{border-color:#f0b4b1;color:#c93a35;background:#fff8f7}
.status.pink{background:#ffe9f1;color:#d6407a}

.hist-filters{display:flex;flex-wrap:wrap;gap:10px 8px;margin-bottom:14px;align-items:flex-end}
.hist-filters .hf{display:flex;flex-direction:column;gap:4px;min-width:96px}
.hist-filters .hf>label:first-child{font-size:11px;font-weight:700;color:#71819a}
.hist-filters select,.hist-filters input#hfSerial{border:1px solid #d3e1f0;border-radius:8px;background:#fff;padding:9px 10px;color:#193457;outline:none;min-width:96px;margin:0}
.hist-filters input#hfSerial{min-width:160px}
.hist-filters select:focus,.hist-filters input#hfSerial:focus{border-color:#4b9df0;box-shadow:0 0 0 3px #0a7cff12}
.hist-filters .hf-check{display:flex;align-items:center;height:38px;margin:0!important}
.hf-toggle{display:flex;align-items:center;gap:8px;height:38px;padding:0 12px 0 8px;border:1px solid #d3e1f0;border-radius:8px;background:#fff;color:#5a7089;font-weight:600}
.hf-toggle i{position:relative;width:34px;height:20px;border-radius:20px;background:#cbd6e4;transition:.15s;flex:0 0 34px}
.hf-toggle i:after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003;transition:.15s}
.hf-toggle.on{border-color:#f3c77a;background:#fff8ea;color:#c47d06}
.hf-toggle.on i{background:#f3a11c}
.hf-toggle.on i:after{left:16px}
.hf-toggle.danger.on{border-color:#f0b4b1;background:#fff5f4;color:#c93a35}
.hf-toggle.danger.on i{background:#ef5350}
.hist-filters .hf-action-btns{flex-direction:row;align-items:flex-end;gap:6px;min-width:unset}
.mv-all-button{font-weight:700;color:#0864d8;background:#f8fbff!important}

/* 이동 현황 필터 검색 입력창: 제품명/Serial을 버튼·콤보와 동일한 높이와 스타일로 통일 */
.hist-filters input {
  box-sizing: border-box;
  height: 38px;
  min-height: 38px;
  border: 1px solid #d3e1f0;
  border-radius: 8px;
  background: #fff;
  padding: 9px 10px;
  color: #193457;
  outline: none;
  margin: 0;
  font-size: 14px;
}
.hist-filters input:focus {
  border-color: #4b9df0;
  box-shadow: 0 0 0 3px #0a7cff12;
}
.hist-filters input::placeholder {
  color: #71819a;
}
.hist-filters .outline-button {
  box-sizing: border-box;
  height: 38px;
  min-height: 38px;
  padding: 9px 13px;
}

/* 이동 현황: 제품별 선택 패널 제거 - 전체 현황 단일 화면 */
.split-view{display:block!important;}
.split-view > .split-list{display:none!important;}
.split-view > .split-detail{width:100%!important;max-width:none!important;min-width:0!important;}

/* 이동 현황 테이블: 제품명 컬럼 확대 */
.ov-table{table-layout:fixed;width:100%;min-width:0}
.ov-table th,.ov-table td{overflow-wrap:anywhere;word-break:keep-all}
.ov-table th:nth-child(1){width:15%}.ov-table th:nth-child(2){width:16%}.ov-table th:nth-child(3){width:9%}
.ov-table th:nth-child(4){width:7%}.ov-table th:nth-child(5){width:9%}.ov-table th:nth-child(6){width:10%}
.ov-table th:nth-child(7){width:10%}.ov-table th:nth-child(8){width:9%}.ov-table th:nth-child(9){width:15%}
.ov-table td:last-child{white-space:normal}.ov-table td:last-child .small-button{margin:2px 2px 2px 0;padding-left:8px;padding-right:8px}
.ov-table .table-scroll,.table-scroll:has(.ov-table){overflow-x:hidden}
@media (max-width:1100px){.ov-table th,.ov-table td{padding-left:6px;padding-right:6px;font-size:12px}}

/* 이동 현황 페이징 */
.pg-size{display:inline-flex;align-items:center;gap:6px;margin-left:14px;font-size:13px;color:#5a7089}
.pg-size select{border:1px solid #d3e1f0;border-radius:8px;background:#fff;padding:5px 8px;color:#193457;font-size:13px}
.pager{display:flex;align-items:center;justify-content:center;gap:6px;padding:14px 10px}
.pg-btn{min-width:34px;height:34px;padding:0 8px;border:1px solid #d3e1f0;border-radius:8px;background:#fff;color:#34506f;font-weight:600;cursor:pointer}
.pg-btn:hover:not(:disabled):not(.active){background:#f5faff}
.pg-btn.active{background:#0878ed;border-color:#0878ed;color:#fff}
.pg-btn:disabled{opacity:.4;cursor:not-allowed}
.pager-info{margin-left:10px;font-size:13px;color:#71819a}

/* 이동 현황 필터: 한 줄 배치 (좁은 화면에서는 가로 스크롤) */
.hist-filters{flex-wrap:nowrap;gap:8px;overflow-x:auto;padding:2px 2px 4px}
.hist-filters .hf{flex:1 1 0;min-width:76px}
.hist-filters .hf:has(input){flex:1.6 1 0;min-width:110px}
.hist-filters .hf:has(button){flex:0 0 auto;min-width:0}
.hist-filters .hf select,.hist-filters .hf input{width:100%;min-width:0!important;box-sizing:border-box}
.hist-filters .hf>label{white-space:nowrap}
.hist-filters .hf-toggle{white-space:nowrap;gap:6px;padding:0 10px 0 6px;font-size:13px}
.hist-filters .outline-button{white-space:nowrap}

/* 이동 현황 필터: 입력·콤보·토글·버튼 높이를 38px로 통일 */
.hist-filters .hf select,.hist-filters .hf input,.hist-filters .hf-toggle,.hist-filters .outline-button{box-sizing:border-box;height:38px;min-height:38px;font-size:14px;line-height:1.2;padding-top:0;padding-bottom:0}
.hist-filters .hf-toggle{font-size:13px}
.hist-filters .hf input,.hist-filters .hf select{padding-left:10px;padding-right:10px}

/* 모바일 간편 입고/출하 화면 (logistics_staff) */
.field-view{min-height:100vh;background:#f4f9ff}
.fv-head{background:#06295d;color:#fff;padding:14px 16px;display:flex;justify-content:space-between;align-items:center;gap:8px}
.fv-head strong{display:block;font-size:17px}
.fv-head span{font-size:12px;opacity:.8}
.fv-link{background:transparent;border:1px solid #ffffff55;color:#fff;border-radius:8px;padding:7px 10px;font-size:12px;margin-left:6px}
.fv-main{padding:16px;max-width:520px;width:100%;margin:0 auto}
.fv-modes{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.fv-mode{height:68px;border-radius:14px;border:2px solid #d7e6f7;background:#fff;font-size:22px;font-weight:800;color:#10264d}
.fv-mode.active[data-fv-mode=receive]{background:#0878ed;border-color:#0878ed;color:#fff}
.fv-mode.active[data-fv-mode=ship]{background:#f39a18;border-color:#f39a18;color:#fff}
.fv-guide{margin:12px 2px;font-size:14px;color:#4b5f7c;line-height:1.5}
.fv-video{width:100%;max-height:52vh;object-fit:cover;border-radius:12px;background:#000;margin-bottom:10px}
.fv-cam{width:100%;height:56px;font-size:17px}
.fv-manual{display:flex;gap:8px;margin-top:12px}
.fv-manual input{flex:1;min-width:0;height:46px;border:1px solid #d3e1f0;border-radius:8px;background:#fff;padding:0 12px;font-size:16px;outline:none;color:#193457}
.fv-manual .outline-button{height:46px;padding:0 18px}
.fv-result{margin-top:14px;border-radius:12px;padding:0;font-size:14px;color:#4b5f7c}
.fv-result.ok,.fv-result.err{padding:14px 16px}
.fv-result.ok{background:#e6f7ef;border:1px solid #9be0c0;color:#0b6b45}
.fv-result.err{background:#fdeceb;border:1px solid #f3b4b1;color:#a62b27}
.fv-r-title{font-weight:800;font-size:15px}
.fv-r-main{font-size:20px;font-weight:800;margin:6px 0 2px;color:#10264d}
.fv-r-main small{font-size:13px;font-weight:600;color:#4b5f7c}
.fv-r-sub{font-size:14px;margin-top:4px}
.fv-log-title{margin:22px 2px 8px;font-size:12px;font-weight:800;color:#71819a;letter-spacing:1px}
.fv-log-row{display:grid;grid-template-columns:64px 40px 1fr;gap:8px;align-items:baseline;padding:9px 4px;border-bottom:1px solid #e3edf8;font-size:13px;color:#4b5f7c}
.fv-log-row b{color:#0b6b45}
.fv-log-row.err b{color:#a62b27}
.fv-log-empty{font-size:13px;color:#8a98ab;padding:8px 2px}
