*{box-sizing:border-box}body{margin:0;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;background:#f4f6fb;color:#1f2937}:root{--brand-blue: #527eb9;--brand-blue-dark: #345f99;--brand-blue-pale: #edf4fb;--brand-green: #74a76a;--brand-border: #dce6ef}.app{max-width:1360px;margin:0 auto;padding:16px}.app-header{margin-bottom:8px}.app-brand{display:inline-flex;align-items:center;gap:12px;color:#24354a;text-decoration:none}.app-brand-mark{width:42px;height:42px;display:grid;place-items:center;border-radius:12px;background:linear-gradient(145deg,var(--brand-blue),var(--brand-blue-dark));color:#fff;font-weight:800;letter-spacing:-2px;box-shadow:0 3px 8px #527eb933}.app-brand-copy{display:flex;flex-direction:column;gap:2px}.app-brand-copy strong{font-size:20px;line-height:1}.app-brand-copy>span{color:#607086;font-size:12px}.app-workspace{display:grid;grid-template-columns:250px minmax(0,1fr);gap:16px;align-items:start}.app-workspace.filters-collapsed{grid-template-columns:46px minmax(0,1fr)}.app-workspace.no-filters{display:block}.app-filter-sidebar{position:sticky;top:12px;min-width:0;z-index:2}.app-filter-sidebar .stats-filter-panel{width:250px;max-height:calc(100vh - 24px);overflow-y:auto}.app-workspace.filters-collapsed .app-filter-sidebar .stats-filter-panel{width:46px}.app-main{min-width:0}.tabs{display:flex;gap:8px;margin:12px 0 16px}.tab{padding:10px 18px;border:1px solid #d7dde8;background:#fff;cursor:pointer;font-size:15px;border-radius:8px;color:#445}.tab.active{background:var(--brand-blue);border-color:var(--brand-blue);color:#fff}.cascade-nav{display:flex;flex-direction:column;gap:8px;margin:-4px 0 16px;padding:10px 12px;background:#fff;border:1px solid #e2e7f0;border-radius:10px}.cascade-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.registry-section-title{min-width:155px;font-size:13px;font-weight:700;line-height:1.2;color:#556}.btn.small{padding:6px 10px;font-size:12px}.btn.active{background:#174cb8;box-shadow:inset 0 0 0 1px #ffffff59}.filter-choice{background:#fff;color:#345f99;border:1px solid #b9c9dd}.filter-choice:hover{background:#edf4fb;border-color:#527eb9}.filter-choice.active{background:#527eb9;border-color:#527eb9;color:#fff;box-shadow:inset 0 0 0 1px #ffffff59}.filter-choice-reset{color:#556;border-color:#cbd4e0}.filter-choice-reset:hover{background:#f4f6fb;border-color:#9aaabd}.content{display:flex;flex-direction:column;gap:16px}.production-groups{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:12px;background:#fff;border:1px solid #e2e7f0;border-radius:10px}.production-group-list{display:flex;flex-wrap:wrap;gap:6px;flex:1 1 100%}.production-group-chip{padding:5px 9px;border-radius:14px;background:#eef5ff;color:#2455a4;font-size:13px}.production-group-create,.production-group-delete{display:flex;gap:6px;align-items:center}.production-groups input,.production-groups select{padding:7px 8px;border:1px solid #cbd4e0;border-radius:6px;background:#fff}.production-group-create input{min-width:220px}.btn.danger{color:#000;border-color:#e4b4b4}.stats-filter-panel{width:250px;display:flex;flex-direction:column;gap:10px;align-self:start;background:#fff;border:1px solid #e2e7f0;border-radius:10px;padding:12px;box-shadow:0 3px 12px #23375a14;transition:width .2s ease,padding .2s ease}.stats-filter-header{display:flex;align-items:center;justify-content:space-between}.stats-filter-panel label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:#556}.stats-filter-panel select{width:100%;padding:7px 8px;border:1px solid #cbd4e0;border-radius:6px;background:#fff}.filter-hide{display:inline-flex;align-items:center;gap:2px;border:0;background:transparent;color:#2563eb;cursor:pointer;font-size:12px}.filter-reset{margin-top:4px;padding:7px 8px;border:1px solid #cbd4e0;border-radius:6px;background:#f8fafc;color:#334155;cursor:pointer;font-size:12px}.filter-reset:hover{background:#eef2f7;border-color:#94a3b8}.filter-arrow{font-size:23px;line-height:12px}.stats-filter-panel.collapsed{width:46px;padding:10px 7px}.stats-filter-panel.collapsed label,.stats-filter-panel.collapsed .filter-reset{display:none}.stats-filter-panel.collapsed .stats-filter-header{flex-direction:column;gap:10px}.stats-filter-panel.collapsed .stats-filter-header strong{writing-mode:vertical-rl;transform:rotate(180deg);font-size:12px;color:#667}.stats-filter-panel.collapsed .filter-hide{flex-direction:column}.stats-filter-panel.collapsed .filter-action-label{writing-mode:vertical-rl;font-size:11px}.dashboard-content{display:block;min-width:0}.dashboard-info{position:relative;margin:0 0 16px;min-height:14px;padding:18px 16px 0;background:linear-gradient(135deg,#f8fbff,#eef5ff);border:1px solid #cbdcf7;border-top:5px solid #2f6fed;border-radius:10px;color:#334155}.dashboard-info:not(.is-open){min-height:14px;height:14px;padding:0;border-top-width:5px}.dashboard-info-toggle{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;border-radius:50%;background:#2f6fed;color:#fff;cursor:pointer;font:700 18px/1 Georgia,serif;font-style:italic;position:absolute;top:-19px;left:50%;transform:translate(-50%);z-index:1}.dashboard-info-toggle:hover,.dashboard-info-toggle:focus{background:#174cb8;outline:2px solid #a9c7f5;outline-offset:2px}.dashboard-info.is-open{padding-bottom:14px}.dashboard-info-heading{display:flex;align-items:flex-start;gap:10px}.dashboard-info-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 22px;width:22px;height:22px;margin-top:1px;border-radius:50%;background:#2f6fed;color:#fff;font:700 15px/1 Georgia,serif;font-style:italic}.dashboard-info h3{margin:0;color:#1e3a63;font-size:15px}.dashboard-info-heading p{margin:3px 0 0;color:#526681;font-size:12px}.dashboard-info-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:12px;padding-top:12px;border-top:1px solid #d8e5f7}.dashboard-info-grid div{display:flex;flex-direction:column;gap:4px}.dashboard-info-grid strong{color:#334e73;font-size:12px}.dashboard-info-grid span{color:#5c6f89;font-size:12px;line-height:1.4}.dashboard-chart-tooltip{min-width:220px;max-width:330px;padding:9px 11px;background:#fff;border:1px solid #cbd5e1;border-radius:8px;box-shadow:0 5px 16px #1e325029;color:#334155;font-size:12px}.dashboard-chart-tooltip strong{display:block;margin-bottom:5px;color:#1e3a63}.dashboard-chart-tooltip div+div{margin-top:3px}.dashboard-chart-tooltip small{display:block;margin-top:7px;color:#64748b;line-height:1.35}@media (max-width: 1100px){.dashboard-info-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 600px){.dashboard-info-grid{grid-template-columns:1fr}}@media (max-width: 900px){.app-workspace,.app-workspace.filters-collapsed{display:flex;flex-direction:column}.app-filter-sidebar{position:sticky;top:8px;width:100%}.app-filter-sidebar .stats-filter-panel,.app-workspace.filters-collapsed .app-filter-sidebar .stats-filter-panel{width:100%;max-height:none}.app-workspace.filters-collapsed .app-filter-sidebar .stats-filter-panel{width:46px}}.page-heading h2{margin:0 0 4px;font-size:20px}.page-heading p{margin:0}.back-link{align-self:flex-start;padding:0;border:0;background:transparent;color:#2563eb;cursor:pointer;font-size:14px}.back-link:hover{text-decoration:underline}.registry-catalog{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,260px));gap:18px;align-items:start}.registry-tile{aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:22px;border:1px solid #d7dde8;border-radius:14px;background:#fff;color:#1f2937;cursor:pointer;text-align:center;box-shadow:0 2px 8px #23375a0f;transition:border-color .15s,box-shadow .15s,transform .15s}.registry-tile:hover{border-color:var(--brand-blue);box-shadow:0 8px 20px #527eb929;transform:translateY(-2px)}.registry-tile-icon{font-size:42px;line-height:1}.registry-tile-title{font-size:19px;font-weight:700}.registry-tile-description{max-width:190px;color:#667;font-size:13px;line-height:1.35}.toolbar{display:flex;gap:16px;align-items:center;background:#fff;padding:12px;border-radius:8px;border:1px solid #e2e7f0}.registry-cascade-toolbar{margin-top:16px}.toolbar label{display:flex;align-items:center;gap:6px}.toolbar select{padding:6px 8px;border-radius:6px;border:1px solid #cbd4e0}.count{margin-left:auto;color:#667}.btn{padding:8px 14px;border:none;border-radius:6px;background:#2563eb;color:#fff;cursor:pointer;font-size:14px}.btn:disabled{opacity:.6;cursor:default}.btn.danger{background:#dc2626}.hint{color:#667;font-size:13px}.msg{color:#2563eb;font-size:13px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.card{position:relative;background:#fff;border:1px solid #e2e7f0;border-radius:10px;padding:14px}.dashboard-export-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:10px 0 14px;padding:10px 12px;background:#fff;border:1px solid #e2e7f0;border-radius:10px;color:#526681;font-size:13px}.dashboard-export-toolbar .btn{padding:5px 12px}.card-label{font-size:12px;color:#778;text-transform:uppercase;letter-spacing:.4px}.card-value{font-size:22px;font-weight:700;margin-top:6px}.troudo-lines{margin-top:10px;font-size:14px;color:#556;line-height:1.6;text-align:center}.troudo-lines b{color:#223}.chart-card{min-width:0}.analytics-trends .chart-card{isolation:isolate}.analytics-trends .chart-card .info-wrap{z-index:20}.analytics-trends .chart-card .recharts-legend-wrapper{z-index:0!important}.chart-title-block{min-height:42px;display:flex;align-items:flex-start;padding-right:24px}.chart-title{margin:0;font-size:15px;color:#34;line-height:1.35}.chart-body{min-width:0}.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:16px}.grid4{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;align-items:start}.direction-dashboard-grid .chart-card{height:auto;min-height:420px;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;padding-left:10px;padding-right:10px}.direction-dashboard-grid .direction-chart-card{grid-column:span 2}.direction-dashboard-grid .direction-chart-card .chart-legend-slot,.direction-dashboard-grid .direction-chart-card .chart-average-slot{display:none}.direction-dashboard-grid .chart-subtitle{height:36px;min-height:36px;padding-right:26px;display:flex;align-items:flex-start;line-height:1.35;overflow:hidden;overflow-wrap:anywhere}.direction-dashboard-grid .chart-legend-slot{height:25px;min-height:25px;display:flex;align-items:flex-start}.direction-dashboard-grid .chart-average-slot{height:58px;min-height:58px}.direction-dashboard-grid .chart-average{height:38px;box-sizing:border-box;margin:8px 0 10px}.direction-dashboard-grid .chart-content{height:auto;min-height:220px;display:flex;align-items:flex-start;justify-content:flex-start;min-width:0;width:100%}.direction-dashboard-grid .chart-content>.recharts-responsive-container{flex:1 1 auto;align-self:flex-start;min-width:0;min-height:220px;width:100%!important}.chart-frame{width:100%;min-width:0}.direction-dashboard-grid .chart-frame,.enterprise-dashboard-grid .chart-frame{flex:1 1 auto;align-self:flex-start;min-width:0}.direction-dashboard-grid .chart-content>.recharts-responsive-container .recharts-wrapper,.enterprise-dashboard-grid .chart-content>.recharts-responsive-container .recharts-wrapper{margin-left:0!important;margin-right:0!important}.enterprise-dashboard-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.enterprise-dashboard-grid>.chart-card:last-child{grid-column:auto}.enterprise-dashboard-grid .enterprise-chart-card{height:520px;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;padding-left:10px;padding-right:10px}.enterprise-dashboard-grid .chart-subtitle{height:36px;min-height:36px;padding-right:26px;display:flex;align-items:flex-start;line-height:1.35;overflow:hidden}.enterprise-dashboard-grid .chart-legend-slot{height:25px;min-height:25px;display:flex;align-items:flex-start}.enterprise-dashboard-grid .chart-average-slot{height:58px;min-height:58px}.enterprise-dashboard-grid .chart-average{height:38px;box-sizing:border-box;margin:8px 0 10px}.enterprise-dashboard-grid .chart-content{height:300px;min-height:300px;display:flex;align-items:flex-start;justify-content:flex-start;width:100%}.enterprise-dashboard-grid .chart-content>.recharts-responsive-container{flex:1 1 auto;align-self:flex-start;min-width:0;width:100%!important}@media (max-width: 1100px){.grid4,.enterprise-dashboard-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}}@media (max-width: 700px){.grid4,.enterprise-dashboard-grid{grid-template-columns:1fr;gap:14px}.direction-dashboard-grid .direction-chart-card{grid-column:auto}.direction-dashboard-grid .recharts-yAxis .recharts-cartesian-axis-tick text,.enterprise-dashboard-grid .recharts-yAxis .recharts-cartesian-axis-tick text{font-size:10px}.direction-dashboard-grid .chart-subtitle{height:48px;min-height:48px}.enterprise-dashboard-grid .enterprise-chart-card{height:500px}.enterprise-dashboard-grid .chart-subtitle{height:48px;min-height:48px}.enterprise-dashboard-grid .chart-content{height:300px;min-height:300px}}@media (max-width: 420px){.direction-dashboard-grid .chart-card,.enterprise-dashboard-grid .enterprise-chart-card{padding:10px}.direction-dashboard-grid .chart-color-legend,.enterprise-dashboard-grid .chart-color-legend{gap:6px 9px;font-size:10px}}.empty{color:#99a;font-size:13px;padding:10px 0;text-align:center}.dash-metric{margin-bottom:20px}.chart-subtitle{margin:0 0 8px;font-size:13px;color:#667;font-weight:600}.chart-color-legend{display:flex;flex-wrap:wrap;gap:8px 14px;margin:-2px 0 6px;color:#667;font-size:11px}.chart-color-legend span{display:inline-flex;align-items:center;gap:5px}.chart-color-legend i{display:inline-block;width:12px;height:8px;border-radius:2px}.dashboard-export-render{background:#fff;padding:18px 20px 20px;border:1px solid #dce4ef;border-radius:12px;box-sizing:border-box}.dashboard-export-render>.dashboard-section-title{box-sizing:border-box;height:48px;min-height:48px;margin:0 0 16px;padding:0 0 10px;border-bottom:3px solid #20334f;color:#20334f;font-family:Arial,sans-serif;font-size:22px;font-weight:800;line-height:1.2;letter-spacing:.1px;display:flex;align-items:flex-start}.dashboard-export-render .enterprise-dashboard-grid{gap:16px}.dashboard-export-render .enterprise-chart-card{border:1px solid #d6dfeb;border-top:4px solid #9dbde4;border-radius:8px;box-shadow:0 2px 8px #20334f14;background:#fff}.dashboard-export-render .chart-subtitle{color:#20334f;font-family:Arial,sans-serif;font-size:15px;font-weight:750;line-height:1.28}.dashboard-export-render .chart-color-legend{color:#506176;font-size:11px;font-weight:600}.dashboard-export-render .chart-average strong{color:#20334f;font-size:18px;font-weight:800}.chart-average{display:flex;align-items:center;justify-content:center;gap:12px;min-height:38px;margin:8px 0 10px;padding:7px 10px;border:1px solid #d8dee9;border-left:1px solid #d8dee9;border-radius:5px;background:linear-gradient(0deg,#e5e7eb,#f3f4f6);color:#556;font-size:12px}.chart-average strong{color:#223;font-size:17px;line-height:1}.chart-average-red{background:linear-gradient(0deg,#ff000080,#f003)}.chart-average-yellow{background:linear-gradient(0deg,#ffc0008a,#ffc00038)}.chart-average-green{background:linear-gradient(0deg,#00b05080,#00b05033)}.chart-average-none{background:linear-gradient(0deg,#9ca3af80,#9ca3af33)}.dash-legend{display:flex;flex-wrap:wrap;gap:16px;margin:4px 0 14px;font-size:12px;color:#556}.dash-legend span{display:inline-flex;align-items:center;gap:6px}.dash-legend i{display:inline-block;width:14px;height:10px;border-radius:2px}.roadmap-tip{background:#fff;border:1px solid #d8dee9;border-radius:8px;padding:8px 10px;font-size:12px;box-shadow:0 2px 8px #00000014;position:absolute;pointer-events:none;white-space:nowrap}.roadmap-tip-cat{font-weight:700}.roadmap-tip div+div{margin-top:3px}.roadmap-chart{margin-top:12px}.hint{color:#99a;font-size:12px;margin-top:8px}.track-legend{display:flex;flex-wrap:wrap;gap:14px;margin:6px 0;font-size:12px;color:#556}.track-legend span{display:inline-flex;align-items:center;gap:5px}.track-legend i{display:inline-block;width:12px;height:8px;border-radius:2px}.timeline-wrap{position:relative;overflow-x:auto}.date-range-filter{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:4px 0 2px;font-size:13px;color:#556}.date-range-filter .date-range-label{font-weight:600}.date-range-filter label{display:inline-flex;align-items:center;gap:5px}.date-range-filter input[type=date]{padding:3px 6px;border:1px solid #d8dee9;border-radius:6px;font-size:13px}.drilldown{margin-top:8px}.drilldown-head{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:10px}.drilldown-head h3{font-size:16px}.drilldown h4{margin:14px 0 8px}.table-block{position:relative;background:#fff;border:1px solid #e2e7f0;border-radius:10px;padding:14px;overflow-x:auto}.table-block.constrained{max-height:76vh;overflow-y:auto}.table-block h3{margin:0 0 10px;font-size:16px}.table-block table.wrap-first th:first-child,.table-block table.wrap-first td:first-child{white-space:normal;word-break:break-word;min-width:140px;max-width:260px}.info-wrap{position:absolute;top:8px;right:8px;z-index:5;display:inline-flex}.info-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:1px solid #b9c2d6;border-radius:50%;color:#6b7a99;background:#fff;font-family:Georgia,serif;font-style:italic;font-size:13px;font-weight:700;line-height:1;cursor:help;-webkit-user-select:none;user-select:none}.info-icon:hover,.info-icon:focus{background:#eef2f9;color:#2f6fed}.info-tooltip{position:absolute;top:26px;right:0;width:320px;max-width:calc(100vw - 40px);background:#fff;border:1px solid #d3d9e6;border-radius:8px;box-shadow:0 6px 18px #1e28462e;padding:10px 12px;font-size:12.5px;font-weight:400;line-height:1.5;text-align:left;color:#334;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .15s ease;z-index:50}.info-wrap:hover .info-tooltip,.info-wrap:focus-within .info-tooltip{opacity:1;visibility:visible}.registry-table{overflow:hidden}.registry-table .top-scroll{overflow-x:auto;overflow-y:hidden;transform:rotateX(180deg);margin:-4px 0}.registry-table .top-scroll table{transform:rotateX(180deg)}.top-scroll::-webkit-scrollbar{height:10px}.top-scroll::-webkit-scrollbar-thumb{background:#c4cfdf;border-radius:5px}.top-scroll::-webkit-scrollbar-thumb:hover{background:#a8b6cc}table{border-collapse:collapse;width:100%;font-size:13px}th,td{border-bottom:1px solid #edf1f7;padding:6px 8px;text-align:left;white-space:nowrap}th{background:#f7f9fd;position:sticky;top:0}.registry-table .filter-row th{background:#eef2f9;top:32px;padding:4px 6px}.registry-table .filter-row select.col-filter{width:100%;max-width:180px;padding:3px 4px;font-size:12px;border:1px solid #cbd4e0;border-radius:5px;background:#fff}.registry-table th>select.col-filter{display:block;width:100%;max-width:180px;margin-top:5px;padding:3px 4px;font-size:12px;border:1px solid #cbd4e0;border-radius:5px;background:#fff}.registry-table .filter-row .date-filter{display:flex;flex-direction:column;gap:3px}.registry-table .filter-row .date-filter select.col-filter{min-width:96px}.registry-table .filter-row .range-filter{display:flex;gap:3px}.registry-table .filter-row .range-filter input.col-filter{width:62px;padding:3px 4px;font-size:12px;border:1px solid #cbd4e0;border-radius:5px;background:#fff}.registry-table .filter-row .procent-filter{display:flex;flex-direction:column;gap:3px}.registry-table th{min-width:90px}.registry-table .cell-edit{margin-left:6px;padding:1px 4px;border:0;border-radius:4px;color:#52627a;background:transparent;cursor:pointer}.registry-table .cell-edit:hover{background:#e8eef8;color:#1f5fd1}.registry-table .editing-cell{min-width:220px}.registry-table .cell-editor{display:inline-flex;align-items:center;gap:4px}.registry-table .cell-editor input,.registry-table .cell-editor select{max-width:180px;min-width:90px;padding:4px}.registry-table .cell-editor button,.registry-table .row-actions button{padding:4px 7px;border:1px solid #cbd4e0;border-radius:4px;background:#fff;cursor:pointer}.registry-table .row-actions .danger{color:#b42318;border-color:#e6b8b4}.badge,.source{display:inline-block;padding:2px 8px;border-radius:20px;font-size:12px;font-weight:600;color:#fff}.badge.gala{background:#9b59b6}.badge.toir{background:#2f6fed}.badge.ok{background:#16a34a}.badge.fail{background:#dc2626}.badge.gray{background:#8a94a6}.l-cell{color:#b03a2e;font-weight:600}.pager{display:flex;gap:12px;align-items:center;justify-content:center;padding:8px}.pager button{padding:6px 14px;border-radius:6px;border:1px solid #c6d;background:#fff;cursor:pointer}.pager button:disabled{opacity:.4;cursor:default}.empty{padding:20px;color:#99a;text-align:center}.upload-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:16px;align-items:start}.upload{background:#fff;border:1px solid #e2e7f0;border-radius:10px;padding:14px;min-width:0}.upload-form{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-top:8px}.upload .fld{display:flex;flex-direction:column;gap:4px;font-size:13px;color:#556}.upload input[type=file]{padding:4px}.upload select{padding:8px 12px;border-radius:6px;border:1px solid #c6d4e0;min-width:150px}.upload .period-row{display:flex;gap:6px}.upload .btn{padding:8px 14px}.batch-count{font-size:13px;color:#556;font-weight:600;align-self:center;display:inline-flex;align-items:center;gap:8px}.batch-results{margin-top:8px;font-size:13px;color:#445;line-height:1.6}.batch-results div+div{margin-top:2px}.batch-modal-list{max-height:60vh}.batch-table{width:100%;border-collapse:collapse;font-size:13px}.batch-table th,.batch-table td{padding:6px 8px;text-align:left;white-space:nowrap}.batch-table th{background:#f7f9fd;position:sticky;top:0}.batch-table th.cb,.batch-table td.cb{width:28px;text-align:center}.batch-table td.fname{max-width:320px;overflow:hidden;text-overflow:ellipsis;color:#223}.batch-table td.fpath{color:#778;max-width:320px;overflow:hidden;text-overflow:ellipsis}.batch-table tbody tr.sel td.fname,.batch-table tbody tr.sel td.fpath{font-weight:600}.batch-table tbody tr{border-top:1px solid #f3f6fb}.upload .period-row select{min-width:0}.upload-result{margin-top:12px;border:1px solid #e2e7f0;border-radius:8px;padding:12px}.result-banner{font-size:18px;font-weight:700;color:#b03a2e;background:#fdecec;padding:8px 12px;border-radius:6px}.upload-detail{margin-top:8px;font-size:14px}.upload-meta{margin-top:4px;color:#667;font-size:13px}.error{margin-top:10px;color:#b03a2e;background:#fdecec;padding:8px 12px;border-radius:6px}.history td.dup-cell{color:#b03a2e;font-weight:700}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;align-items:center;justify-content:center;z-index:50;padding:16px}.modal{background:#fff;border-radius:12px;width:min(1040px,100%);max-height:90vh;display:flex;flex-direction:column;padding:18px 20px;box-shadow:0 20px 60px #00000040}.modal h3{margin:0 0 6px}.modal-hint{margin:0 0 12px;color:#556;font-size:13px}.modal-list{overflow:auto;border:1px solid #e2e7f0;border-radius:8px}.modal-head,.modal-row{display:grid;grid-template-columns:40px 1.3fr 1fr 1.3fr;gap:8px;align-items:center;padding:6px 10px}.modal-head{background:#f7f9fd;font-size:12px;color:#667;text-transform:uppercase;letter-spacing:.3px;position:sticky;top:0}.modal-row{border-top:1px solid #edf1f7;font-size:13px}.modal-row .pos{color:#99a;font-size:12px}.modal-row .hdr{font-weight:600}.modal-row .hdr em{display:block;font-weight:400;color:#889;font-size:12px}.modal-row .examples code{display:inline-block;background:#eef2f9;border-radius:4px;padding:1px 6px;margin-right:4px;font-size:11px;color:#445}.conf{margin-left:6px;font-size:11px;border-radius:10px;padding:1px 7px;font-weight:700}.conf.hi{background:#e6f6ec;color:#1f9d55}.conf.mid{background:#fff4e0;color:#b7791f}.modal-row .field{display:flex;gap:4px;align-items:center}.modal-row select{flex:1;padding:5px 6px;border-radius:6px;border:1px solid #cbd4e0;font-size:13px}.modal-row .mv{width:26px;height:26px;border:1px solid #c6d4e0;border-radius:6px;background:#fff;cursor:pointer;font-size:13px}.modal-row .mv:disabled{opacity:.35;cursor:default}.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:14px}.modal-actions button{padding:9px 18px;border-radius:8px;font-size:14px;cursor:pointer;border:1px solid #c6d4e0}.modal-actions .cancel{background:#fff}.modal-actions .ok{background:#2f6fed;color:#fff;border-color:#2f6fed;font-weight:600}.modal-actions .ok:disabled,.modal-actions .cancel:disabled{opacity:.5;cursor:default}.login-wrap{display:flex;justify-content:center;padding:80px 16px 24px;min-height:100vh;background:radial-gradient(ellipse at 50% 0,#e7f0fa 0,#f4f6fb 60%)}.login{background:#fff;border:1px solid var(--brand-border);border-top:4px solid var(--brand-green);border-radius:14px;padding:28px;width:min(380px,100%);display:flex;flex-direction:column;gap:14px;box-shadow:0 12px 36px #23375a17;align-self:flex-start}.login-brand{display:flex;align-items:center;gap:12px;padding-bottom:14px;border-bottom:1px solid #edf1f5}.login-brand-mark{width:48px;height:48px;display:grid;place-items:center;flex:0 0 48px;border-radius:14px;background:linear-gradient(145deg,var(--brand-blue),var(--brand-blue-dark));color:#fff;font-weight:800;font-size:17px;letter-spacing:-2px;box-shadow:0 3px 8px #527eb933}.login-brand div{display:flex;flex-direction:column;gap:3px}.login-brand strong{font-size:21px;color:#24354a}.login-brand span{font-size:12px;color:#607086}.login h2{margin:0 0 6px;font-size:18px}.login label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:#445}.login input{padding:9px 10px;border:1px solid #cbd4e0;border-radius:6px;font-size:14px}.login button{padding:10px;border:none;border-radius:6px;background:var(--brand-blue);color:#fff;font-size:15px;cursor:pointer}.login button:disabled{opacity:.6}.login-error{color:#dc2626;font-size:13px;border:1px solid #fecaca;background:#fef2f2;padding:8px 10px;border-radius:6px}.app-header{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.user-info{display:flex;align-items:center;gap:10px;font-size:14px;color:#445;background:#fff;padding:8px 12px;border-radius:8px;border:1px solid #e2e7f0}.user-info button{border:1px solid #d7dde8;background:#fff;border-radius:6px;padding:6px 12px;cursor:pointer;font-size:13px}.user-form{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap}.user-form input,.user-form select{padding:8px 10px;border:1px solid #cbd4e0;border-radius:6px;font-size:14px}.user-form button{padding:8px 16px;border:none;border-radius:6px;background:#2563eb;color:#fff;cursor:pointer;font-size:14px}.users-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid #e2e7f0;border-radius:8px}.users-table th,.users-table td{padding:10px 12px;text-align:left;border-bottom:1px solid #eef1f7;font-size:14px}.users-table th{background:#f8fafc;color:#556}.users-table .user-actions{display:flex;gap:8px;align-items:center}.users-table .user-actions button{border:none;border-radius:6px;background:#2563eb;color:#fff;padding:6px 12px;cursor:pointer;font-size:13px}.users-table .user-actions button:hover{background:#1d4ed8}.users-table .user-actions .btn-danger{background:#dc2626}.users-table .user-actions .btn-danger:hover{background:#b91c1c}.users-table .muted-hint{font-size:12px;color:#8a94a6;cursor:help}.btn-danger{border:none;border-radius:6px;background:#dc2626;color:#fff;padding:6px 12px;cursor:pointer;font-size:13px}.ok-msg{color:#15803d;font-size:13px;margin-bottom:10px}.cascade-reset{background:#6b7280;border-color:#6b7280;color:#fff}.cascade-reset:hover{background:#4b5563;border-color:#4b5563}
