/* ════════════════════════════════════════════════════════════
   XY-BUILD — STYLESHEET
   Mørk modus som standard, lys modus via .light-mode på #app-root
   ════════════════════════════════════════════════════════════ */

*{box-sizing:border-box;margin:0;padding:0;}
body{background:#0a0a0a;min-height:100vh;display:flex;align-items:flex-start;justify-content:center;padding:24px 0 80px;transition:background .3s;}
body.light{background:#e8e8e4;}
:root{
  --bg:#111;--bg2:#1a1a1a;--bg3:#222;
  --b:#2a2a2a;--b2:#3a3a3a;--b3:#4a4a4a;
  --t:#f0f0ec;--t2:#a0a0a0;--t3:#787878;
  --y:#FFFFFF;--y2:#cccccc;--yt:rgba(255,255,255,.06);
  --red:#E53935;
}
.light-mode{
  --bg:#f5f5f1;--bg2:#ebebe6;--bg3:#e0e0db;
  --b:#d8d8d4;--b2:#c8c8c4;--b3:#aeaea8;
  --t:#0a0a0a;--t2:#4a4a4a;--t3:#7a7a7a;
  --y:#111111;--y2:#333;--yt:rgba(0,0,0,.05);
}
.light-mode .ba,
.light-mode .np-arr,
.light-mode .room-input-btn,
.light-mode .login-email-btn{color:#f0f0ec !important;}
.light-mode .rcard-kvm:not(.empty){color:#f0f0ec !important;}
.light-mode .mat-add-btn.added,
.light-mode .fadd.added,
.light-mode .mpre.on,
.light-mode .tag.on,
.light-mode .ftag.on{color:#f0f0ec !important;}
.light-mode #markup-pct-badge{color:#f0f0ec !important;}
.light-mode .fi,
.light-mode .maal-inp,
.light-mode .mat-search-inp,
.light-mode .room-input,
.light-mode .sinp,
.light-mode .login-email{color:#111111 !important;}
.light-mode .sbox{background:#e0e0db;}
.light-mode .kc{background:#e0e0db;}
.light-mode .mat-added-item{background:var(--bg2);}
.light-mode .rcard{background:var(--bg2);}
.light-mode .np-arr{background:var(--y);}
.theme-toggle{
  height:24px;width:44px;border-radius:12px;
  background:var(--b);border:0.5px solid var(--b2);
  cursor:pointer;display:flex;align-items:center;padding:2px;
  transition:background .25s;z-index:10;flex-shrink:0;
}
.theme-toggle:hover{border-color:var(--b3);}
.theme-toggle-thumb{
  height:18px;width:18px;border-radius:50%;
  background:var(--t);
  transition:transform .25s, background .25s;
  flex-shrink:0;
}
.light-mode .theme-toggle{background:#1a1a1a;border-color:#333;}
.light-mode .theme-toggle-thumb{transform:translateX(20px);background:#f5f5f1;}
.app{font-family:'Barlow',sans-serif;width:390px;background:var(--bg);border:0.5px solid var(--b);border-radius:16px;overflow:hidden;min-height:740px;box-shadow:0 12px 60px rgba(0,0,0,.7);}
.scr{display:none;flex-direction:column;min-height:740px;}
.scr.on{display:flex;}

/* ── HOME ── */
.home{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 28px;gap:56px;}
.logo-x{font-family:'Barlow Condensed',sans-serif;font-size:84px;font-weight:900;color:var(--y);letter-spacing:-3px;line-height:1;}
.logo-b{font-family:'Barlow Condensed',sans-serif;font-size:18px;font-weight:700;letter-spacing:6px;color:var(--t2);margin-top:-4px;}
.logo-line{width:48px;height:2px;background:var(--y);margin:14px auto 0;}
.np{width:100%;border:0.5px solid var(--b2);border-radius:10px;padding:22px 20px;cursor:pointer;background:none;text-align:left;display:flex;align-items:center;justify-content:space-between;font-family:'Barlow',sans-serif;transition:border-color .2s,background .2s;}
.np:hover{border-color:var(--y);background:var(--bg2);}
.np-lbl{font-size:17px;font-weight:700;color:var(--t);}
.np-sub{font-size:12px;color:var(--t2);margin-top:4px;}
.np-arr{width:40px;height:40px;border-radius:50%;background:var(--y);display:flex;align-items:center;justify-content:center;color:#000;font-size:20px;font-weight:700;flex-shrink:0;}

/* ── TOPBAR ── */
.tb{display:flex;align-items:center;gap:8px;padding:13px 16px 11px;border-bottom:0.5px solid var(--b);flex-shrink:0;}
.tb-logo{font-family:'Barlow Condensed',sans-serif;font-size:18px;font-weight:900;color:var(--y);letter-spacing:-0.5px;}
.tb-dot{width:4px;height:4px;border-radius:50%;background:var(--y);}
.tb-ttl{flex:1;font-size:13px;font-weight:600;color:var(--t2);}
.back{width:30px;height:30px;border-radius:50%;border:0.5px solid var(--b2);background:none;cursor:pointer;color:var(--t2);font-size:15px;display:flex;align-items:center;justify-content:center;transition:background .15s;}
.back:hover{background:var(--bg3);}

/* ── SCROLL / BAR ── */
.scroll{flex:1;overflow-y:auto;padding:18px 16px 12px;}
.scroll::-webkit-scrollbar{width:3px;}
.scroll::-webkit-scrollbar-thumb{background:var(--b2);border-radius:2px;}
.bar{padding:10px 16px 18px;display:flex;gap:8px;flex-shrink:0;border-top:0.5px solid var(--b);}

/* ── BUTTONS ── */
.ba{flex:1;height:46px;border-radius:8px;border:none;background:var(--y);color:#000;font-size:14px;font-weight:700;font-family:'Barlow',sans-serif;cursor:pointer;transition:background .15s;}
.ba:hover{background:var(--y2);}
.bs{flex:1;height:46px;border-radius:8px;border:0.5px solid var(--b2);background:none;color:var(--t);font-size:13px;font-weight:600;font-family:'Barlow',sans-serif;cursor:pointer;transition:background .15s;}
.bs:hover{background:var(--bg3);}

/* ── FORM ── */
.sec{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--t3);margin:16px 0 8px;}
.sec:first-child{margin-top:0;}
.fg{margin-bottom:10px;}
.fl{font-size:12px;font-weight:500;color:var(--t2);margin-bottom:4px;display:block;}
.fi{width:100%;height:42px;border:0.5px solid var(--b2);border-radius:8px;padding:0 12px;font-size:14px;font-family:'Barlow',sans-serif;background:var(--bg2);color:var(--t);transition:border-color .15s;}
.fi:focus{outline:none;border-color:var(--y);}
.fi::placeholder{color:var(--t3);}
.r2{display:grid;grid-template-columns:1fr 1fr;gap:9px;}
.div{border:none;border-top:0.5px solid var(--b);margin:16px 0;}

/* ── PROGRESS DOTS ── */
.prog{display:flex;gap:5px;padding:11px 16px 0;flex-shrink:0;}
.ps{flex:1;height:2px;border-radius:2px;background:var(--b2);}
.ps.d{background:var(--y);}

/* ══════════════════════════════
   ROM PAGE – PROGRESSIVE CARDS
══════════════════════════════ */

/* ROM INPUT (step 1) */
.room-input-wrap{position:relative;margin-bottom:0;}
.room-input{
  width:100%;height:52px;
  border:0.5px solid var(--b2);
  border-radius:10px;
  padding:0 50px 0 16px;
  font-size:16px;font-weight:600;
  font-family:'Barlow',sans-serif;
  background:var(--bg2);color:var(--t);
  transition:border-color .2s;
}
.room-input:focus{outline:none;border-color:var(--y);}
.room-input::placeholder{color:var(--t3);font-weight:400;}
.room-input-btn{
  position:absolute;right:10px;top:50%;transform:translateY(-50%);
  width:32px;height:32px;border-radius:6px;
  background:var(--y);border:none;cursor:pointer;
  color:#000;font-size:18px;font-weight:700;
  display:flex;align-items:center;justify-content:center;
  transition:background .15s;
}
.room-input-btn:hover{background:var(--y2);}

/* ROOM CARD CONTAINER */
.room-cards{display:flex;flex-direction:column;gap:10px;margin-top:14px;}

/* SINGLE ROOM CARD */
.rcard{
  border:0.5px solid var(--b);
  border-radius:12px;
  overflow:hidden;
  background:var(--bg2);
  animation:slideIn .25s ease;
}
@keyframes slideIn{from{opacity:0;transform:translateY(-8px);}to{opacity:1;transform:translateY(0);}}

.rcard-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:13px 16px;border-bottom:0.5px solid var(--b);
  cursor:pointer;user-select:none;transition:background .15s;
}
.rcard-header:hover{background:var(--bg2);}
.rcard-name{font-size:15px;font-weight:700;color:var(--t);}
.rcard-kvm{font-size:12px;font-weight:700;color:#000;background:var(--y);padding:2px 8px;border-radius:4px;}
.rcard-kvm.empty{background:none;color:var(--t3);border:0.5px solid var(--b2);}
.rcard-chevron{font-size:13px;color:var(--t3);margin-left:8px;transition:transform .25s;flex-shrink:0;}
.rcard-chevron.collapsed{transform:rotate(-90deg);}
.rcard-body{transition:opacity .2s;}
.rcard-body.collapsed{display:none;}
.rcard-header-right{display:flex;align-items:center;gap:8px;}
.rcard-summary{font-size:11px;color:var(--t2);display:none;}
.rcard-summary.show{display:block;}

/* SECTION INSIDE CARD */
.card-section{padding:12px 16px;border-bottom:0.5px solid var(--b);}
.card-section:last-child{border-bottom:none;}
.card-sec-lbl{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--t3);margin-bottom:10px;}

/* MÅL SECTION */
.maal-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:7px;margin-bottom:10px;}
.maal-input-wrap{display:flex;flex-direction:column;}
.maal-lbl{font-size:10px;font-weight:600;color:var(--t2);margin-bottom:4px;letter-spacing:.04em;text-transform:uppercase;}
.maal-inp{
  width:100%;height:40px;
  border:0.5px solid var(--b2);border-radius:7px;
  padding:0 10px;font-size:15px;font-weight:600;
  font-family:'Barlow',sans-serif;
  background:var(--bg3);color:var(--t);
  text-align:center;transition:border-color .15s;
}
.maal-inp:focus{outline:none;border-color:var(--y);}
.maal-inp::placeholder{color:var(--t3);font-weight:400;}
.maal-result{
  background:var(--bg3);border-radius:7px;
  padding:8px 12px;
  display:flex;justify-content:space-between;align-items:center;
}
.maal-result-lbl{font-size:11px;color:var(--t2);}
.maal-result-val{font-family:'Barlow Condensed',sans-serif;font-size:18px;font-weight:700;color:var(--y);}
.add-section-btn{width:100%;height:34px;border-radius:7px;border:1px dashed var(--b2);background:none;cursor:pointer;font-size:12px;font-weight:600;color:var(--t3);font-family:'Barlow',sans-serif;display:flex;align-items:center;justify-content:center;gap:6px;margin-top:8px;transition:all .2s;}
.add-section-btn:hover{border-color:var(--y);color:var(--y);}
.extra-section{margin-top:10px;padding-top:10px;border-top:1px dashed var(--b2);animation:slideIn .2s ease;}
.extra-section-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
.extra-section-lbl{font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--t3);}
.remove-section-btn{width:20px;height:20px;border-radius:50%;border:none;background:none;cursor:pointer;color:var(--t3);font-size:13px;line-height:1;display:flex;align-items:center;justify-content:center;transition:color .15s;}
.remove-section-btn:hover{color:var(--red);}
.total-kvm-row{background:var(--bg3);border-radius:7px;padding:8px 12px;margin-top:8px;display:flex;justify-content:space-between;align-items:center;}
.total-kvm-lbl{font-size:11px;color:var(--t2);}
.total-kvm-val{font-family:'Barlow Condensed',sans-serif;font-size:18px;font-weight:700;color:var(--y);}

/* MATERIAL SEARCH SECTION */
.mat-search-wrap{position:relative;margin-bottom:10px;}
.mat-search-inp{
  width:100%;height:42px;
  border:0.5px solid var(--b2);border-radius:8px;
  padding:0 40px 0 12px;
  font-size:13px;font-family:'Barlow',sans-serif;
  background:var(--bg3);color:var(--t);
  transition:border-color .2s;
}
.mat-search-inp:focus{outline:none;border-color:var(--y);}
.mat-search-inp::placeholder{color:var(--t3);}
.mat-search-icon{
  position:absolute;right:12px;top:50%;transform:translateY(-50%);
  font-size:14px;color:var(--t3);pointer-events:none;
}

/* SEARCH RESULTS DROPDOWN */
.mat-results{
  border:0.5px solid var(--b2);border-radius:8px;
  overflow:hidden;margin-top:6px;
  display:none;
  background:var(--bg3);
}
.mat-results.show{display:block;}
.mat-result-item{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 12px;border-bottom:0.5px solid var(--b);
  cursor:pointer;transition:background .15s;gap:10px;
}
.mat-result-item:last-child{border-bottom:none;}
.mat-result-item:hover{background:var(--bg2);}
.mat-result-info{flex:1;}
.mat-result-name{font-size:12px;font-weight:600;color:var(--t);}
.mat-result-art{font-size:11px;color:var(--t2);margin-top:1px;}
.mat-result-unit{font-size:11px;color:var(--t3);white-space:nowrap;}
.mat-add-btn{
  width:26px;height:26px;border-radius:50%;
  background:var(--bg2);border:0.5px solid var(--b2);
  color:var(--t2);font-size:14px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:all .15s;flex-shrink:0;font-family:'Barlow',sans-serif;
}
.mat-add-btn:hover,.mat-add-btn.added{background:var(--y);color:#000;border-color:var(--y);}

/* ADDED MATERIALS LIST */
.mat-added-list{display:flex;flex-direction:column;gap:6px;margin-top:8px;}
.mat-added-item{
  display:flex;align-items:center;justify-content:space-between;
  background:var(--bg);border:0.5px solid var(--b2);
  border-radius:7px;padding:8px 12px;gap:10px;
  animation:slideIn .2s ease;
}
.mat-added-left{flex:1;}
.mat-added-name{font-size:12px;font-weight:600;color:var(--t);}
.mat-added-meta{font-size:11px;color:var(--t2);margin-top:1px;}
.mat-qty-wrap{display:flex;align-items:center;gap:6px;}
.mat-qty-btn{width:24px;height:24px;border-radius:4px;border:0.5px solid var(--b2);background:none;cursor:pointer;color:var(--t2);font-size:14px;display:flex;align-items:center;justify-content:center;font-family:'Barlow',sans-serif;transition:background .15s;}
.mat-qty-btn:hover{background:var(--bg3);}
.mat-qty-num{font-size:13px;font-weight:700;color:var(--t);min-width:20px;text-align:center;}
.mat-remove{width:22px;height:22px;border:none;background:none;cursor:pointer;color:var(--t3);font-size:12px;transition:color .15s;}
.mat-remove:hover{color:#E53935;}

/* ADD ROOM HINT */
.add-hint{
  text-align:center;padding:20px;
  color:var(--t3);font-size:13px;
  border:1px dashed var(--b);border-radius:10px;
  margin-top:4px;
}

/* EXPORT PREVIEW */
.exp-room{border:0.5px solid var(--b);border-radius:9px;overflow:hidden;margin-bottom:12px;}
.exp-room-head{padding:10px 14px;border-bottom:0.5px solid var(--b);display:flex;justify-content:space-between;align-items:center;}
.exp-room-name{font-size:13px;font-weight:700;color:var(--t);}
.exp-room-kvm{font-size:11px;color:var(--t2);}
.exp-line{display:flex;justify-content:space-between;font-size:12px;padding:7px 14px;border-bottom:0.5px solid var(--b);}
.exp-line:last-child{border:none;}
.exp-n{color:var(--t2);}
.exp-v{font-weight:600;color:var(--t);}

.mpre{flex:1;height:32px;border-radius:6px;border:0.5px solid var(--b2);background:none;cursor:pointer;font-size:12px;font-weight:700;font-family:'Barlow',sans-serif;color:var(--t2);transition:all .15s;}
.mpre:hover,.mpre.on{background:var(--y);color:#000;border-color:var(--y);}

/* CSV IMPORT */
.import-zone{border:1.5px dashed var(--b2);border-radius:10px;padding:28px 20px;text-align:center;cursor:pointer;transition:border-color .2s,background .2s;margin-bottom:12px;}
.import-zone:hover,.import-zone.drag{border-color:var(--y);background:var(--yt);}
.import-zone-title{font-size:14px;font-weight:700;color:var(--t);margin-bottom:4px;}
.import-zone-sub{font-size:12px;color:var(--t2);}
.catalog-badge{display:flex;align-items:center;gap:8px;background:var(--bg2);border:0.5px solid var(--b2);border-radius:8px;padding:9px 12px;margin-bottom:12px;}
.catalog-dot{width:7px;height:7px;border-radius:50%;background:var(--t3);flex-shrink:0;}
.catalog-dot.live{background:#4caf78;}
.catalog-txt{font-size:12px;color:var(--t2);flex:1;line-height:1.5;}
.catalog-txt b{color:var(--t);font-weight:600;}
.csv-preview{border:0.5px solid var(--b);border-radius:8px;overflow:hidden;margin-bottom:12px;}
.csv-row{display:flex;justify-content:space-between;font-size:11px;padding:7px 12px;border-bottom:0.5px solid var(--b);}
.csv-row:last-child{border:none;}
.csv-row.head{background:var(--bg3);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--t3);}
.csv-n{color:var(--t2);flex:1;}
.csv-v{font-weight:600;color:var(--t);}

/* NOTICE */
.notice{background:rgba(255,255,255,.05);border:0.5px solid rgba(255,255,255,.15);border-radius:8px;padding:10px 12px;font-size:12px;color:var(--y2);margin-bottom:12px;line-height:1.6;}
.notice.green{background:rgba(39,165,96,.07);border-color:rgba(39,165,96,.2);color:#4caf78;}

/* ── THEME ── */
let isDark = true;
function toggleTheme(){
  isDark = !isDark;
  const app = document.getElementById('app-root');
  const body = document.body;
  if(isDark){
    app.classList.remove('light-mode');
    body.classList.remove('light');
    document.querySelectorAll('.theme-toggle-thumb').forEach(t=>{t.textContent='Mørk';t.style.transform='';});
  } else {
    app.classList.add('light-mode');
    body.classList.add('light');
    document.querySelectorAll('.theme-toggle-thumb').forEach(t=>{t.textContent='Lys';t.style.transform='translateX(20px)';});
  }
}

/* ── CSV CATALOG ── */
let customCatalog = null;
let parsedRows = [];

function handleDrop(e){
  e.preventDefault();
  document.getElementById('import-zone').classList.remove('drag');
  const file = e.dataTransfer.files[0];
  if(file) parseCSV(file);
}
function handleFile(input){
  if(input.files[0]) parseCSV(input.files[0]);
}
function parseCSV(file){
  const reader = new FileReader();
  reader.onload = e => {
    const lines = e.target.result.split(/\r?\n/).filter(l=>l.trim());
    const rows = [];
    lines.forEach((line,i)=>{
      const cols = line.split(/[,;\t]/).map(s=>s.trim().replace(/^"|"$/g,''));
      if(cols.length < 3) return;
      // skip header row
      if(i===0 && isNaN(parseFloat(cols[3]||cols[2]))) return;
      const name = cols[0];
      const art  = cols[1] || ('IMP-'+i);
      const unit = cols[2] || 'stk';
      const price= parseFloat(cols[3]) || 0;
      if(name) rows.push({name, art:'IMP-'+art, unit, price});
    });
    parsedRows = rows;
    showPreview(rows, file.name);
  };
  reader.readAsText(file, 'UTF-8');
}
function showPreview(rows, filename){
  const preview = document.getElementById('csv-preview-loaded');
  const previewRows = document.getElementById('csv-preview-rows');
  const count = document.getElementById('csv-count');
  const useBtn = document.getElementById('use-cat-btn');
  const backBtn = document.getElementById('back-cat-btn');

  preview.style.display = 'block';
  useBtn.style.display = 'flex';
  backBtn.style.display = 'none';

  previewRows.innerHTML =
    '<div class="csv-row head"><span class="csv-n">Produktnavn</span><span class="csv-v">Enhet</span><span class="csv-v" style="margin-left:10px;">Pris</span></div>' +
    rows.slice(0,8).map(r=>`
      <div class="csv-row">
        <span class="csv-n">${r.name}</span>
        <span class="csv-v">${r.unit}</span>
        <span class="csv-v" style="margin-left:10px;">${r.price > 0 ? r.price+' kr' : '—'}</span>
      </div>`).join('') +
    (rows.length > 8 ? `<div class="csv-row"><span class="csv-n" style="color:var(--t3);">+ ${rows.length-8} flere produkter…</span></div>` : '');

  count.textContent = `${rows.length} produkter funnet i ${filename}`;
}
function useCatalog(){
  customCatalog = parsedRows;
  updateCatalogBadge();
  go('s-rom');
}
function clearCatalog(){
  customCatalog = null;
  parsedRows = [];
  document.getElementById('csv-preview-loaded').style.display='none';
  document.getElementById('use-cat-btn').style.display='none';
  document.getElementById('clear-cat-btn').style.display='none';
  document.getElementById('back-cat-btn').style.display='block';
  updateCatalogBadge();
}
function updateCatalogBadge(){
  const dot  = document.getElementById('catalog-dot');
  const txt  = document.getElementById('catalog-txt');
  const dot2 = document.getElementById('import-status-dot');
  const txt2 = document.getElementById('import-status-txt');
  const clearBtn = document.getElementById('clear-cat-btn');
  if(customCatalog && customCatalog.length){
    if(dot){dot.className='catalog-dot live';}
    if(txt){txt.innerHTML=`Egendefinert katalog · <b>${customCatalog.length} produkter lastet</b>`;}
    if(dot2){dot2.className='catalog-dot live';}
    if(txt2){txt2.innerHTML=`<b>${customCatalog.length} produkter</b> lastet fra din prisliste`;}
    if(clearBtn){clearBtn.style.display='flex';}
  } else {
    if(dot){dot.className='catalog-dot';}
    if(txt){txt.innerHTML=`Bruker innebygd katalog · <b>Importer din egen prisliste</b>`;}
    if(dot2){dot2.className='catalog-dot';}
    if(txt2){txt2.textContent=`Ingen egendefinert katalog lastet inn – bruker standard`;}
    if(clearBtn){clearBtn.style.display='none';}
  }
}

/* Override searchMat to use custom catalog if loaded */
const _origSearchMat = searchMat;
function searchMat(id, q){
  const source = (customCatalog && customCatalog.length) ? customCatalog : catalog;
  const res = document.getElementById('mr-'+id);
  if(!q.trim()){res.classList.remove('show');res.innerHTML='';return;}
  const hits = source.filter(c=>
    c.name.toLowerCase().includes(q.toLowerCase()) ||
    (c.art||'').toLowerCase().includes(q.toLowerCase())
  ).slice(0,7);
  if(!hits.length){
    res.innerHTML='<div style="padding:10px 12px;font-size:12px;color:var(--t3);">Ingen treff – prøv et annet søkeord</div>';
    res.classList.add('show');
    return;
  }
  res.innerHTML = hits.map(h=>`
    <div class="mat-result-item" onmousedown="addMat(${id},'${h.name.replace(/'/g,"\'")}','${h.art}','${h.unit}')">
      <div class="mat-result-info">
        <div class="mat-result-name">${h.name}</div>
        <div class="mat-result-art">${h.price>0?h.price+' kr / '+h.unit : 'Art.nr. '+h.art}</div>
      </div>
      <span class="mat-result-unit">${h.unit}</span>
      <button class="mat-add-btn">+</button>
    </div>
  `).join('');
  res.classList.add('show');
}

/* Also override getUnitPrice to use custom catalog prices */
const _origGetUnitPrice = getUnitPrice;
function getUnitPrice(art){
  if(customCatalog && customCatalog.length){
    const hit = customCatalog.find(c=>c.art===art);
    if(hit && hit.price > 0) return hit.price;
  }
  return _origGetUnitPrice(art);
}

/* ── LOGIN ── */
.login-body{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:36px 28px;gap:0;}
.login-logo-x{font-family:'Barlow Condensed',sans-serif;font-size:64px;font-weight:900;color:var(--y);letter-spacing:-2px;line-height:1;}
.login-logo-b{font-family:'Barlow Condensed',sans-serif;font-size:16px;font-weight:700;letter-spacing:5px;color:var(--t2);}
.login-line{width:40px;height:2px;background:var(--y);margin:10px auto 36px;}
.login-tagline{font-size:13px;color:var(--t2);margin-bottom:28px;text-align:center;line-height:1.6;}
.login-email-wrap{width:100%;position:relative;margin-bottom:10px;}
.login-email{width:100%;height:48px;border:0.5px solid var(--b2);border-radius:9px;padding:0 44px 0 14px;font-size:14px;font-family:'Barlow',sans-serif;background:var(--bg2);color:var(--t);transition:border-color .2s;}
.login-email:focus{outline:none;border-color:var(--y);}
.login-email::placeholder{color:var(--t3);}
.login-email-btn{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:32px;height:32px;border-radius:6px;background:var(--y);border:none;cursor:pointer;color:#000;font-size:16px;font-weight:700;display:flex;align-items:center;justify-content:center;transition:background .15s;}
.login-email-btn:hover{background:var(--y2);}
.login-or{display:flex;align-items:center;gap:10px;margin:16px 0;width:100%;}
.login-or-line{flex:1;height:0.5px;background:var(--b2);}
.login-or-txt{font-size:11px;color:var(--t3);font-weight:600;letter-spacing:.06em;text-transform:uppercase;}
.oauth-btn{width:100%;height:46px;border-radius:9px;border:0.5px solid var(--b2);background:none;cursor:pointer;font-size:13px;font-weight:600;font-family:'Barlow',sans-serif;color:var(--t);display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:9px;transition:background .15s,border-color .15s;}
.oauth-btn:hover{background:var(--bg2);border-color:var(--b3);}
.oauth-logo{width:18px;height:18px;border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0;}
.oauth-logo.g{background:#fff;color:#EA4335;}
.oauth-logo.ms{background:#0078D4;color:#fff;}
.login-terms{font-size:11px;color:var(--t3);text-align:center;margin-top:20px;line-height:1.6;}

/* ── DASHBOARD ── */
.dash-header{padding:22px 18px 14px;border-bottom:0.5px solid var(--b);flex-shrink:0;display:flex;align-items:flex-end;justify-content:space-between;}
.dash-greeting{font-size:11px;color:var(--t2);margin-bottom:3px;text-transform:uppercase;letter-spacing:.08em;font-weight:600;}
.dash-name{font-size:20px;font-weight:700;color:var(--t);}
.dash-avatar{width:36px;height:36px;border-radius:50%;background:var(--y);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:#000;cursor:pointer;flex-shrink:0;}
.cal-strip{display:flex;gap:6px;padding:12px 16px;border-bottom:0.5px solid var(--b);overflow-x:auto;flex-shrink:0;}
.cal-strip::-webkit-scrollbar{display:none;}
.cal-day{flex-shrink:0;width:44px;border:0.5px solid var(--b2);border-radius:9px;padding:8px 0;text-align:center;cursor:pointer;transition:all .15s;}
.cal-day:hover{border-color:var(--b3);background:var(--bg2);}
.cal-day.today{border-color:var(--y);background:var(--y);}
.cal-day.has-event{border-color:var(--b3);}
.cal-d-name{font-size:9px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--t3);}
.cal-day.today .cal-d-name{color:#000;}
.cal-d-num{font-size:16px;font-weight:700;color:var(--t);margin:3px 0 2px;}
.cal-day.today .cal-d-num{color:#000;}
.cal-d-dot{width:4px;height:4px;border-radius:50%;background:transparent;margin:0 auto;}
.cal-day.has-event .cal-d-dot{background:var(--t2);}
.cal-day.today .cal-d-dot{background:rgba(0,0,0,.3);}
.proj-card{border:0.5px solid var(--b);border-radius:11px;padding:14px 16px;margin-bottom:8px;cursor:pointer;transition:border-color .15s,background .15s;}
.proj-card:hover{border-color:var(--b3);background:var(--bg2);}
.proj-card-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:6px;gap:10px;}
.proj-card-name{font-size:14px;font-weight:700;color:var(--t);}
.proj-card-addr{font-size:11px;color:var(--t2);margin-top:2px;}
.proj-status{font-size:10px;font-weight:700;padding:3px 8px;border-radius:4px;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;flex-shrink:0;}
.proj-status.active{background:rgba(255,255,255,.08);color:var(--y);}
.proj-status.pending{background:rgba(255,165,0,.1);color:#FFA500;}
.proj-status.done{background:rgba(39,165,96,.1);color:#4caf78;}
.proj-card-meta{display:flex;gap:6px;align-items:center;flex-wrap:wrap;}
.proj-meta-tag{font-size:11px;color:var(--t3);}
.proj-meta-dot{width:2px;height:2px;border-radius:50%;background:var(--b3);}
.proj-card-bar-bg{height:2px;background:var(--b2);border-radius:2px;margin-top:10px;}
.proj-card-bar-fill{height:2px;background:var(--y);border-radius:2px;}
.proj-card-bar-lbl{display:flex;justify-content:space-between;font-size:10px;color:var(--t3);margin-top:4px;}
.cal-event{border-left:2px solid var(--y);background:rgba(255,255,255,.03);border-radius:0 7px 7px 0;padding:9px 12px;margin-bottom:7px;}
.cal-event-time{font-size:10px;font-weight:700;color:var(--y);letter-spacing:.06em;text-transform:uppercase;margin-bottom:2px;}
.cal-event-name{font-size:12px;font-weight:600;color:var(--t);}
.cal-event-sub{font-size:11px;color:var(--t2);margin-top:1px;}
.sync-badge{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.03);border:0.5px solid var(--b2);border-radius:8px;padding:9px 12px;margin-bottom:14px;}
.sync-dot{width:7px;height:7px;border-radius:50%;background:#4caf78;flex-shrink:0;}
.sync-txt{font-size:12px;color:var(--t2);flex:1;}
.sync-txt b{color:var(--t);font-weight:600;}
