:root{
  --bg:#f5f6fa; --bg-elev:#ffffff; --bg-card:#ffffff; --bg-hover:#eef0f6;
  --border:#e3e6ee; --border-strong:#d0d5e1;
  --text:#1a1f36; --text-dim:#5a6581; --text-muted:#8892a8;
  --accent:#3b63c7; --accent-2:#5b8cff;
  --good:#0f9d58; --bad:#d93025; --warn:#f4a402;
  --rf:#3b63c7; --pfo:#a855f7; --perm:#0f9d58; --bash:#e68a00;
  --perm-soft:#e8f5ee; --bash-soft:#fdf3e4; --other-soft:#fafbfd; --total-soft:#f0f2f7;
  --radius:10px; --shadow:0 1px 3px rgba(20,30,60,0.06),0 1px 2px rgba(20,30,60,0.04);
  --shadow-hover:0 4px 14px rgba(20,30,60,0.08);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%;background:var(--bg);color:var(--text);font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:16px}
.hidden{display:none !important}

/* Auth gate */
#auth-gate{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(180deg,#eef1f8,var(--bg));z-index:10000;padding:16px}
.auth-card{background:#fff;border:1px solid var(--border);border-radius:14px;padding:36px 32px;max-width:400px;width:100%;box-shadow:0 10px 40px rgba(20,30,60,0.12)}
.auth-brand{font-size:19px;font-weight:700;color:var(--text);letter-spacing:-0.3px}
.auth-sub{color:var(--text-dim);margin:6px 0 24px;font-size:14px}
.auth-field{display:block;margin-bottom:14px}
.auth-field > span{display:block;font-size:12px;color:var(--text-muted);margin-bottom:4px;text-transform:uppercase;letter-spacing:0.5px;font-weight:600}
.auth-field input{width:100%;padding:11px 14px;border:1px solid var(--border-strong);border-radius:8px;font-size:15px;font-family:inherit;background:#fff;color:var(--text);outline:none;transition:border-color 0.15s,box-shadow 0.15s}
.auth-field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(59,99,199,0.12)}
.auth-error{color:var(--bad);font-size:14px;margin:12px 0 0;min-height:18px;text-align:center}

/* Role-gated controls */
.admin-only{display:none}
body.role-admin .admin-only{display:inline-flex}
#btn-export{color:var(--accent);border-color:rgba(59,99,199,0.3)}
#btn-export:hover{background:rgba(59,99,199,0.08);color:var(--accent)}

/* Loader */
#loader{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(180deg,#eef1f8,var(--bg));z-index:9999}
.loader-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:40px;max-width:520px;width:90%;box-shadow:0 10px 40px rgba(20,30,60,0.1)}
.loader-card h1{margin:0 0 8px;font-size:23px;font-weight:600;color:var(--text)}
.loader-card .subtitle{color:var(--text-dim);margin:0 0 28px}
#loader-status{margin-bottom:20px}
#loader-msg{margin:0 0 12px;font-weight:500}
#loader-sub{color:var(--text-muted);font-size:13px;margin:8px 0 0;min-height:16px}
.progress-bar{width:100%;height:6px;background:#eef0f6;border-radius:3px;overflow:hidden}
#progress-fill{height:100%;width:0%;background:linear-gradient(90deg,var(--accent),#7aa5ff);transition:width 0.3s}
#file-picker{margin-top:12px}
.hint{color:var(--text-dim);margin:0 0 14px;font-size:14px}
.hint-small{color:var(--text-muted);font-size:13px;text-align:center;margin:12px 0 0}
.file-slot{display:flex;align-items:center;gap:10px;padding:10px 12px;background:#f7f8fb;border:1px solid var(--border);border-radius:8px;margin-bottom:10px;cursor:pointer}
.file-slot:hover{background:#eef0f6}
.file-slot input{display:none}
.slot-label{flex:1;font-weight:500}
.slot-status{color:var(--text-muted);font-size:13px}
.slot-status.ok{color:var(--good)}
button{cursor:pointer;border:none;font-family:inherit;font-size:14px;border-radius:6px;padding:8px 16px;transition:all 0.15s}
button:disabled{opacity:0.4;cursor:not-allowed}
.primary{background:var(--accent);color:#fff;width:100%;padding:12px;font-weight:600;font-size:15px;margin-top:8px}
.primary:not(:disabled):hover{background:var(--accent-2)}
.ghost{background:#fff;color:var(--text-dim);border:1px solid var(--border)}
.ghost:hover{background:var(--bg-hover);color:var(--text)}
.ghost.small{padding:5px 10px;font-size:15px}

/* Main wrap */
.wrap{max-width:1560px;margin:0 auto;padding:20px 28px 60px}

/* Header */
.header{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--border);flex-wrap:wrap;gap:16px}
.header h1{margin:0;font-size:24px;font-weight:600;letter-spacing:-0.2px;color:var(--text)}
.header .sub{color:var(--text-dim);font-size:14px;margin-top:4px}
.controls{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.ctrl-label{color:var(--text-muted);font-size:12px;text-transform:uppercase;letter-spacing:0.5px;margin-bottom:4px;display:block}
.seg{display:flex;gap:3px;background:#fff;padding:3px;border-radius:8px;border:1px solid var(--border);box-shadow:var(--shadow)}
.seg button{background:transparent;color:var(--text-dim);border:none;padding:8px 14px;border-radius:6px;font-size:14px;cursor:pointer;font-family:inherit;font-weight:500}
.seg button:hover{color:var(--text)}
.seg button.active{background:var(--accent);color:#fff}
.select{background:#fff;color:var(--text);border:1px solid var(--border);padding:8px 12px;border-radius:8px;font-size:14px;font-family:inherit;min-width:160px}
.base-label{color:var(--text);font-size:15px;padding:8px 12px;background:#fff;border:1px solid var(--border);border-radius:8px;min-width:200px;box-shadow:var(--shadow)}
.base-label .m{color:var(--text-muted);font-size:13px;margin-left:4px}

/* Part tabs */
.part-tabs{display:flex;gap:0;margin-bottom:22px;border-bottom:1px solid var(--border)}
.part-tab{background:transparent;border:none;color:var(--text-dim);padding:14px 22px;font-size:16px;font-weight:600;cursor:pointer;font-family:inherit;border-bottom:3px solid transparent;margin-bottom:-1px;letter-spacing:0.2px}
.part-tab:hover{color:var(--text)}
.part-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.part-tab .num{color:var(--text-muted);font-weight:400;margin-right:6px}
.part-tab.active .num{color:var(--accent)}
.part{display:none}
.part.active{display:block}

/* Sections */
.section{margin-bottom:26px}
.section-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px;gap:12px;flex-wrap:wrap}
.section-title{font-size:17px;font-weight:600;letter-spacing:0.2px;color:var(--text)}
.section-hint{color:var(--text-muted);font-size:13px}

/* KPI */
.kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.kpi-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;position:relative;overflow:hidden;box-shadow:var(--shadow)}
.kpi-card.rf{border-top:3px solid var(--rf)}
.kpi-card.pfo{border-top:3px solid var(--pfo)}
.kpi-card.perm{border-top:3px solid var(--perm)}
.kpi-card.bash{border-top:3px solid var(--bash)}
.kpi-zone{display:flex;align-items:center;gap:8px;font-size:13px;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);font-weight:600;margin-bottom:8px}
.zone-dot{width:8px;height:8px;border-radius:2px}
.rf .zone-dot{background:var(--rf)}
.pfo .zone-dot{background:var(--pfo)}
.perm .zone-dot{background:var(--perm)}
.bash .zone-dot{background:var(--bash)}
.kpi-value{font-size:34px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-0.5px;color:var(--text)}
.kpi-sub{color:var(--text-muted);font-size:13px;margin-top:2px}
.kpi-deltas{display:flex;gap:14px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.kpi-delta{flex:1}
.kpi-delta .lbl{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.4px}
.kpi-delta .val{font-size:18px;font-weight:600;font-variant-numeric:tabular-nums;margin-top:2px}
.up{color:var(--good)}
.down{color:var(--bad)}
.flat{color:var(--text-dim)}
.spark{position:absolute;right:0;bottom:0;width:110px;height:42px;opacity:0.6}

/* Cards */
.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}
.card h3{margin:0 0 6px;font-size:15px;font-weight:600;color:var(--text)}
.card .subtitle{color:var(--text-muted);font-size:13px;margin-top:-4px;margin-bottom:8px}
.chart{width:100%;height:280px}
.chart.sm{height:200px}
.chart.lg{height:360px}

/* Grids */
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.grid-3-2{display:grid;grid-template-columns:3fr 2fr;gap:14px}

/* Tables */
.data-table{width:100%;border-collapse:collapse;font-size:14px}
.data-table th{text-align:left;color:var(--text-muted);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:0.4px;padding:11px 9px;border-bottom:1px solid var(--border);background:#f7f8fb;position:sticky;top:0;white-space:nowrap;z-index:2}
.data-table td{padding:10px 9px;border-bottom:1px solid #eef0f6;font-variant-numeric:tabular-nums;color:var(--text)}
.data-table tr:hover td{background:#f7f8fb}
.data-table td.brand{font-weight:500}
.data-table td.num{text-align:right}
.data-table tr.other td{color:var(--text-dim);font-style:italic;background:var(--other-soft)}
.data-table tr.highlight-perm td{background:var(--perm-soft)}
.data-table tr.highlight-bash td{background:var(--bash-soft)}
.data-table tr.total td{border-top:2px solid var(--border-strong);font-weight:700;background:var(--total-soft);color:var(--text)}
.data-table tr.row-clickable{cursor:pointer}
.data-table tr.row-clickable:hover td{background:rgba(59,99,199,0.08)}
.table-wrap{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);overflow:auto;max-height:640px;box-shadow:var(--shadow)}

/* Monthly matrix table (Part 1 §2 and Part 2 §2) */
.monthly-table{font-size:13px}
.monthly-table th,.monthly-table td{padding:8px 9px;white-space:nowrap}
.monthly-table th.num,.monthly-table td.num{min-width:78px;text-align:right}
.monthly-table .sticky-col{position:sticky;left:0;z-index:3;min-width:190px;text-align:left;background:#f7f8fb;box-shadow:1px 0 0 var(--border)}
.monthly-table tbody .sticky-col{background:var(--bg-card);z-index:1}
.monthly-table tbody tr:hover .sticky-col{background:#eef0f6}
.monthly-table thead .total-col{background:#e3eaf6;color:var(--accent)}
.monthly-table tbody .total-col{background:#f0f4fb;font-weight:700;border-left:2px solid var(--border-strong)}
.monthly-table thead th.total-col{border-left:2px solid var(--border-strong)}
.monthly-table .vol{font-weight:600;color:var(--text);font-size:13px}
.monthly-table .share-line{font-size:12px;color:var(--text-muted);margin-top:1px;font-weight:400;font-variant-numeric:tabular-nums}
.pill{display:inline-block;padding:2px 7px;border-radius:10px;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;min-width:52px;text-align:center}
.pill.up{background:rgba(15,157,88,0.12);color:var(--good)}
.pill.down{background:rgba(217,48,37,0.1);color:var(--bad)}
.pill.flat{background:#eef0f6;color:var(--text-muted)}
.rank{color:var(--text-muted);font-size:13px;width:34px}
.zone-bar{display:inline-flex;align-items:center;gap:6px;font-size:12px;text-transform:uppercase;letter-spacing:0.3px;padding:3px 8px;border-radius:8px;background:#f7f8fb;font-weight:600}
.zone-bar.rf{color:var(--rf)}
.zone-bar.pfo{color:var(--pfo)}
.zone-bar.perm{color:var(--perm)}
.zone-bar.bash{color:var(--bash)}
.dot-rf{color:var(--rf)}
.dot-pfo{color:var(--pfo)}
.dot-perm{color:var(--perm)}
.dot-bash{color:var(--bash)}

/* Brand hero */
.brand-hero{background:linear-gradient(135deg,#eaf0ff,#ffffff);border:1px solid var(--border);border-radius:var(--radius);padding:20px 24px;margin-bottom:18px;display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;box-shadow:var(--shadow)}
.brand-hero .name{font-size:30px;font-weight:700;letter-spacing:-0.3px;color:var(--text)}
.brand-hero .meta{color:var(--text-dim);font-size:14px;margin-top:4px}
.brand-hero .brand-select-wrap{display:flex;align-items:center;gap:8px}
.brand-hero select{font-size:24px;font-weight:600;padding:6px 12px;min-width:180px;background:#fff;color:var(--text);border:1px solid var(--border);border-radius:8px;font-family:inherit}

/* Segment cards */
.seg-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.seg-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.seg-card h4{margin:0 0 4px;font-size:15px;font-weight:600;display:flex;align-items:center;justify-content:space-between;gap:6px;color:var(--text)}
.seg-card .seg-meta{color:var(--text-muted);font-size:13px;margin-bottom:10px}
.seg-tag{background:#eef1fa;color:var(--accent);font-size:12px;padding:2px 7px;border-radius:8px;font-weight:700;letter-spacing:0.3px}
.seg-position{display:flex;align-items:baseline;justify-content:space-between;margin-top:8px}
.seg-position .pos{font-size:28px;font-weight:700;color:var(--good);font-variant-numeric:tabular-nums}
.seg-position .pos.low{color:var(--warn)}
.seg-position .share-txt{color:var(--text-dim);font-size:13px}
.seg-bar{height:6px;background:#eef0f6;border-radius:3px;overflow:hidden;margin-top:6px}
.seg-bar-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--good))}

/* Scrollbars */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#d0d5e1;border-radius:4px}
::-webkit-scrollbar-thumb:hover{background:#b0b7c8}

/* Drag overlay */
body.dragging::after{content:'Отпустите файлы для загрузки';position:fixed;inset:0;background:rgba(245,246,250,0.96);color:var(--accent);display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:600;z-index:10000;border:4px dashed var(--accent)}

/* Responsive */
@media (max-width:1400px){
  .kpi-row{grid-template-columns:repeat(2,1fr)}
  .grid-4{grid-template-columns:repeat(2,1fr)}
  .seg-grid{grid-template-columns:repeat(2,1fr)}
}

/* Tablets and small laptops */
@media (max-width:900px){
  .wrap{padding:14px 12px 40px}
  .header{flex-direction:column;align-items:stretch;gap:12px}
  .header h1{font-size:21px}
  .header .sub{font-size:13px}
  .controls{width:100%;flex-wrap:wrap;gap:8px}
  .controls > div{flex:1 1 48%}
  .seg{width:100%;display:flex}
  .seg button{flex:1;font-size:14px}
  .base-label{min-width:0;width:100%;font-size:14px}
  .part-tabs{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
  .part-tabs::-webkit-scrollbar{display:none}
  .part-tab{padding:11px 16px;font-size:15px;white-space:nowrap}
  .kpi-row,.grid-4,.grid-2,.grid-3,.grid-3-2,.seg-grid{grid-template-columns:1fr;gap:10px}
  .kpi-card{padding:14px 16px}
  .kpi-value{font-size:28px}
  .kpi-sub{font-size:12px}
  .kpi-delta .val{font-size:16px}
  .kpi-delta .lbl{font-size:11px}
  .spark{width:80px;height:36px;opacity:0.5}
  .brand-hero{padding:16px;flex-direction:column;align-items:stretch;text-align:left}
  .brand-hero .name{font-size:24px}
  .brand-hero select{font-size:21px;width:100%}
  .card{padding:12px 14px}
  .card h3{font-size:14px}
  .chart{height:240px}
  .chart.lg{height:300px}
  .chart.sm{height:180px}
  .section{margin-bottom:20px}
  .section-title{font-size:16px}
  .section-hint{font-size:12px}
  .data-table{font-size:13px}
  .data-table th{font-size:11px;padding:9px 7px}
  .data-table td{padding:9px 7px}
  .monthly-table{font-size:12px}
  .monthly-table .vol{font-size:12px}
  .monthly-table .share-line{font-size:11px}
  .monthly-table .sticky-col{min-width:150px}
  .monthly-table th.num,.monthly-table td.num{min-width:68px}
  .seg-card{padding:12px}
  .seg-card h4{font-size:14px}
  .seg-position .pos{font-size:25px}
  .table-wrap{max-height:500px}
  .auth-card{padding:28px 22px}

  /* Sticky left columns for data tables — rank + name pair */
  #brands-table thead th:nth-child(1),
  #brands-table tbody td:nth-child(1),
  #regions-table thead th:nth-child(1),
  #regions-table tbody td:nth-child(1),
  #brand-regions-table thead th:nth-child(1),
  #brand-regions-table tbody td:nth-child(1),
  #brand-models-table thead th:nth-child(1),
  #brand-models-table tbody td:nth-child(1){
    position:sticky;left:0;z-index:2;background:var(--bg-card);
    min-width:32px;width:32px
  }
  #brands-table thead th:nth-child(2),
  #brands-table tbody td:nth-child(2),
  #regions-table thead th:nth-child(2),
  #regions-table tbody td:nth-child(2),
  #brand-regions-table thead th:nth-child(2),
  #brand-regions-table tbody td:nth-child(2),
  #brand-models-table thead th:nth-child(2),
  #brand-models-table tbody td:nth-child(2){
    position:sticky;left:32px;z-index:2;background:var(--bg-card);
    min-width:130px;box-shadow:1px 0 0 var(--border)
  }
  #brands-table thead th:nth-child(1),
  #brands-table thead th:nth-child(2),
  #regions-table thead th:nth-child(1),
  #regions-table thead th:nth-child(2),
  #brand-regions-table thead th:nth-child(1),
  #brand-regions-table thead th:nth-child(2),
  #brand-models-table thead th:nth-child(1),
  #brand-models-table thead th:nth-child(2){
    background:#f7f8fb;z-index:4
  }
  /* Reapply row-class backgrounds to sticky cells (tr bg doesn't paint under sticky td) */
  #brands-table tbody tr.other td:nth-child(1),
  #brands-table tbody tr.other td:nth-child(2),
  #regions-table tbody tr.other td:nth-child(1),
  #regions-table tbody tr.other td:nth-child(2){background:var(--other-soft)}
  #brands-table tbody tr.total td:nth-child(1),
  #brands-table tbody tr.total td:nth-child(2),
  #regions-table tbody tr.total td:nth-child(1),
  #regions-table tbody tr.total td:nth-child(2){background:var(--total-soft)}
  #regions-table tbody tr.highlight-perm td:nth-child(1),
  #regions-table tbody tr.highlight-perm td:nth-child(2),
  #brand-regions-table tbody tr.highlight-perm td:nth-child(1),
  #brand-regions-table tbody tr.highlight-perm td:nth-child(2){background:var(--perm-soft)}
  #regions-table tbody tr.highlight-bash td:nth-child(1),
  #regions-table tbody tr.highlight-bash td:nth-child(2),
  #brand-regions-table tbody tr.highlight-bash td:nth-child(1),
  #brand-regions-table tbody tr.highlight-bash td:nth-child(2){background:var(--bash-soft)}

  /* brand-metrics-table — only first column (zone) sticky */
  #brand-metrics-table thead th:first-child,
  #brand-metrics-table tbody td:first-child{
    position:sticky;left:0;z-index:2;background:var(--bg-card);
    min-width:110px;box-shadow:1px 0 0 var(--border)
  }
  #brand-metrics-table thead th:first-child{background:#f7f8fb;z-index:4}
}

/* Phones */
@media (max-width:600px){
  .wrap{padding:10px 8px 30px}
  .header h1{font-size:19px}
  .header .sub{font-size:13px}
  .ctrl-label{font-size:11px}
  .seg button{padding:7px 10px;font-size:13px}
  .base-label{font-size:14px;padding:7px 10px}
  .ghost.small{padding:4px 8px;font-size:14px}
  .part-tab{padding:10px 14px;font-size:14px}
  .kpi-card{padding:12px 14px}
  .kpi-value{font-size:26px}
  .kpi-sub{font-size:12px}
  .kpi-deltas{gap:10px}
  .kpi-delta .val{font-size:15px}
  .kpi-delta .lbl{font-size:11px}
  .spark{display:none}
  .brand-hero{padding:14px}
  .brand-hero .name{font-size:21px}
  .brand-hero select{font-size:18px}
  .section-title{font-size:15px}
  .section-hint{font-size:11px}
  .chart{height:220px}
  .chart.lg{height:260px}
  .chart.sm{height:160px}
  .data-table{font-size:12px}
  .data-table th{font-size:11px;padding:7px 5px}
  .data-table td{padding:7px 5px}
  .data-table td.brand{font-size:13px}
  .pill{min-width:40px;padding:1px 6px;font-size:11px}
  .zone-bar{font-size:11px;padding:2px 6px}
  .rank{font-size:12px;width:26px}
  .monthly-table{font-size:12px}
  .monthly-table .sticky-col{min-width:130px}
  .monthly-table th.num,.monthly-table td.num{min-width:62px;padding:6px 5px}
  .monthly-table .vol{font-size:12px}
  .monthly-table .share-line{font-size:11px}
  .seg-card h4{font-size:13px}
  .seg-position .pos{font-size:22px}
  .auth-card{padding:24px 18px}
  .auth-brand{font-size:17px}

  /* Tighter sticky-col widths on phones */
  #brands-table thead th:nth-child(1),
  #brands-table tbody td:nth-child(1),
  #regions-table thead th:nth-child(1),
  #regions-table tbody td:nth-child(1),
  #brand-regions-table thead th:nth-child(1),
  #brand-regions-table tbody td:nth-child(1),
  #brand-models-table thead th:nth-child(1),
  #brand-models-table tbody td:nth-child(1){
    min-width:26px;width:26px
  }
  #brands-table thead th:nth-child(2),
  #brands-table tbody td:nth-child(2),
  #regions-table thead th:nth-child(2),
  #regions-table tbody td:nth-child(2),
  #brand-regions-table thead th:nth-child(2),
  #brand-regions-table tbody td:nth-child(2),
  #brand-models-table thead th:nth-child(2),
  #brand-models-table tbody td:nth-child(2){
    left:26px;min-width:110px;max-width:140px
  }
  #brand-metrics-table thead th:first-child,
  #brand-metrics-table tbody td:first-child{min-width:90px}
}
