:root{
    --ink:#2A2622; --paper:#FCFBF8; --card:#FFFFFF;
    --emerald:#B79A5E; --emerald-soft:#C9AE77; --gold:#C6A667; --gold-soft:#E4D2A6; --gold-deep:#A8863F;
    --champagne:#F3ECDD; --champagne-soft:#F9F5EC;
    --muted:#8A8377; --line:#EDE7D9; --line-strong:#DED4BF;
    --success:#5E8B6A; --due:#B0863F; --danger:#B0655A;
    --shadow:0 1px 2px rgba(120,100,60,.05),0 10px 34px rgba(120,100,60,.08);
    --serif:"Fraunces",Georgia,serif; --sans:"Inter",system-ui,sans-serif; --mono:"IBM Plex Mono",monospace;
  }
  *{box-sizing:border-box}
  html,body{margin:0}
  body{background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;line-height:1.5}
  button{font-family:inherit;cursor:pointer}
  input,select,textarea{font-family:inherit}
  .mono{font-family:var(--mono)}
  .lbl{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
  h1,h2,h3{font-family:var(--serif);font-weight:500;margin:0}
  a{color:inherit}

  /* Top bar */
  .topbar{position:sticky;top:0;z-index:40;background:rgba(255,255,255,.9);backdrop-filter:blur(10px);color:var(--ink);border-bottom:1px solid var(--line)}
  .topbar::after{content:"";display:block;height:2px;background:linear-gradient(90deg,transparent,var(--gold-soft),var(--gold),var(--gold-soft),transparent)}
  .topwrap{max-width:1120px;margin:0 auto;padding:12px 22px;display:flex;align-items:center;gap:18px}
  .brand{font-family:var(--serif);font-size:20px;letter-spacing:.02em;display:flex;align-items:center;gap:11px}
  .brand .gem{width:16px;height:16px;transform:rotate(45deg);background:linear-gradient(135deg,#fff,var(--gold-soft) 40%,var(--gold));border-radius:2px;box-shadow:0 0 0 1px rgba(198,166,103,.5),0 2px 6px rgba(198,166,103,.35)}
  .brand .bname{display:flex;flex-direction:column;line-height:1.05}
  .brand .tag{font-family:var(--mono);font-size:9px;letter-spacing:.22em;color:var(--gold-deep);text-transform:uppercase;font-weight:500;margin-top:3px}
  .modeswitch{margin-left:auto;display:flex;background:var(--champagne-soft);border:1px solid var(--line-strong);border-radius:999px;padding:3px}
  .modeswitch button{border:0;background:transparent;color:var(--muted);font-size:12.5px;font-weight:500;padding:7px 15px;border-radius:999px;letter-spacing:.02em;transition:.15s}
  .modeswitch button.on{background:linear-gradient(135deg,var(--gold),var(--gold-deep));color:#fff;box-shadow:0 2px 8px rgba(168,134,63,.3)}
  .lockbtn{margin-left:10px;display:inline-flex;align-items:center;gap:7px;background:transparent;border:1px solid var(--line-strong);color:var(--muted);font-size:12px;font-weight:500;padding:7px 13px;border-radius:999px;transition:.15s}
  .lockbtn:hover{border-color:var(--gold);color:var(--gold-deep)}
  .lockico{width:11px;height:11px;border:1.6px solid currentColor;border-radius:2px;position:relative;margin-top:1px}
  .lockico::before{content:"";position:absolute;left:50%;top:-5px;transform:translateX(-50%);width:7px;height:6px;border:1.6px solid currentColor;border-bottom:0;border-radius:4px 4px 0 0}

  .lockwrap{min-height:70vh;display:flex;align-items:center;justify-content:center;padding:20px}
  .lockcard{background:var(--card);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:38px 34px;max-width:400px;width:100%;text-align:center}
  .lockcard .gem-lg{width:30px;height:30px;transform:rotate(45deg);display:inline-block;background:linear-gradient(135deg,#fff,var(--gold-soft) 40%,var(--gold));border-radius:4px;box-shadow:0 0 0 1px rgba(198,166,103,.5),0 4px 14px rgba(198,166,103,.4);margin-bottom:20px}
  .lockcard .lock-tag{font-family:var(--mono);font-size:9.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:10px}
  .lockcard h1{font-size:25px;margin-bottom:8px}
  .lockcard p{color:var(--muted);font-size:13px;line-height:1.55;margin:0 0 22px}
  .lockcard .field{text-align:left}
  .lockcard .lock-note{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-top:16px}
  .lock-switch{background:none;border:0;color:var(--gold-deep);font-size:12.5px;margin-top:16px;font-weight:500}
  .lock-switch:hover{text-decoration:underline}

  .preset-row{display:flex;gap:7px;margin-bottom:8px}
  .preset-row button{flex:1;border:1px solid var(--line-strong);background:#fff;color:var(--muted);font-family:var(--mono);font-size:12px;font-weight:500;padding:8px;border-radius:8px;letter-spacing:.04em;transition:.12s}
  .preset-row button:hover{border-color:var(--gold)}
  .preset-row button.on{background:var(--champagne);border-color:var(--gold);color:var(--gold-deep)}

  /* Send to client */
  .sendmsg{background:var(--champagne-soft);border:1px solid var(--line);border-radius:11px;padding:14px 16px;font-size:13px;line-height:1.55;color:var(--ink);margin-bottom:16px}
  .sendrow{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
  @media(max-width:560px){.sendrow{grid-template-columns:1fr}}

  /* Factory job card */
  .factory-card{background:#fff;color:#1c1c1c;border:1px solid var(--line-strong);border-radius:12px;padding:26px}
  .fc-head{display:flex;justify-content:space-between;align-items:flex-start;border-bottom:2px solid var(--gold);padding-bottom:14px}
  .fc-brand{font-family:var(--serif);font-size:20px;display:flex;align-items:center;gap:9px}
  .fc-gem{width:14px;height:14px;transform:rotate(45deg);background:linear-gradient(135deg,var(--gold-soft),var(--gold));border-radius:2px;display:inline-block}
  .fc-tag{font-family:var(--mono);font-size:8.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold-deep)}
  .fc-meta{text-align:right}
  .fc-ref{font-family:var(--mono);font-size:13px;letter-spacing:.08em;color:var(--gold-deep);font-weight:500}
  .fc-date{font-family:var(--mono);font-size:10px;color:var(--muted);letter-spacing:.06em}
  .fc-title{font-family:var(--serif);font-size:22px;margin-top:16px}
  .fc-sub{font-size:12.5px;color:var(--muted);margin:3px 0 16px}
  .fc-table{width:100%;border-collapse:collapse;border:1px solid var(--line-strong)}
  .fc-table td{border:1px solid var(--line);padding:9px 12px;font-size:13px;vertical-align:top}
  .fc-table .fk{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);width:150px;background:#faf9f4}
  .fc-table .fv{font-weight:500}
  .fc-notes{margin-top:16px;border:1px dashed var(--line-strong);border-radius:9px;padding:12px 14px;font-size:13px;line-height:1.5}
  .fc-notes-l{font-family:var(--mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:5px}
  .fc-imgs{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px}
  .fimg{border:1px solid var(--line);border-radius:9px;overflow:hidden}
  .fimg-l{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);padding:8px 10px;background:#faf9f4;border-bottom:1px solid var(--line)}
  .fimg img{width:100%;display:block;object-fit:contain;background:#FCFBF8}
  .fc-foot{margin-top:20px;padding-top:12px;border-top:1px solid var(--line);font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);text-align:center}

  @media print{
    html,body{background:#fff;height:auto;margin:0}
    .topbar,#app,#toast{display:none !important}
    #modal-root{position:static}
    .scrim{position:static;inset:auto;background:none;backdrop-filter:none;padding:0;display:block;height:auto}
    #factoryModal{position:static;width:100%;max-width:none;max-height:none;box-shadow:none;border-radius:0;overflow:visible}
    #factoryModal .modal-b{padding:0;overflow:visible}
    .factory-card{border:0;padding:0}
    .fc-imgs img{max-height:260px;width:auto;max-width:100%;margin:0 auto;object-fit:contain;background:#FCFBF8}
    .no-print{display:none !important}
  }

  .wrap{max-width:1120px;margin:0 auto;padding:26px 22px 80px}

  /* Studio home */
  .pagehead{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin:6px 0 22px}
  .pagehead h1{font-size:30px;letter-spacing:-.01em}
  .pagehead p{margin:4px 0 0;color:var(--muted);font-size:13.5px}
  .btn{border:1px solid var(--gold-deep);background:linear-gradient(135deg,var(--gold),var(--gold-deep));color:#fff;font-weight:600;font-size:13px;padding:10px 16px;border-radius:9px;letter-spacing:.01em;transition:.15s;box-shadow:0 1px 0 rgba(255,255,255,.3) inset}
  .btn:hover{filter:brightness(1.05)}
  .btn.ghost{background:transparent;color:var(--gold-deep);border-color:var(--line-strong);box-shadow:none;font-weight:500}
  .btn.ghost:hover{border-color:var(--gold)}
  .btn.gold{background:var(--ink);border-color:var(--ink);color:var(--gold-soft)}
  .btn.gold:hover{filter:brightness(1.15)}
  .btn.sm{padding:7px 12px;font-size:12px}
  .btn.danger{background:transparent;border-color:#E7CBC4;color:var(--danger);box-shadow:none;font-weight:500}
  .btn.danger:hover{background:#FBEDEA;border-color:var(--danger);filter:none}
  .ocard .del{position:absolute;top:12px;right:12px;border:1px solid var(--line);background:#fff;color:var(--muted);width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;opacity:0;transition:.15s;padding:0}
  .ocard:hover .del{opacity:1}
  .ocard .del:hover{color:var(--danger);border-color:#E7CBC4;background:#FBEDEA}
  .hostwarn{background:var(--champagne-soft);border:1px solid var(--gold-soft);border-radius:10px;padding:12px 14px;font-size:12.5px;line-height:1.55;color:var(--ink);margin-bottom:14px}
  .hostwarn b{color:var(--gold-deep)}

  /* Sub-nav */
  .subnav{display:flex;gap:5px;background:var(--champagne-soft);border:1px solid var(--line-strong);border-radius:999px;padding:4px;width:max-content;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;margin-bottom:22px}
  .subnav::-webkit-scrollbar{display:none}
  .subnav button{border:0;background:transparent;color:var(--muted);font-size:13px;font-weight:500;padding:8px 18px;border-radius:999px;letter-spacing:.01em;transition:.15s;white-space:nowrap;flex:0 0 auto}
  .subnav button.on{background:#fff;color:var(--ink);box-shadow:var(--shadow)}

  /* Procurement desk hero */
  .desk-hero{background:linear-gradient(155deg,#20180E,#14201B);color:#EDE7D9;border-radius:16px;padding:26px 28px;margin-bottom:20px;position:relative;overflow:hidden}
  .desk-hero::after{content:"";position:absolute;right:-40px;top:-50px;width:220px;height:220px;background:radial-gradient(circle,rgba(198,166,103,.22),transparent 70%);pointer-events:none}
  .desk-hero .desk-tag{font-family:var(--mono);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-soft)}
  .desk-hero h1{font-size:28px;margin:8px 0 4px;letter-spacing:-.01em}
  .desk-hero p{margin:0;color:#B8AE9C;font-size:13px;max-width:52ch}
  .desk-partner{display:inline-flex;align-items:center;gap:8px;margin-top:16px;background:rgba(255,255,255,.06);border:1px solid rgba(198,166,103,.3);border-radius:999px;padding:7px 14px;font-size:12px;font-family:var(--mono);letter-spacing:.02em;color:#E0D6C4}
  .dp-dot{width:7px;height:7px;border-radius:50%;background:var(--gold)}
  .desk-acts{position:absolute;right:28px;top:26px;display:flex;gap:9px}
  .desk-acts .btn.ghost{border-color:rgba(198,166,103,.4);color:var(--gold-soft)}
  .desk-acts .btn.ghost:hover{border-color:var(--gold);background:rgba(198,166,103,.1)}

  /* Stat tiles */
  .tiles{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:20px}
  .tile{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:15px 16px}
  .tile .n{font-family:var(--serif);font-size:26px;line-height:1}
  .tile .l{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:7px}
  .tile.hot{border-color:var(--gold);background:var(--champagne-soft)}
  .tile.hot .n{color:var(--gold-deep)}
  @media screen and (max-width:760px){.tiles{grid-template-columns:repeat(2,1fr)}}

  /* Filters */
  .dfilters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
  .dchip{border:1px solid var(--line-strong);background:#fff;color:var(--muted);font-size:12px;font-weight:500;padding:7px 13px;border-radius:999px;transition:.12s}
  .dchip span{font-family:var(--mono);font-size:10px;opacity:.7;margin-left:4px}
  .dchip:hover{border-color:var(--gold)}
  .dchip.on{background:var(--ink);color:#EDE7D9;border-color:var(--ink)}
  .dchip.on span{opacity:.8}

  /* Diamond table */
  .dtable-wrap{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:var(--shadow)}
  .dtable{width:100%;border-collapse:collapse}
  .dtable th{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);text-align:left;padding:12px 14px;background:#faf9f4;border-bottom:1px solid var(--line)}
  .dtable td{padding:13px 14px;border-bottom:1px solid var(--line);font-size:13.5px}
  .dtable tbody tr:last-child td{border-bottom:0}
  .dtable tbody tr{cursor:pointer;transition:.1s}
  .dtable tbody tr:hover{background:var(--champagne-soft)}
  .dtable .tny{font-family:var(--mono);font-size:10px;color:var(--muted);letter-spacing:.03em}
  .dtable .hasimg{color:var(--gold-deep);margin-left:4px}
  .dtable .dgo{color:var(--line-strong);font-size:20px;text-align:right;width:24px}
  .dtable tbody tr:hover .dgo{color:var(--gold)}
  .dpill{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;padding:4px 10px;border-radius:999px;white-space:nowrap}
  .s-needed{background:#FBEDEA;color:#B0655A}
  .s-sourcing{background:var(--champagne);color:var(--gold-deep)}
  .s-tobuy{background:#E8F1FA;color:#3B6EA5}
  .s-purchased{background:#EDE9F5;color:#6A55A5}
  .s-received{background:#EAF3EE;color:#5E8B6A}

  /* Diamond modal */
  .dia-shot{border:1px solid var(--line);border-radius:12px;padding:14px;text-align:center;margin-bottom:18px;background:#faf9f4}
  .dia-shot img{max-width:100%;max-height:230px;border-radius:9px;border:1px solid var(--line);cursor:zoom-in}
  .dia-shot-empty{color:var(--muted);font-size:12.5px;padding:26px 0;font-family:var(--mono);letter-spacing:.04em}
  .dia-actions{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}
  @media(max-width:560px){.dia-actions{grid-template-columns:1fr}}

  /* Production status tools */
  .status-tools{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--line)}
  .btn.tiny{padding:5px 10px;font-size:11px;border-radius:7px}
  .btn:disabled{opacity:.4;cursor:not-allowed}

  .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}
  .ocard{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;box-shadow:var(--shadow);cursor:pointer;transition:.15s;position:relative}
  .ocard:hover{border-color:var(--line-strong);transform:translateY(-2px)}
  .ocard .rid{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--gold)}
  .ocard h3{font-size:20px;margin:6px 0 2px}
  .ocard .piece{color:var(--muted);font-size:13px;margin-bottom:14px}
  .minirail{display:flex;gap:3px;margin:12px 0 10px}
  .minirail span{height:4px;flex:1;border-radius:2px;background:var(--line)}
  .minirail span.done{background:var(--emerald)}
  .minirail span.cur{background:var(--gold)}
  .ocard .foot{display:flex;align-items:center;justify-content:space-between;margin-top:8px}
  .chip{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;padding:4px 9px;border-radius:999px;border:1px solid var(--line-strong);color:var(--muted)}
  .chip.paid{color:var(--success);border-color:#CBE0D2;background:#F1F7F3}
  .chip.due{color:var(--gold-deep);border-color:var(--gold-soft);background:var(--champagne-soft)}

  .empty{background:var(--card);border:1px dashed var(--line-strong);border-radius:14px;padding:48px;text-align:center;color:var(--muted)}
  .empty h3{font-size:22px;color:var(--ink);margin-bottom:6px}

  /* Editor / detail */
  .backlink{display:inline-flex;align-items:center;gap:7px;color:var(--muted);font-size:12.5px;font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;background:none;border:0;padding:0;margin-bottom:16px}
  .backlink:hover{color:var(--ink)}
  .dhead{display:flex;flex-wrap:wrap;align-items:flex-start;gap:16px;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:20px;margin-bottom:22px}
  .dhead .rid{font-family:var(--mono);font-size:12px;letter-spacing:.12em;color:var(--gold);margin-bottom:6px}
  .dhead h1{font-size:30px;letter-spacing:-.01em}
  .dhead .sub{color:var(--muted);font-size:13.5px;margin-top:3px}
  .dhead .acts{display:flex;gap:9px;flex-wrap:wrap}

  .cols{display:grid;grid-template-columns:1.55fr 1fr;gap:22px;align-items:start}
  .panel{background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);margin-bottom:20px;overflow:hidden}
  .panel-h{padding:15px 18px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}
  .panel-h .t{font-family:var(--serif);font-size:17px}
  .panel-b{padding:18px}

  /* Timeline */
  .rail{list-style:none;margin:0;padding:0}
  .rail li{position:relative;padding:0 0 4px 30px}
  .rail li:not(:last-child){padding-bottom:20px}
  .rail li::before{content:"";position:absolute;left:8px;top:20px;bottom:-4px;width:2px;background:var(--line)}
  .rail li:last-child::before{display:none}
  .dot{position:absolute;left:0;top:2px;width:18px;height:18px;border-radius:50%;border:2px solid var(--line-strong);background:#fff;display:flex;align-items:center;justify-content:center}
  .rail li.done .dot{background:linear-gradient(135deg,var(--gold),var(--gold-deep));border-color:var(--gold-deep)}
  .rail li.done .dot::after{content:"";width:6px;height:6px;background:#fff;border-radius:50%}
  .rail li.done::before{background:var(--gold)}
  .rail li.cur .dot{border-color:var(--gold);box-shadow:0 0 0 4px rgba(198,166,103,.2)}
  .rail li.cur .dot::after{content:"";width:7px;height:7px;background:var(--gold);border-radius:50%}
  .rail .st-name{font-weight:500;font-size:14.5px}
  .rail li.cur .st-name{color:var(--gold-deep)}
  .rail .st-meta{font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;color:var(--muted);text-transform:uppercase;margin-top:2px}
  .rail .st-row{display:flex;align-items:center;justify-content:space-between;gap:10px}
  .stage-media{display:flex;gap:7px;flex-wrap:wrap;margin-top:9px}
  .stage-media img{width:62px;height:62px;object-fit:cover;border-radius:8px;border:1px solid var(--line);cursor:pointer}

  /* Spec sheet */
  .spec{border:1px solid var(--line);border-radius:12px;overflow:hidden}
  .spec .srow{display:grid;grid-template-columns:130px 1fr;border-top:1px solid var(--line)}
  .spec .srow:first-child{border-top:0}
  .spec .sk{padding:9px 12px;background:#FAF9F4;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border-right:1px solid var(--line)}
  .spec .sv{padding:9px 12px;font-size:13.5px;font-weight:500}

  /* Payments */
  .pay-tot{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px}
  .pay-tot .big{font-family:var(--serif);font-size:28px}
  .inv{border:1px solid var(--line);border-radius:11px;padding:13px 15px;margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;gap:12px}
  .inv .ilbl{font-size:13px;font-weight:500}
  .inv .isub{font-family:var(--mono);font-size:10.5px;color:var(--muted);letter-spacing:.06em;text-transform:uppercase;margin-top:2px}
  .inv .amt{font-family:var(--mono);font-size:15px;font-weight:500}
  .badge{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;padding:3px 8px;border-radius:999px}
  .badge.paid{background:#EDF4EF;color:var(--success)}
  .badge.due{background:var(--champagne);color:var(--gold-deep)}

  /* Forms */
  .field{margin-bottom:13px}
  .field label{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:5px}
  .field input,.field select,.field textarea{width:100%;border:1px solid var(--line-strong);border-radius:9px;padding:10px 12px;font-size:14px;background:#fff;color:var(--ink)}
  .field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--emerald);box-shadow:0 0 0 3px rgba(31,77,58,.1)}
  .frow{display:grid;grid-template-columns:1fr 1fr;gap:12px}
  .frow3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}

  /* CAD */
  .cadbox{border:1px solid var(--line);border-radius:12px;padding:15px;text-align:center}
  .cadbox img{max-width:100%;border-radius:9px;border:1px solid var(--line);margin-bottom:10px}
  .cad-status{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:6px 12px;border-radius:999px;display:inline-block}
  .cad-status.wait{background:var(--champagne);color:var(--gold-deep)}
  .cad-status.ok{background:#EDF4EF;color:var(--success)}
  .cad-status.chg{background:#F8ECE9;color:var(--danger)}

  /* Modal */
  .scrim{position:fixed;inset:0;background:rgba(20,32,27,.55);backdrop-filter:blur(3px);z-index:60;display:flex;align-items:center;justify-content:center;padding:20px}
  .modal{background:var(--card);border-radius:16px;max-width:560px;width:100%;max-height:90vh;overflow:auto;box-shadow:0 30px 80px rgba(0,0,0,.3)}
  .modal-h{padding:18px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}
  .modal-h h2{font-size:20px}
  .modal-b{padding:20px}
  .modal-f{padding:16px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;position:sticky;bottom:0;background:#fff}
  .x{border:0;background:none;font-size:22px;color:var(--muted);line-height:1;padding:2px 6px}

  .divider{height:1px;background:var(--line);margin:16px 0}
  .hint{font-size:12px;color:var(--muted);line-height:1.5}
  .toast{pointer-events:none;position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#EDEAE0;padding:12px 20px;border-radius:10px;font-size:13px;z-index:80;opacity:0;transition:.25s;box-shadow:0 10px 30px rgba(0,0,0,.25)}
  .toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

  /* Client view */
  .cv-hero{background:linear-gradient(160deg,#fff,var(--champagne-soft));color:var(--ink);border:1px solid var(--line-strong);border-radius:18px;padding:32px;margin-bottom:22px;position:relative;overflow:hidden;box-shadow:var(--shadow)}
  .cv-hero::before{content:"";position:absolute;left:0;top:0;right:0;height:3px;background:linear-gradient(90deg,var(--gold-soft),var(--gold),var(--gold-deep))}
  .cv-hero::after{content:"";position:absolute;right:-50px;top:-50px;width:220px;height:220px;background:radial-gradient(circle,rgba(198,166,103,.16),transparent 70%);pointer-events:none}
  .cv-hero .rid{font-family:var(--mono);font-size:11px;letter-spacing:.16em;color:var(--gold-deep);text-transform:uppercase}
  .cv-hero h1{font-size:33px;margin:10px 0 4px;letter-spacing:-.01em}
  .cv-hero .status-now{display:inline-flex;align-items:center;gap:8px;margin-top:16px;background:#fff;border:1px solid var(--gold-soft);border-radius:999px;padding:8px 16px;font-size:13px;font-weight:500;box-shadow:0 2px 8px rgba(198,166,103,.15)}
  .cv-hero .status-now .pulse{width:8px;height:8px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 0 rgba(198,166,103,.6);animation:pulse 2s infinite}
  @keyframes pulse{0%{box-shadow:0 0 0 0 rgba(198,166,103,.5)}70%{box-shadow:0 0 0 8px rgba(198,166,103,0)}100%{box-shadow:0 0 0 0 rgba(198,166,103,0)}}
  .cv-hero .whatsnext{font-size:13px;color:var(--muted);margin-top:12px;max-width:60ch}
  .cv-foot{text-align:center;margin-top:30px;padding-top:22px;border-top:1px solid var(--line)}
  .cv-foot .fb{font-family:var(--serif);font-size:17px;color:var(--gold-deep)}
  .cv-foot .ft{font-family:var(--mono);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin-top:5px}
  .cv-foot .founder{font-size:12px;color:var(--muted);margin-top:8px}
  @media (prefers-reduced-motion:reduce){.pulse{animation:none}}

  @media(max-width:860px){
    .cols{grid-template-columns:1fr}
    .pagehead h1{font-size:25px}
    .topwrap{padding:11px 16px;gap:10px}
    .brand small{display:none}
    .wrap{padding:20px 15px 70px}
  }
/* --- Update #2: big production photos + delivery line --- */
.stage-media.big{gap:10px}
.stage-media.big img.big-photo{width:100%;max-width:340px;height:auto;max-height:300px;object-fit:cover;border-radius:11px;border:1px solid var(--line);cursor:zoom-in;display:block}
@media(max-width:560px){.stage-media.big img.big-photo{max-width:100%}}
.cv-deliver{margin-top:14px;font-family:var(--mono);font-size:11.5px;letter-spacing:.04em;color:var(--muted)}
.cv-deliver b{color:var(--gold-deep)}

/* ============================================================
   UPDATE #3 — Aesthetic elevation + full mobile optimisation
   ============================================================ */

/* ---- Brand as home button ---- */
button.brand{background:none;border:0;padding:0;cursor:pointer;text-align:left;transition:opacity .15s}
button.brand:hover{opacity:.72}
button.brand .gem{transition:transform .4s cubic-bezier(.2,.8,.2,1)}
button.brand:hover .gem{transform:rotate(135deg)}

/* ---- Refined typography ---- */
h1,h2,h3{letter-spacing:-.012em}
.pagehead h1{font-size:32px}
.panel-h .t{letter-spacing:-.005em}

/* ---- Panels: softer, more luxurious ---- */
.panel{border-radius:16px;transition:box-shadow .25s ease,transform .25s ease}
.panel:hover{box-shadow:0 2px 4px rgba(120,100,60,.05),0 14px 44px rgba(120,100,60,.1)}
.panel-h{background:linear-gradient(180deg,#fff,#FDFCF9)}

/* ---- Order cards: gold reveal ---- */
.ocard{transition:border-color .2s,transform .2s,box-shadow .25s}
.ocard::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;border-radius:14px 0 0 14px;background:linear-gradient(180deg,var(--gold-soft),var(--gold));opacity:0;transition:opacity .22s}
.ocard:hover::before{opacity:1}
.ocard:hover{box-shadow:0 2px 6px rgba(120,100,60,.06),0 16px 46px rgba(120,100,60,.13)}

/* ---- Buttons: subtle lift ---- */
.btn{transition:filter .15s,transform .12s,box-shadow .18s}
.btn:hover{transform:translateY(-1px)}
.btn:active{transform:translateY(0)}

/* ---- Form helper note ---- */
.fnote{text-transform:none;letter-spacing:0;color:var(--muted);font-weight:400}

/* ---- Arrival preview inside the order form ---- */
.arrival-preview{background:linear-gradient(135deg,var(--champagne-soft),#fff);border:1px solid var(--gold-soft);border-radius:11px;padding:12px 14px;font-size:12.5px;line-height:1.6;color:var(--ink);margin:2px 0 14px}
.arrival-preview b{color:var(--gold-deep)}
.ap-ico{color:var(--gold);margin-right:6px}
.ap-sub{color:var(--muted)}

/* ---- Client hero: crest + arrival card ---- */
.cv-hero{padding:38px 34px}
.cv-crest{position:absolute;right:30px;bottom:26px;width:80px;height:80px;opacity:.08;pointer-events:none;
  background:conic-gradient(from 45deg,var(--gold),var(--gold-soft),var(--gold-deep),var(--gold));
  clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}
.cv-for{color:var(--muted);font-size:13px;margin-top:2px}
.cv-dot{color:var(--gold);margin:0 4px}
.cv-hero h1{font-size:35px}
.cv-deliver{display:flex;align-items:center;gap:14px;margin-top:22px;background:#fff;border:1px solid var(--line-strong);border-left:3px solid var(--gold);border-radius:12px;padding:14px 18px;max-width:420px;box-shadow:0 4px 18px rgba(120,100,60,.08)}
.cvd-ico{font-size:19px;color:var(--gold-deep);line-height:1}
.cvd-lbl{font-family:var(--mono);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.cvd-date{font-family:var(--serif);font-size:17px;margin-top:3px;letter-spacing:-.01em}
.cvd-sub{font-size:11.5px;color:var(--muted);margin-top:3px}

/* ---- Client CAD hero image ---- */
.cad-hero{width:100%;border-radius:12px;border:1px solid var(--line);cursor:zoom-in;display:block;
  box-shadow:0 6px 24px rgba(120,100,60,.12);transition:transform .3s cubic-bezier(.2,.8,.2,1)}
.cad-hero:hover{transform:scale(1.012)}

/* ---- Spec table polish ---- */
.spec .srow:hover .sk{color:var(--gold-deep)}
.spec .sv{letter-spacing:-.005em}

/* ---- Timeline refinement ---- */
.rail li.cur .dot{animation:dotpulse 2.4s ease-in-out infinite}
@keyframes dotpulse{0%,100%{box-shadow:0 0 0 4px rgba(198,166,103,.18)}50%{box-shadow:0 0 0 7px rgba(198,166,103,.08)}}
@media (prefers-reduced-motion:reduce){.rail li.cur .dot{animation:none}.cad-hero{transition:none}}

/* ---- Footer crest ---- */
.cv-foot{padding-top:28px}
.cv-foot .fb{letter-spacing:.01em}
.cv-foot::before{content:"◆";display:block;color:var(--gold-soft);font-size:11px;margin-bottom:12px}

/* ============================================================
   MOBILE — phones upload photos, so this must be excellent
   ============================================================ */
@media screen and (max-width:760px){
  .wrap{padding:16px 13px 60px}
  .topwrap{padding:10px 13px;gap:8px}
  .brand .bname{font-size:17px}
  .brand .tag{font-size:8px;letter-spacing:.16em}
  .modeswitch button{padding:7px 11px;font-size:12px}
  .lockbtn{padding:7px 10px;font-size:11.5px}

  /* Nav scrolls horizontally instead of wrapping */
  .subnav{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .subnav::-webkit-scrollbar{display:none}
  .subnav button{white-space:nowrap;flex:0 0 auto}

  /* Page head stacks */
  .pagehead{flex-direction:column;align-items:stretch;gap:12px}
  .pagehead h1{font-size:26px}
  .pagehead .btn{width:100%}
  .pagehead > div:last-child{display:flex;gap:8px}
  .pagehead > div:last-child .btn{flex:1}

  /* Order detail header actions become a grid of taps */
  .dhead{flex-direction:column;align-items:stretch}
  .dhead h1{font-size:25px}
  .dhead .acts{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}
  .dhead .acts .btn{width:100%;justify-content:center;padding:11px 8px;font-size:12px}

  /* Single column everywhere */
  .cols{grid-template-columns:1fr;gap:16px}
  .frow,.frow3{grid-template-columns:1fr;gap:0}
  .frow .field,.frow3 .field{margin-bottom:13px}

  /* Bigger tap targets (Apple/Google guidance: 44px) */
  .btn{padding:12px 16px;font-size:13.5px}
  .btn.sm{padding:10px 13px;font-size:12.5px}
  .btn.tiny{padding:9px 12px;font-size:12px}
  .field input,.field select,.field textarea{padding:13px 13px;font-size:16px} /* 16px stops iOS zoom-on-focus */
  .preset-row button{padding:12px;font-size:13px}
  .inv{padding:15px}
  .ocard .del{opacity:1;width:34px;height:34px} /* no hover on touch — always visible */

  /* Stage photo upload buttons: full width, easy to hit */
  .status-tools{flex-direction:column}
  .status-tools .btn{width:100%}
  .st-row{flex-direction:column;align-items:flex-start;gap:8px}
  .stage-btns{display:flex;gap:8px;width:100%}
  .stage-btns .btn{flex:1}
  .stage-media.big img.big-photo{max-width:100%;max-height:260px}

  /* Client hero */
  .cv-hero{padding:26px 20px;border-radius:16px}
  .cv-hero h1{font-size:27px}
  .cv-crest{width:56px;height:56px;right:16px;bottom:16px}
  .cv-deliver{flex-direction:row;padding:13px 15px;max-width:none}
  .cvd-date{font-size:15.5px}

  /* Procurement desk */
  .desk-hero{padding:22px 18px}
  .desk-hero h1{font-size:24px}
  .desk-acts{position:static;margin-top:16px;display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .desk-acts .btn{width:100%}
  .desk-partner{font-size:11px}
  .tiles{grid-template-columns:1fr 1fr;gap:10px}
  .tile{padding:13px}
  .tile .n{font-size:22px}

  /* Diamond table becomes cards */
  .dtable-wrap{border:0;background:none;box-shadow:none}
  .dtable thead{display:none}
  .dtable,.dtable tbody,.dtable tr,.dtable td{display:block;width:100%}
  .dtable tr{background:#fff;border:1px solid var(--line);border-radius:13px;margin-bottom:11px;padding:13px 15px;box-shadow:var(--shadow)}
  .dtable td{border:0;padding:3px 0}
  .dtable .dgo{display:none}

  /* Modals: full-height sheets */
  .scrim{padding:0;align-items:flex-end}
  .modal{max-height:94vh;border-radius:18px 18px 0 0;max-width:none}
  .modal-b{padding:16px}
  .modal-f{padding:13px 16px;gap:8px;flex-wrap:wrap}
  .modal-f .btn{flex:1 1 auto;min-width:calc(50% - 8px);white-space:normal}
  .modal-f .btn[style*="margin-right:auto"]{flex-basis:100%;min-width:100%}
  .dia-actions{grid-template-columns:1fr}
  .sendrow{grid-template-columns:1fr}

  /* Factory job card readable on phone */
  .factory-card{padding:18px}
  .fc-head{flex-direction:column;gap:10px}
  .fc-meta{text-align:left}
  .fc-imgs{grid-template-columns:1fr}
  .fc-table .fk{width:110px;font-size:9px}

  /* Lock / login card */
  .lockcard{padding:30px 22px}
}

@media(max-width:400px){
  .dhead .acts{grid-template-columns:1fr}
  .tiles{grid-template-columns:1fr}
  .cv-hero h1{font-size:24px}
}

/* Safe area for notched phones */
@supports(padding:max(0px)){
  .wrap{padding-left:max(13px,env(safe-area-inset-left));padding-right:max(13px,env(safe-area-inset-right))}
  .modal-f{
    padding-bottom:max(13px,env(safe-area-inset-bottom));
    padding-left:max(16px,env(safe-area-inset-left));
    padding-right:max(16px,env(safe-area-inset-right));
  }
  .modal-b{
    padding-left:max(16px,env(safe-area-inset-left));
    padding-right:max(16px,env(safe-area-inset-right));
  }
}

/* Toast must never block taps (esp. mobile bottom-sheet Save buttons) */
.toast{pointer-events:none}
@media screen and (max-width:760px){ .toast{bottom:auto;top:76px} }

/* Guarantee 44px minimum tap targets on touch devices */
@media screen and (max-width:760px){
  .btn,.btn.sm,.btn.tiny,.dchip,.preset-row button,.subnav button,.modeswitch button{min-height:44px;display:inline-flex;align-items:center;justify-content:center}
  .stage-btns .btn{min-height:46px}
  .ocard .del{min-width:38px;min-height:38px}
  .backlink{min-height:40px;display:inline-flex;align-items:center}
  .x{min-width:40px;min-height:40px}
}

/* ============================================================
   UPDATE #4 — Video support in production media
   ============================================================ */
.stage-media.big{display:flex;flex-wrap:wrap;gap:10px}
.mtile{position:relative;display:inline-block;line-height:0;border-radius:11px;overflow:hidden;cursor:zoom-in;
  transition:transform .22s cubic-bezier(.2,.8,.2,1),box-shadow .22s}
.mtile:hover{transform:translateY(-2px);box-shadow:0 8px 26px rgba(120,100,60,.16)}
.mtile img.big-photo,.mtile video.big-photo{width:100%;max-width:340px;height:auto;max-height:300px;object-fit:cover;
  border-radius:11px;border:1px solid var(--line);display:block;background:#EDEAE2}
.mtile.is-video video.big-photo{background:#141210}

/* Play button overlay */
.mplay{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:52px;height:52px;border-radius:50%;background:rgba(255,255,255,.92);color:var(--gold-deep);
  display:flex;align-items:center;justify-content:center;font-size:17px;padding-left:3px;
  box-shadow:0 4px 18px rgba(0,0,0,.28);pointer-events:none;transition:transform .22s,background .22s}
.mtile:hover .mplay{transform:translate(-50%,-50%) scale(1.08);background:#fff}

/* VIDEO badge */
.mbadge{position:absolute;left:9px;top:9px;font-family:var(--mono);font-size:8.5px;letter-spacing:.14em;
  background:rgba(20,18,16,.72);color:var(--gold-soft);padding:4px 7px;border-radius:5px;pointer-events:none;
  backdrop-filter:blur(4px)}

/* Remove button (owner only) */
.mdel{position:absolute;right:8px;top:8px;width:26px;height:26px;border-radius:8px;border:0;
  background:rgba(20,18,16,.6);color:#fff;font-size:16px;line-height:1;cursor:pointer;opacity:0;
  display:flex;align-items:center;justify-content:center;transition:opacity .18s,background .18s;backdrop-filter:blur(4px)}
.mtile:hover .mdel{opacity:1}
.mdel:hover{background:var(--danger)}

@media screen and (max-width:760px){
  .mtile img.big-photo,.mtile video.big-photo{max-width:100%;max-height:260px}
  .mtile{width:100%}
  .mdel{opacity:1;width:32px;height:32px} /* no hover on touch */
  .mplay{width:46px;height:46px;font-size:15px}
}
@media (prefers-reduced-motion:reduce){.mtile,.mtile:hover{transform:none;transition:none}}

/* ============================================================
   UPDATE #5 — Logo, client glow, next steps, single-page job card
   ============================================================ */

/* ---- Brand mark in top bar ---- */
.brandmark{height:26px;width:auto;object-fit:contain;display:block;filter:drop-shadow(0 1px 3px rgba(198,166,103,.35))}
button.brand:hover .brandmark{transform:none}

/* ---- Client hero logo ---- */
.cv-logo{width:112px;height:auto;display:block;margin:0 auto 18px;
  filter:drop-shadow(0 6px 18px rgba(198,166,103,.35))}
@media screen and (max-width:760px){.cv-logo{width:88px;margin-bottom:14px}}
.cv-hero{text-align:center}
.cv-hero .cv-deliver{margin-left:auto;margin-right:auto;text-align:left}
.cv-hero .whatsnext{margin-left:auto;margin-right:auto}
.cv-hero .status-now{margin-left:auto;margin-right:auto}

/* ---- Glow on the current stage (client) ---- */
.cv-rail li.glow{position:relative}
.cv-rail li.glow::after{content:"";position:absolute;left:-14px;top:-10px;right:-10px;bottom:-10px;
  border-radius:14px;pointer-events:none;z-index:-1;
  background:radial-gradient(120px 70px at 30px 22px,rgba(198,166,103,.18),transparent 72%);
  animation:auraBreathe 3.6s ease-in-out infinite}
@keyframes auraBreathe{0%,100%{opacity:.55}50%{opacity:1}}
.cv-rail li.glow .dot{box-shadow:0 0 0 4px rgba(198,166,103,.22),0 0 22px 4px rgba(198,166,103,.5)}
.cv-rail li.glow .st-name{color:var(--gold-deep);font-weight:600}
.st-now-note{font-size:12.5px;color:var(--muted);line-height:1.55;margin-top:6px;
  padding-left:11px;border-left:2px solid var(--gold-soft)}
@media (prefers-reduced-motion:reduce){.cv-rail li.glow::after{animation:none;opacity:.8}}

/* ---- What happens next ---- */
.next-panel .panel-h{background:linear-gradient(180deg,#fff,var(--champagne-soft))}
.nextlist{display:flex;flex-direction:column;gap:2px}
.nextrow{display:flex;gap:14px;align-items:flex-start;padding:12px 2px;border-top:1px solid var(--line)}
.nextrow:first-child{border-top:0;padding-top:2px}
.nnum{flex:0 0 30px;height:30px;border-radius:50%;border:1px solid var(--gold-soft);color:var(--gold-deep);
  background:var(--champagne-soft);display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:11.5px;font-weight:500}
.nname{font-weight:500;font-size:14px;letter-spacing:-.005em}
.nnote{font-size:12.5px;color:var(--muted);line-height:1.5;margin-top:2px}

/* ---- Job card: refined, compact, print-ready ---- */
.fc-logo{height:34px;width:auto;object-fit:contain}
.fc-brand{display:flex;align-items:center;gap:11px}
.fc-name{font-family:var(--serif);font-size:19px;line-height:1.05}
.fc-titlerow{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:14px 0 6px;flex-wrap:wrap}
.fc-title{font-family:var(--serif);font-size:21px;margin:0}
.fc-sub{font-size:12.5px;color:var(--muted);margin:0}
.fc-sec{display:flex;align-items:center;gap:10px;margin:16px 0 9px}
.fc-sec span{font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold-deep);white-space:nowrap}
.fc-sec::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--gold-soft),transparent)}
.fc-grid{display:grid;grid-template-columns:1fr 1fr;gap:0;border:1px solid var(--line-strong);border-radius:8px;overflow:hidden}
.fcell{padding:8px 12px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-width:0}
.fcell:nth-child(2n){border-right:0}
.fcell:nth-last-child(-n+2){border-bottom:0}
.fcell .fk{font-family:var(--mono);font-size:8.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.fcell .fv{font-size:12.5px;font-weight:500;margin-top:2px;word-break:break-word}
.fc-design{border:1px solid var(--line-strong);border-radius:8px;padding:9px 12px;font-size:12.5px;font-weight:500}
.fc-notes{margin-top:12px}
.fc-imgs{margin-top:14px}

/* ---- PRINT: force a single tidy page ---- */
@media print{
  @page{size:A4 portrait;margin:11mm}
  html,body{background:#fff!important;height:auto!important;margin:0!important;padding:0!important}
  .topbar,#app,#toast{display:none!important}
  #modal-root{position:static!important}
  .scrim{position:static!important;inset:auto!important;background:none!important;backdrop-filter:none!important;
    padding:0!important;display:block!important;height:auto!important}
  #factoryModal{position:static!important;width:100%!important;max-width:none!important;max-height:none!important;
    box-shadow:none!important;border-radius:0!important;overflow:visible!important;background:#fff!important}
  #factoryModal .modal-b{padding:0!important;overflow:visible!important}
  .no-print{display:none!important}
  .factory-card{border:0!important;padding:0!important;font-size:11px}

  /* Compact everything so it fits one page */
  .fc-head{padding-bottom:8px}
  .fc-logo{width:30px;height:30px}
  .fc-name{font-size:16px}
  .fc-title{font-size:17px}
  .fc-sec{margin:9px 0 5px}
  .fcell{padding:5px 9px}
  .fcell .fv{font-size:11px}
  .fcell .fk{font-size:7.5px}
  .fc-design{padding:6px 9px;font-size:11px}
  .fc-notes{padding:7px 10px;font-size:10.5px;margin-top:8px}
  .fc-imgs{grid-template-columns:1fr 1fr;gap:8px;margin-top:9px}
  .fimg img{max-height:150px;width:auto;max-width:100%;margin:0 auto;object-fit:contain}
  .fimg-l{padding:4px 7px;font-size:7.5px}
  .fc-foot{margin-top:9px;padding-top:7px;font-size:7.5px}

  /* Never split a section across pages */
  .fc-grid,.fc-imgs,.fc-notes,.fc-design,.fimg,.fcell{break-inside:avoid;page-break-inside:avoid}
  .fc-head,.fc-titlerow{break-after:avoid;page-break-after:avoid}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* ============================================================
   UPDATE #6 — Client page: couture polish
   ============================================================ */

/* Logo now transparent — let it float, no white plate */
.cv-logo{width:130px;background:none;filter:drop-shadow(0 8px 22px rgba(198,166,103,.4))}
.brandmark{background:none}
@media screen and (max-width:760px){.cv-logo{width:100px}}

/* Welcome line */
.cv-welcome{font-family:var(--serif);font-size:15px;font-style:italic;color:var(--gold-deep);
  letter-spacing:.01em;margin:0 0 16px;opacity:0;animation:fadeUp .9s ease .15s forwards}
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* Hero rhythm */
.cv-hero .rid{margin-bottom:6px}
.cv-hero h1{margin-top:2px}

/* Progress ring */
.cv-ring{position:relative;width:72px;height:72px;margin:22px auto 14px}
.ringsvg{width:72px;height:72px;transform:rotate(-90deg)}
.ring-bg{fill:none;stroke:var(--line-strong);stroke-width:3}
.ring-fg{fill:none;stroke:var(--gold);stroke-width:3;stroke-linecap:round;
  transition:stroke-dasharray 1.2s cubic-bezier(.2,.8,.2,1);filter:drop-shadow(0 0 6px rgba(198,166,103,.55))}
.ring-num{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-family:var(--serif);font-size:19px;color:var(--ink)}
.ring-num span{font-size:11px;color:var(--muted);margin-left:1px}

/* Trust seals */
.cv-seals{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:24px;
  padding-top:20px;border-top:1px solid var(--line)}
.seal{display:inline-flex;align-items:center;gap:7px;background:#fff;border:1px solid var(--line-strong);
  border-radius:999px;padding:7px 14px;font-size:11.5px;font-weight:500;color:var(--ink);
  box-shadow:0 2px 8px rgba(120,100,60,.06);transition:.2s}
.seal:hover{border-color:var(--gold);transform:translateY(-1px)}
.seal-ico{color:var(--gold-deep);font-size:11px}
@media(max-width:560px){.seal{font-size:10.5px;padding:6px 11px}}

/* Gallery carousel */
.gallery-panel .panel-b{padding:0}
.gal-stage{position:relative;overflow:hidden;background:linear-gradient(160deg,#20180E,#141210)}
.gal-track{display:flex;transition:transform .55s cubic-bezier(.22,.75,.2,1)}
.gal-slide{flex:0 0 100%;position:relative;display:flex;align-items:center;justify-content:center;
  min-height:300px;max-height:440px}
.gal-slide img,.gal-slide video{width:100%;height:100%;max-height:440px;object-fit:cover;display:block;cursor:zoom-in}
.gal-cap{position:absolute;left:16px;bottom:14px;font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--gold-soft);background:rgba(20,18,16,.6);backdrop-filter:blur(6px);
  padding:6px 11px;border-radius:6px}
.gal-nav{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;
  border:1px solid rgba(255,255,255,.18);background:rgba(20,18,16,.5);backdrop-filter:blur(6px);
  color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:.2s;opacity:.85}
.gal-nav:hover{background:var(--gold-deep);border-color:var(--gold);opacity:1}
.gal-nav:disabled{opacity:.2;cursor:default}
.gal-nav.prev{left:12px}.gal-nav.next{right:12px}
.gal-dots{display:flex;justify-content:center;gap:7px;padding:14px}
.gal-dot{width:7px;height:7px;border-radius:50%;border:0;background:var(--line-strong);cursor:pointer;padding:0;transition:.2s}
.gal-dot.on{background:var(--gold);width:20px;border-radius:4px}
@media screen and (max-width:760px){.gal-slide{min-height:230px}.gal-slide img,.gal-slide video{max-height:300px}}

/* Completed stages shimmer */
.cv-rail li.done .dot{background:linear-gradient(135deg,var(--gold-soft),var(--gold-deep));
  box-shadow:0 0 0 2px rgba(198,166,103,.14)}
.cv-rail li.done::before{background:linear-gradient(180deg,var(--gold),var(--gold-soft))}

/* Signed closing note */
.cv-note{max-width:620px;margin:34px auto 0;text-align:center;padding:30px 24px;
  background:linear-gradient(160deg,#fff,var(--champagne-soft));border:1px solid var(--line-strong);
  border-radius:16px;box-shadow:var(--shadow);position:relative}
.cvn-mark{color:var(--gold-soft);font-size:12px;margin-bottom:14px}
.cvn-quote{font-family:var(--serif);font-size:17.5px;font-style:italic;line-height:1.65;color:var(--ink);
  letter-spacing:-.005em;max-width:48ch;margin:0 auto}
.cvn-quote::before{content:"“";color:var(--gold-soft)}
.cvn-quote::after{content:"”";color:var(--gold-soft)}
.cvn-sign{font-family:var(--serif);font-size:15px;color:var(--gold-deep);margin-top:20px}
.cvn-role{font-family:var(--mono);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--muted);margin-top:5px}
@media(max-width:560px){.cvn-quote{font-size:15.5px}.cv-note{padding:24px 18px}}

/* Reduced motion */
@media (prefers-reduced-motion:reduce){
  .cv-welcome{animation:none;opacity:1}
  .gal-track,.ring-fg{transition:none}
}

/* Real logo on the sign-in / lock card */
.lock-logo{width:112px;height:auto;display:block;margin:0 auto 18px;
  filter:drop-shadow(0 6px 18px rgba(198,166,103,.35))}
@media(max-width:560px){.lock-logo{width:92px}}

/* ============================================================
   UPDATE #7 — Stepper, notes, multi-refs, multi-certs
   Design intent: Apple-grade restraint. Light, precise, quiet
   confidence. Champagne is the only accent; everything else
   earns its place through spacing and typography.
   ============================================================ */

/* ---------- Glowing horizontal stepper ---------- */
.stepper{background:var(--card);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);
  margin-bottom:22px;overflow:hidden}
.stepper-h{padding:16px 22px 0;display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.stepper-h .t{font-family:var(--serif);font-size:17px;letter-spacing:-.005em}
.steprail{position:relative;display:flex;gap:0;padding:22px 22px 20px;overflow-x:auto;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-behavior:smooth}
.steprail::-webkit-scrollbar{display:none}
.steptrack{position:absolute;left:44px;right:44px;top:40px;height:2px;background:var(--line);border-radius:2px}
.stepfill{height:100%;border-radius:2px;background:linear-gradient(90deg,var(--gold-soft),var(--gold));
  box-shadow:0 0 10px rgba(198,166,103,.55);transition:width 1.1s cubic-bezier(.2,.8,.2,1)}
.stepnode{position:relative;flex:1 0 118px;min-width:118px;text-align:center;z-index:1;cursor:default}
.stepdot{width:34px;height:34px;margin:0 auto 10px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:12px;font-weight:500;background:#fff;border:1.5px solid var(--line-strong);
  color:var(--muted);transition:.35s cubic-bezier(.2,.8,.2,1)}
.steplbl{font-size:12.5px;font-weight:500;letter-spacing:-.005em;color:var(--muted);padding:0 6px;line-height:1.35}
.stepwhen{font-family:var(--mono);font-size:8.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--line-strong);margin-top:4px}

.stepnode.done .stepdot{background:linear-gradient(135deg,var(--gold-soft),var(--gold-deep));border-color:transparent;color:#fff}
.stepnode.done .steplbl{color:var(--ink)}
.stepnode.done .stepwhen{color:var(--muted)}

.stepnode.live .stepdot{background:#fff;border-color:var(--gold);color:var(--gold-deep);transform:scale(1.14);
  box-shadow:0 0 0 5px rgba(198,166,103,.16),0 0 26px 5px rgba(198,166,103,.45);
  animation:stepGlow 3s ease-in-out infinite}
@keyframes stepGlow{
  0%,100%{box-shadow:0 0 0 5px rgba(198,166,103,.16),0 0 22px 3px rgba(198,166,103,.38)}
  50%{box-shadow:0 0 0 8px rgba(198,166,103,.08),0 0 34px 8px rgba(198,166,103,.6)}}
.stepnode.live .steplbl{color:var(--gold-deep);font-weight:600}
.stepnode.live .stepwhen{color:var(--gold-deep)}
.stepnode.todo .stepdot{opacity:.75}

@media screen and (max-width:760px){
  .stepper-h{padding:14px 16px 0}
  .steprail{padding:20px 16px 18px}
  .steptrack{left:38px;right:38px}
  .stepnode{flex:0 0 104px;min-width:104px}
  .steplbl{font-size:11.5px}
}
@media (prefers-reduced-motion:reduce){.stepnode.live .stepdot{animation:none}.stepfill{transition:none}}

/* ---------- Certificate list (client) ---------- */
.certlist{display:flex;flex-direction:column;gap:8px}
.certrow{display:flex;align-items:center;gap:11px;background:var(--champagne-soft);border:1px solid var(--gold-soft);
  border-radius:10px;padding:12px 15px;font-size:13.5px;letter-spacing:.03em}
.cert-ico{color:var(--gold-deep);font-size:10px}

/* ---------- Reference grid ---------- */
.refgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}
.refcell{position:relative;border-radius:11px;overflow:hidden;border:1px solid var(--line);line-height:0;
  transition:transform .2s cubic-bezier(.2,.8,.2,1),box-shadow .2s}
.refcell:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(120,100,60,.15)}
.refcell img{width:100%;height:112px;object-fit:cover;cursor:zoom-in;display:block}
.refcell .mdel{opacity:0}
.refcell:hover .mdel{opacity:1}
@media screen and (max-width:760px){.refcell .mdel{opacity:1}}

/* ---------- Certificate chips (Studio form) ---------- */
.chipbox{display:flex;flex-wrap:wrap;gap:7px;min-height:38px;align-items:center;
  border:1px solid var(--line);border-radius:9px;padding:8px;background:#FDFCF9;margin-bottom:8px}
.chip-empty{font-size:12px;color:var(--muted);padding:2px 4px}
.chip-item{display:inline-flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--gold-soft);
  border-radius:999px;padding:6px 8px 6px 13px;font-size:12px;color:var(--ink);box-shadow:0 1px 3px rgba(120,100,60,.08)}
.chip-x{border:0;background:var(--champagne);color:var(--gold-deep);width:19px;height:19px;border-radius:50%;
  font-size:14px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:.15s}
.chip-x:hover{background:var(--danger);color:#fff}
.chipadd{display:flex;gap:8px}
.chipadd input{flex:1}

/* ---------- Client note box ---------- */
.notebox .panel-h{background:linear-gradient(180deg,#fff,var(--champagne-soft))}
.notebox textarea{width:100%;border:1px solid var(--line-strong);border-radius:11px;padding:13px 14px;
  font-size:14px;background:#fff;color:var(--ink);resize:vertical;font-family:inherit;line-height:1.55}
.notebox textarea:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 3px rgba(198,166,103,.14)}
.note-sent{font-size:12.5px;color:var(--success);font-weight:500}

/* ---------- Owner: notes from client ---------- */
.cnote{border:1px solid var(--line);border-radius:12px;padding:13px 15px;margin-bottom:10px;background:#fff}
.cnote.unseen{border-color:var(--gold);background:var(--champagne-soft);box-shadow:0 2px 10px rgba(198,166,103,.14)}
.cnote-body{font-size:13.5px;line-height:1.6;color:var(--ink);white-space:pre-wrap}
.cnote-meta{font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;color:var(--muted);margin-top:9px;
  display:flex;align-items:center;gap:8px}
.cnote-new{background:var(--gold);color:#fff;border-radius:4px;padding:2px 6px;font-size:8px;letter-spacing:.12em}
.navbadge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;
  margin-left:7px;border-radius:9px;background:var(--gold);color:#fff;font-family:var(--mono);
  font-size:10px;padding:0 5px;vertical-align:middle}

/* ---------- Apple-grade polish ---------- */
.cv-hero{padding:44px 34px 34px}
.cv-hero h1{font-size:37px;letter-spacing:-.02em;font-weight:400}
.cv-welcome{letter-spacing:.005em}
.panel-h{padding:17px 20px}
.panel-b{padding:20px}
.cols{gap:24px}
.cv-for{font-size:13.5px}
.whatsnext{font-size:13.5px;line-height:1.62}
.spec .sv{font-weight:400;color:var(--ink)}
.spec .srow{transition:background .15s}
.spec .srow:hover{background:#FDFCF9}
.cad-hero{border-radius:14px}
.gal-stage{border-radius:0}
.inv{border-radius:12px;transition:border-color .18s}
.inv:hover{border-color:var(--line-strong)}
.cv-note{margin-top:40px;border-radius:18px}
@media screen and (max-width:760px){
  .cv-hero{padding:30px 20px 26px}
  .cv-hero h1{font-size:28px}
  .panel-b{padding:16px}
  .cols{gap:16px}
}

/* ============================================================
   UPDATE #8 — Client view: the couture pass
   Depth, light, and restraint. Nothing shouts; everything is
   considered. Champagne on paper, like gold leaf on vellum.
   ============================================================ */

/* ---------- Page atmosphere ---------- */
body{background:
  radial-gradient(1200px 600px at 50% -12%, rgba(198,166,103,.10), transparent 62%),
  radial-gradient(900px 500px at 100% 105%, rgba(198,166,103,.06), transparent 60%),
  var(--paper);
  background-attachment:fixed}

/* ---------- Hero: light through a jewel ---------- */
.cv-hero{
  background:
    radial-gradient(620px 300px at 50% -8%, rgba(255,255,255,.95), transparent 70%),
    linear-gradient(168deg,#FFFDF9 0%,var(--champagne-soft) 58%,#FFFDFA 100%);
  border:1px solid var(--gold-soft);
  box-shadow:
    0 1px 0 rgba(255,255,255,.9) inset,
    0 30px 70px -34px rgba(120,100,60,.4),
    0 4px 16px -8px rgba(120,100,60,.18);
  position:relative;overflow:hidden;border-radius:22px}

/* Hairline of gold across the top — like a bezel */
.cv-hero::before{content:"";position:absolute;left:0;right:0;top:0;height:1.5px;
  background:linear-gradient(90deg,transparent,var(--gold) 22%,#F2E3C4 50%,var(--gold) 78%,transparent);
  opacity:.95}

/* Slow drifting light */
.cv-hero::after{content:"";position:absolute;inset:-40% -10% auto -10%;height:80%;
  background:radial-gradient(closest-side,rgba(255,255,255,.6),transparent 70%);
  pointer-events:none;animation:heroDrift 14s ease-in-out infinite alternate}
@keyframes heroDrift{from{transform:translate3d(-6%,0,0)}to{transform:translate3d(6%,2%,0)}}

.cv-logo{width:124px;filter:drop-shadow(0 10px 26px rgba(198,166,103,.45))}
.cv-welcome{font-size:15.5px;color:var(--gold-deep);letter-spacing:.012em;margin-bottom:18px}
.cv-hero .rid{letter-spacing:.28em;opacity:.75}
.cv-hero h1{font-size:39px;font-weight:400;letter-spacing:-.024em;line-height:1.08;margin:6px 0 8px;
  background:linear-gradient(180deg,var(--ink) 30%,#4A4034);
  -webkit-background-clip:text;background-clip:text;color:transparent}
@supports not (background-clip:text){.cv-hero h1{color:var(--ink)}}
.cv-for{font-size:13.5px;letter-spacing:.005em}

/* Status pill — quieter, more precise */
.status-now{background:rgba(255,255,255,.86);backdrop-filter:blur(8px);
  border:1px solid var(--gold-soft);box-shadow:0 3px 14px rgba(120,100,60,.12);
  padding:9px 18px;font-size:12.5px;letter-spacing:.01em}

/* Progress ring — jewel-cut */
.cv-ring{margin:26px auto 16px}
.ring-bg{stroke:rgba(198,166,103,.16)}
.ring-fg{stroke-width:3.2;filter:drop-shadow(0 0 8px rgba(198,166,103,.7))}
.ring-num{font-size:20px;letter-spacing:-.02em}

/* Arrival card — like an embossed ticket */
.cv-deliver{background:linear-gradient(140deg,#fff,#FFFCF6);
  border:1px solid var(--gold-soft);border-left:2.5px solid var(--gold);
  box-shadow:0 10px 30px -16px rgba(120,100,60,.45);padding:15px 20px;border-radius:13px}
.cvd-ico{font-size:17px;opacity:.9}
.cvd-date{font-size:17.5px;letter-spacing:-.012em}

/* Trust seals — hairline, quiet */
.cv-seals{gap:9px;margin-top:26px;padding-top:22px;
  border-top:1px solid transparent;
  border-image:linear-gradient(90deg,transparent,var(--gold-soft),transparent) 1}
.seal{background:rgba(255,255,255,.9);backdrop-filter:blur(6px);border-color:var(--gold-soft);
  box-shadow:0 2px 10px rgba(120,100,60,.07);letter-spacing:.005em}
.seal:hover{box-shadow:0 6px 18px rgba(120,100,60,.16)}

/* ---------- Stepper: the crown ---------- */
.stepper{border-radius:20px;border-color:var(--line-strong);
  box-shadow:0 20px 50px -30px rgba(120,100,60,.4),0 2px 8px -4px rgba(120,100,60,.12);
  background:linear-gradient(180deg,#fff,#FFFEFB)}
.stepper-h .t{font-size:17.5px}
.stepnode.done .stepdot{box-shadow:0 4px 12px -4px rgba(160,130,74,.7)}
.stepnode.live .steplbl{letter-spacing:-.008em}
.steplbl{font-size:12.5px}

/* ---------- Panels: paper with weight ---------- */
.cols .panel{border-radius:18px;border-color:var(--line);
  box-shadow:0 1px 0 rgba(255,255,255,.8) inset,0 18px 44px -30px rgba(120,100,60,.36)}
.cols .panel:hover{box-shadow:0 1px 0 rgba(255,255,255,.9) inset,0 24px 56px -30px rgba(120,100,60,.46)}
.panel-h{border-bottom-color:var(--line)}
.panel-h .t{font-size:16.5px;letter-spacing:-.006em}
.panel-h .lbl{opacity:.85}

/* ---------- Gallery: cinema ---------- */
.gallery-panel{overflow:hidden}
.gal-stage{background:linear-gradient(155deg,#1B1710,#0F1512 60%,#181410)}
.gal-slide{min-height:340px}
.gal-slide::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,transparent 55%,rgba(10,8,6,.42));opacity:.9}
.gal-slide.is-vid::after{display:none}
.gal-slide img{transition:transform 7s cubic-bezier(.2,.6,.2,1)}
.gal-slide img:hover{transform:scale(1.035)}
.gal-cap{background:rgba(20,18,16,.5);border:1px solid rgba(255,255,255,.12);letter-spacing:.16em;z-index:2}
.gal-nav{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.22)}
.gal-nav:hover{background:var(--gold);border-color:var(--gold);color:#1A1410}
.gal-dots{padding:16px;background:linear-gradient(180deg,#fff,#FFFEFB)}
.gal-dot.on{box-shadow:0 0 10px rgba(198,166,103,.7)}
@media screen and (max-width:760px){.gal-slide{min-height:250px}}

/* ---------- Payment: engraved ---------- */
.pay-tot .big{letter-spacing:-.02em}
.inv{background:linear-gradient(180deg,#fff,#FFFDF9);border-radius:13px}
.inv .amt{letter-spacing:-.015em}
.badge.paid{box-shadow:0 2px 8px rgba(94,139,106,.22)}

/* ---------- CAD hero ---------- */
.cad-hero{border-radius:15px;box-shadow:0 20px 50px -26px rgba(120,100,60,.55)}

/* ---------- Spec table: quiet luxury ---------- */
.spec{border-radius:12px;overflow:hidden;border:1px solid var(--line)}
.spec .srow{border-bottom:1px solid var(--line)}
.spec .srow:last-child{border-bottom:0}
.spec .sk{letter-spacing:.11em}
.spec .sv{font-size:13.5px}

/* ---------- Certificates ---------- */
.certrow{background:linear-gradient(135deg,var(--champagne-soft),#fff);
  box-shadow:0 2px 10px -6px rgba(120,100,60,.4)}
.certrow .mono{letter-spacing:.09em}

/* ---------- Note box ---------- */
.notebox{border-color:var(--gold-soft)}
.notebox textarea{border-radius:12px;background:#FFFDF9}

/* ---------- Founder note: the seal ---------- */
.cv-note{background:
    radial-gradient(400px 200px at 50% 0%,rgba(255,255,255,.9),transparent 70%),
    linear-gradient(165deg,#FFFDF9,var(--champagne-soft));
  border-color:var(--gold-soft);border-radius:20px;
  box-shadow:0 26px 60px -34px rgba(120,100,60,.5)}
.cv-note::before{content:"";position:absolute;left:0;right:0;top:0;height:1.5px;
  background:linear-gradient(90deg,transparent,var(--gold-soft),transparent)}
.cvn-quote{font-size:18px;line-height:1.7}
.cvn-sign{font-size:16px;font-style:italic}

/* ---------- Footer crest ---------- */
.cv-foot .fb{font-size:17px;letter-spacing:.005em}

/* ---------- Entrance choreography ---------- */
.cv-hero,.stepper,.cols .panel,.cv-note{animation:riseIn .7s cubic-bezier(.2,.8,.2,1) both}
.stepper{animation-delay:.06s}
.cols > div:first-child .panel:nth-child(1){animation-delay:.10s}
.cols > div:first-child .panel:nth-child(2){animation-delay:.15s}
.cols > div:first-child .panel:nth-child(3){animation-delay:.20s}
.cols > div:last-child .panel:nth-child(1){animation-delay:.12s}
.cols > div:last-child .panel:nth-child(2){animation-delay:.17s}
.cv-note{animation-delay:.24s}
@keyframes riseIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

/* Motion off = everything simply present */
@media (prefers-reduced-motion:reduce){
  .cv-hero,.stepper,.cols .panel,.cv-note{animation:none}
  .cv-hero::after{animation:none}
  .gal-slide img{transition:none}
}

@media screen and (max-width:760px){
  .cv-hero{border-radius:18px;padding:32px 20px 28px}
  .cv-hero h1{font-size:29px}
  .cv-logo{width:100px}
  .cv-note{border-radius:16px}
  .cvn-quote{font-size:16px}
}

/* ============================================================
   UPDATE #9 — Stepper geometry fix + the Journey map
   ============================================================ */

/* ---------- STEPPER: exact alignment ---------- */
.steprail{padding:0;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.steprail::-webkit-scrollbar{display:none}
.steprail-inner{position:relative;display:flex;align-items:flex-start;padding:26px 26px 22px;min-width:max-content}

/* The rail sits exactly through the centre of the dots:
   padding-top(26) + half of dot(18) = 44px */
.steptrack{position:absolute;top:44px;left:calc(26px + 59px);right:calc(26px + 59px);
  height:2px;background:var(--line);border-radius:2px;transform:translateY(-1px);z-index:0}
.stepfill{height:100%;border-radius:2px;background:linear-gradient(90deg,var(--gold-soft),var(--gold));
  box-shadow:0 0 12px rgba(198,166,103,.6);transition:width 1.2s cubic-bezier(.2,.8,.2,1)}

.stepnode{position:relative;z-index:1;flex:0 0 118px;width:118px;text-align:center;padding:0 4px}
.stepdot{width:36px;height:36px;margin:0 auto 11px;border-radius:50%;
  display:grid;place-items:center;background:#fff;border:1.5px solid var(--line-strong);
  color:var(--muted);transition:transform .35s cubic-bezier(.2,.8,.2,1),background .35s,border-color .35s,box-shadow .35s;
  box-sizing:border-box}
.stepnum{font-family:var(--mono);font-size:12px;font-weight:500;line-height:1}
.stepcheck{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.6;
  stroke-linecap:round;stroke-linejoin:round;display:block}

.stepnode.done .stepdot{background:linear-gradient(140deg,#D8C08A,var(--gold-deep));border-color:transparent;color:#fff;
  box-shadow:0 4px 12px -5px rgba(160,130,74,.85)}
.stepnode.live .stepdot{background:#fff;border-color:var(--gold);color:var(--gold-deep);transform:scale(1.12)}
.stepnode.todo .stepdot{background:#FDFCF9}
.stepnode.todo .stepnum{opacity:.65}

.steplbl{font-size:12.5px;font-weight:500;color:var(--muted);line-height:1.35;letter-spacing:-.004em;
  min-height:2.7em;display:flex;align-items:flex-start;justify-content:center}
.stepwhen{font-family:var(--mono);font-size:8.5px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--line-strong);margin-top:5px}
.stepnode.done .steplbl{color:var(--ink)}
.stepnode.live .steplbl{color:var(--gold-deep);font-weight:600}
.stepnode.live .stepwhen{color:var(--gold-deep)}

@media screen and (max-width:760px){
  .steprail-inner{padding:22px 18px 18px}
  .steptrack{top:38px;left:calc(18px + 52px);right:calc(18px + 52px)}
  .stepnode{flex:0 0 104px;width:104px}
  .stepdot{width:32px;height:32px}
  .steplbl{font-size:11.5px}
}

/* ============================================================
   UPDATE #10 — Logo aspect + the map in champagne & light
   ============================================================ */

/* Brand marks keep their natural proportions (they are wider than tall) */
.brandmark{height:26px;width:auto}
.fc-logo{height:34px;width:auto}
.lock-logo,.cv-logo{height:auto}

/* ---------- THE JOURNEY MAP — light, champagne, glowing ---------- */
.flight-stage{
  background:
    radial-gradient(760px 380px at 50% 46%, #FFFFFF 0%, #FFFDF8 34%, var(--champagne-soft) 72%, #F4EBD9 100%);
  position:relative}

/* A soft champagne bloom under the route */
.flight-stage::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(560px 280px at 50% 50%, rgba(198,166,103,.16), transparent 70%);
  animation:mapBloom 9s ease-in-out infinite alternate}
@keyframes mapBloom{from{opacity:.7}to{opacity:1}}
/* Vignette so the panel edges settle into the page */
.flight-stage::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(closest-side, transparent 62%, rgba(160,130,74,.09) 100%)}

.flight-svg{position:relative;z-index:1}

/* Land: champagne leaf on ivory */
.land{fill:rgba(198,166,103,.20);stroke:rgba(160,130,74,.5);stroke-width:.6;
  vector-effect:non-scaling-stroke;stroke-linejoin:round}

/* The route */
.arc-shadow{stroke:rgba(160,130,74,.22);stroke-width:5;filter:url(#soft)}
.arc{stroke-width:2.2;filter:drop-shadow(0 0 6px rgba(198,166,103,.85))}
.arc-dash{stroke:#8A6F3C;stroke-opacity:.55;stroke-width:1.5;stroke-dasharray:1 12}

/* Endpoints: gold cores with white haloes */
.pt-dot{fill:var(--gold-deep);stroke:#fff;stroke-width:1.6;vector-effect:non-scaling-stroke}
.pt-ring{stroke:var(--gold);stroke-width:1.5}

/* The flying gem */
.gem-fly .gem-shape{fill:#E9D3A2;stroke:#8A6F3C;stroke-width:.6;
  filter:drop-shadow(0 2px 5px rgba(160,130,74,.65)) drop-shadow(0 0 8px rgba(255,244,214,.9))}
.gem-fly .gem-face{fill:#FFFDF6;opacity:.95}

/* Labels: ink on ivory, with a soft light halo */
.ml-title{fill:#2A241C;font-weight:600;letter-spacing:.005em;
  stroke:rgba(255,253,248,.92);stroke-width:3.6px}
.ml-sub{fill:var(--gold-deep);letter-spacing:.16em;
  stroke:rgba(255,253,248,.9);stroke-width:3px}

/* Caption */
.flight-note{background:linear-gradient(180deg,#FFFDF9,#fff);color:var(--muted)}

/* The arc gradient reads better slightly deeper on light ground */
.flight-panel{border-color:var(--gold-soft)}


/* ============================================================
   UPDATE #12 — The map, alive.
   Champagne continents with real depth, a graticule like an old
   sea chart, and a comet of light running the route with a
   diamond at its head. Text floats above on a focused scrim.
   ============================================================ */

.cv-hero{position:relative;overflow:hidden;isolation:isolate}
.cv-hero.has-map{padding-top:52px;padding-bottom:40px;
  background:linear-gradient(168deg,#FFFDF9 0%,#FFFBF3 52%,#FFFDFA 100%)}
.cv-hero.has-map::after{opacity:.45}

/* ---- the map layer ---- */
.cv-map{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;
  animation:mapIn 1.8s cubic-bezier(.2,.8,.2,1) both}
@keyframes mapIn{from{opacity:0}to{opacity:1}}

/* Slow cinematic drift — the world breathes */
.map-drift{transform-origin:50% 50%;animation:mapDrift 34s ease-in-out infinite alternate}
@keyframes mapDrift{
  from{transform:scale(1.02) translate3d(-0.6%,0.3%,0)}
  to{transform:scale(1.06) translate3d(0.8%,-0.5%,0)}}

/* Aura blooming from Surat */
.aura{animation:auraPulse 8s ease-in-out infinite alternate}
@keyframes auraPulse{from{opacity:.55}to{opacity:1}}

/* Graticule — the sea-chart lattice */
.grat{fill:none;stroke:rgba(160,130,74,.16);stroke-width:.7;vector-effect:non-scaling-stroke;
  stroke-dasharray:2 6}

/* Continents: gradient champagne with a soft emboss */
.cv-map .land{fill:url(#landg);stroke:rgba(138,111,60,.55);stroke-width:.7;
  vector-effect:non-scaling-stroke;stroke-linejoin:round}

/* ---- the route ---- */
.arc-halo{fill:none;stroke:#E8D5AC;stroke-opacity:.55;stroke-width:6;stroke-linecap:round;
  vector-effect:non-scaling-stroke;filter:blur(3px)}
.cv-map .arc{fill:none;stroke:url(#arcg);stroke-width:2.1;stroke-linecap:round;
  vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 6px rgba(198,166,103,.9))}

/* A comet of light that runs the arc, ahead of the diamond */
.arc-comet{fill:none;stroke:#FFF8E6;stroke-width:3;stroke-linecap:round;vector-effect:non-scaling-stroke;
  stroke-dasharray:0 34 26 1000;stroke-dashoffset:1060;
  filter:drop-shadow(0 0 7px rgba(255,240,205,1));
  animation:comet 9s cubic-bezier(.42,0,.25,1) infinite}
@keyframes comet{from{stroke-dashoffset:1060}to{stroke-dashoffset:0}}

.cv-map .arc-dash{fill:none;stroke:#8A6F3C;stroke-opacity:.42;stroke-width:1.2;stroke-linecap:round;
  vector-effect:non-scaling-stroke;stroke-dasharray:.8 11;animation:dashRun 3.2s linear infinite}
@keyframes dashRun{to{stroke-dashoffset:-23.6}}

/* ---- endpoints ---- */
.cv-map .pt-dot{fill:var(--gold-deep);stroke:#FFFDF6;stroke-width:1.5;vector-effect:non-scaling-stroke}
.cv-map .pt-ring{fill:none;stroke:var(--gold);stroke-width:1.4;vector-effect:non-scaling-stroke;
  transform-box:fill-box;transform-origin:center;animation:ping 3.6s ease-out infinite}
.cv-map .pt.dest .pt-ring{animation-delay:1.8s}
.pt-halo{fill:none;stroke:var(--gold-soft);stroke-width:.8;stroke-dasharray:1.6 3.2;
  vector-effect:non-scaling-stroke;transform-box:fill-box;transform-origin:center;
  animation:haloSpin 22s linear infinite}
@keyframes haloSpin{to{transform:rotate(360deg)}}
@keyframes ping{0%{transform:scale(1);opacity:.9}70%{transform:scale(5);opacity:0}100%{opacity:0}}

/* ---- the diamond and its sparkle trail ---- */
.gem-glow{fill:#FFF6DF;opacity:.42;filter:blur(2.4px)}
.cv-map .gem-shape{fill:#EBD6A6;stroke:#8A6F3C;stroke-width:.55;
  filter:drop-shadow(0 1px 4px rgba(138,111,60,.6)) drop-shadow(0 0 9px rgba(255,246,223,1))}
.cv-map .gem-face{fill:#FFFEF9;opacity:.96}
.cv-map .gem-scale{animation:gemTwinkle 2.1s ease-in-out infinite}
@keyframes gemTwinkle{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.82;transform:scale(.94)}}
.spark{fill:#FFF3D6;filter:drop-shadow(0 0 4px rgba(255,240,205,.95))}

/* ---- the scrim: a focused veil, not a blanket ---- */
.cv-scrim{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(58% 44% at 50% 34%, rgba(255,253,248,.95) 0%, rgba(255,253,248,.86) 46%,
      rgba(255,253,248,.30) 78%, rgba(255,253,248,0) 100%),
    radial-gradient(50% 30% at 50% 76%, rgba(255,253,248,.88) 0%, rgba(255,253,248,.34) 60%,
      rgba(255,253,248,0) 100%),
    linear-gradient(180deg, rgba(255,253,248,.55) 0%, rgba(255,253,248,0) 22%,
      rgba(255,253,248,0) 74%, rgba(255,253,248,.72) 100%)}

.cv-inner{position:relative;z-index:2}
.cv-hero .cv-crest{z-index:0}

/* Elements that sit over the busier parts get their own quiet backing */
.cv-hero.has-map .cv-deliver{background:rgba(255,255,255,.94);backdrop-filter:blur(10px)}
.cv-hero.has-map .status-now{background:rgba(255,255,255,.92);backdrop-filter:blur(10px)}
.cv-hero.has-map .seal{background:rgba(255,255,255,.92);backdrop-filter:blur(10px)}
.cv-hero.has-map .cv-ring{filter:drop-shadow(0 6px 18px rgba(255,253,248,.9))}
.cv-hero.has-map .cv-logo{filter:drop-shadow(0 10px 26px rgba(198,166,103,.5))
  drop-shadow(0 0 30px rgba(255,253,248,.95))}

/* ---- route line ---- */
.cv-route{display:inline-flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center;
  margin-top:18px;padding:9px 16px;border-radius:999px;
  background:rgba(255,255,255,.9);backdrop-filter:blur(10px);
  border:1px solid var(--gold-soft);box-shadow:0 4px 16px rgba(120,100,60,.14)}
.cvr-state{font-family:var(--mono);font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;
  color:#fff;background:linear-gradient(135deg,var(--gold),var(--gold-deep));
  padding:4px 9px;border-radius:5px;box-shadow:0 2px 6px rgba(160,130,74,.35)}
.cvr-path{font-size:12.5px;color:var(--muted);letter-spacing:.005em}
.cvr-path b{color:var(--ink);font-weight:500}
.cvr-arrow{color:var(--gold-deep);margin:0 3px}
.cvr-km{font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:var(--muted);
  padding-left:12px;border-left:1px solid var(--line-strong)}

@media screen and (max-width:760px){
  .cv-hero.has-map{padding-top:36px;padding-bottom:30px}
  .map-drift{animation-duration:44s}
  .cv-route{gap:8px;padding:8px 13px;margin-top:15px}
  .cvr-path{font-size:11.5px;width:100%;order:2}
  .cvr-km{border-left:0;padding-left:0;order:3}
  .cvr-state{order:1}
  .cv-scrim{background:
    radial-gradient(72% 42% at 50% 33%, rgba(255,253,248,.96) 0%, rgba(255,253,248,.88) 48%,
      rgba(255,253,248,.34) 80%, rgba(255,253,248,0) 100%),
    radial-gradient(64% 28% at 50% 78%, rgba(255,253,248,.9) 0%, rgba(255,253,248,.36) 62%,
      rgba(255,253,248,0) 100%),
    linear-gradient(180deg, rgba(255,253,248,.62) 0%, rgba(255,253,248,0) 24%,
      rgba(255,253,248,0) 72%, rgba(255,253,248,.78) 100%)}
}

@media (prefers-reduced-motion:reduce){
  .cv-map,.map-drift,.aura,.arc-comet,.cv-map .arc-dash,
  .cv-map .pt-ring,.pt-halo,.cv-map .gem-scale,.spark{animation:none}
}

/* ============================================================
   UPDATE #13 — iOS fix, the Globe, notify bar, tracking
   ============================================================ */

/* ---- iOS/Safari painted the brand button link-blue. Force our colours. ---- */
button.brand,
button.brand *{
  -webkit-appearance:none;appearance:none;
  -webkit-text-fill-color:currentColor;
  color:var(--ink);
  -webkit-tap-highlight-color:transparent;
  font:inherit;
}
button.brand .bname{color:var(--ink)}
button.brand .tag{color:var(--gold-deep);-webkit-text-fill-color:var(--gold-deep)}
button.brand:focus-visible{outline:2px solid var(--gold);outline-offset:3px;border-radius:8px}
/* Same guard anywhere else a button wraps text */
.btn{-webkit-appearance:none;appearance:none;-webkit-text-fill-color:currentColor}
a{-webkit-tap-highlight-color:transparent}

/* ---- THE GLOBE ---- */
.cv-globe-wrap{position:absolute;inset:0;z-index:0;pointer-events:none;
  display:flex;align-items:center;justify-content:center;
  animation:globeIn 1.5s cubic-bezier(.2,.8,.2,1) both}
@keyframes globeIn{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}
.cv-globe{width:min(78vw,560px);height:min(78vw,560px);max-height:100%;
  display:block;filter:drop-shadow(0 30px 60px rgba(160,130,74,.28))}

@media screen and (max-width:760px){
  .cv-globe{width:min(96vw,420px);height:min(96vw,420px)}
  .cv-hero.has-map{padding-top:34px;padding-bottom:28px}
}

/* The globe is a sphere, so the scrim can be gentler and rounder */
.cv-hero.has-map .cv-scrim{
  background:
    radial-gradient(46% 34% at 50% 32%, rgba(255,253,248,.94) 0%, rgba(255,253,248,.80) 52%,
      rgba(255,253,248,.18) 84%, rgba(255,253,248,0) 100%),
    radial-gradient(44% 24% at 50% 78%, rgba(255,253,248,.88) 0%, rgba(255,253,248,.28) 66%,
      rgba(255,253,248,0) 100%),
    linear-gradient(180deg, rgba(255,253,248,.5) 0%, rgba(255,253,248,0) 20%,
      rgba(255,253,248,0) 76%, rgba(255,253,248,.7) 100%)}

/* ---- Tracking link in the route chip ---- */
.cvr-track{font-family:var(--mono);font-size:10px;letter-spacing:.08em;color:var(--gold-deep);
  text-decoration:none;padding-left:12px;border-left:1px solid var(--line-strong);white-space:nowrap}
.cvr-track:hover{text-decoration:underline}
@media screen and (max-width:760px){.cvr-track{border-left:0;padding-left:0;width:100%;order:4}}

/* ---- "Notify client" nudge after an upload ---- */
.notifybar{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);
  z-index:70;display:flex;align-items:center;gap:12px;
  background:rgba(28,24,19,.94);backdrop-filter:blur(10px);color:#F6EFE1;
  border:1px solid rgba(198,166,103,.35);border-radius:999px;
  padding:9px 10px 9px 20px;box-shadow:0 14px 40px rgba(0,0,0,.3);
  font-size:13px;animation:nbIn .35s cubic-bezier(.2,.8,.2,1) both;max-width:92vw}
@keyframes nbIn{from{opacity:0;transform:translate(-50%,14px)}to{opacity:1;transform:translate(-50%,0)}}
.notifybar .btn.tiny{background:linear-gradient(135deg,var(--gold),var(--gold-deep));color:#fff;border:0}
.nb-x{background:none;border:0;color:#8E8578;font-size:19px;cursor:pointer;line-height:1;padding:0 6px}
.nb-x:hover{color:#fff}
@media screen and (max-width:760px){
  .notifybar{bottom:auto;top:72px;font-size:12px;padding:8px 8px 8px 15px}
}

/* ---- Notify modal ---- */
.snapdiv{display:flex;align-items:center;gap:12px;margin:18px 0 12px;
  font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.snapdiv::before,.snapdiv::after{content:"";flex:1;height:1px;background:var(--line)}

@media (prefers-reduced-motion:reduce){
  .cv-globe-wrap,.notifybar{animation:none}
}

/* ============================================================
   UPDATE #14 — Job card: no cropping, sign-off chain, due badge
   ============================================================ */

/* Images fit whole — never crop a CAD or a client's reference */
.fimg img,.fc-imgs img{object-fit:contain !important;background:#FCFBF8}
.fc-imgs{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.fimg{display:flex;flex-direction:column}
.fimg img{flex:1;min-height:0}

/* ---- Deliver-by badge ---- */
.fc-titlerow{align-items:flex-start}
.fc-due{text-align:right;border:1px solid var(--gold-soft);border-radius:9px;padding:7px 12px;
  background:var(--champagne-soft);min-width:112px}
.fd-lbl{font-family:var(--mono);font-size:7.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.fd-date{font-family:var(--serif);font-size:16px;line-height:1.2;margin-top:2px;color:var(--ink)}
.fd-days{font-family:var(--mono);font-size:8.5px;letter-spacing:.08em;margin-top:3px;color:var(--gold-deep)}
.fc-due.soon{border-color:#D9A441;background:#FFF6E6}
.fc-due.soon .fd-days{color:#9A6B12}
.fc-due.late{border-color:var(--danger);background:#FDF1EF}
.fc-due.late .fd-days{color:var(--danger);font-weight:600}

/* ---- Workshop QC table ---- */
.fc-qc{width:100%;border-collapse:collapse;border:1px solid var(--line-strong);border-radius:8px;overflow:hidden}
.fc-qc th{font-family:var(--mono);font-size:7.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);text-align:left;padding:6px 9px;background:#FDFCF9;border-bottom:1px solid var(--line-strong);font-weight:400}
.fc-qc td{border-bottom:1px solid var(--line);padding:0;height:26px}
.fc-qc tr:last-child td{border-bottom:0}
.fc-qc .qc-name{font-size:11.5px;font-weight:500;padding:0 9px;width:32%}
.fc-qc .qc-box{width:12%;position:relative}
.fc-qc .qc-box::after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:13px;height:13px;border:1.2px solid var(--line-strong);border-radius:3px}
.fc-qc .qc-line{border-left:1px solid var(--line)}

/* ---- Signature chain ---- */
.fc-sign{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:20px}
.fs-cell{text-align:center}
.fs-line{height:1px;background:var(--line-strong);margin-bottom:6px}
.fs-lbl{font-family:var(--mono);font-size:7.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}

.fc-warn{font-family:var(--mono);font-size:7.5px;letter-spacing:.1em;color:var(--gold-deep);display:inline-block;margin-top:4px}

@media screen and (max-width:760px){
  .fc-titlerow{flex-direction:column;gap:10px}
  .fc-due{text-align:left;width:100%}
  .fc-sign{grid-template-columns:1fr;gap:22px}
  .fc-qc .qc-name{font-size:11px}
}

/* ---- PRINT: keep it to one page, images uncropped ---- */
@media print{
  .fimg img,.fc-imgs img{max-height:132px !important;width:auto !important;max-width:100% !important;
    margin:0 auto !important;object-fit:contain !important}
  .fc-imgs{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:7px;margin-top:8px}
  .fc-due{padding:4px 8px;min-width:92px}
  .fd-date{font-size:13px}
  .fd-lbl,.fd-days{font-size:6.5px}
  .fc-qc th{padding:3px 7px;font-size:6.5px}
  .fc-qc td{height:19px}
  .fc-qc .qc-name{font-size:9.5px;padding:0 7px}
  .fc-qc .qc-box::after{width:10px;height:10px}
  .fc-sign{margin-top:12px;gap:14px}
  .fs-lbl{font-size:6.5px}
  .fc-qc,.fc-sign{break-inside:avoid;page-break-inside:avoid}
  .fc-warn{font-size:6.5px}
}

/* ---- PRINT: tighten so the richer card still fits ONE page ---- */
@media print{
  .factory-card{font-size:10.5px}
  .fc-head{padding-bottom:6px}
  .fc-titlerow{margin:9px 0 4px}
  .fc-title{font-size:15px}
  .fc-sub{font-size:10px}
  .fc-sec{margin:7px 0 4px}
  .fcell{padding:4px 8px}
  .fcell .fv{font-size:10.5px}
  .fc-design{padding:5px 8px;font-size:10.5px}
  .fc-notes{padding:6px 9px;font-size:10px;margin-top:6px}
  .fc-imgs{grid-template-columns:repeat(3,1fr);gap:6px;margin-top:7px}
  .fimg img,.fc-imgs img{max-height:104px !important}
  .fimg-l{padding:3px 6px;font-size:6.5px}
  .fc-qc td{height:16px}
  .fc-qc .qc-name{font-size:9px}
  .fc-qc th{padding:2px 6px}
  .fc-sign{margin-top:10px;gap:12px}
  .fc-foot{margin-top:7px;padding-top:5px;font-size:7px}
}

/* ---- PRINT: final squeeze — the footer must not tip onto page 2 ---- */
@media print{
  .factory-card{padding:0 !important}
  .fimg img,.fc-imgs img{max-height:92px !important}
  .fc-imgs{gap:5px;margin-top:6px}
  .fc-notes{padding:5px 8px;margin-top:5px;font-size:9.5px}
  .fc-qc td{height:15px}
  .fc-sign{margin-top:9px}
  .fs-line{margin-bottom:4px}
  .fc-foot{margin-top:6px;padding-top:4px;line-height:1.35;
    break-before:avoid;page-break-before:avoid;break-inside:avoid;page-break-inside:avoid}
  .fc-warn{margin-top:2px}
  .factory-card{break-after:avoid;page-break-after:avoid}
}

/* ---- PRINT: image strip scales with how many images there are ---- */
@media print{
  .fc-imgs{grid-template-columns:repeat(auto-fit,minmax(96px,1fr)) !important;gap:5px !important}
  .fimg img,.fc-imgs img{max-height:78px !important}
  .fimg-l{padding:2px 5px;font-size:6px}
  .fc-notes{font-size:9px;line-height:1.4}
}

/* ============================================================
   UPDATE #15 — The factory system
   QR on the job card · issue/return reconciliation · photo
   checkpoints · daily WhatsApp brief · urgency everywhere
   ============================================================ */

/* ---- Job card header: meta + QR side by side ---- */
.fc-headright{display:flex;align-items:flex-start;gap:14px}
.fc-qr{text-align:center;flex-shrink:0}
.fc-qr .qr{display:block;border:1px solid var(--line);border-radius:6px;background:#fff}
.fc-qr-l{font-family:var(--mono);font-size:6.5px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted);margin-top:3px}

/* ---- Diamond issue & return ---- */
.fc-recon .qc-name{width:26%}
.fc-recon td{height:24px}
.fc-recon th:first-child{width:26%}

/* ---- Photos required ---- */
.fc-photos{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;
  border:1px solid var(--line);border-radius:9px;padding:10px 12px;background:#FDFCF9}
.fp{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--ink)}
.fp-box{width:12px;height:12px;border:1.2px solid var(--line-strong);border-radius:3px;flex-shrink:0}
.fp-note{width:100%;font-family:var(--mono);font-size:7.5px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--gold-deep);margin-top:2px}

/* ---- Urgency chips on order cards ---- */
.chip.urg{margin-left:8px;font-family:var(--mono);font-size:8px;letter-spacing:.1em;
  padding:3px 7px;border-radius:5px;vertical-align:middle}
.chip.urg.late{background:#FDF1EF;color:var(--danger);border:1px solid #F3C9C1}
.chip.urg.soon{background:#FFF6E6;color:#9A6B12;border:1px solid #EBD5A3}
.fc-due.warn{border-color:var(--gold-soft)}

.headacts{display:flex;gap:9px;flex-wrap:wrap;align-items:center}

/* ---- Daily brief modal ---- */
.brief-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}
.bs{border:1px solid var(--line);border-radius:11px;padding:13px 10px;text-align:center;background:#FDFCF9}
.bs .n{font-family:var(--serif);font-size:27px;line-height:1;color:var(--ink)}
.bs .l{font-family:var(--mono);font-size:7.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);margin-top:6px}
.bs.late{background:#FDF1EF;border-color:#F3C9C1}
.bs.late .n{color:var(--danger)}
.bs.soon{background:#FFF6E6;border-color:#EBD5A3}
.bs.soon .n{color:#9A6B12}

.sendmsg{background:#FBFAF6;border:1px solid var(--line);border-radius:10px;padding:14px;
  font-family:var(--mono);font-size:11px;line-height:1.65;color:var(--ink);
  white-space:pre-wrap;word-break:break-word;max-height:290px;overflow:auto;margin:0 0 14px}
.sendrow{display:flex;gap:9px;flex-wrap:wrap}
.sendrow .btn{flex:1;min-width:132px}

@media screen and (max-width:760px){
  .fc-headright{flex-direction:column-reverse;align-items:flex-end;gap:8px}
  .brief-stats{grid-template-columns:1fr;gap:8px}
  .bs{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;text-align:left}
  .bs .l{margin-top:0}
  .sendmsg{font-size:10px;max-height:210px}
  .fc-photos{gap:7px 12px}
  .fp{font-size:10.5px}
}

/* ---- PRINT: the QR must stay crisp and the new tables must fit ---- */
@media print{
  .fc-qr .qr{width:64px !important;height:64px !important;border:0}
  .fc-qr-l{font-size:5.5px}
  .fc-headright{gap:10px}
  .fc-recon td{height:17px}
  .fc-photos{padding:6px 9px;gap:4px 14px}
  .fp{font-size:8.5px}
  .fp-box{width:9px;height:9px}
  .fp-note{font-size:5.5px;margin-top:1px}
  .fc-recon,.fc-photos{break-inside:avoid;page-break-inside:avoid}
}

/* ---- PRINT: final fit with QR + reconciliation + photo checklist ---- */
@media print{
  .fc-head{padding-bottom:5px}
  .fc-qr .qr{width:56px !important;height:56px !important}
  .fc-titlerow{margin:7px 0 3px}
  .fc-sec{margin:5px 0 3px;font-size:6.5px}
  .fcell{padding:3px 7px}
  .fc-design{padding:4px 7px}
  .fc-notes{padding:5px 7px;margin-top:4px;line-height:1.35}
  .fc-imgs{margin-top:5px;gap:4px}
  .fimg img,.fc-imgs img{max-height:74px !important}
  .fc-recon td{height:15px}
  .fc-qc td{height:14px}
  .fc-photos{padding:5px 8px;gap:3px 12px}
  .fc-sign{margin-top:7px}
  .fc-foot{margin-top:5px;padding-top:3px}
}

/* ============================================================
   UPDATE #16 — THE JOB CARD, REDESIGNED
   One page. No boxes inside boxes. Spec beside the images,
   workshop tables below. Everything the bench needs, nothing else.
   ============================================================ */

.jc{--jc-line:#E6DFD1;--jc-rule:#CFC5B0;
  color:var(--ink);font-size:12px;line-height:1.45}

/* ---------- header ---------- */
.jc-top{display:grid;grid-template-columns:1fr auto auto;align-items:start;gap:18px;
  padding-bottom:11px;border-bottom:2px solid var(--gold)}
.jc-brand{display:flex;align-items:center;gap:11px}
.jc-logo{height:34px;width:auto;object-fit:contain}
.jc-name{font-family:var(--serif);font-size:18px;letter-spacing:.01em;line-height:1.1}
.jc-tag{font-family:var(--mono);font-size:7.5px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--gold-deep);margin-top:3px}
.jc-id{text-align:right;line-height:1.5}
.jc-ref{font-family:var(--mono);font-size:13px;letter-spacing:.1em;color:var(--ink)}
.jc-printed,.jc-party{font-family:var(--mono);font-size:7.5px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted)}

/* the QR sits in the header corner */
.fc-qr{text-align:center}
.fc-qr .qr{display:block;border-radius:4px}
.fc-qr-l{font-family:var(--mono);font-size:6px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);margin-top:3px}

/* ---------- title ---------- */
.jc-title{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;
  margin:14px 0 4px}
.jc-title h1{font-family:var(--serif);font-size:23px;line-height:1.15;margin:0;font-weight:400}
.jc-sub{font-family:var(--mono);font-size:8px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted);margin-top:5px}

/* deliver-by badge, quieter */
.fc-due{text-align:right;flex-shrink:0;border:1px solid var(--jc-line);border-radius:8px;
  padding:6px 11px;min-width:104px;background:#FDFCF9}
.fd-lbl{font-family:var(--mono);font-size:7px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.fd-date{font-family:var(--serif);font-size:15px;line-height:1.2;margin-top:1px}
.fd-days{font-family:var(--mono);font-size:8px;letter-spacing:.08em;margin-top:2px;color:var(--gold-deep)}
.fc-due.soon{border-color:#E3C480;background:#FFFAF0}
.fc-due.soon .fd-days{color:#9A6B12;font-weight:600}
.fc-due.late{border-color:#E0A79B;background:#FDF4F2}
.fc-due.late .fd-days{color:var(--danger);font-weight:600}

/* ---------- section headings: a rule, not a box ---------- */
.jc-h{font-family:var(--mono);font-size:7.5px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold-deep);padding-bottom:4px;margin:14px 0 8px;
  border-bottom:1px solid var(--jc-rule)}
.jc-main > * > .jc-h:first-child{margin-top:0}

/* ---------- spec | images ---------- */
.jc-main{display:grid;grid-template-columns:1.05fr .95fr;gap:26px;align-items:start}

.jspec{display:grid;grid-template-columns:1fr;gap:0}
.jr{display:flex;align-items:baseline;gap:8px;padding:4px 0;border-bottom:1px dotted var(--jc-line)}
.jr:last-child{border-bottom:0}
.jk{font-family:var(--mono);font-size:8px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);flex:0 0 40%}
.jv{font-size:12px;font-weight:500;color:var(--ink);flex:1}

.jnotes{margin:0;font-size:11px;line-height:1.55;color:var(--ink);
  background:#FDFCF9;border-left:2px solid var(--gold-soft);padding:8px 11px;border-radius:0 6px 6px 0}

.jimgs{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.jimg{margin:0;border:1px solid var(--jc-line);border-radius:7px;overflow:hidden;background:#FCFBF8;
  display:flex;flex-direction:column}
.jimg.lead{grid-column:1 / -1}
.jimg img{width:100%;height:118px;object-fit:contain;background:#FCFBF8;display:block}
.jimg.lead img{height:158px}
.jimg figcaption{font-family:var(--mono);font-size:6.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);padding:4px 7px;border-top:1px solid var(--jc-line);background:#fff}

/* ---------- bottom pair ---------- */
.jc-bottom{display:grid;grid-template-columns:1.55fr 1fr;gap:26px;align-items:start}

/* ---------- tables ---------- */
.jtbl{width:100%;border-collapse:collapse}
.jtbl th{font-family:var(--mono);font-size:7px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);font-weight:400;text-align:left;padding:0 6px 5px;border-bottom:1px solid var(--jc-rule)}
.jtbl td{border-bottom:1px solid var(--jc-line);height:23px;padding:0 6px}
.jtbl tbody tr:last-child td{border-bottom:1px solid var(--jc-rule)}
.jtbl .jn{font-size:11px;font-weight:500;width:30%}
.jtbl .jbox{position:relative}
.jtbl .jbox::after{content:"";position:absolute;left:9px;top:50%;transform:translateY(-50%);
  width:12px;height:12px;border:1.2px solid var(--jc-rule);border-radius:3px}

/* ---------- photos ---------- */
.jphotos{display:grid;gap:5px}
.jphotos label{display:flex;align-items:center;gap:8px;font-size:11px}
.jbx{width:12px;height:12px;border:1.2px solid var(--jc-rule);border-radius:3px;flex-shrink:0}
.jscan{font-family:var(--mono);font-size:7px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--gold-deep);margin-top:8px}

/* ---------- signatures ---------- */
.jc-sign{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:26px}
.jc-sign > div{font-family:var(--mono);font-size:7px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted);text-align:center}
.jline{display:block;height:1px;background:var(--jc-rule);margin-bottom:6px}

/* ---------- footer ---------- */
.jc-foot{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;
  margin-top:16px;padding-top:9px;border-top:1px solid var(--jc-line);
  font-family:var(--mono);font-size:7px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.jc-return{color:var(--gold-deep)}

/* ---------- mobile ---------- */
@media screen and (max-width:760px){
  .jc-top{grid-template-columns:1fr auto;gap:12px}
  .fc-qr{grid-column:2;grid-row:1}
  .jc-id{grid-column:1;text-align:left;margin-top:8px}
  .jc-main,.jc-bottom{grid-template-columns:1fr;gap:16px}
  .jc-title{flex-direction:column;gap:10px}
  .fc-due{text-align:left;width:100%}
  .jc-sign{grid-template-columns:1fr;gap:22px;margin-top:20px}
  .jimg img{height:132px}
  .jimg.lead img{height:170px}
  .jk{flex:0 0 46%}
}

/* ============================================================
   PRINT — one page, always
   ============================================================ */
@media print{
  @page{size:A4;margin:12mm}
  .jc{font-size:9.5px;line-height:1.35}
  .jc-top{padding-bottom:7px;gap:12px}
  .jc-logo{height:26px}
  .jc-name{font-size:14px}
  .jc-tag{font-size:6px}
  .jc-ref{font-size:11px}
  .jc-printed,.jc-party{font-size:6px}
  .fc-qr .qr{width:54px !important;height:54px !important}
  .fc-qr-l{font-size:5px}

  .jc-title{margin:9px 0 2px}
  .jc-title h1{font-size:17px}
  .jc-sub{font-size:6.5px;margin-top:3px}
  .fc-due{padding:4px 8px;min-width:84px}
  .fd-date{font-size:12px}
  .fd-lbl,.fd-days{font-size:6px}

  .jc-h{font-size:6.5px;margin:9px 0 5px;padding-bottom:3px}
  .jc-main{gap:18px}
  .jc-bottom{gap:18px}

  .jr{padding:2px 0}
  .jk{font-size:6.5px}
  .jv{font-size:9.5px}
  .jnotes{font-size:8.5px;padding:5px 8px;line-height:1.4}

  .jimgs{gap:6px}
  .jimg img{height:74px}
  .jimg.lead img{height:96px}
  .jimg figcaption{font-size:5.5px;padding:2px 5px}

  .jtbl th{font-size:6px;padding:0 4px 3px}
  .jtbl td{height:15px;padding:0 4px}
  .jtbl .jn{font-size:8.5px}
  .jtbl .jbox::after{width:9px;height:9px;left:6px}

  .jphotos{gap:3px}
  .jphotos label{font-size:8.5px;gap:6px}
  .jbx{width:9px;height:9px}
  .jscan{font-size:5.5px;margin-top:5px}

  .jc-sign{margin-top:14px;gap:16px}
  .jc-sign > div{font-size:5.5px}
  .jc-foot{margin-top:10px;padding-top:5px;font-size:5.5px}

  .jc-main,.jc-bottom,.jtbl,.jc-sign,.jimg{break-inside:avoid;page-break-inside:avoid}
  .factory-card{break-after:avoid;page-break-after:avoid}
}

/* ---- PRINT: use the headroom. Bigger images, bigger type, roomier rows. ---- */
@media print{
  .jc{font-size:10.5px;line-height:1.45}
  .jc-logo{height:30px}
  .jc-name{font-size:16px}
  .fc-qr .qr{width:66px !important;height:66px !important}
  .jc-title h1{font-size:20px}
  .jc-sub{font-size:7px}
  .fc-due{padding:5px 10px;min-width:96px}
  .fd-date{font-size:14px}
  .fd-days{font-size:7px}

  .jc-h{font-size:7px;margin:12px 0 7px;padding-bottom:4px}
  .jr{padding:3.5px 0}
  .jk{font-size:7.5px}
  .jv{font-size:11px}
  .jnotes{font-size:9.5px;padding:7px 10px}

  .jimg img{height:104px}
  .jimg.lead img{height:140px}
  .jimg figcaption{font-size:6px;padding:3px 6px}

  .jtbl td{height:19px}
  .jtbl .jn{font-size:9.5px}
  .jtbl th{font-size:6.5px}
  .jtbl .jbox::after{width:10px;height:10px}

  .jphotos label{font-size:9.5px}
  .jbx{width:10px;height:10px}
  .jscan{font-size:6px;margin-top:7px}

  .jc-sign{margin-top:20px}
  .jc-sign > div{font-size:6px}
  .jc-foot{font-size:6px;margin-top:12px}
}

/* ============================================================
   UPDATE #17 — Job card, final. Reconciliation removed.
   The reclaimed space goes into legibility: bigger type,
   bigger images, roomier rows. Fills one A4 page, exactly.
   ============================================================ */

/* Photos beside the sign-off table */
.jc-bottom{grid-template-columns:.85fr 1.5fr;gap:30px}

/* ---------- SCREEN: a touch more generous ---------- */
.jc{font-size:12.5px}
.jimg img{height:132px}
.jimg.lead img{height:180px}
.jtbl td{height:26px}
.jr{padding:5px 0}
.jphotos label{font-size:11.5px}

@media screen and (max-width:760px){
  .jc-bottom{grid-template-columns:1fr;gap:18px}
}

/* ============================================================
   PRINT — sized to fill the page, not to survive it
   ============================================================ */
@media print{
  @page{size:A4;margin:12mm}

  .jc{font-size:11px;line-height:1.45}

  /* header */
  .jc-top{padding-bottom:10px;gap:16px}
  .jc-logo{height:34px}
  .jc-name{font-size:17px}
  .jc-tag{font-size:6.5px}
  .jc-ref{font-size:13px}
  .jc-printed,.jc-party{font-size:6.5px}
  .fc-qr .qr{width:76px !important;height:76px !important}
  .fc-qr-l{font-size:6px}

  /* title */
  .jc-title{margin:14px 0 4px}
  .jc-title h1{font-size:21px}
  .jc-sub{font-size:7.5px;margin-top:4px}
  .fc-due{padding:6px 11px;min-width:104px}
  .fd-date{font-size:15px}
  .fd-lbl{font-size:6.5px}
  .fd-days{font-size:7.5px}

  /* sections */
  .jc-h{font-size:7.5px;margin:15px 0 8px;padding-bottom:4px}
  .jc-main{gap:24px}
  .jc-bottom{gap:26px;margin-top:4px}

  /* spec */
  .jr{padding:4.5px 0}
  .jk{font-size:7.5px}
  .jv{font-size:11px}
  .jnotes{font-size:10px;padding:8px 10px;line-height:1.5}

  /* images — big enough to actually judge a CAD by */
  .jimgs{gap:8px}
  .jimg img{height:104px}
  .jimg.lead img{height:142px}
  .jimg figcaption{font-size:6px;padding:3px 6px}

  /* tables — room to write in with a pen */
  .jtbl th{font-size:6.5px;padding:0 6px 4px}
  .jtbl td{height:24px;padding:0 6px}
  .jtbl .jn{font-size:10px}
  .jtbl .jbox::after{width:12px;height:12px;left:8px}

  /* photos */
  .jphotos{gap:7px}
  .jphotos label{font-size:10px;gap:8px}
  .jbx{width:12px;height:12px}
  .jscan{font-size:6px;margin-top:9px}

  /* signatures + footer */
  .jc-sign{margin-top:26px;gap:22px}
  .jc-sign > div{font-size:6.5px}
  .jline{margin-bottom:7px}
  .jc-foot{margin-top:16px;padding-top:8px;font-size:6.5px}

  .jc-main,.jc-bottom,.jtbl,.jc-sign,.jimg{break-inside:avoid;page-break-inside:avoid}
  .factory-card{break-after:avoid;page-break-after:avoid}
}

/* ============================================================
   UPDATE #18 — PRINT-FIRST JOB CARD
   Chrome prints at ~703px wide. Every layout rule below is
   written for THAT width, so what you see is what prints.
   Big images. A bordered spec table. One page.
   ============================================================ */

/* Spec is now a real table — a grid of boxes, readable at a glance */
table.jspec{width:100%;border-collapse:collapse;border:1px solid var(--jc-rule)}
table.jspec th{
  font-family:var(--mono);font-size:8px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--muted);font-weight:400;text-align:left;
  padding:6px 8px;width:42%;background:#FCFBF8;
  border-bottom:1px solid var(--jc-line);border-right:1px solid var(--jc-line);
  vertical-align:middle}
table.jspec td{
  font-size:13px;font-weight:600;color:var(--ink);
  padding:6px 10px;border-bottom:1px solid var(--jc-line);vertical-align:middle}
table.jspec tr:last-child th,table.jspec tr:last-child td{border-bottom:0}

/* Images: the CAD dominates, references sit beneath it */
.jc-main{grid-template-columns:1fr 1fr;gap:20px}
.jimgs{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.jimg{border:1px solid var(--jc-rule);border-radius:6px;overflow:hidden;background:#fff;
  display:flex;flex-direction:column;margin:0}
.jimg.lead,.jimg.wide{grid-column:1 / -1}
.jimg img{width:100%;object-fit:contain;background:#fff;display:block}
.jimg figcaption{font-family:var(--mono);font-size:7px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);padding:4px 7px;border-top:1px solid var(--jc-line);background:#FCFBF8}

.jnotes{font-size:12px}

/* ============================================================
   PRINT
   ============================================================ */
@media print{
  @page{size:A4;margin:11mm}

  .jc{font-size:11px;line-height:1.4}

  /* header */
  .jc-top{padding-bottom:9px;gap:14px}
  .jc-logo{height:32px}
  .jc-name{font-size:16px}
  .jc-ref{font-size:13px}
  .fc-qr .qr{width:72px !important;height:72px !important}

  /* title */
  .jc-title{margin:12px 0 2px}
  .jc-title h1{font-size:20px}
  .fc-due{padding:5px 10px;min-width:96px}
  .fd-date{font-size:14px}

  .jc-h{font-size:7.5px;margin:12px 0 6px;padding-bottom:3px}

  /* TWO COLUMNS — this is the whole fix */
  .jc-main{display:grid !important;grid-template-columns:1fr 1fr !important;gap:16px !important;
    align-items:start}
  .jc-bottom{display:grid !important;grid-template-columns:.8fr 1.5fr !important;gap:20px !important;
    align-items:start}

  /* spec table — generous, high contrast */
  table.jspec th{font-size:7.5px;padding:5px 7px}
  table.jspec td{font-size:11.5px;padding:5px 8px}

  /* THE IMAGES — big and clear, as asked */
  .jimgs{gap:6px}
  .jimg img{height:118px}
  .jimg.lead img{height:172px}
  .jimg.wide img{height:150px}
  .jimg figcaption{font-size:6px;padding:2px 5px}

  .jnotes{font-size:10px;padding:6px 9px;line-height:1.45}

  /* sign-off: room for a pen */
  .jtbl th{font-size:6.5px;padding:0 5px 3px}
  .jtbl td{height:23px;padding:0 5px}
  .jtbl .jn{font-size:10px}
  .jtbl .jbox::after{width:12px;height:12px;left:7px}

  .jphotos{gap:6px}
  .jphotos label{font-size:10px;gap:7px}
  .jbx{width:12px;height:12px}
  .jscan{font-size:6px;margin-top:8px}

  .jc-sign{margin-top:22px;gap:20px}
  .jc-sign > div{font-size:6.5px}
  .jc-foot{margin-top:14px;padding-top:7px;font-size:6.5px}

  .jc-main,.jc-bottom,.jtbl,.jc-sign,.jimg,table.jspec{break-inside:avoid;page-break-inside:avoid}
  .factory-card{break-after:avoid;page-break-after:avoid}
}

/* ============================================================
   UPDATE #19 — MAKE THE IMAGES BIG
   The card had 200px of unused page. It now belongs to the CAD.
   ============================================================ */
@media print{
  .jimg img{height:150px}
  .jimg.lead img{height:224px}
  .jimg.wide img{height:196px}
  .jimg figcaption{font-size:6.5px;padding:3px 6px}

  /* spec values a shade larger to match */
  table.jspec td{font-size:12px}
  table.jspec th{font-size:7.5px}

  /* a little more air between the two halves */
  .jc-main{gap:18px !important}
}

/* On screen the images should feel just as generous */
.jimg img{height:150px}
.jimg.lead img{height:230px}
.jimg.wide img{height:200px}

/* Print heights are authoritative */
@media print{
  .jimg img{height:150px !important}
  .jimg.lead img{height:230px !important}
  .jimg.wide img{height:200px !important}
}

/* Print hint in the modal footer (never printed) */
.printhint{font-size:11px;color:var(--muted);margin-right:auto;line-height:1.4;max-width:330px}
.printhint b{color:var(--ink);font-weight:600}
@media screen and (max-width:760px){ .printhint{display:none} }


/* ============================================================
   UPDATE #21 — THE LEDGER
   A dark jewel command bar over ivory panels. Charts drawn with
   real arc geometry — no transforms touch the SVG, ever.
   ============================================================ */

.dash-head h1{letter-spacing:-.015em}

/* ---------- period + currency ---------- */
.periodbar{display:flex;gap:7px;flex-wrap:wrap;margin:0 0 14px}
.pchip{border:1px solid var(--line-strong);background:#fff;color:var(--muted);
  font-family:var(--mono);font-size:9px;letter-spacing:.13em;text-transform:uppercase;
  padding:9px 15px;border-radius:999px;cursor:pointer;transition:all .18s}
.pchip:hover{border-color:var(--gold);color:var(--ink)}
.pchip.on{background:var(--ink);color:#F6EFE1;border-color:var(--ink)}

.ccybar{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin:0 0 20px}
.ccybar-l{font-family:var(--mono);font-size:8.5px;letter-spacing:.15em;text-transform:uppercase;
  color:var(--muted);margin-right:4px}
.cchip{border:1px solid var(--line);background:#fff;color:var(--muted);
  font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;
  padding:7px 14px;border-radius:7px;cursor:pointer;transition:all .18s}
.cchip:hover{border-color:var(--gold-soft);color:var(--ink)}
.cchip.on{background:linear-gradient(135deg,var(--gold),var(--gold-deep));color:#fff;
  border-color:transparent;box-shadow:0 3px 12px rgba(160,130,74,.34)}

/* ---------- KPI COMMAND BAR ---------- */
.kpibar{display:grid;grid-template-columns:1.5fr repeat(4,1fr);gap:1px;
  background:rgba(198,166,103,.22);border-radius:16px;overflow:hidden;margin-bottom:22px;
  box-shadow:0 18px 44px rgba(28,24,19,.30)}
.kpi{background:linear-gradient(165deg,#221E19,#171410);padding:20px 20px 18px;position:relative}
.kpi.big{background:linear-gradient(150deg,#2B251D,#1A1712)}
.kpi.big::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 90% at 12% 0%, rgba(198,166,103,.20), transparent 62%)}
.k-l{font-family:var(--mono);font-size:8px;letter-spacing:.18em;text-transform:uppercase;
  color:#8E8578;margin-bottom:9px}
.k-n{font-family:var(--serif);font-size:27px;line-height:1.05;color:#F8F2E4;letter-spacing:-.01em}
.kpi.big .k-n{font-size:38px;
  background:linear-gradient(135deg,#F7EBCF,#C6A667);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent}
.k-n.warn{color:#E9A08E}
.k-n.good{color:#A9D39B}
.k-n.muted{color:#6E6558}
.k-s{font-family:var(--mono);font-size:8.5px;letter-spacing:.06em;color:#7E7568;margin-top:8px}
.k-meter{height:3px;background:rgba(255,255,255,.09);border-radius:99px;margin-top:11px;overflow:hidden}
.k-meter span{display:block;height:100%;border-radius:99px;
  background:linear-gradient(90deg,var(--gold-soft),var(--gold));
  animation:barIn 1s cubic-bezier(.2,.8,.2,1) both}

/* ---------- panels ---------- */
.hero-panel{background:linear-gradient(162deg,#FFFDF9,#FDFAF2);border-color:var(--gold-soft)}
.twoup{display:grid;grid-template-columns:1fr 1fr;gap:16px}

/* ---------- donut (arc paths — safe) ---------- */
.chartgrid{display:grid;grid-template-columns:auto 1fr;gap:38px;align-items:center}
.chartbox{display:flex;align-items:center;justify-content:center;flex-shrink:0}
.donut{width:210px;height:210px;display:block}
.chartbox.small .donut{width:168px;height:168px}
.seg{stroke:#FFFDF9;stroke-width:1;
  animation:segFade .6s ease-out both;animation-delay:calc(var(--i) * .08s)}
@keyframes segFade{from{opacity:0}to{opacity:1}}
.segs:hover .seg{opacity:.4;transition:opacity .18s}
.segs .seg:hover{opacity:1}
.donut-top{font-family:var(--serif);font-size:20px;fill:var(--ink)}
.donut-sub{font-family:var(--mono);font-size:7px;letter-spacing:.15em;text-transform:uppercase;fill:var(--muted)}

.chart-empty{padding:30px 18px;text-align:center;color:var(--muted);font-size:13px;line-height:1.7}
.chart-empty.small{padding:22px 14px;font-size:12.5px}

/* ---------- legend ---------- */
.legend{list-style:none;margin:0;padding:0;display:grid;gap:1px}
.legend li{display:grid;grid-template-columns:auto 1fr auto 42px;align-items:center;gap:12px;
  padding:10px 2px;border-bottom:1px solid var(--line)}
.legend li:last-child{border-bottom:0}
.dot{width:10px;height:10px;border-radius:3px;flex-shrink:0}
.lg-label{font-size:13.5px;color:var(--ink)}
.lg-val{font-family:var(--mono);font-size:12.5px;color:var(--ink);font-weight:600}
.lg-pct{font-family:var(--mono);font-size:9.5px;color:var(--muted);text-align:right}
.softnote{margin-top:14px;font-size:11.5px;color:var(--muted);line-height:1.6;
  padding:10px 12px;background:#FDFCF9;border:1px dashed var(--line-strong);border-radius:9px}

/* ---------- bars ---------- */
.bars{display:grid;gap:12px}
.bar-row{display:grid;grid-template-columns:minmax(96px,1fr) 2.2fr minmax(64px,auto);gap:13px;align-items:center}
.bar-k{font-size:12.5px;color:var(--ink)}
.bar-track{height:8px;background:var(--champagne-soft);border-radius:999px;overflow:hidden}
.bar-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--gold-soft),var(--gold));
  animation:barIn .85s cubic-bezier(.2,.8,.2,1) both;animation-delay:calc(var(--i) * .06s)}
@keyframes barIn{from{width:0 !important}}
.bar-v{font-family:var(--mono);font-size:11.5px;color:var(--ink);text-align:right;font-weight:600}

/* ---------- monthly columns ---------- */
.months{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;align-items:end;height:190px}
.mcol{display:flex;flex-direction:column;height:100%;justify-content:flex-end;gap:9px}
.mbar-wrap{flex:1;display:flex;align-items:flex-end}
.mbar{width:100%;border-radius:8px 8px 3px 3px;position:relative;
  background:linear-gradient(180deg,var(--gold),var(--gold-deep));
  animation:growUp .9s cubic-bezier(.2,.8,.2,1) both;animation-delay:calc(var(--i) * .07s)}
@keyframes growUp{from{height:0 !important}}
.mval{position:absolute;top:-19px;left:50%;transform:translateX(-50%);
  font-family:var(--mono);font-size:9px;color:var(--muted);white-space:nowrap}
.mlbl{font-family:var(--mono);font-size:8.5px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted);text-align:center}

/* ---------- currency cards ---------- */
.ccygrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(224px,1fr));gap:13px}
.ccycard{border:1px solid var(--line);border-radius:14px;padding:17px 18px;background:#FDFCF9;
  text-align:left;cursor:pointer;font:inherit;transition:transform .18s, box-shadow .18s, border-color .18s}
.ccycard:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(120,100,60,.13);border-color:var(--gold-soft)}
.ccycard.on{border-color:var(--gold);background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft))}
.cc-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.cc-code{font-family:var(--mono);font-size:11px;letter-spacing:.16em;color:var(--gold-deep);font-weight:600}
.cc-orders{font-family:var(--mono);font-size:9px;color:var(--muted)}
.cc-total{font-family:var(--serif);font-size:26px;line-height:1.1;color:var(--ink)}
.cc-meter{height:4px;background:var(--line);border-radius:999px;overflow:hidden;margin:13px 0 10px}
.cc-fill{height:100%;background:linear-gradient(90deg,var(--gold),var(--gold-deep));border-radius:999px;
  animation:barIn .9s cubic-bezier(.2,.8,.2,1) both}
.cc-split{display:flex;justify-content:space-between;font-size:9.5px;color:var(--muted);gap:10px;
  font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase}
.cc-split b{color:var(--ink);font-weight:600;display:block;margin-top:3px;font-size:11.5px;letter-spacing:0;text-transform:none}
.cc-out{text-align:right}
.cc-out b{color:var(--danger)}

/* ---------- profit ---------- */
.margingrid{display:grid;grid-template-columns:auto 1fr;gap:32px;align-items:center}
.profitcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px}
.profitcard{border:1px solid var(--gold-soft);border-radius:13px;padding:15px 16px;
  background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft))}
.pc-ccy{font-family:var(--mono);font-size:9.5px;letter-spacing:.16em;color:var(--gold-deep)}
.pc-profit{font-family:var(--serif);font-size:25px;line-height:1.15;margin-top:5px;color:var(--ink)}
.pc-l{font-size:10.5px;color:var(--muted);margin-top:2px}
.pc-sub{font-family:var(--mono);font-size:9px;color:var(--muted);margin-top:10px;line-height:1.7;
  padding-top:9px;border-top:1px solid var(--gold-soft)}

.bestworst{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:22px}
.bw{border:1px solid var(--line);border-radius:11px;padding:13px 15px;background:#FDFCF9;
  display:flex;justify-content:space-between;align-items:center;gap:10px}
.bw.good{border-color:#C6DFBE;background:#F6FBF4}
.bw.thin{border-color:#EBD5A3;background:#FFFBF2}
.bw-l{font-family:var(--mono);font-size:8.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.bw-v{font-family:var(--mono);font-size:12px;color:var(--ink);font-weight:600}

.alertline{margin-top:16px;padding:12px 14px;border-radius:10px;background:#FDF1EF;
  border:1px solid #F3C9C1;color:var(--danger);font-size:12.5px}

/* ---------- empty states that actually help ---------- */
.dashempty{text-align:center;padding:44px 24px}
.dashempty.inline{padding:30px 20px}
.de-gem{font-size:20px;color:var(--gold);opacity:.6;margin-bottom:12px}
.dashempty h3{font-family:var(--serif);font-size:20px;font-weight:400;margin:0 0 8px;color:var(--ink)}
.dashempty p{color:var(--muted);font-size:13px;line-height:1.75;max-width:430px;margin:0 auto 18px}
.dashempty .btn{margin:0 auto}

/* ---------- live margin box in the form ---------- */
.fc-sec2{font-family:var(--mono);font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold-deep);margin:22px 0 12px;padding-bottom:6px;border-bottom:1px solid var(--gold-soft)}
.frow4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.marginlive{margin-top:14px;border:1px solid var(--line);border-radius:11px;padding:13px 15px;background:#FDFCF9}
.marginlive.good{border-color:#B7D9B0;background:#F4FBF2}
.marginlive.ok{border-color:#E3C480;background:#FFFAF0}
.marginlive.bad{border-color:#E0A79B;background:#FDF4F2}
.ml-hint{font-size:12px;color:var(--muted)}
.ml-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:3px 0;font-size:12.5px}
.ml-k{color:var(--muted);font-family:var(--mono);font-size:9px;letter-spacing:.11em;text-transform:uppercase}
.ml-v{font-family:var(--mono);color:var(--ink)}
.ml-v em{color:var(--muted);font-style:normal;font-size:10.5px}
.ml-row.big{border-top:1px solid var(--line);margin-top:6px;padding-top:8px;font-size:15px}
.ml-row.big .ml-v b{font-family:var(--serif);font-size:19px;margin-left:8px}

/* ---------- mobile ---------- */
@media screen and (max-width:900px){
  .kpibar{grid-template-columns:1fr 1fr}
  .kpi.big{grid-column:1 / -1}
  .twoup{grid-template-columns:1fr}
}
@media screen and (max-width:760px){
  .chartgrid,.margingrid{grid-template-columns:1fr;gap:22px}
  .donut{width:190px;height:190px}
  .kpibar{grid-template-columns:1fr 1fr;border-radius:14px}
  .kpi{padding:15px 15px 13px}
  .kpi.big .k-n{font-size:31px}
  .k-n{font-size:21px}
  .frow4{grid-template-columns:1fr 1fr}
  .bestworst{grid-template-columns:1fr}
  .bar-row{grid-template-columns:minmax(80px,1fr) 1.5fr auto;gap:9px}
  .bar-k{font-size:11.5px}
  .cc-total{font-size:23px}
  .months{height:150px;gap:7px}
  .mval{font-size:7.5px;top:-16px}
  .periodbar{overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px}
  .pchip,.cchip{flex-shrink:0;min-height:36px;display:inline-flex;align-items:center}
  .legend li{grid-template-columns:auto 1fr auto;gap:10px}
  .lg-pct{display:none}
  .profitcards,.ccygrid{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
  .seg,.bar-fill,.cc-fill,.mbar,.k-meter span{animation:none}
}

/* ============================================================
   UPDATE #22 — THE FINISH
   The details you don't notice until they're missing:
   figures that don't jitter, a focus ring you can see,
   one motion curve for the whole product, headlines that
   break where a typesetter would break them.
   ============================================================ */

:root{
  /* one easing curve, used everywhere. Apple's is a spring; this is its shadow. */
  --ease:cubic-bezier(.22,.61,.36,1);
  --ease-out:cubic-bezier(.16,1,.3,1);
  --dur:.42s;
  --dur-fast:.18s;
  --ring:0 0 0 2px var(--paper), 0 0 0 4px var(--gold);
}

/* ---------- text selection & caret: brand, not browser blue ---------- */
::selection{background:var(--champagne);color:var(--ink)}
::-moz-selection{background:var(--champagne);color:var(--ink)}
input,textarea,select{caret-color:var(--gold-deep)}

/* ---------- typography: ligatures, kerning, optical breaks ---------- */
body{font-feature-settings:"kern" 1,"liga" 1;text-rendering:optimizeLegibility;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
h1,h2,h3,.cv-h1,.jc-title h1,.dashempty h3{text-wrap:balance;text-wrap-style:balance}
p,.cv-sub,.dashempty p,.jnotes{text-wrap:pretty}

/* FIGURES MUST NOT JITTER.
   Any number that changes — money, counts, percentages — gets fixed-width
   digits, so a 1 occupies exactly what an 8 does and nothing shifts. */
.k-n,.cc-total,.lg-val,.lg-pct,.bar-v,.pc-profit,.pc-sub,.donut-top,
.fd-date,.rid,.mono,.amt,.cvr-km,.cvr-path,.ml-v,.bs .n,.jc-ref,.cc-split b,
.bw-v,.mval,.k-s,.jv,.tile .n,.ring-pct,.stepnum,input[type=number]{
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1,"kern" 1}

/* ---------- a focus ring you can actually see ---------- */
:focus{outline:none}
:focus-visible{outline:none;box-shadow:var(--ring);border-radius:8px}
.btn:focus-visible,.pchip:focus-visible,.cchip:focus-visible,
.ccycard:focus-visible,.ocard:focus-visible{box-shadow:var(--ring)}
a:focus-visible{box-shadow:var(--ring);border-radius:4px}

/* ---------- buttons: weight, press, light ---------- */
.btn{position:relative;transition:transform var(--dur-fast) var(--ease),
  box-shadow var(--dur-fast) var(--ease), filter var(--dur-fast) var(--ease);
  -webkit-tap-highlight-color:transparent}
.btn:hover{transform:translateY(-1px)}
.btn:active{transform:translateY(0) scale(.985);transition-duration:.06s}
.btn:not(.ghost)::after{content:"";position:absolute;inset:0;border-radius:inherit;
  background:linear-gradient(180deg,rgba(255,255,255,.22),transparent 52%);pointer-events:none}
.pchip:active,.cchip:active,.ccycard:active{transform:scale(.985)}

/* ---------- inputs: a quiet focus, not a shout ---------- */
input,select,textarea{transition:border-color var(--dur-fast) var(--ease),
  box-shadow var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease)}
input:focus-visible,select:focus-visible,textarea:focus-visible{
  border-color:var(--gold);box-shadow:0 0 0 3px rgba(198,166,103,.16)}

/* ---------- cards lift with intent ---------- */
.ocard{transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out),
  border-color var(--dur) var(--ease-out);-webkit-tap-highlight-color:transparent}
.ocard:hover{transform:translateY(-3px);border-color:var(--gold-soft);
  box-shadow:0 16px 40px rgba(120,100,60,.13)}
.ocard:active{transform:translateY(-1px) scale(.995)}

/* ---------- scroll: contained, momentum, no rubber-band bleed ---------- */
.modal-b,.periodbar,.dtable-wrap{overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
html{scroll-behavior:smooth;scrollbar-gutter:stable;overflow-y:scroll;overflow-x:hidden}
body{overflow-x:hidden}
.wrap{overflow-x:clip}
body.estimate-mode{scrollbar-gutter:auto}

/* ---------- scrollbar: hairline, champagne ---------- */
*::-webkit-scrollbar{width:10px;height:10px}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:99px;
  border:3px solid var(--paper);background-clip:padding-box}
*::-webkit-scrollbar-thumb:hover{background:var(--gold-soft);background-clip:padding-box}
*{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}

/* ---------- scroll reveal (class added by JS; content never hidden without it) ---------- */
.rv{opacity:0;transform:translateY(18px);
  transition:opacity .7s var(--ease-out),transform .7s var(--ease-out)}
.rv.in{opacity:1;transform:none}

/* ---------- toast: a whisper, top-centre ---------- */
.toast{border-radius:12px;box-shadow:0 14px 40px rgba(28,24,19,.22);
  backdrop-filter:blur(10px) saturate(1.2);-webkit-backdrop-filter:blur(10px) saturate(1.2);
  letter-spacing:.01em}

/* ---------- images: settle in, don't pop ---------- */
img{-webkit-user-drag:none}
.jimg img,.gal-slide img,.fimg img{transition:transform .8s var(--ease-out)}
.gal-slide:hover img{transform:scale(1.02)}

/* ---------- honour the setting ---------- */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .rv{opacity:1 !important;transform:none !important;transition:none !important}
  .btn:hover,.btn:active,.ocard:hover,.ocard:active,
  .pchip:active,.cchip:active,.ccycard:active{transform:none}
  .gal-slide:hover img{transform:none}
}

/* ============================================================
   UPDATE #23 — THE CLIENT PAGE, FINISHED
   This is what a twenty-thousand-dollar customer sees.
   ============================================================ */

/* ---------- hero: quieter type, better rhythm ---------- */
.cv-welcome{letter-spacing:.22em}
.cv-h1{letter-spacing:-.018em;line-height:1.06}
.cv-for{letter-spacing:.04em}

/* the crest breathes */
.cv-crest{transition:opacity 1.2s var(--ease-out)}

/* logo settles in on first paint */
.cv-logo{animation:logoIn 1.1s var(--ease-out) both}
@keyframes logoIn{from{opacity:0;transform:translateY(-6px) scale(.985)}to{opacity:1;transform:none}}

/* ---------- progress ring: gold sweep ---------- */
.cv-ring svg circle:last-child{transition:stroke-dashoffset 1.4s var(--ease-out)}

/* ---------- stepper: the live dot has a heartbeat ---------- */
.stepnode.live .stepdot{position:relative}
.stepnode.live .stepdot::after{content:"";position:absolute;inset:-6px;border-radius:50%;
  border:1px solid var(--gold);opacity:.5;
  animation:pulseRing 2.6s var(--ease-out) infinite}
@keyframes pulseRing{
  0%{transform:scale(.82);opacity:.55}
  70%{transform:scale(1.28);opacity:0}
  100%{transform:scale(1.28);opacity:0}
}
.stepcheck{stroke:currentColor;stroke-width:2.4;fill:none;stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:24;stroke-dashoffset:24;animation:draw .7s var(--ease-out) forwards}
@keyframes draw{to{stroke-dashoffset:0}}

/* ---------- panels: hairline top-light, like brushed metal ---------- */
.cols .panel{position:relative;overflow:hidden}
.cols .panel::before{content:"";position:absolute;top:0;left:0;right:0;height:1px;
  background:linear-gradient(90deg,transparent,var(--gold-soft) 22%,var(--gold-soft) 78%,transparent);
  opacity:.7;pointer-events:none}

/* ---------- gallery: images breathe, captions whisper ---------- */
.gal-slide{overflow:hidden}
.gal-slide img{display:block;transition:transform .9s var(--ease-out);cursor:zoom-in}
.gal-slide:hover img{transform:scale(1.03)}

/* ---------- the founder's note: the emotional peak ---------- */
.cvn-mark{animation:gemGlow 4.5s var(--ease) infinite}
@keyframes gemGlow{0%,100%{opacity:.55;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}
.cvn-quote{text-wrap:balance;letter-spacing:-.005em}
.cvn-sign{letter-spacing:.01em}

/* ---------- iOS: no blue flash, no zoom on tap ---------- */
button,a,.ocard,.stepnode,.gal-slide{-webkit-tap-highlight-color:transparent}
/* stops iOS Safari zooming the page on focus — phones only, so desktop forms stay tight */
@media screen and (max-width:760px){
  input,select,textarea{font-size:16px}
}

@media (prefers-reduced-motion:reduce){
  .cv-logo,.cvn-mark,.stepnode.live .stepdot::after,.stepcheck{animation:none}
  .stepcheck{stroke-dashoffset:0}
  .gal-slide:hover img{transform:none}
}

/* ============================================================
   UPDATE #24 — QUOTATIONS
   The desk where you price. The page where they decide.
   ============================================================ */

/* ---------- the quote cards ---------- */
.qgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}
.qcard{display:grid;grid-template-columns:104px 1fr;gap:0;text-align:left;font:inherit;cursor:pointer;
  background:var(--card);border:1px solid var(--line);border-radius:16px;overflow:hidden;
  transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out)}
.qcard:hover{transform:translateY(-3px);border-color:var(--gold-soft);box-shadow:0 16px 40px rgba(120,100,60,.13)}
.qcard:active{transform:translateY(-1px) scale(.995)}
.qthumb{background:var(--champagne-soft);display:flex;align-items:center;justify-content:center;overflow:hidden}
.qthumb img{width:100%;height:100%;object-fit:cover}
.qt-gem{color:var(--gold);opacity:.5;font-size:20px}
.qbody{padding:15px 16px;min-width:0}
.qtop{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px}
.qref{font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--muted)}
.qclient{font-family:var(--serif);font-size:17px;line-height:1.2;color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qpiece{font-size:12px;color:var(--muted);margin-top:3px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qfoot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:13px;
  padding-top:11px;border-top:1px solid var(--line)}
.qprice{font-family:var(--mono);font-size:14px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}

.qstatus{font-family:var(--mono);font-size:8px;letter-spacing:.11em;text-transform:uppercase;
  padding:4px 8px;border-radius:5px;white-space:nowrap}
.qstatus.draft{background:#F4F1EA;color:var(--muted)}
.qstatus.sent{background:var(--champagne-soft);color:var(--gold-deep);border:1px solid var(--gold-soft)}
.qstatus.accepted{background:#F2F8F0;color:var(--success);border:1px solid #C6DFBE}
.qstatus.declined{background:#FDF1EF;color:var(--danger);border:1px solid #F3C9C1}
.qstatus.expired{background:#F6F4EF;color:#9A8F7C;border:1px solid var(--line-strong)}

.qm{font-family:var(--mono);font-size:9px;letter-spacing:.06em;padding:4px 8px;border-radius:5px;
  font-variant-numeric:tabular-nums;white-space:nowrap}
.qm.good{background:#F2F8F0;color:var(--success)}
.qm.ok{background:#FFF9EE;color:#9A6B12}
.qm.bad{background:#FDF1EF;color:var(--danger)}
.qm.none{background:transparent;color:var(--muted);border:1px dashed var(--line-strong)}

/* ---------- form: images + send row ---------- */
.qimgs{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:11px}
.qimg{position:relative;width:92px;height:92px;border-radius:11px;overflow:hidden;border:1px solid var(--line)}
.qimg img{width:100%;height:100%;object-fit:cover;cursor:zoom-in}
.qimg-x{position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:50%;border:0;
  background:rgba(28,24,19,.72);color:#fff;font-size:14px;line-height:1;cursor:pointer}
.qimg-empty{font-size:12px;color:var(--muted);padding:16px 0}

.qsend{margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
.qsend-l{font-family:var(--mono);font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold-deep);margin-bottom:10px}
.qsend-row{display:flex;gap:9px;flex-wrap:wrap}
.btn.gold{background:linear-gradient(135deg,var(--gold),var(--gold-deep));color:#fff;border-color:transparent}

/* ============================================================
   UPDATE #25 — THE CLIENT'S QUOTATION
   The same language as the tracker: the globe, the seals,
   the timeline, the founder's hand at the bottom.
   ============================================================ */

/* ---------- HERO over the globe ---------- */
.qv-hero{position:relative;overflow:hidden;text-align:center;
  padding:64px 24px 34px;margin:0 auto 30px;max-width:1000px;
  background:linear-gradient(168deg,#FFFDF9,#FBF7EE);
  border:1px solid var(--gold-soft);border-radius:26px;
  box-shadow:0 26px 70px rgba(120,100,60,.13)}
.qv-scrim{position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(80% 62% at 50% 34%, rgba(255,253,249,.86), rgba(255,253,249,.30) 62%, transparent 84%)}
.qv-inner{position:relative;z-index:2}
.qv-logo{height:66px;width:auto;object-fit:contain;margin-bottom:22px;
  animation:logoIn 1.1s var(--ease-out) both}
.qv-eyebrow{font-family:var(--mono);font-size:9px;letter-spacing:.3em;text-transform:uppercase;
  color:var(--gold-deep);margin-bottom:15px}
.qv-piece{font-family:var(--serif);font-size:clamp(28px,4.6vw,48px);font-weight:400;line-height:1.06;
  letter-spacing:-.02em;margin:0 0 13px;color:var(--ink);text-wrap:balance;-webkit-text-fill-color:var(--ink)}
.qv-for{font-size:13px;color:var(--muted);letter-spacing:.04em}
.qv-expired{margin-top:18px;display:inline-block;padding:9px 15px;border-radius:9px;
  background:#FDF1EF;border:1px solid #F3C9C1;color:var(--danger);font-size:12.5px}
.qv-route{margin:22px auto 0}
.qv-hero .qv-seals{display:flex;justify-content:center;gap:9px;flex-wrap:wrap;margin:24px auto 0;max-width:640px}

/* ---------- reference shots ---------- */
.qv-shots{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px;
  max-width:1000px;margin:0 auto 34px;padding:0 24px}
.qv-shot{margin:0;border-radius:18px;overflow:hidden;border:1px solid var(--line);background:var(--champagne-soft)}
.qv-shot img{display:block;width:100%;height:240px;object-fit:cover;cursor:zoom-in;
  transition:transform .9s var(--ease-out)}
.qv-shot:hover img{transform:scale(1.03)}

/* ---------- THE NUMBER ---------- */
.qv-price{max-width:660px;margin:0 auto 40px;padding:40px 30px 30px;text-align:center;
  background:linear-gradient(158deg,#FFFDF9,var(--champagne-soft));
  border:1px solid var(--gold-soft);border-radius:22px;
  box-shadow:0 24px 64px rgba(120,100,60,.14)}
.qv-price.dim{opacity:.62}
.qvp-l{font-family:var(--mono);font-size:8.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--muted)}
.qvp-n{font-family:var(--serif);font-size:clamp(48px,7.8vw,78px);line-height:1;margin:14px 0 6px;
  letter-spacing:-.035em;font-variant-numeric:tabular-nums;
  background:linear-gradient(135deg,#8A6F3C,#C6A667 52%,#8A6F3C);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.qvp-c{font-family:var(--mono);font-size:9.5px;letter-spacing:.2em;color:var(--gold-deep);text-transform:uppercase}
.qvp-valid{margin-top:20px;padding-top:16px;border-top:1px solid var(--gold-soft);font-size:12px;color:var(--muted)}
.qvp-valid b{color:var(--ink);font-weight:600}

/* ---------- sections ---------- */
.qv-sec{max-width:840px;margin:0 auto 44px;padding:0 24px}
.qv-sec.narrow{max-width:620px}
.qv-h{font-family:var(--mono);font-size:8.5px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--gold-deep);padding-bottom:9px;margin-bottom:20px;border-bottom:1px solid var(--line-strong)}
.qv-h.center{text-align:center;border-bottom:0;padding-bottom:0;margin-bottom:24px;
  position:relative}
.qv-h.center::after{content:"";display:block;width:38px;height:1px;margin:12px auto 0;background:var(--gold)}

/* ---------- payment schedule ---------- */
.paysteps{display:grid;gap:0}
.pstep{display:grid;grid-template-columns:auto 1fr;gap:18px;align-items:start;
  background:#FFFDF9;border:1px solid var(--line);border-radius:16px;padding:20px 22px}
.ps-n{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;
  font-family:var(--serif);font-size:16px;color:#fff;
  background:linear-gradient(140deg,var(--gold),var(--gold-deep));
  box-shadow:0 4px 14px rgba(160,130,74,.36)}
.ps-t{font-family:var(--serif);font-size:24px;color:var(--ink);font-variant-numeric:tabular-nums;
  display:flex;align-items:baseline;gap:11px;flex-wrap:wrap}
.ps-pct{font-family:var(--mono);font-size:8.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--gold-deep);background:var(--champagne-soft);padding:4px 9px;border-radius:5px}
.ps-d{font-size:13px;line-height:1.7;color:var(--muted);margin-top:7px}
.ps-d b{color:var(--ink);font-weight:600}
.pline{width:1px;height:22px;margin:0 0 0 44px;background:var(--gold-soft)}
.payguard{margin-top:20px;text-align:center;font-size:13px;color:var(--gold-deep);
  padding:14px 18px;border-radius:12px;background:var(--champagne-soft);border:1px dashed var(--gold-soft)}

/* ---------- payment rails ---------- */
.rails{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:13px}
.rail{border:1px solid var(--line);border-radius:15px;padding:16px 17px;background:#FFFDF9;
  transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out)}
.rail:hover{transform:translateY(-2px);border-color:var(--gold-soft);box-shadow:0 14px 32px rgba(120,100,60,.12)}
.r-top{display:flex;align-items:center;gap:12px;margin-bottom:13px}
.r-glyph{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;flex-shrink:0;
  font-family:var(--serif);font-size:17px;color:var(--gold-deep);
  background:var(--champagne-soft);border:1px solid var(--gold-soft)}
.r-name{font-size:14.5px;color:var(--ink);font-weight:600}
.r-tag{font-family:var(--mono);font-size:8px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-top:2px}
.r-handle{font-family:var(--mono);font-size:11.5px;color:var(--ink);word-break:break-all;
  padding:10px 12px;background:#FBF9F4;border:1px solid var(--line);border-radius:9px;line-height:1.5}
.r-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:11px}
.r-note{font-size:10.5px;color:var(--muted)}
.r-copy{font-family:var(--mono);font-size:8.5px;letter-spacing:.12em;text-transform:uppercase;
  border:1px solid var(--line-strong);background:#fff;color:var(--gold-deep);
  padding:6px 11px;border-radius:6px;cursor:pointer;transition:all var(--dur-fast) var(--ease);flex-shrink:0}
.r-copy:hover{border-color:var(--gold);background:var(--champagne-soft)}
.rails-empty{text-align:center;color:var(--muted);font-size:13px;padding:22px}
.paynote{margin-top:18px;text-align:center;font-size:12.5px;color:var(--muted);
  padding:12px 16px;background:#FDFCF9;border-left:2px solid var(--gold-soft);border-radius:0 9px 9px 0}

/* ---------- the timeline ---------- */
.qtl{display:grid;gap:0}
.qtl-step{display:grid;grid-template-columns:auto 1fr;gap:20px}
.qtl-rail{display:flex;flex-direction:column;align-items:center;width:14px}
.qtl-dot{width:13px;height:13px;border-radius:50%;flex-shrink:0;margin-top:5px;
  background:linear-gradient(140deg,var(--gold),var(--gold-deep));
  box-shadow:0 0 0 4px var(--champagne-soft)}
.qtl-line{flex:1;width:1px;background:linear-gradient(180deg,var(--gold-soft),var(--line));margin:6px 0}
.qtl-body{padding-bottom:30px}
.qtl-when{font-family:var(--mono);font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold-deep)}
.qtl-t{font-family:var(--serif);font-size:20px;color:var(--ink);margin:5px 0 6px}
.qtl-d{font-size:13px;line-height:1.7;color:var(--muted);max-width:520px}
.qtl-date{font-family:var(--mono);font-size:9.5px;color:var(--muted);margin-top:8px;
  font-variant-numeric:tabular-nums}
.qtl-total{text-align:center;margin-top:6px;font-size:13.5px;color:var(--ink);
  padding:15px;background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft));
  border:1px solid var(--gold-soft);border-radius:13px}
.qtl-total b{font-family:var(--serif);font-size:17px}

/* ---------- spec table ---------- */
.qv-table{width:100%;border-collapse:collapse}
.qv-table th{font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);font-weight:400;text-align:left;padding:13px 0;width:42%;border-bottom:1px solid var(--line)}
.qv-table td{font-size:14px;color:var(--ink);padding:13px 0;border-bottom:1px solid var(--line)}
.qv-table tr:last-child th,.qv-table tr:last-child td{border-bottom:0}
.qv-note{margin-top:16px;font-size:13px;line-height:1.7;color:var(--muted);
  padding:12px 15px;background:#FDFCF9;border-left:2px solid var(--gold-soft);border-radius:0 8px 8px 0}

/* ---------- why direct ---------- */
.whygrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}
.why{text-align:center;padding:24px 18px;border:1px solid var(--line);border-radius:16px;background:#FFFDF9}
.why-n{font-family:var(--serif);font-size:30px;line-height:1;
  background:linear-gradient(135deg,#8A6F3C,#C6A667);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent}
.why-t{font-family:var(--mono);font-size:8.5px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold-deep);margin:9px 0 8px}
.why-d{font-size:12.5px;line-height:1.65;color:var(--muted)}

.qv-signoff{max-width:760px;margin:0 auto 30px}

/* ---------- mobile ---------- */
@media screen and (max-width:760px){
  .qv-hero{margin:0 14px 24px;padding:40px 20px 26px;border-radius:20px}
  .qv-logo{height:52px}
  .qv-shots{grid-template-columns:1fr;padding:0 16px}
  .qv-shot img{height:220px}
  .qv-price{margin:0 16px 32px;padding:30px 20px 24px;border-radius:18px}
  .qv-sec{padding:0 16px;margin-bottom:36px}
  .pstep{grid-template-columns:auto 1fr;gap:14px;padding:17px 16px}
  .ps-t{font-size:20px}
  .pline{margin-left:38px}
  .rails{grid-template-columns:1fr}
  .qtl-step{gap:15px}
  .qtl-t{font-size:18px}
  .whygrid{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
  .qv-logo{animation:none}
  .qv-shot:hover img,.rail:hover{transform:none}
}

/* Copy buttons must be thumb-sized on a phone */
@media screen and (max-width:760px){
  .r-copy{min-height:38px;padding:10px 16px;display:inline-flex;align-items:center}
  .r-foot{gap:12px}
}

/* ============================================================
   UPDATE #26 — THE QUOTATION, FINISHED
   Urgency without a countdown clock. Certificate, not receipt.
   ============================================================ */

/* ---------- price split in the owner's form ---------- */
.pricesplit{margin-top:14px;border:1px solid var(--line);border-radius:12px;padding:14px 16px;background:#FDFCF9}
.pricesplit.on{display:flex;align-items:center;gap:0;border-color:var(--gold-soft);
  background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft))}
.ps-col{flex:1;display:flex;flex-direction:column;gap:5px;padding:0 12px}
.ps-col.total .ps-v{color:var(--gold-deep)}
.ps-k{font-family:var(--mono);font-size:8px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.pricesplit .ps-v{font-family:var(--serif);font-size:19px;color:var(--ink);font-variant-numeric:tabular-nums}
.ps-div{width:1px;align-self:stretch;background:var(--gold-soft)}

/* ---------- the held-price badge: quiet, not a countdown clock ---------- */
.qv-hold{display:inline-flex;align-items:center;gap:12px;margin-top:20px;
  padding:10px 8px 10px 16px;border-radius:999px;
  background:rgba(255,255,255,.72);border:1px solid var(--gold-soft);
  backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);
  box-shadow:0 6px 22px rgba(120,100,60,.10)}
.hold-dot{width:6px;height:6px;border-radius:50%;background:var(--gold);flex-shrink:0;
  box-shadow:0 0 0 0 rgba(198,166,103,.55);animation:holdPulse 3.4s var(--ease-out) infinite}
@keyframes holdPulse{0%{box-shadow:0 0 0 0 rgba(198,166,103,.5)}70%{box-shadow:0 0 0 9px rgba(198,166,103,0)}100%{box-shadow:0 0 0 0 rgba(198,166,103,0)}}
.hold-t{font-size:12.5px;color:var(--ink)}
.hold-n{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;
  color:#fff;background:linear-gradient(135deg,var(--gold),var(--gold-deep));
  padding:5px 11px;border-radius:999px;font-variant-numeric:tabular-nums}
.hold-s{font-size:10.5px;color:var(--muted);padding-right:10px}
.qv-hold.soon .hold-n{background:linear-gradient(135deg,#C08A5E,#A2603A)}
.qv-hold.soon .hold-dot{background:#B0704A}

/* ---------- the four Cs ---------- */
.fourc{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--gold-soft);
  border:1px solid var(--gold-soft);border-radius:16px;overflow:hidden}
.fc{background:linear-gradient(165deg,#FFFDF9,var(--champagne-soft));padding:22px 12px;text-align:center}
.fc-v{font-family:var(--serif);font-size:clamp(20px,2.6vw,28px);line-height:1.05;color:var(--ink);
  letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.fc-k{font-family:var(--mono);font-size:8px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--gold-deep);margin-top:9px}

.certline{display:flex;align-items:center;gap:14px;margin-top:14px;padding:14px 18px;
  border:1px solid var(--line);border-radius:13px;background:#FDFCF9}
.cert-ico{color:var(--gold);font-size:15px}
.cert-l{font-family:var(--mono);font-size:8px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.cert-n{font-family:var(--mono);font-size:13px;color:var(--ink);font-weight:600;margin-top:3px;letter-spacing:.04em}
.cert-note{margin-left:auto;font-size:11px;color:var(--muted)}

/* ---------- the price ---------- */
.qvp-rule{width:34px;height:1px;background:var(--gold);margin:0 auto 20px}

/* ---------- richer timeline ---------- */
.qtl-sub{font-size:11.5px;line-height:1.6;color:var(--gold-deep);margin-top:7px;
  padding-left:12px;border-left:1px solid var(--gold-soft);max-width:520px}
.qtl-total{text-align:left;margin-top:10px;padding:20px 22px;
  background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft));
  border:1px solid var(--gold-soft);border-radius:15px}
.qt-row{display:flex;justify-content:space-between;align-items:baseline;gap:14px;padding:7px 0;
  font-size:13px;color:var(--muted);border-bottom:1px solid rgba(198,166,103,.22)}
.qt-row b{font-family:var(--mono);color:var(--ink);font-variant-numeric:tabular-nums;font-size:12.5px}
.qt-row.big{border-bottom:0;padding-top:11px;font-size:14.5px;color:var(--ink)}
.qt-row.big b{font-family:var(--serif);font-size:19px}
.qt-note{font-family:var(--mono);font-size:8.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--gold-deep);margin-top:10px;text-align:center}

/* ---------- trust badges ---------- */
.badgegrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px}
.badge2{text-align:center;padding:26px 18px;border:1px solid var(--line);border-radius:17px;
  background:linear-gradient(168deg,#FFFDF9,#FCFAF4);
  transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out)}
.badge2:hover{transform:translateY(-3px);border-color:var(--gold-soft);box-shadow:0 16px 36px rgba(120,100,60,.12)}
.b2-n{font-family:var(--serif);font-size:32px;line-height:1;font-variant-numeric:tabular-nums;
  background:linear-gradient(135deg,#8A6F3C,#C6A667);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent}
.b2-t{font-family:var(--mono);font-size:8.5px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold-deep);margin:11px 0 9px}
.b2-d{font-size:12.5px;line-height:1.65;color:var(--muted)}

/* ---------- payment rails ---------- */
.r-mark{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;flex-shrink:0;
  font-family:var(--serif);font-size:14px;letter-spacing:-.02em;color:var(--gold-deep);
  background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft));border:1px solid var(--gold-soft)}

/* ---------- payment marks in the footer ---------- */
.paymarks{display:flex;justify-content:center;gap:9px;flex-wrap:wrap;margin-bottom:26px;
  padding-bottom:24px;border-bottom:1px solid var(--line)}
.pmark{font-family:var(--mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--gold-deep);padding:8px 14px;border:1px solid var(--gold-soft);border-radius:8px;
  background:#FFFDF9}
.pmark.off{color:var(--muted);border-color:var(--line);opacity:.45}
.qv-foot{padding-top:34px}

@media screen and (max-width:760px){
  .fourc{grid-template-columns:1fr 1fr}
  .pricesplit.on{flex-direction:column;align-items:stretch;gap:12px}
  .ps-div{width:100%;height:1px}
  .qv-hold{flex-wrap:wrap;border-radius:16px;padding:12px 14px;gap:9px}
  .hold-s{padding-right:0;width:100%}
  .certline{flex-wrap:wrap}
  .cert-note{margin-left:0;width:100%}
  .badgegrid{grid-template-columns:1fr 1fr}
  .b2-d{font-size:11.5px}
}
@media (prefers-reduced-motion:reduce){
  .hold-dot{animation:none}
  .badge2:hover{transform:none}
}

/* ============================================================
   THE QUOTATION SHEET — A4, one page
   ============================================================ */
.qsheet{color:var(--ink);font-size:11.5px;line-height:1.45;position:relative}
.qs-rule{height:3px;border-radius:2px;margin-bottom:14px;
  background:linear-gradient(90deg,var(--gold-deep),var(--gold) 45%,var(--gold-soft))}
.qs-top{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;
  padding-bottom:12px;border-bottom:1px solid var(--line-strong)}
.qs-brand{display:flex;align-items:center;gap:11px}
.qs-logo{height:34px;width:auto;object-fit:contain}
.qs-name{font-family:var(--serif);font-size:18px;line-height:1.1}
.qs-tag{font-family:var(--mono);font-size:7px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-deep);margin-top:3px}
.qs-id{text-align:right}
.qs-kind{font-family:var(--mono);font-size:6.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--muted)}
.qs-ref{font-family:var(--mono);font-size:14px;letter-spacing:.1em;margin:3px 0}
.qs-date{font-family:var(--mono);font-size:7px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}

.qs-hero{display:grid;grid-template-columns:1fr auto;gap:20px;align-items:center;margin:16px 0 14px}
.qs-for{font-family:var(--mono);font-size:7px;letter-spacing:.22em;text-transform:uppercase;color:var(--muted)}
.qs-client{font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--gold-deep);margin:5px 0 8px}
.qs-hero h1{font-family:var(--serif);font-size:25px;font-weight:400;margin:0;line-height:1.12;letter-spacing:-.015em}
.qs-img{margin:0;width:150px;height:112px;border:1px solid var(--line-strong);border-radius:9px;overflow:hidden;background:#fff}
.qs-img img{width:100%;height:100%;object-fit:cover;display:block}

.qs-4c{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--gold-soft);
  border:1px solid var(--gold-soft);border-radius:11px;overflow:hidden;margin-bottom:9px}
.qs-c{background:linear-gradient(165deg,#FFFDF9,#FAF6EC);padding:11px 6px;text-align:center}
.qs-c-v{font-family:var(--serif);font-size:17px;line-height:1;font-variant-numeric:tabular-nums}
.qs-c-k{font-family:var(--mono);font-size:6.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold-deep);margin-top:6px}
.qs-cert{font-family:var(--mono);font-size:8px;letter-spacing:.09em;color:var(--muted);
  padding:7px 11px;border:1px dashed var(--gold-soft);border-radius:7px;background:#FDFCF9;margin-bottom:14px}
.qs-cert b{color:var(--ink);letter-spacing:.05em}

.qs-h{font-family:var(--mono);font-size:7px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-deep);
  padding-bottom:4px;margin:0 0 8px;border-bottom:1px solid var(--line-strong)}
.qs-main{display:grid;grid-template-columns:1fr 1.15fr;gap:22px;align-items:start}
.qs-table{width:100%;border-collapse:collapse;border:1px solid var(--line-strong);border-radius:6px}
.qs-table th{font-family:var(--mono);font-size:7px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);
  font-weight:400;text-align:left;padding:5px 8px;width:46%;background:#FCFBF8;
  border-bottom:1px solid var(--line);border-right:1px solid var(--line)}
.qs-table td{font-size:11px;font-weight:600;padding:5px 9px;border-bottom:1px solid var(--line)}
.qs-table tr:last-child th,.qs-table tr:last-child td{border-bottom:0}
.qs-note{margin:0;font-size:10px;line-height:1.5;padding:7px 10px;background:#FDFCF9;
  border-left:2px solid var(--gold-soft);border-radius:0 5px 5px 0}

.qs-tl{list-style:none;margin:0;padding:0;counter-reset:s}
.qs-tl li{position:relative;padding:6px 0 6px 18px;font-size:10px;color:var(--muted);
  border-bottom:1px dotted var(--line);display:flex;justify-content:space-between;gap:8px;line-height:1.5}
.qs-tl li:last-child{border-bottom:0}
.qs-tl li::before{content:"";position:absolute;left:0;top:12px;width:5px;height:5px;border-radius:50%;
  background:var(--gold)}
.qs-tl li b{color:var(--ink);font-weight:600;margin-right:5px}
.qs-tl li span{font-family:var(--mono);font-size:8px;color:var(--gold-deep);white-space:nowrap;
  font-variant-numeric:tabular-nums}

.qs-money{margin-top:16px;border:1px solid var(--gold-soft);border-radius:11px;overflow:hidden}
.qsm-total{display:flex;justify-content:space-between;align-items:baseline;padding:13px 17px;
  background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft))}
.qsm-total .k{font-family:var(--mono);font-size:8px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold-deep)}
.qsm-total .v{font-family:var(--serif);font-size:27px;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.qsm-split{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border-top:1px solid var(--line)}
.qsm-half{background:#fff;padding:9px 17px;display:flex;flex-direction:column;gap:3px}
.qsm-half .k{font-size:8.5px;color:var(--muted)}
.qsm-half .v{font-family:var(--mono);font-weight:600;font-size:13px;font-variant-numeric:tabular-nums}
.qsm-guard{padding:8px 17px;border-top:1px solid var(--line);background:#FDFCF9;
  font-size:9px;color:var(--gold-deep);text-align:center}

.qs-foot{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-top:16px;
  padding-top:10px;border-top:1px solid var(--line-strong)}
.qs-sign-n{font-family:var(--serif);font-size:15px;color:var(--ink)}
.qs-sign-r{font-family:var(--mono);font-size:6.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-top:3px}
.qs-fine{display:flex;flex-direction:column;gap:3px;text-align:right;
  font-family:var(--mono);font-size:6.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}

@media screen and (max-width:760px){
  .qs-main{grid-template-columns:1fr;gap:16px}
  .qs-top,.qs-hero,.qs-foot{flex-direction:column;grid-template-columns:1fr;align-items:flex-start}
  .qs-id,.qs-fine{text-align:left}
  .qs-img{width:100%;height:150px}
  .qsm-split{grid-template-columns:1fr}
}

@media print{
  @page{size:A4;margin:11mm}
  .qsheet{font-size:10.5px}
  .qs-logo{height:30px}
  .qs-hero h1{font-size:22px}
  .qs-img{width:140px;height:104px}
  .qs-main{display:grid !important;grid-template-columns:1fr 1.15fr !important;gap:18px !important}
  .qs-4c{display:grid !important;grid-template-columns:repeat(4,1fr) !important}
  .qsm-split{display:grid !important;grid-template-columns:1fr 1fr !important}
  .qsm-total .v{font-size:24px}
  .qs-money,.qs-main,.qs-table,.qs-img,.qs-4c,.qs-foot{break-inside:avoid;page-break-inside:avoid}
  .qsheet{break-after:avoid;page-break-after:avoid}
  #quoteModal{position:static!important;width:100%!important;max-width:none!important;max-height:none!important;
    box-shadow:none!important;border-radius:0!important;overflow:visible!important;background:#fff!important}
  #quoteModal .modal-b{padding:0!important;overflow:visible!important}
}

/* The scrim centres a modal on screen. On paper it must be nothing:
   no fixed positioning, no viewport height, no padding — or it pushes
   the sheet onto a second page. */
@media print{
  /* PRINT SAFETY: only the sheet marked print-target may reach paper.
     Any modal behind it (the quote form) is hidden. Deleting this rule
     puts private data on the page you hand a client. It has happened once. */
  #modal-root .scrim:not(.print-target){display:none!important}
  #modal-root .scrim.print-target{position:static!important;display:block!important;
    padding:0!important;margin:0!important;min-height:0!important;height:auto!important;
    background:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
    overflow:visible!important;align-items:flex-start!important}
  #modal-root{position:static!important}
}

/* ============================================================
   UPDATE #27 — THE CLOSING SYSTEM
   A funnel, a chase list, a payment gate, and a countdown
   that tells the truth.
   ============================================================ */

/* ---------- the funnel ---------- */
.funnel{display:grid;grid-template-columns:1.5fr repeat(4,1fr);gap:1px;
  background:rgba(198,166,103,.22);border-radius:16px;overflow:hidden;margin-bottom:20px;
  box-shadow:0 18px 44px rgba(28,24,19,.30)}
.fn{background:linear-gradient(165deg,#221E19,#171410);padding:19px 19px 17px;position:relative}
.fn.big{background:linear-gradient(150deg,#2B251D,#1A1712)}
.fn.big::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 90% at 12% 0%, rgba(198,166,103,.20), transparent 62%)}
.fn-l{font-family:var(--mono);font-size:8px;letter-spacing:.18em;text-transform:uppercase;color:#8E8578;margin-bottom:9px}
.fn-n{font-family:var(--serif);font-size:24px;line-height:1.05;color:#F8F2E4;letter-spacing:-.01em;
  font-variant-numeric:tabular-nums}
.fn.big .fn-n{font-size:38px;background:linear-gradient(135deg,#F7EBCF,#C6A667);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.fn-n.good{color:#A9D39B}
.fn-s{font-family:var(--mono);font-size:8.5px;letter-spacing:.05em;color:#7E7568;margin-top:8px}
.fn-bar{height:3px;background:rgba(255,255,255,.09);border-radius:99px;margin-top:11px;overflow:hidden;position:relative;z-index:2}
.fn-bar span{display:block;height:100%;border-radius:99px;
  background:linear-gradient(90deg,var(--gold-soft),var(--gold));animation:barIn 1s var(--ease-out) both}

/* ---------- chase list ---------- */
.chasebox{border:1px solid var(--gold-soft);border-radius:17px;overflow:hidden;margin-bottom:20px;background:#FFFDF9}
.chase-h{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;
  padding:15px 20px;background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft));
  border-bottom:1px solid var(--gold-soft)}
.ch-t{font-family:var(--serif);font-size:17px;color:var(--ink)}
.ch-s{font-family:var(--mono);font-size:8.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.chaselist{display:grid}
.chaserow{display:grid;grid-template-columns:1fr auto auto;gap:16px;align-items:center;
  padding:14px 20px;border-bottom:1px solid var(--line)}
.chaserow:last-child{border-bottom:0}
.chaserow.hot{background:#FFFBF4}
.cr-top{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:5px}
.cr-ref{font-family:var(--mono);font-size:10px;letter-spacing:.11em;color:var(--muted)}
.cr-seen{font-family:var(--mono);font-size:8px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--success);background:#F2F8F0;border:1px solid #C6DFBE;padding:3px 7px;border-radius:5px}
.cr-unseen{font-family:var(--mono);font-size:8px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);border:1px dashed var(--line-strong);padding:3px 7px;border-radius:5px}
.cr-client{font-size:14.5px;color:var(--ink)}
.cr-piece{color:var(--muted);font-size:12.5px}
.cr-meta{font-family:var(--mono);font-size:9.5px;color:var(--muted);margin-top:5px;letter-spacing:.03em}
.cr-meta b{color:var(--ink)}
.cr-meta b.warn{color:var(--danger)}
.cr-amt{font-family:var(--mono);font-size:14px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.cr-acts{display:flex;gap:7px}

/* ---------- the payment gate ---------- */
.paypanel{margin-top:20px;border:1px dashed var(--line-strong);border-radius:14px;padding:16px 18px;background:#FDFCF9}
.paypanel.paid{border-style:solid;border-color:#C6DFBE;background:#F6FBF4}
.pp-h{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}
.pp-t{font-family:var(--serif);font-size:16px;color:var(--ink)}
.paypanel.paid .pp-t{color:var(--success)}
.pp-s{font-size:11.5px;color:var(--muted)}
.pp-row{display:flex;gap:9px;align-items:center}
.pp-row input{flex:1;max-width:220px}
.pp-done{font-size:12.5px;color:var(--success)}
.dischint{font-size:10.5px;line-height:1.6;color:var(--muted);padding:9px 11px;
  background:#FDFCF9;border:1px dashed var(--line-strong);border-radius:9px}
.pricesplit .ps-v.strike{text-decoration:line-through;color:var(--muted);font-size:16px}

/* ---------- client page: the discount ---------- */
.qv-price.hasdisc{border-color:var(--gold)}
.qvp-was{font-family:var(--serif);font-size:20px;color:var(--muted);text-decoration:line-through;
  margin-bottom:2px;font-variant-numeric:tabular-nums}
.qvp-saved{margin-top:12px;display:inline-flex;align-items:center;gap:8px;
  font-family:var(--mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;
  color:#fff;background:linear-gradient(135deg,var(--gold),var(--gold-deep));
  padding:7px 14px;border-radius:999px;box-shadow:0 4px 16px rgba(160,130,74,.34)}
.qvp-saved span{opacity:.55}
.qvp-paidmark{margin-top:16px;padding:11px 16px;border-radius:11px;background:#F2F8F0;
  border:1px solid #C6DFBE;color:var(--success);font-size:12.5px}

/* ---------- THE COUNTDOWN ---------- */
.countdown{max-width:660px;margin:-16px auto 40px;padding:26px 28px 22px;text-align:center;
  background:linear-gradient(168deg,#242019,#171410);border:1px solid rgba(198,166,103,.32);
  border-radius:20px;box-shadow:0 24px 60px rgba(28,24,19,.34);position:relative;overflow:hidden}
.countdown::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(90% 70% at 50% 0%, rgba(198,166,103,.16), transparent 66%)}
.cd-l{font-family:var(--mono);font-size:8.5px;letter-spacing:.26em;text-transform:uppercase;
  color:#9A907F;position:relative;z-index:2}
.cd-clock{display:flex;align-items:flex-start;justify-content:center;gap:6px;margin:16px 0 14px;position:relative;z-index:2}
.cd-unit{display:flex;flex-direction:column;align-items:center;gap:7px;min-width:74px}
.cd-n{font-family:var(--serif);font-size:44px;line-height:1;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;
  background:linear-gradient(135deg,#F7EBCF,#C6A667);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent}
.cd-k{font-family:var(--mono);font-size:7.5px;letter-spacing:.2em;text-transform:uppercase;color:#7E7568}
.cd-sep{font-family:var(--serif);font-size:34px;line-height:1.15;color:rgba(198,166,103,.4)}
.cd-s{font-size:11.5px;line-height:1.6;color:#8E8578;position:relative;z-index:2;
  padding-top:14px;border-top:1px solid rgba(198,166,103,.18)}
.countdown.soon .cd-n{background:linear-gradient(135deg,#F3D9BE,#C08A5E);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.countdown.done{background:#FDFCF9;border-color:var(--line-strong);box-shadow:none}
.cd-over{font-size:13px;color:var(--muted);padding:10px}

/* ---------- payment: choose, reveal in place ---------- */
.railpick{display:grid;gap:9px;max-width:620px;margin:0 auto}
.rp{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:14px;width:100%;
  border:1px solid var(--line);border-radius:14px;padding:15px 17px;background:#FFFDF9;
  cursor:pointer;font:inherit;text-align:left;
  transition:border-color var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}
.rp:hover{border-color:var(--gold-soft);transform:translateY(-1px)}
.rp.on{border-color:var(--gold);background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft));
  border-bottom-left-radius:0;border-bottom-right-radius:0}
.rp-mark{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;
  font-family:var(--serif);font-size:14px;color:var(--gold-deep);
  background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft));border:1px solid var(--gold-soft)}
.rp-b{display:flex;flex-direction:column;gap:3px;min-width:0}
.rp-n{font-size:14.5px;color:var(--ink);font-weight:600}
.rp-t{font-family:var(--mono);font-size:8px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.rp-chev{font-family:var(--mono);font-size:15px;color:var(--gold-deep);
  transition:transform var(--dur-fast) var(--ease)}
.rp.on .rp-chev{transform:rotate(45deg)}
.rp-body{border:1px solid var(--gold);border-top:0;border-radius:0 0 14px 14px;
  padding:16px 17px;background:var(--champagne-soft);margin-top:-9px}
.rpb-l{font-family:var(--mono);font-size:8px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:9px}
.rpb-handle{font-family:var(--mono);font-size:13.5px;color:var(--ink);word-break:break-all;line-height:1.5;
  padding:12px 14px;background:#fff;border:1px solid var(--gold-soft);border-radius:9px;user-select:all}
.rpb-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:11px}
.rpb-note{font-size:11px;color:var(--muted)}
.payafter{max-width:620px;margin:20px auto 0;text-align:center;font-size:12px;line-height:1.65;color:var(--muted)}

@media screen and (max-width:900px){
  .funnel{grid-template-columns:1fr 1fr}
  .fn.big{grid-column:1 / -1}
}
@media screen and (max-width:760px){
  .chaserow{grid-template-columns:1fr;gap:11px}
  .cr-amt{font-size:16px}
  .cr-acts .btn{flex:1}
  .cd-unit{min-width:0;flex:1}
  .cd-n{font-size:34px}
  .cd-sep{font-size:26px}
  .countdown{margin:-8px 16px 32px;padding:22px 16px 18px;border-radius:16px}
  .pp-row{flex-direction:column;align-items:stretch}
  .pp-row input{max-width:none}
  .railpick{padding:0 4px}
}
@media (prefers-reduced-motion:reduce){
  .rp:hover{transform:none}
  .fn-bar span{animation:none}
}

/* the sheet shows what they pay, and what they saved */
.qsm-was{font-family:var(--mono);font-size:14px;color:var(--muted);text-decoration:line-through;
  margin-right:6px;font-variant-numeric:tabular-nums}
.qsm-disc{padding:7px 17px;border-top:1px solid var(--line);background:#FFFBF2;
  font-family:var(--mono);font-size:8px;letter-spacing:.1em;text-transform:uppercase;color:var(--gold-deep)}

/* ============================================================
   UPDATE #28 — MULTI-PIECE QUOTES
   Several pieces, one grand total. The quote becomes a set.
   ============================================================ */

/* ---------- owner: the additional-piece cards ---------- */
.qitems{display:grid;gap:14px;margin-bottom:12px}
.qitem{border:1px solid var(--line);border-radius:14px;padding:15px 16px 6px;background:#FDFCF9;
  position:relative}
.qi-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.qi-n{font-family:var(--mono);font-size:9px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold-deep)}
.qi-del{font:inherit;font-size:11px;color:var(--danger);background:none;border:0;cursor:pointer;
  padding:4px 8px;border-radius:7px;transition:background var(--dur-fast) var(--ease)}
.qi-del:hover{background:#FBEDEA}

.grandtotal{margin:12px 0}
.grandtotal.on{border:1px solid var(--gold-soft);border-radius:13px;overflow:hidden;
  background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft))}
.gt-rows{padding:12px 16px 6px}
.gt-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:5px 0;
  font-size:12.5px;color:var(--muted)}
.gt-row b{font-family:var(--mono);color:var(--ink);font-variant-numeric:tabular-nums}
.gt-total{display:flex;justify-content:space-between;align-items:baseline;gap:12px;
  padding:12px 16px;border-top:1px solid var(--gold-soft);
  font-family:var(--serif);font-size:15px;color:var(--ink)}
.gt-total b{font-size:22px;color:var(--gold-deep);font-variant-numeric:tabular-nums}

.inclnote{font-size:11.5px;line-height:1.6;color:var(--muted);margin:6px 0 4px;
  padding:11px 14px;background:#FDFCF9;border:1px dashed var(--gold-soft);border-radius:10px}
.inclnote b{color:var(--ink)}

/* ---------- client: the piece cards ---------- */
.pcards{display:grid;gap:0}
.pcards.many{gap:18px}
.pcard{}
.pcards.many .pcard{border:1px solid var(--line);border-radius:16px;padding:20px 20px 8px;
  background:linear-gradient(168deg,#FFFDF9,#FCFAF4)}
.pcard-h{display:flex;align-items:baseline;gap:11px;flex-wrap:wrap;margin-bottom:15px;
  padding-bottom:12px;border-bottom:1px solid var(--line)}
.pcard-n{font-family:var(--mono);font-size:8.5px;letter-spacing:.18em;text-transform:uppercase;
  color:#fff;background:linear-gradient(135deg,var(--gold),var(--gold-deep));padding:5px 10px;border-radius:999px}
.pcard-t{font-family:var(--serif);font-size:19px;color:var(--ink);letter-spacing:-.01em}
.pcard-p{margin-left:auto;font-family:var(--mono);font-size:15px;font-weight:600;color:var(--gold-deep);
  font-variant-numeric:tabular-nums}

.qv-table-foot{display:flex;justify-content:space-between;align-items:baseline;gap:14px;
  margin-top:18px;padding:18px 22px;border-radius:15px;
  background:linear-gradient(150deg,#221E19,#171410);color:#F8F2E4}
.qv-table-foot span{font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:#9A907F}
.qv-table-foot b{font-family:var(--serif);font-size:28px;font-variant-numeric:tabular-nums;
  background:linear-gradient(135deg,#F7EBCF,#C6A667);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent}

.qv-note.center{text-align:center}
.qv-included{margin-top:20px;text-align:center;font-size:12.5px;line-height:1.7;color:var(--muted);
  max-width:600px;margin-left:auto;margin-right:auto;padding:14px 18px;
  background:var(--champagne-soft);border-radius:13px}
.qv-included b{color:var(--ink)}
.qvi-ico{color:var(--gold);margin-right:5px}

/* ---------- PDF: multi-piece rows ---------- */
.qs-pieces th{width:38% !important}
.qs-pp{float:right;font-family:var(--mono);font-weight:600;color:var(--gold-deep);font-variant-numeric:tabular-nums}
.qs-incl{margin:8px 0 0;font-size:8.5px;color:var(--muted);line-height:1.5;font-style:italic}

@media screen and (max-width:760px){
  .pcard-p{margin-left:0;width:100%}
  .qv-table-foot{flex-direction:column;gap:6px;text-align:left}
  .qv-table-foot b{font-size:24px}
}

/* ============================================================
   UPDATE #29 — THE INTAKE SHEET & CLIENT SHEETS REVIEW
   The client's final details, and the owner's approval queue.
   ============================================================ */

/* ---------- intake: hero variation ---------- */
.intake-hero .qv-piece{max-width:16ch}

.intake-form{max-width:640px;margin:0 auto;padding:0 20px;display:grid;gap:20px}
.icard{border:1px solid var(--line);border-radius:18px;background:linear-gradient(168deg,#FFFDF9,#FCFAF4);
  padding:22px 22px 8px;box-shadow:0 2px 14px rgba(120,100,60,.04)}
.icard.shared,.icard.sat{background:linear-gradient(168deg,#FDFCF9,#FAF6EC)}
.ic-head{display:flex;align-items:baseline;gap:11px;flex-wrap:wrap;margin-bottom:6px}
.ic-n{font-family:var(--mono);font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;color:#fff;
  background:linear-gradient(135deg,var(--gold),var(--gold-deep));padding:4px 9px;border-radius:999px}
.ic-t{font-family:var(--serif);font-size:20px;color:var(--ink);letter-spacing:-.01em}
.ic-meta{margin-left:auto;font-family:var(--mono);font-size:10px;letter-spacing:.06em;color:var(--gold-deep)}
.ic-spec{font-size:12px;color:var(--muted);margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.ic-body{display:grid;gap:16px;padding-bottom:14px}
.ifield{display:flex;flex-direction:column;gap:7px}
.ifield label{font-size:12.5px;color:var(--ink);font-weight:500;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.ihint{font-family:var(--mono);font-size:8px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:400}
.ihint.gold{color:var(--gold-deep)}
.ifield input,.ifield textarea{width:100%;border:1px solid var(--line-strong);border-radius:11px;
  padding:12px 14px;font:inherit;font-size:15px;background:#fff;color:var(--ink);
  transition:border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}
.ifield input:focus,.ifield textarea:focus{outline:none;border-color:var(--gold);
  box-shadow:0 0 0 3px rgba(198,166,103,.16)}
.ifield textarea{resize:vertical;line-height:1.5}
.frow2{display:grid;grid-template-columns:1fr 1fr;gap:14px}

.i-ref{aspect-ratio:16/10;border:1.5px dashed var(--gold-soft);border-radius:13px;cursor:pointer;
  display:grid;place-items:center;background:#FDFCF9;overflow:hidden;
  transition:border-color var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease)}
.i-ref:hover{border-color:var(--gold);background:var(--champagne-soft)}
.i-ref img{width:100%;height:100%;object-fit:cover}
.i-refempty{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--gold-deep)}
.i-deadnote{font-size:11.5px;line-height:1.55;padding:9px 12px;border-radius:9px;margin-top:2px}
.i-deadnote.warn{background:#FFF7ED;border:1px solid #F0D9B8;color:#9A6A2E}
.i-deadnote.ok{background:#F2F8F0;border:1px solid #C6DFBE;color:var(--success)}
.i-paypal{font-size:12.5px;line-height:1.6;color:var(--gold-deep);padding:13px 16px;
  background:var(--champagne-soft);border:1px solid var(--gold-soft);border-radius:12px}
.i-paypal b{color:var(--ink)}

/* ---------- satisfaction slider ---------- */
.satwrap{display:flex;align-items:center;gap:16px}
#i_sat{-webkit-appearance:none;appearance:none;flex:1;height:8px;border-radius:99px;
  background:linear-gradient(90deg,var(--gold) 90%,#E8E1D4 90%);outline:none;cursor:pointer}
#i_sat::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:26px;height:26px;border-radius:50%;
  background:radial-gradient(circle at 35% 30%,#FBEFD4,var(--gold));border:2px solid #fff;
  box-shadow:0 2px 10px rgba(160,130,74,.5);cursor:grab}
#i_sat::-moz-range-thumb{width:24px;height:24px;border-radius:50%;
  background:radial-gradient(circle at 35% 30%,#FBEFD4,var(--gold));border:2px solid #fff;
  box-shadow:0 2px 10px rgba(160,130,74,.5);cursor:grab}
.sat-read{font-family:var(--serif);font-size:30px;color:var(--gold-deep);font-variant-numeric:tabular-nums;min-width:78px;text-align:right}
.sat-max{font-size:14px;color:var(--muted)}
.sat-scale{display:flex;justify-content:space-between;margin-top:9px;
  font-family:var(--mono);font-size:8.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}

/* ---------- submit bar ---------- */
.intake-bar{position:sticky;bottom:0;z-index:20;max-width:640px;margin:20px auto 0;padding:16px 20px;
  background:rgba(255,255,255,.86);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  border-top:1px solid var(--gold-soft);border-radius:18px 18px 0 0;box-shadow:0 -8px 30px rgba(120,100,60,.10)}
.ib-note{font-size:11.5px;color:var(--muted);margin-bottom:12px;text-align:center}
.ib-note.ok{color:var(--success)} .ib-note.warn{color:var(--danger)}
.ib-acts{display:flex;gap:10px}
.ib-acts .btn{flex:1}

/* ---------- intake done ---------- */
.intake-done{max-width:560px;margin:36px auto;padding:0 24px;text-align:center}
.idone-mark{width:64px;height:64px;border-radius:50%;margin:0 auto 20px;display:grid;place-items:center;
  font-size:28px;color:#fff;background:linear-gradient(150deg,var(--gold),var(--gold-deep));
  box-shadow:0 12px 32px rgba(160,130,74,.4)}
.idone-t{font-family:var(--serif);font-size:26px;color:var(--ink);margin-bottom:12px}
.idone-s{font-size:14.5px;line-height:1.7;color:var(--muted);max-width:44ch;margin:0 auto 20px}
.idone-sign{font-family:var(--serif);font-style:italic;color:var(--gold-deep)}

/* ---------- the link-ready modals ---------- */
.ir-mark{font-size:26px;color:var(--gold);text-align:center;margin-bottom:14px}
.ir-lead{font-size:14px;line-height:1.65;color:var(--ink);text-align:center;margin:0 0 18px}
.ir-link input{width:100%;border:1px solid var(--gold-soft);border-radius:11px;padding:12px 14px;
  font-family:var(--mono);font-size:12px;background:var(--champagne-soft);color:var(--ink);user-select:all}
.ir-acts{display:flex;gap:10px;margin:14px 0 16px}
.ir-acts .btn{flex:1}
.ir-foot{font-size:11.5px;line-height:1.6;color:var(--muted);text-align:center;margin:0}
.ir-foot b{color:var(--ink)}

/* ---------- client sheets review ---------- */
.sheetlist{display:grid;gap:20px}
.sheetcard{border:1px solid var(--line);border-radius:18px;overflow:hidden;background:#FFFDF9;
  box-shadow:0 4px 20px rgba(120,100,60,.06)}
.sc-top{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:16px 20px;
  background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft));border-bottom:1px solid var(--gold-soft)}
.sc-id{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sc-ref{font-family:var(--mono);font-size:12px;letter-spacing:.1em;color:var(--ink)}
.sc-badge{font-family:var(--mono);font-size:8px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--gold-deep);background:#fff;border:1px solid var(--gold-soft);padding:3px 8px;border-radius:6px}
.sc-when{font-family:var(--mono);font-size:9px;color:var(--muted)}
.sc-total{font-family:var(--serif);font-size:22px;color:var(--gold-deep);font-variant-numeric:tabular-nums}
.sc-who{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--line)}
.scw-item{background:#fff;padding:12px 18px;display:flex;flex-direction:column;gap:4px}
.scw-k{font-family:var(--mono);font-size:8px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.scw-v{font-size:13.5px;color:var(--ink);word-break:break-word}
.sc-sat{padding:16px 20px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:8px}
.scs-bar{height:7px;border-radius:99px;background:#E8E1D4;overflow:hidden;max-width:280px}
.scs-bar span{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--gold-soft),var(--gold))}
.scs-read{font-family:var(--mono);font-size:10px;letter-spacing:.08em;color:var(--gold-deep)}
.scs-fb{font-family:var(--serif);font-style:italic;font-size:14px;color:var(--ink);line-height:1.5}
.sc-pieces{padding:8px 20px 4px;display:grid;gap:12px}
.scp{border:1px solid var(--line);border-radius:13px;padding:14px 16px;background:#FDFCF9}
.scp-h{font-family:var(--serif);font-size:15px;color:var(--ink);margin-bottom:9px}
.scp-grid{display:flex;flex-wrap:wrap;gap:16px;font-size:13px;color:var(--muted)}
.scp-grid b{color:var(--ink);font-weight:600;margin-right:4px}
.oncomp{font-style:normal;font-family:var(--mono);font-size:8px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--gold-deep);background:var(--champagne-soft);padding:2px 6px;border-radius:5px;margin-left:4px}
.scp-note{margin-top:9px;font-style:italic;font-size:13px;color:var(--ink);line-height:1.5}
.scp-ref{margin-top:10px;max-width:180px}
.scp-ref img{width:100%;border-radius:9px;border:1px solid var(--line)}
.sc-acts{display:flex;gap:10px;padding:16px 20px;border-top:1px solid var(--line);justify-content:flex-end;flex-wrap:wrap}

/* ---------- the maker's mark footer (silent mantras) ---------- */
.brandfoot{max-width:640px;margin:44px auto 0;padding:26px 20px 30px;text-align:center;
  border-top:1px solid var(--line)}
.bf-line{font-family:var(--serif);font-size:14px;color:var(--ink)}
.bf-tag{font-family:var(--mono);font-size:8px;letter-spacing:.24em;text-transform:uppercase;color:var(--gold-deep);margin-top:6px}
.bf-bless{margin-top:20px;font-size:8.5px;letter-spacing:.04em;line-height:1.9;
  color:rgba(140,128,110,.34);max-width:46ch;margin-left:auto;margin-right:auto;user-select:none}

@media screen and (max-width:620px){
  .frow2{grid-template-columns:1fr}
  .satwrap{gap:11px}
  .sat-read{font-size:24px;min-width:60px}
  .sc-acts{flex-direction:column}
  .sc-acts .btn{width:100%}
  .pp-row{flex-wrap:wrap}
}
@media (prefers-reduced-motion:reduce){
  .intake-bar{backdrop-filter:none}
}

/* pay method row in the quote form */
.pp-row select{flex:1;min-width:140px}
.pp-paidrow{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.pp-method{font-size:12.5px;color:var(--muted)}
.pp-method b{color:var(--ink)}

/* ============================================================
   UPDATE #31 — THE WORLD, REBUILT
   A dense, warm command centre. Charts, pipeline, markets.
   ============================================================ */

/* the whole view sits on warm cream, not stark white */
body:has(.worldtarget) .app-main,
.worldview{background:transparent}

/* ---------- HERO: the target ---------- */
.worldtarget{position:relative;margin:0 0 16px;padding:28px 30px 22px;border-radius:22px;overflow:hidden;
  background:linear-gradient(155deg,#241F17 0%,#191510 55%,#120F0B 100%);
  box-shadow:0 24px 70px rgba(24,19,12,.44),inset 0 1px 0 rgba(255,255,255,.05)}
.wt-grain{position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 140% at 92% -20%,rgba(198,166,103,.30),transparent 58%),
             radial-gradient(80% 90% at 8% 120%,rgba(198,166,103,.12),transparent 60%)}
.wt-top{position:relative;z-index:2;display:flex;justify-content:space-between;align-items:center;margin-bottom:22px}
.wt-eyebrow{font-family:var(--mono);font-size:9px;letter-spacing:.26em;text-transform:uppercase;color:#9A907F}
.wt-crown{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold);opacity:.86}
.wt-crown b{color:#F3DEB0}
.wt-crowni{font-size:12px}
.wt-mid{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:20px}
.wt-goal{font-family:var(--serif);font-size:56px;line-height:.95;letter-spacing:-.02em;
  background:linear-gradient(135deg,#FCF3DF,#C6A667);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.wt-of{font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:#8E8578;margin-top:8px}
.wt-of b{color:#C8BCA4}
.wt-ring{flex-shrink:0}
.wt-bar{position:relative;z-index:2;height:10px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden;margin-bottom:12px}
.wt-bar span{position:absolute;left:0;top:0;bottom:0;border-radius:99px;min-width:6px;
  background:linear-gradient(90deg,var(--gold-deep),var(--gold) 65%,#F5E2B6);
  box-shadow:0 0 20px rgba(198,166,103,.55);animation:barIn 1.1s var(--ease-out) both}
.wt-legend{position:relative;z-index:2;display:flex;justify-content:space-between}
.wtl{display:flex;flex-direction:column}
.wtl.mid{align-items:center}.wtl.end{align-items:flex-end}
.wtl b{font-family:var(--mono);font-size:15px;color:#F5EEDF;font-variant-numeric:tabular-nums}
.wtl.mid b{color:var(--gold);font-size:17px}
.wtl span{font-family:var(--mono);font-size:8px;letter-spacing:.14em;text-transform:uppercase;color:#7E7568;margin-top:3px}
.wt-other{position:relative;z-index:2;margin-top:16px;padding-top:14px;border-top:1px solid rgba(198,166,103,.15);
  font-size:12px;color:#C0B6A2}
.wt-other em{color:#7E7568;font-size:10.5px;font-style:normal}

/* ---------- STAT BAND ---------- */
.wstatband{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.wstat{padding:18px 18px;border-radius:16px;border:1px solid var(--line);
  background:linear-gradient(168deg,#FFFDF9,#FBF7EF);text-align:center}
.wstat.accent{background:linear-gradient(155deg,#FBF3E2,#F6EAD2);border-color:var(--gold-soft)}
.wst-n{font-family:var(--serif);font-size:30px;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.wstat.accent .wst-n{color:var(--gold-deep)}
.wst-k{font-family:var(--mono);font-size:8.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:8px}

/* ---------- CARD SYSTEM ---------- */
.wgrid{display:grid;grid-template-columns:1.05fr 1fr;gap:16px;margin-bottom:16px}
.wcard{border:1px solid var(--line);border-radius:18px;overflow:hidden;
  background:linear-gradient(168deg,#FFFDF9,#FCFAF4);box-shadow:0 4px 20px rgba(120,100,60,.05)}
.wcard.wide{margin-bottom:16px}
.wc-h{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:16px 20px;
  border-bottom:1px solid var(--line);background:linear-gradient(150deg,#FFFDF8,#FBF6EC)}
.wc-h>span:first-child{font-family:var(--serif);font-size:16px;color:var(--ink);letter-spacing:-.01em}
.wc-sub{font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--gold-deep)}

/* globe card */
.wcard.globe .worldglobe{aspect-ratio:16/11;background:radial-gradient(120% 120% at 50% 25%,#FFFDF8,#F5EEDF);
  display:flex;align-items:center;justify-content:center;margin:0}
.wg-canvas{width:100%;height:100%;display:block}

/* pipeline */
.pipe{padding:16px 20px 18px;display:flex;flex-direction:column;gap:11px}
.piperow{display:grid;grid-template-columns:104px 1fr 26px;align-items:center;gap:12px}
.pr-name{font-size:11.5px;color:var(--muted)}
.pr-track{height:9px;border-radius:99px;background:#EFE9DC;overflow:hidden}
.pr-fill{display:block;height:100%;border-radius:99px;min-width:2px;
  background:linear-gradient(90deg,var(--gold-soft),var(--gold));animation:barIn .9s var(--ease-out) both}
.pr-n{font-family:var(--mono);font-size:13px;color:var(--ink);text-align:right;font-variant-numeric:tabular-nums}

/* revenue spark bars */
.spark{display:flex;align-items:flex-end;gap:10px;padding:22px 20px 16px;height:180px}
.spark-col{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;justify-content:flex-end;gap:8px}
.sp-barwrap{flex:1;width:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;position:relative}
.sp-bar{width:100%;max-width:46px;border-radius:8px 8px 0 0;
  background:linear-gradient(180deg,var(--gold),var(--gold-deep));min-height:0;
  transition:height .9s var(--ease-out);box-shadow:inset 0 1px 0 rgba(255,255,255,.3)}
.sp-val{font-family:var(--mono);font-size:8.5px;color:var(--gold-deep);margin-bottom:6px;white-space:nowrap;
  font-variant-numeric:tabular-nums;opacity:.9}
.sp-m{font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}

/* country cards */
.flaggrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;padding:18px 20px 20px}
.flagcard{display:flex;align-items:center;gap:16px;padding:16px 18px;border:1px solid var(--line);
  border-radius:15px;background:linear-gradient(168deg,#FFFDF9,#FBF7EF);
  transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out)}
.flagcard:hover{transform:translateY(-3px);border-color:var(--gold-soft);box-shadow:0 16px 36px rgba(120,100,60,.12)}
.fc-flag{font-size:36px;line-height:1;filter:drop-shadow(0 2px 5px rgba(0,0,0,.14))}
.fc-body{flex:1;min-width:0}
.fc-country{font-family:var(--serif);font-size:16px;color:var(--ink);margin-bottom:5px}
.fc-sales{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}
.fc-sales span{font-family:var(--mono);font-size:13px;font-weight:600;color:var(--gold-deep);font-variant-numeric:tabular-nums}
.fc-track{height:5px;border-radius:99px;background:#EFE9DC;overflow:hidden;margin-bottom:7px}
.fc-track span{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--gold-soft),var(--gold))}
.fc-count{font-family:var(--mono);font-size:8.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}

/* conversion flow */
.convflow{display:flex;align-items:center;gap:16px;padding:22px 24px}
.cflow-node{text-align:center;flex-shrink:0}
.cf-n{font-family:var(--serif);font-size:34px;color:var(--ink);line-height:1;font-variant-numeric:tabular-nums}
.cflow-node.done .cf-n{color:var(--success)}
.cf-k{font-family:var(--mono);font-size:8.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:6px}
.cflow-arrow{flex:1}
.cf-line{display:block;height:8px;border-radius:99px;background:#EFE9DC;overflow:hidden;position:relative}
.cf-line i{position:absolute;left:0;top:0;bottom:0;border-radius:99px;
  background:linear-gradient(90deg,var(--gold),var(--success));animation:barIn 1s var(--ease-out) both}
.convchase{display:block;width:calc(100% - 48px);margin:0 24px 22px;padding:14px 18px;border:1px solid var(--gold-soft);
  border-radius:13px;background:linear-gradient(150deg,#FFFDF8,var(--champagne-soft));color:var(--gold-deep);
  font:inherit;font-size:13px;cursor:pointer;text-align:center;transition:transform var(--dur-fast) var(--ease)}
.convchase:hover{transform:translateY(-1px)}

/* empty market state */
.wempty{padding:44px 30px;text-align:center}
.we-ico{font-size:34px;color:var(--gold-soft);margin-bottom:14px}
.we-t{font-family:var(--serif);font-size:20px;color:var(--ink);margin-bottom:8px}
.we-s{font-size:13.5px;color:var(--muted);max-width:42ch;margin:0 auto 20px;line-height:1.6}

.worldnudge{display:block;width:100%;margin-bottom:16px;padding:16px 20px;border:0;border-radius:14px;
  background:linear-gradient(135deg,var(--gold),var(--gold-deep));color:#fff;font:inherit;font-size:14px;
  cursor:pointer;text-align:center;box-shadow:0 8px 24px rgba(160,130,74,.3);transition:transform var(--dur-fast) var(--ease)}
.worldnudge:hover{transform:translateY(-2px)}

@media screen and (max-width:820px){
  .wgrid{grid-template-columns:1fr}
  .wstatband{grid-template-columns:repeat(2,1fr)}
}
@media screen and (max-width:620px){
  .wt-goal{font-size:42px}
  .worldtarget{padding:24px 20px 20px}
  .wt-mid{flex-direction:column;align-items:flex-start;gap:14px}
  .flaggrid{grid-template-columns:1fr}
  .spark{height:150px;gap:6px}
  .sp-val{display:none}
}
@media (prefers-reduced-motion:reduce){
  .wt-bar span,.pr-fill,.cf-line i,.sp-bar{animation:none;transition:none}
  .flagcard:hover,.worldnudge:hover,.convchase:hover{transform:none}
}

/* ============================================================
   UPDATE #32 — satisfaction score, pay-link CTA, install bar,
   secure login line, pay-link hint. Champagne on jewel-dark.
   ============================================================ */

/* ---------- CLIENT SATISFACTION (owner home) ---------- */
.worldsat{position:relative;margin:0 0 16px;padding:24px 26px;border-radius:20px;overflow:hidden;
  background:linear-gradient(135deg,#211C15 0%,#2C2519 55%,#3A301E 100%);
  border:1px solid rgba(198,166,103,.28);box-shadow:0 14px 40px rgba(40,30,10,.28)}
.worldsat .ws-glow{position:absolute;inset:0;background:radial-gradient(120% 80% at 82% 10%,rgba(243,222,176,.20),transparent 60%);pointer-events:none}
.ws-top{display:flex;justify-content:space-between;align-items:baseline;position:relative;z-index:1}
.ws-l{font-family:var(--mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:#E4D2A6}
.ws-count{font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:rgba(243,236,221,.62)}
.ws-mid{display:flex;gap:22px;align-items:center;margin-top:12px;position:relative;z-index:1;flex-wrap:wrap}
.ws-scorewrap{display:flex;flex-direction:column;gap:8px}
.ws-score{font-family:var(--serif);font-size:60px;line-height:.9;color:#F7EBCF;letter-spacing:-.02em}
.ws-score .ws-max{font-size:20px;color:rgba(243,236,221,.5);margin-left:2px}
.ws-hearts{display:flex;gap:4px}
.ws-heart{position:relative;font-size:20px;line-height:1;width:20px;height:20px;display:inline-block}
.ws-heart-b{color:rgba(243,236,221,.18)}
.ws-heart-f{position:absolute;left:0;top:0;overflow:hidden;color:#EAD08C;white-space:nowrap}
.ws-say{flex:1;min-width:200px;font-size:14px;line-height:1.6;color:rgba(243,236,221,.82)}
.ws-words{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:18px;position:relative;z-index:1}
.ws-word{background:rgba(255,255,255,.04);border:1px solid rgba(198,166,103,.16);border-radius:12px;padding:11px 13px}
.ws-q{display:block;font-size:12.5px;line-height:1.5;color:rgba(243,236,221,.9);font-style:italic}
.ws-who{display:block;margin-top:6px;font-family:var(--mono);font-size:10.5px;letter-spacing:.05em;color:#D6BC85}
.worldsat.empty{background:linear-gradient(135deg,#211C15,#2C2519)}
.ws-empty{margin-top:10px;font-size:13.5px;line-height:1.6;color:rgba(243,236,221,.7)}
@media(max-width:640px){ .ws-words{grid-template-columns:1fr} .ws-score{font-size:50px} }

/* ---------- ONE-TAP PAYMENT LINK (client quote) ---------- */
.paylinkcta{position:relative;margin:22px auto;max-width:560px;padding:26px 26px 20px;border-radius:22px;overflow:hidden;text-align:center;
  background:linear-gradient(150deg,#FFFFFF 0%,#FBF6EC 55%,#F3ECDD 100%);
  border:1px solid var(--line-strong);box-shadow:0 14px 44px rgba(120,100,60,.14)}
.paylinkcta .plc-glow{position:absolute;inset:0;background:radial-gradient(130% 90% at 50% -10%,rgba(243,222,176,.45),transparent 60%);pointer-events:none}
.plc-eyebrow{position:relative;z-index:1;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold-deep)}
.plc-title{position:relative;z-index:1;font-family:var(--serif);font-size:26px;line-height:1.15;color:var(--ink);margin:10px 0 8px;letter-spacing:-.01em}
.plc-sub{position:relative;z-index:1;font-size:14px;line-height:1.6;color:#6E6558;max-width:440px;margin:0 auto 18px}
.plc-btn{position:relative;z-index:1;display:inline-flex;align-items:center;gap:12px;padding:16px 26px;border-radius:14px;text-decoration:none;
  background:linear-gradient(180deg,#E9D3A0,#C6A667);color:#241C0E;font-weight:600;font-size:15.5px;
  box-shadow:0 10px 26px rgba(198,166,103,.34);transition:transform .15s ease,box-shadow .15s ease}
.plc-btn:hover{transform:translateY(-2px);box-shadow:0 16px 34px rgba(198,166,103,.44)}
.plc-btn:active{transform:translateY(0)}
.plc-btn-a{font-size:19px;transition:transform .15s ease}
.plc-btn:hover .plc-btn-a{transform:translateX(4px)}
.plc-foot{position:relative;z-index:1;display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:16px;font-size:11.5px;color:#8A8377}
.plc-foot .plc-dot{opacity:.5}
.plc-or{position:relative;z-index:1;margin-top:14px;font-size:12px;letter-spacing:.04em;color:var(--muted)}
.plc-bless{position:relative;z-index:1;margin-top:14px;padding-top:13px;border-top:1px solid var(--line);
  font-family:var(--serif);font-style:italic;font-size:12.5px;letter-spacing:.02em;color:var(--gold-deep);opacity:.9}
@media(max-width:640px){ .plc-title{font-size:22px} .plc-btn{width:100%;justify-content:center} }

/* ---------- pay-link hint in the owner quote form ---------- */
.paylink-hint{margin-top:7px;font-size:12px;line-height:1.5;color:var(--muted)}

/* ---------- secure login line ---------- */
.lock-secure{margin-top:16px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--gold-deep);opacity:.85}

/* ---------- INSTALL APP BAR ---------- */
.installbar{position:fixed;left:50%;bottom:18px;transform:translate(-50%,140%);z-index:9000;
  width:calc(100% - 28px);max-width:460px;display:flex;align-items:center;gap:14px;
  padding:14px 16px;border-radius:16px;background:linear-gradient(150deg,#241E15,#33291A);
  border:1px solid rgba(198,166,103,.32);box-shadow:0 18px 50px rgba(30,20,6,.4);
  transition:transform .34s cubic-bezier(.2,.9,.3,1);opacity:0}
.installbar.show{transform:translate(-50%,0);opacity:1}
.ib-txt{flex:1;display:flex;flex-direction:column;gap:3px}
.ib-txt b{font-size:13.5px;color:#F7EBCF}
.ib-txt span{font-size:12px;line-height:1.45;color:rgba(243,236,221,.72)}
.ib-share{display:inline-block;transform:translateY(1px)}
.ib-acts{display:flex;gap:8px;align-items:center}
.ib-x{background:none;border:none;color:rgba(243,236,221,.7);font-size:12.5px;cursor:pointer;padding:8px 10px;border-radius:9px}
.ib-x.ghost{border:1px solid rgba(243,236,221,.2)}
.ib-go{background:linear-gradient(180deg,#E9D3A0,#C6A667);color:#241C0E;border:none;font-weight:600;font-size:13px;
  padding:9px 16px;border-radius:10px;cursor:pointer}

/* ============================================================
   UPDATE #33 — CAD Studio
   ============================================================ */
.cadform{display:grid;gap:14px;margin-bottom:16px}
.cadcard{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px 18px 16px;box-shadow:var(--shadow)}
.cad-h{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:12px}
.cad-h .fnote{color:var(--muted);text-transform:none;letter-spacing:0;font-family:var(--sans)}
.cadrefs{display:flex;flex-wrap:wrap;gap:10px}
.cadref{position:relative;width:84px;height:84px;border-radius:12px;overflow:hidden;border:1px solid var(--line-strong)}
.cadref img{width:100%;height:100%;object-fit:cover;cursor:zoom-in}
.cadref-x{position:absolute;top:4px;right:4px;width:20px;height:20px;border:none;border-radius:50%;
  background:rgba(20,16,10,.6);color:#fff;font-size:14px;line-height:1;cursor:pointer}
.cadref-empty{font-size:12.5px;color:var(--muted);padding:8px 0}
.cadbar{position:sticky;bottom:0;display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;
  background:linear-gradient(180deg,rgba(252,251,248,.6),var(--paper));backdrop-filter:blur(8px);
  border-top:1px solid var(--line);padding:14px 4px;margin-top:4px;z-index:5}
.cadbar-note{font-size:13px;color:#6E6558}
.cadbar-acts{display:flex;gap:10px}
@media(max-width:640px){ .cadbar{flex-direction:column;align-items:stretch} .cadbar-acts{justify-content:stretch} .cadbar-acts .btn{flex:1} }

/* ============================================================
   UPDATE #34 — speed: only paint what's on screen.
   Big cards/sections skip rendering until scrolled near,
   which makes long pages scroll smoothly on phones.
   ============================================================ */
.qcard,.ocard,.flagcard,.sheetcard,.cadcard{
  content-visibility:auto;
  contain-intrinsic-size:auto 200px;
}
img{ }  /* images below the fold are lazy-loaded in JS */

/* ============================================================
   UPDATE #35 — Money, Today, Activity
   ============================================================ */
/* --- Money --- */
.moneyband{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;margin-bottom:20px}
.moneycard{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:var(--shadow)}
.mc-cur{font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--gold-deep)}
.mc-big{font-family:var(--serif);font-size:32px;color:var(--ink);margin:6px 0 12px;line-height:1}
.mc-big .mc-lbl{font-family:var(--sans);font-size:12px;color:var(--muted);margin-left:8px}
.mc-rows{display:grid;gap:7px}
.mc-row{display:flex;justify-content:space-between;font-size:13px;color:#6E6558}
.mc-row b{color:var(--ink);font-weight:600}
.mc-row b.owed{color:#B0522F}
.mc-row.sub{border-top:1px solid var(--line);padding-top:7px;margin-top:2px;color:var(--muted);font-size:12px}
.moneysec{margin-top:4px}
.ms-h{font-family:var(--serif);font-size:20px;color:var(--ink);margin-bottom:12px;display:flex;align-items:center;gap:8px}
.ms-count{font-family:var(--mono);font-size:12px;background:var(--gold-soft);color:var(--gold-deep);border-radius:10px;padding:2px 9px}
.ms-clear{background:#F3F8F3;border:1px solid #DCEBDC;color:#3C7A4E;border-radius:12px;padding:14px 16px;font-size:14px}
.owelist{display:grid;gap:8px}
.owerow{display:flex;justify-content:space-between;align-items:center;gap:12px;background:var(--card);border:1px solid var(--line);border-radius:13px;padding:13px 15px;cursor:pointer;transition:border-color .15s}
.owerow:hover{border-color:var(--line-strong)}
.ow-client{font-weight:600;color:var(--ink);font-size:14px}
.ow-sub{font-size:12px;color:var(--muted);margin-top:2px}
.ow-r{display:flex;flex-direction:column;align-items:flex-end;gap:3px}
.ow-amt{font-family:var(--serif);font-size:18px;color:var(--ink)}
.ow-kind{font-size:10.5px;font-family:var(--mono);letter-spacing:.04em;padding:1px 7px;border-radius:8px}
.ow-kind.advance{background:#FBEEDD;color:#B0692F}
.ow-kind.balance{background:#EDE7F5;color:#6A57A0}
.ow-remind{margin-top:4px;background:none;border:1px solid var(--line-strong);color:var(--gold-deep);border-radius:9px;padding:5px 12px;font-size:12px;cursor:pointer}
.ow-remind:hover{background:var(--gold-soft)}

/* --- Today --- */
.todayhead{margin-bottom:16px}
.th-greet{font-family:var(--serif);font-size:26px;color:var(--ink)}
.th-date{font-size:13px;color:var(--muted);margin-top:2px}
.todaytiles{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:20px}
.ttile{background:var(--card);border:1px solid var(--line);border-radius:15px;padding:16px 12px;text-align:center;cursor:pointer;transition:transform .12s,border-color .15s}
.ttile:hover{transform:translateY(-2px);border-color:var(--line-strong)}
.ttile.warn{background:#FDF4EE;border-color:#F0D9C8}
.ttile.gold{background:var(--gold-soft);border-color:var(--gold)}
.tt-n{font-family:var(--serif);font-size:30px;color:var(--ink);line-height:1}
.tt-l{font-size:11.5px;color:var(--muted);margin-top:5px}
.todaysec{margin-bottom:18px}
.ts-h{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:10px}
.todayrow{display:flex;justify-content:space-between;align-items:center;gap:12px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px;cursor:pointer;margin-bottom:7px}
.todayrow:hover{border-color:var(--line-strong)}
.tr-l{display:flex;flex-direction:column;gap:2px}
.tr-l b{font-size:14px;color:var(--ink)}
.tr-l span{font-size:12px;color:var(--muted)}
.tr-tag{font-family:var(--mono);font-size:11px;color:var(--muted)}
.today-clear{text-align:center;padding:50px 20px;color:#3C7A4E}
.tc-mark{font-size:40px;margin-bottom:10px}
@media(max-width:640px){ .todaytiles{grid-template-columns:repeat(2,1fr)} }

/* --- Activity --- */
.actrow{display:flex;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}
.actrow:last-child{border-bottom:none}
.act-dot{width:7px;height:7px;border-radius:50%;background:var(--gold);margin-top:6px;flex:none}
.act-t{font-size:13px;color:var(--ink)}
.act-m{font-size:11px;color:var(--muted);margin-top:1px}

/* ============================================================
   UPDATE #36 — returning-client (VIP) panel
   ============================================================ */
.vip-line{font-size:13px;color:var(--gold-deep);background:var(--gold-soft);border-radius:10px;padding:10px 12px;margin-bottom:10px;line-height:1.5}
.vip-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);cursor:pointer}
.vip-row:last-child{border-bottom:none}
.vip-row b{font-size:13.5px;color:var(--ink);display:block}
.vip-row span{font-size:12px;color:var(--muted)}
.vip-amt{font-family:var(--serif);font-size:15px;color:var(--ink);white-space:nowrap}

/* ============================================================
   UPDATE #37 — speed-friendly polish & little delights
   ============================================================ */

/* staggered entrance for cards/tiles (GPU-friendly transform+opacity) */
@keyframes revealCard{from{opacity:0;transform:translateY(10px) scale(.99)}to{opacity:1;transform:none}}
.reveal-card{animation:revealCard .42s cubic-bezier(.2,.9,.3,1) both}

/* money "received" number gets a soft champagne shimmer on load */
.mc-big{position:relative}
.mc-num{background:linear-gradient(90deg,var(--ink) 0%,var(--gold-deep) 45%,var(--ink) 60%);
  background-size:200% 100%;-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;animation:shimmerText 2.2s ease-out 1}
@keyframes shimmerText{from{background-position:120% 0}to{background-position:0 0}}
@media(prefers-reduced-motion:reduce){
  .reveal-card{animation:none}
  .mc-num{animation:none;-webkit-text-fill-color:var(--ink);color:var(--ink)}
}

/* tiles: gentle lift + a whisper of gold on hover */
.ttile{position:relative;overflow:hidden}
.ttile::after{content:"";position:absolute;inset:0;background:radial-gradient(80% 120% at 50% -20%,rgba(198,166,103,.16),transparent 60%);opacity:0;transition:opacity .25s}
.ttile:hover::after{opacity:1}
.ttile:active{transform:translateY(0) scale(.98)}

/* owe-rows & today-rows slide their chevron/tag a touch on hover */
.owerow,.todayrow,.vip-row{transition:transform .14s ease,border-color .15s,box-shadow .18s}
.owerow:hover,.todayrow:hover{transform:translateX(2px);box-shadow:0 6px 18px rgba(120,100,60,.08)}

/* the Remind button gets a friendly press */
.ow-remind{transition:background .15s,transform .12s}
.ow-remind:active{transform:scale(.95)}

/* a cute sparkle that twinkles next to the greeting on Today */
.th-greet{position:relative;display:inline-block}
.th-greet::after{content:"✦";position:absolute;top:-4px;right:-20px;font-size:13px;color:var(--gold);
  animation:twinkleStar 2.4s ease-in-out infinite}
@keyframes twinkleStar{0%,100%{opacity:.35;transform:scale(.8) rotate(0deg)}50%{opacity:1;transform:scale(1.15) rotate(20deg)}}

/* "all caught up" check draws itself in */
.tc-mark{display:inline-block;animation:popCheck .5s cubic-bezier(.2,1.3,.4,1) both}
@keyframes popCheck{from{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}

/* buttons everywhere get a subtle, quick press feedback */
.btn:active{transform:translateY(1px)}

/* nav tabs: smooth underline-grow on the active one */
.subnav button{transition:color .18s,background .18s}
.subnav button.on{position:relative}
.subnav button.on::after{content:"";position:absolute;left:12px;right:12px;bottom:5px;height:2px;
  background:linear-gradient(90deg,transparent,var(--gold),transparent);animation:growLine .35s ease both}
@keyframes growLine{from{transform:scaleX(0)}to{transform:scaleX(1)}}

/* satisfaction hearts do a tiny gentle beat */
.ws-heart-f{animation:heartBeat 2.8s ease-in-out infinite}
@keyframes heartBeat{0%,100%{transform:scale(1)}8%{transform:scale(1.18)}16%{transform:scale(1)}}

/* ============================================================
   UPDATE #38 — Settings, order search/filter
   ============================================================ */
/* Settings */
.setform{display:grid;gap:14px;margin-bottom:16px}
.setcard{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:var(--shadow)}
.set-h{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:12px}
.set-h .fnote{color:var(--muted);text-transform:none;letter-spacing:0;font-family:var(--sans)}
.setbar{position:sticky;bottom:0;display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;
  background:linear-gradient(180deg,rgba(252,251,248,.5),var(--paper));backdrop-filter:blur(8px);
  border-top:1px solid var(--line);padding:14px 4px;margin-top:4px;z-index:5}
.setbar-note{font-size:13px;color:#6E6558}
@media(max-width:640px){ .setbar{flex-direction:column;align-items:stretch} .setbar .btn{width:100%} }

/* order search + filter */
.ordertools{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}
.osearch{position:relative;display:flex;align-items:center}
.os-i{position:absolute;left:14px;font-size:16px;color:var(--muted);pointer-events:none}
.osearch input{width:100%;padding:12px 14px 12px 40px;border:1px solid var(--line-strong);border-radius:12px;
  background:var(--card);font-size:14px;color:var(--ink);transition:border-color .15s,box-shadow .15s}
.osearch input:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 3px rgba(198,166,103,.14)}
.ofilters{display:flex;gap:8px;flex-wrap:wrap}
.ofil{background:var(--card);border:1px solid var(--line);border-radius:20px;padding:7px 14px;font-size:12.5px;
  color:#6E6558;cursor:pointer;transition:all .15s}
.ofil:hover{border-color:var(--line-strong)}
.ofil.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.empty.small{padding:30px 20px;text-align:center;color:var(--muted)}
.linkbtn{background:none;border:none;color:var(--gold-deep);text-decoration:underline;cursor:pointer;font-size:inherit}

/* ============================================================
   UPDATE #39 — Certificate of Authenticity (client-facing)
   ============================================================ */
.certwrap{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  padding:28px 16px 60px;background:radial-gradient(120% 80% at 50% -10%,#FBF6EA,#F4EEE0 60%,#EFE7D5)}
.certloading,.certerr{margin-top:80px;color:var(--muted);font-size:14px;text-align:center}
.cert{width:100%;max-width:560px}
.cert-frame{position:relative;background:linear-gradient(180deg,#FFFDF8,#FBF6EC);
  border:1px solid var(--gold);border-radius:6px;padding:44px 38px 34px;text-align:center;
  box-shadow:0 30px 80px rgba(120,95,40,.22), inset 0 0 0 6px rgba(198,166,103,.10), inset 0 0 0 7px rgba(198,166,103,.28)}
.cert-corner{position:absolute;width:26px;height:26px;border:2px solid var(--gold-deep);opacity:.7}
.cert-corner.tl{top:14px;left:14px;border-right:none;border-bottom:none}
.cert-corner.tr{top:14px;right:14px;border-left:none;border-bottom:none}
.cert-corner.bl{bottom:14px;left:14px;border-right:none;border-top:none}
.cert-corner.br{bottom:14px;right:14px;border-left:none;border-top:none}
.cert-seal{font-size:30px;color:var(--gold-deep);margin-bottom:8px;animation:gemGlow 3s ease-in-out infinite}
.cert-brand{font-family:var(--serif);font-size:26px;color:var(--ink);letter-spacing:.01em}
.cert-tag{font-family:var(--mono);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--gold-deep);margin-top:4px}
.cert-title{font-family:var(--serif);font-style:italic;font-size:21px;color:var(--gold-deep);margin:20px 0 8px;
  position:relative;display:inline-block;padding:0 22px}
.cert-title::before,.cert-title::after{content:"";position:absolute;top:50%;width:16px;height:1px;background:var(--gold)}
.cert-title::before{left:-4px}.cert-title::after{right:-4px}
.cert-sub{font-size:12.5px;line-height:1.6;color:#6E6558;max-width:420px;margin:0 auto 18px}
.cert-hero{margin:0 auto 18px;width:150px;height:150px;border-radius:50%;overflow:hidden;border:2px solid var(--gold-soft);box-shadow:0 10px 30px rgba(120,95,40,.2)}
.cert-hero img{width:100%;height:100%;object-fit:cover}
.cert-for{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.cert-name{font-family:var(--serif);font-size:24px;color:var(--ink);margin:3px 0 20px}
.cert-specs{text-align:left;max-width:380px;margin:0 auto 18px;display:grid;gap:0}
.cert-row{display:flex;justify-content:space-between;gap:16px;padding:9px 0;border-bottom:1px dashed var(--line-strong);font-size:13px}
.cert-row:last-child{border-bottom:none}
.cert-row span{color:var(--muted)}
.cert-row b{color:var(--ink);font-weight:600;text-align:right}
.cert-serial{font-family:var(--mono);font-size:12px;color:var(--gold-deep);margin-top:6px;letter-spacing:.04em}
.cert-ref{font-family:var(--mono);font-size:10.5px;color:var(--muted);letter-spacing:.1em;margin-top:4px}
.cert-warranty{font-size:11.5px;line-height:1.6;color:#7A7264;max-width:420px;margin:18px auto 0;font-style:italic;
  border-top:1px solid var(--line);padding-top:14px}
.cert-sign{display:flex;justify-content:space-between;gap:20px;margin-top:26px}
.cert-sign-l,.cert-sign-r{flex:1}
.cert-sign-line{font-family:var(--serif);font-size:14px;color:var(--ink);border-top:1px solid var(--line-strong);padding-top:7px}
.cert-sign-sub{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-top:3px}
.cert-foot{margin-top:20px;font-size:11px;color:var(--muted)}
.cert-actions{display:flex;justify-content:center;margin-top:20px}
.cert-note{text-align:center;font-size:11.5px;color:var(--muted);margin-top:10px}
.linkbox input{width:100%;padding:11px 12px;border:1px solid var(--line-strong);border-radius:10px;font-family:var(--mono);font-size:12px;color:var(--ink);background:var(--paper)}

@media print{
  body *{visibility:hidden}
  .certwrap,.certwrap *{visibility:visible}
  .certwrap{position:absolute;left:0;top:0;width:100%;background:#fff;padding:0}
  .cert-actions,.cert-note{display:none}
  .cert-frame{box-shadow:none;border:1px solid var(--gold-deep)}
}
@media(max-width:560px){ .cert-frame{padding:34px 22px 26px} .cert-brand{font-size:22px} }

/* ============================================================
   UPDATE #40 — quote calculator + refresh button
   ============================================================ */
.qcalc{border:1px solid var(--line-strong);border-radius:14px;margin-bottom:14px;overflow:hidden;background:linear-gradient(180deg,#FFFDF8,#FBF6EC)}
.qcalc-toggle{width:100%;display:flex;justify-content:space-between;align-items:center;padding:13px 16px;background:none;border:none;cursor:pointer;font-family:var(--mono);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--gold-deep)}
.qc-chev{font-size:16px;font-weight:600}
.qcalc-body{padding:4px 16px 16px}
.qc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.qc-grid .field label{font-size:11px}
.qc-grid input,.qc-grid select{padding:9px 10px;font-size:13px}
.qc-out{margin-top:14px;background:var(--card);border:1px solid var(--line);border-radius:11px;padding:13px 15px}
.qc-rows{display:grid;gap:5px;margin-bottom:10px}
.qc-row{display:flex;justify-content:space-between;font-size:12.5px;color:#6E6558}
.qc-row b{color:var(--ink);font-weight:600}
.qc-row.sub{border-top:1px solid var(--line);padding-top:6px;margin-top:2px}
.qc-row.sub b{color:var(--ink)}
.qc-total{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line-strong);padding-top:11px;margin-top:4px}
.qc-total span{font-size:13px;color:var(--muted)}
.qc-total b{font-family:var(--serif);font-size:24px;color:var(--ink)}
#qc_use{margin-top:12px;width:100%}
@media(max-width:640px){ .qc-grid{grid-template-columns:repeat(2,1fr)} }

/* refresh button in nav */
.navrefresh{margin-left:auto;flex:none;font-size:16px;line-height:1;padding:6px 12px !important;color:var(--gold-deep)}
.navrefresh.spin{animation:spin360 .6s ease}
@keyframes spin360{from{transform:rotate(0)}to{transform:rotate(360deg)}}

/* ============================================================
   UPDATE #41 — calculator: rates section + save defaults
   ============================================================ */
.qc-advance{margin-top:12px;border-top:1px dashed var(--line-strong);padding-top:10px}
.qc-rates-toggle{background:none;border:none;cursor:pointer;font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--gold-deep);padding:2px 0}
.qc-rates-toggle .fnote{color:var(--muted);letter-spacing:0}
.qc-rates{margin-top:10px}
.qc-rates #qc_savedefaults{margin-top:10px}

/* ============================================================
   UPDATE #41 — Quote Calculator screen
   ============================================================ */
.calcpage{display:grid;gap:14px;margin-bottom:16px}
.calccard{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:var(--shadow)}
.cc-h{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:12px}
.cc-h .fnote{color:var(--muted);text-transform:none;letter-spacing:0;font-family:var(--sans)}
.pave-wrap{display:flex;gap:8px}
.pave-wrap select{flex:none;width:auto}
.pave-wrap input{flex:1}
.calc-defnote{margin-top:10px;font-size:12px;color:var(--muted);line-height:1.5}
.calcref{display:flex;flex-wrap:wrap;gap:10px;min-height:40px;align-items:center}
.calcref-empty{font-size:12.5px;color:var(--muted)}
.calcref-img{position:relative;width:110px;height:110px;border-radius:12px;overflow:hidden;border:1px solid var(--line-strong)}
.calcref-img img{width:100%;height:100%;object-fit:cover;cursor:zoom-in}
.calcref-x{position:absolute;top:5px;right:5px;width:22px;height:22px;border:none;border-radius:50%;background:rgba(20,16,10,.6);color:#fff;font-size:15px;cursor:pointer}
.calcresult{position:sticky;bottom:0;background:linear-gradient(180deg,#FFFDF8,#FBF6EC);border:1px solid var(--gold);border-radius:16px;padding:18px;box-shadow:0 -6px 24px rgba(120,100,60,.1)}
.cr-rows{display:grid;gap:6px;margin-bottom:12px}
.cr-row{display:flex;justify-content:space-between;font-size:13px;color:#6E6558}
.cr-row b{color:var(--ink);font-weight:600}
.cr-row.sub{border-top:1px solid var(--line-strong);padding-top:7px;margin-top:3px}
.cr-final{display:flex;justify-content:space-between;align-items:center;border-top:2px solid var(--gold);padding-top:12px;margin-bottom:14px}
.cr-final span{font-size:14px;color:var(--muted)}
.cr-final b{font-family:var(--serif);font-size:34px;color:var(--ink)}
#c_build{width:100%}
@media(max-width:640px){ .cr-final b{font-size:28px} }

/* ============================================================
   UPDATE #42 — Referral engine (owner + friend offer + VIP dash)
   ============================================================ */
/* owner: referral cards */
.refgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin-bottom:16px}
.refcard{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:var(--shadow);cursor:pointer;transition:transform .14s,border-color .15s}
.refcard:hover{transform:translateY(-2px);border-color:var(--line-strong)}
.rc-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.rc-name{font-family:var(--serif);font-size:19px;color:var(--ink)}
.rc-off{font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);background:var(--line);padding:2px 8px;border-radius:8px}
.rc-stats{display:flex;gap:16px;margin-bottom:12px}
.rc-stats div{display:flex;flex-direction:column}
.rc-stats b{font-family:var(--serif);font-size:22px;color:var(--ink);line-height:1}
.rc-stats span{font-size:11px;color:var(--muted);margin-top:2px}
.rc-reward{font-size:12px;color:#6E6558;border-top:1px solid var(--line);padding-top:10px}
/* owner: detail modal bits */
.rd-links{display:grid;gap:8px}
.rd-linkrow{display:flex;justify-content:space-between;align-items:center;gap:12px;background:var(--paper);border:1px solid var(--line);border-radius:11px;padding:11px 13px}
.rd-linkrow b{font-size:13px;color:var(--ink);display:block}
.rd-linkrow span{font-size:11.5px;color:var(--muted)}
.rd-add{display:flex;gap:8px;margin-bottom:12px}
.rd-add input{flex:1;padding:9px 11px;border:1px solid var(--line-strong);border-radius:9px;font-size:13px}
.rd-friends{display:grid;gap:8px}
.rd-frow{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;background:var(--card);border:1px solid var(--line);border-radius:10px}
.rd-fn{display:flex;align-items:center;gap:10px}
.rd-fn b{font-size:13.5px;color:var(--ink)}
.rd-chip{font-family:var(--mono);font-size:10px;letter-spacing:.05em;padding:2px 8px;border-radius:8px;background:var(--line);color:var(--muted)}
.rd-chip.ok{background:#EAF4EC;color:#3C7A4E}
.rf-active{display:flex;align-items:center;gap:8px;font-size:13px;color:#6E6558;margin-top:10px}

/* friend offer page — reuses .certwrap dark-cream backdrop */
.refoffer{width:100%;max-width:460px;text-align:center;background:linear-gradient(180deg,#FFFDF8,#FBF6EC);
  border:1px solid var(--gold);border-radius:20px;padding:42px 34px 34px;
  box-shadow:0 30px 80px rgba(120,95,40,.22),inset 0 0 0 6px rgba(198,166,103,.10),inset 0 0 0 7px rgba(198,166,103,.26)}
.ro-seal{font-size:30px;color:var(--gold-deep);animation:gemGlow 3s ease-in-out infinite}
.ro-brand{font-family:var(--serif);font-size:25px;color:var(--ink);margin-top:6px}
.ro-tag{font-family:var(--mono);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--gold-deep);margin-top:4px}
.ro-title{font-family:var(--serif);font-style:italic;font-size:22px;color:var(--gold-deep);margin:22px 0 10px}
.ro-sub{font-size:13px;line-height:1.6;color:#6E6558;max-width:400px;margin:0 auto 20px}
.ro-reward{background:var(--gold-soft);border-radius:14px;padding:18px;margin-bottom:20px}
.ro-reward span{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold-deep)}
.ro-reward b{display:block;font-family:var(--serif);font-size:34px;color:var(--ink);margin:4px 0}
.ro-reward small{font-size:12px;color:#6E6558}
.ro-cta{display:inline-block;width:100%;text-decoration:none;text-align:center}
.ro-foot{margin-top:16px;font-size:11px;color:var(--muted)}

/* VIP dashboard */
.vipdash{width:100%;max-width:480px;text-align:center;background:linear-gradient(180deg,#FFFDF8,#FBF6EC);
  border:1px solid var(--gold);border-radius:20px;padding:40px 32px 32px;
  box-shadow:0 30px 80px rgba(120,95,40,.2),inset 0 0 0 6px rgba(198,166,103,.09)}
.vd-seal{font-size:28px;color:var(--gold-deep);animation:gemGlow 3s ease-in-out infinite}
.vd-brand{font-family:var(--mono);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--gold-deep);margin-top:6px}
.vd-title{font-family:var(--serif);font-size:26px;color:var(--ink);margin:14px 0 6px}
.vd-sub{font-size:13px;line-height:1.6;color:#6E6558;max-width:380px;margin:0 auto 22px}
.vd-stats{display:flex;justify-content:center;gap:14px;margin-bottom:22px}
.vd-stat{flex:1;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 8px}
.vd-stat b{display:block;font-family:var(--serif);font-size:28px;color:var(--ink);line-height:1}
.vd-stat span{font-size:11px;color:var(--muted);margin-top:4px;display:block}
.vd-stat.gold{background:var(--gold-soft);border-color:var(--gold)}
.vd-share{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:20px;text-align:left}
.vd-share-h{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep)}
.vd-share-sub{font-size:12px;color:#6E6558;margin:5px 0 10px;line-height:1.5}
.vd-linkbox{display:flex;gap:8px}
.vd-linkbox input{flex:1;padding:9px 11px;border:1px solid var(--line-strong);border-radius:9px;font-family:var(--mono);font-size:11.5px;color:var(--ink);background:var(--card)}
.vd-list-h,.vd-empty{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:10px;text-align:left}
.vd-empty{text-transform:none;letter-spacing:0;font-family:var(--sans);font-size:13px;line-height:1.5;color:#6E6558}
.vd-list{display:grid;gap:7px;margin-bottom:18px}
.vd-frow{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;background:var(--card);border:1px solid var(--line);border-radius:10px}
.vd-fn{font-size:13.5px;color:var(--ink)}
.vd-fs{font-family:var(--mono);font-size:11px;color:var(--muted)}
.vd-fs.ok{color:#3C7A4E}
.vd-foot{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-deep);margin-top:8px}

/* ============================================================
   UPDATE #43 — Instant Design Estimate (public)
   ============================================================ */
.estimate{width:100%;max-width:480px;text-align:center;background:linear-gradient(180deg,#FFFDF8,#FBF6EC);
  border:1px solid var(--gold);border-radius:20px;padding:40px 32px 32px;
  box-shadow:0 30px 80px rgba(120,95,40,.2),inset 0 0 0 6px rgba(198,166,103,.09)}
.es-seal{font-size:28px;color:var(--gold-deep);animation:gemGlow 3s ease-in-out infinite}
.es-brand{font-family:var(--serif);font-size:24px;color:var(--ink);margin-top:6px}
.es-tag{font-family:var(--mono);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--gold-deep);margin-top:4px}
.es-title{font-family:var(--serif);font-style:italic;font-size:22px;color:var(--gold-deep);margin:20px 0 8px}
.es-sub{font-size:13px;line-height:1.6;color:#6E6558;max-width:400px;margin:0 auto 22px}
.es-drop{border:2px dashed var(--gold);border-radius:16px;padding:8px;cursor:pointer;background:var(--paper);transition:background .15s,border-color .15s;overflow:hidden}
.es-drop:hover{background:var(--gold-soft)}
.es-drop-inner{padding:34px 16px;display:flex;flex-direction:column;align-items:center;gap:6px}
.es-drop-ico{font-size:26px;color:var(--gold-deep)}
.es-drop-t{font-size:14px;color:var(--ink);font-weight:600}
.es-drop-s{font-size:11.5px;color:var(--muted)}
.es-preview{width:100%;max-height:280px;object-fit:contain;border-radius:12px;display:block}
.es-result{margin-top:18px}
.es-reading{display:flex;align-items:center;justify-content:center;gap:10px;font-size:14px;color:#6E6558;padding:16px}
.es-spin{color:var(--gold);animation:spin360 1.1s linear infinite;display:inline-block}
.es-seen-h{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold-deep);margin-bottom:8px}
.es-seen{font-size:14px;line-height:1.6;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;text-align:left;margin-bottom:16px}
.es-cta{display:inline-block;width:100%;text-decoration:none;text-align:center}
.es-note{margin-top:12px;font-size:11.5px;color:var(--muted);line-height:1.5}
.es-err{font-size:13.5px;color:#B0522F;background:#FDF2EE;border:1px solid #F0D9C8;border-radius:12px;padding:14px 16px;line-height:1.5}
.es-debug{margin-top:8px;font-family:var(--mono);font-size:10.5px;color:var(--muted);word-break:break-word;opacity:.7}

/* spec rows on the estimate result */
.es-specs{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:6px 16px;text-align:left;margin-bottom:16px}
.es-specrow{display:flex;justify-content:space-between;gap:14px;padding:10px 0;border-bottom:1px dashed var(--line-strong);font-size:13.5px}
.es-specrow:last-child{border-bottom:none}
.es-specrow span{color:var(--muted)}
.es-specrow b{color:var(--ink);font-weight:600;text-align:right}
.es-specnote{font-size:13px;color:#6E6558;padding:10px 0;line-height:1.5;font-style:italic}

/* ============================================================
   UPDATE #44 — full-blown estimate page (price + aesthetics)
   ============================================================ */
.es-rule{display:flex;align-items:center;justify-content:center;gap:12px;margin:18px 0;color:var(--gold)}
.es-rule::before,.es-rule::after{content:"";height:1px;width:60px;background:linear-gradient(90deg,transparent,var(--gold),transparent)}
.es-rule span{font-size:12px}
.es-rule.end{margin:20px 0 4px}
.es-welcome{font-size:13.5px;line-height:1.6;color:#6E6558;text-align:center;margin-bottom:12px}
.es-summary{font-family:var(--serif);font-style:italic;font-size:16px;line-height:1.5;color:var(--gold-deep);text-align:center;margin-bottom:18px;padding:0 6px}
.es-price{background:linear-gradient(180deg,var(--gold-soft),#F3E7C8);border:1px solid var(--gold);border-radius:16px;padding:22px 18px;text-align:center;margin:18px 0}
.es-price-l{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold-deep)}
.es-price-v{font-family:var(--serif);font-size:34px;color:var(--ink);margin:6px 0 4px;line-height:1.1}
.es-price-s{font-size:11.5px;color:#7A6E52}
.es-route{display:flex;align-items:center;justify-content:center;gap:12px;margin:16px 0;font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--gold-deep)}
.es-route-line{color:var(--gold)}
.es-route-city{color:#6E6558}

/* ============================================================
   UPDATE #45 — Instant Estimate, redesigned (cinematic, mobile-first)
   A midnight-jewel canvas with champagne gold — like opening a
   velvet ring box under warm light. This is the public front door.
   ============================================================ */
body.estimate-mode{background:#0E0B08}
body.estimate-mode header,
body.estimate-mode .topbar,
body.estimate-mode #topbar{display:none !important}
body.estimate-mode #app{padding:0 !important;max-width:none !important}

.esx{
  min-height:100vh;
  background:
    radial-gradient(120% 80% at 50% -10%, rgba(198,166,103,.16), transparent 55%),
    radial-gradient(90% 60% at 50% 110%, rgba(120,90,40,.14), transparent 60%),
    linear-gradient(180deg, #17110B 0%, #0E0B08 45%, #0B0906 100%);
  display:flex;align-items:flex-start;justify-content:center;
  padding:clamp(16px,5vw,48px) clamp(14px,4vw,32px) 60px;
}
.esx-card{
  position:relative;width:100%;max-width:520px;
  background:linear-gradient(180deg, rgba(30,24,17,.72), rgba(18,14,10,.86));
  border:1px solid rgba(198,166,103,.28);
  border-radius:26px;
  padding:clamp(26px,6vw,44px) clamp(20px,5vw,40px) clamp(28px,6vw,40px);
  box-shadow:0 40px 120px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,240,210,.08);
  overflow:hidden;
  backdrop-filter:blur(6px);
}
.esx-glow{position:absolute;top:-40%;left:50%;transform:translateX(-50%);width:130%;height:70%;
  background:radial-gradient(closest-side, rgba(224,196,132,.20), transparent 70%);pointer-events:none;filter:blur(8px)}

/* header */
.esx-head{text-align:center;position:relative;z-index:1}
.esx-mark{font-size:22px;color:#E7CE9A;text-shadow:0 0 18px rgba(224,196,132,.5);animation:esxTwinkle 3.4s ease-in-out infinite}
@keyframes esxTwinkle{0%,100%{opacity:.75;transform:scale(.94)}50%{opacity:1;transform:scale(1.06)}}
.esx-brand{font-family:var(--serif,'Fraunces',serif);font-size:clamp(24px,6vw,30px);color:#F6ECD6;letter-spacing:.01em;margin-top:8px;font-weight:500}
.esx-tag{font-family:var(--mono,'IBM Plex Mono',monospace);font-size:10px;letter-spacing:.28em;color:#C6A667;text-transform:uppercase;margin-top:6px}

/* hero */
.esx-hero{text-align:center;margin-top:clamp(22px,6vw,34px);position:relative;z-index:1}
.esx-hero-eyebrow{font-family:var(--mono,monospace);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:#9A8256;margin-bottom:14px}
.esx-hero-title{font-family:var(--serif,'Fraunces',serif);font-weight:400;font-size:clamp(30px,9vw,46px);line-height:1.08;color:#FBF3E2;margin:0;letter-spacing:-.01em}
.esx-hero-title em{font-style:italic;color:#E7CE9A;display:inline-block}
.esx-hero-sub{font-size:clamp(13px,3.6vw,15px);line-height:1.6;color:#B8AA92;max-width:380px;margin:16px auto 0}

/* upload */
.esx-drop{display:block;width:100%;margin-top:clamp(24px,6vw,32px);cursor:pointer;position:relative;z-index:1;
  background:linear-gradient(180deg, rgba(224,196,132,.06), rgba(224,196,132,.02));
  border:1.5px dashed rgba(198,166,103,.5);border-radius:20px;
  padding:clamp(28px,7vw,40px) 20px;transition:border-color .2s, background .2s, transform .12s;
  font-family:inherit}
.esx-drop:hover{border-color:#E7CE9A;background:linear-gradient(180deg, rgba(224,196,132,.12), rgba(224,196,132,.04))}
.esx-drop:active{transform:scale(.99)}
.esx-drop-inner{display:flex;flex-direction:column;align-items:center;gap:12px}
.esx-drop-ring{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#E7CE9A;
  background:radial-gradient(circle, rgba(224,196,132,.18), rgba(224,196,132,.04));
  box-shadow:0 0 30px rgba(224,196,132,.18), inset 0 0 0 1px rgba(224,196,132,.3)}
.esx-drop-t{font-family:var(--serif,serif);font-size:clamp(17px,4.6vw,20px);color:#F6ECD6}
.esx-drop-s{font-size:12px;color:#8E7F68;letter-spacing:.02em}
.esx-preview{width:100%;max-height:340px;object-fit:contain;border-radius:14px;display:block}

/* trust row */
.esx-trust{display:flex;flex-wrap:wrap;justify-content:center;gap:14px;margin-top:22px;position:relative;z-index:1}
.esx-trust span{font-family:var(--mono,monospace);font-size:10px;letter-spacing:.08em;color:#8E7F68;text-transform:uppercase}

/* reading state */
.esx-reading{display:flex;flex-direction:column;align-items:center;gap:16px;padding:34px 0;color:#C6A667;font-size:14px;font-family:var(--mono,monospace);letter-spacing:.05em}
.esx-orbit{position:relative;width:44px;height:44px;border-radius:50%;border:1px solid rgba(198,166,103,.25)}
.esx-orbit-dot{position:absolute;top:-3px;left:50%;width:7px;height:7px;margin-left:-3.5px;border-radius:50%;background:#E7CE9A;box-shadow:0 0 12px #E7CE9A;
  transform-origin:3.5px 25px;animation:esxOrbit 1s linear infinite}
@keyframes esxOrbit{to{transform:rotate(360deg)}}

/* result */
.esx-result{margin-top:6px;position:relative;z-index:1;animation:esxFade .6s ease both}
@keyframes esxFade{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.esx-res-rule{display:flex;align-items:center;justify-content:center;gap:14px;margin:24px 0 18px;color:#C6A667}
.esx-res-rule::before,.esx-res-rule::after{content:"";height:1px;width:70px;background:linear-gradient(90deg,transparent,rgba(198,166,103,.6),transparent)}
.esx-res-rule.end{margin:22px 0 0}
.esx-welcome{text-align:center;font-size:13px;line-height:1.6;color:#B8AA92;margin-bottom:14px}
.esx-summary{font-family:var(--serif,serif);font-style:italic;font-size:clamp(16px,4.6vw,19px);line-height:1.5;color:#E7CE9A;text-align:center;margin-bottom:22px}
.esx-seen-h{font-family:var(--mono,monospace);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:#9A8256;text-align:center;margin-bottom:12px}
.esx-specs{background:rgba(224,196,132,.05);border:1px solid rgba(198,166,103,.18);border-radius:14px;padding:6px 16px;margin-bottom:20px}
.esx-specrow{display:flex;justify-content:space-between;gap:14px;padding:12px 0;border-bottom:1px solid rgba(198,166,103,.12);font-size:14px}
.esx-specrow:last-child{border-bottom:none}
.esx-specrow span{color:#8E7F68}
.esx-specrow b{color:#F6ECD6;font-weight:600;text-align:right}

/* the price — the signature moment */
.esx-price{position:relative;text-align:center;padding:26px 18px;margin-bottom:20px;border-radius:18px;
  background:linear-gradient(180deg, rgba(224,196,132,.16), rgba(198,166,103,.06));
  border:1px solid rgba(224,196,132,.4);
  box-shadow:0 0 40px rgba(224,196,132,.12), inset 0 1px 0 rgba(255,240,210,.14)}
.esx-price-l{font-family:var(--mono,monospace);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:#C6A667}
.esx-price-v{font-family:var(--serif,serif);font-size:clamp(32px,10vw,46px);color:#FBF3E2;line-height:1.05;margin:8px 0 6px;letter-spacing:-.01em}
.esx-price-dash{color:#C6A667;margin:0 6px;font-size:.7em;vertical-align:middle}
.esx-price-s{font-size:11px;color:#9A8256}

/* route */
.esx-route{display:flex;align-items:center;justify-content:center;gap:14px;margin-bottom:22px;
  font-family:var(--mono,monospace);font-size:11px;letter-spacing:.06em;color:#9A8256}
.esx-route-plane{color:#E7CE9A}

/* CTA — WhatsApp */
.esx-cta{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;
  text-decoration:none;text-align:center;font-family:var(--serif,serif);font-size:clamp(15px,4.2vw,17px);
  color:#1A140C;padding:17px 20px;border-radius:14px;
  background:linear-gradient(180deg, #EBD3A0, #C6A667);
  box-shadow:0 12px 30px rgba(198,166,103,.35), inset 0 1px 0 rgba(255,255,255,.4);
  transition:transform .12s, box-shadow .2s;font-weight:600}
.esx-cta:hover{transform:translateY(-2px);box-shadow:0 18px 40px rgba(198,166,103,.45)}
.esx-cta:active{transform:translateY(0)}
.esx-cta-ico{font-size:11px;transform:rotate(0)}
.esx-note{text-align:center;font-size:11.5px;line-height:1.6;color:#7E7057;margin-top:16px}
.esx-err{background:rgba(176,82,47,.12);border:1px solid rgba(176,82,47,.35);color:#E0A583;border-radius:14px;padding:18px;font-size:14px;line-height:1.5;text-align:center}
.esx-debug{margin-top:10px;font-family:var(--mono,monospace);font-size:10px;color:#5E523F;word-break:break-word;text-align:center;opacity:.6}

@media (max-width:420px){
  .esx-card{border-radius:20px}
  .esx-trust{gap:10px}
}

/* ============================================================
   UPDATE #46 — Design Estimates (owner screen)
   ============================================================ */
.est-linkcard{display:flex;gap:18px;align-items:center;justify-content:space-between;flex-wrap:wrap;
  background:linear-gradient(135deg,#1B1610,#2A2118);border:1px solid rgba(198,166,103,.35);border-radius:16px;
  padding:20px 22px;margin-bottom:16px;box-shadow:0 10px 30px rgba(120,95,40,.18)}
.est-linkleft{flex:1;min-width:260px}
.est-linkh{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#E7CE9A}
.est-linksub{font-size:12.5px;color:#B8AA92;margin:6px 0 12px;line-height:1.5}
.est-linkbox{display:flex;gap:8px;max-width:520px}
.est-linkbox input{flex:1;padding:10px 12px;border:1px solid rgba(198,166,103,.35);border-radius:9px;
  font-family:var(--mono);font-size:12px;color:#F6ECD6;background:rgba(0,0,0,.25)}
.est-linkcard .btn.ghost{color:#E7CE9A;border-color:rgba(198,166,103,.5);background:transparent}
.est-stat{display:flex;gap:14px;margin-bottom:18px}
.est-stat div{flex:1;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 18px}
.est-stat b{font-family:var(--serif);font-size:26px;color:var(--ink);display:block;line-height:1}
.est-stat span{font-size:11.5px;color:var(--muted);margin-top:4px;display:block}
.est-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;margin-bottom:16px}
.est-card{background:var(--card);border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:var(--shadow);transition:transform .14s,border-color .15s}
.est-card:hover{transform:translateY(-2px);border-color:var(--line-strong)}
.est-img{aspect-ratio:1;background:var(--paper);cursor:zoom-in;overflow:hidden}
.est-img img{width:100%;height:100%;object-fit:cover;display:block}
.est-noimg{display:flex;align-items:center;justify-content:center;font-size:30px;color:var(--gold);cursor:default}
.est-body{padding:14px 15px}
.est-type{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--gold-deep)}
.est-spec{font-size:13px;color:var(--ink);font-weight:600;margin:5px 0 6px;line-height:1.4}
.est-sum{font-size:11.5px;color:#6E6558;line-height:1.5;margin-bottom:10px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.est-foot{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding-top:9px}
.est-price{font-family:var(--serif);font-size:15px;color:var(--ink)}
.est-when{font-size:10.5px;color:var(--muted)}

/* Share-as-card button */
#q_card{background:linear-gradient(180deg,#EBD3A0,#C6A667);color:#2A241C;border:none;font-weight:600}
#q_card:hover{filter:brightness(1.04)}

/* ============================================================
   UPDATE #47 — desktop card-share helper
   ============================================================ */
.cardshare-note{font-size:14px;color:var(--ink);line-height:1.5;margin-bottom:12px}
.cardshare-steps{margin:0 0 16px;padding-left:20px;display:grid;gap:7px}
.cardshare-steps li{font-size:13.5px;color:#6E6558;line-height:1.5}
.cardshare-steps b{color:var(--ink)}
.cardshare-preview{width:100%;max-width:280px;display:block;margin:0 auto 16px;border-radius:12px;border:1px solid var(--line-strong);box-shadow:var(--shadow);cursor:grab}
.cardshare-preview:active{cursor:grabbing}
.cardshare-linkbox{display:flex;gap:8px}
.cardshare-linkbox input{flex:1;padding:10px 12px;border:1px solid var(--line-strong);border-radius:9px;font-family:var(--mono);font-size:12px;color:var(--ink);background:var(--paper)}

/* ============================================================
   UPDATE #48 — Profit & Costs in Money tab
   ============================================================ */
.profitsec{margin-top:26px}
.ms-hint{font-family:var(--sans);font-size:12px;color:var(--muted);font-weight:400;text-transform:none;letter-spacing:0;margin-left:8px}
.profitband{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;margin:14px 0 20px}
.profitcard{background:linear-gradient(160deg,#fff,var(--champagne-soft));border:1px solid var(--line-strong);border-radius:16px;padding:18px;box-shadow:var(--shadow)}
.pf-cur{font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--gold-deep)}
.pf-big{margin:8px 0 12px}
.pf-big span{font-family:var(--serif);font-size:30px;color:var(--ink);display:block;line-height:1}
.pf-big small{font-size:11.5px;color:var(--muted)}
.pf-rows{display:grid;gap:6px;border-top:1px solid var(--line);padding-top:10px}
.pf-row{display:flex;justify-content:space-between;font-size:13px;color:#6E6558}
.pf-row b{color:var(--ink)}
.pf-row.sub{border-top:1px solid var(--line);padding-top:7px;margin-top:2px}
.pf-row b.good{color:#3C7A4E}.pf-row b.ok{color:#B7924B}.pf-row b.low{color:#B0522F}
.costlist{display:grid;gap:12px}
.costrow{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px}
.cr-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px}
.cr-client{font-size:15px;font-weight:600;color:var(--ink)}
.cr-sub{font-size:12px;color:var(--muted);margin-top:2px}
.cr-profit{font-family:var(--serif);font-size:17px;white-space:nowrap}
.cr-profit.good{color:#3C7A4E}.cr-profit.ok{color:#B7924B}.cr-profit.low{color:#B0522F}.cr-profit.none{color:var(--muted);font-family:var(--sans);font-size:13px}
.cr-costs{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}
.cr-costs label{display:flex;flex-direction:column;font-size:11px;color:var(--muted);gap:4px;flex:1 1 90px}
.cr-costs input{padding:9px 10px;border:1px solid var(--line-strong);border-radius:9px;font-size:14px;width:100%}
.cr-costs .cr-save{flex:0 0 auto;align-self:flex-end}
@media(max-width:640px){ .cr-costs label{flex:1 1 calc(50% - 5px)} }

/* ============================================================
   UPDATE #49 — final polish: transitions, focus, loading, empties
   ============================================================ */
/* smooth page-content fade on every render */
#app{animation:appFade .32s ease both}
@keyframes appFade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* elegant focus rings (accessibility + feels premium) */
input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible{
  outline:2px solid rgba(198,166,103,.55);outline-offset:2px;border-radius:8px}

/* buttons: subtle lift on press for tactility */
.btn{transition:transform .1s ease, box-shadow .18s ease, background .18s ease}
.btn:active{transform:translateY(1px)}

/* loading shimmer skeleton (use class 'sk' on a placeholder block) */
.sk{position:relative;overflow:hidden;background:var(--champagne-soft);border-radius:12px}
.sk::after{content:"";position:absolute;inset:0;transform:translateX(-100%);
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.6),transparent);
  animation:skshimmer 1.3s infinite}
@keyframes skshimmer{100%{transform:translateX(100%)}}

/* refined empty states */
.empty{text-align:center;padding:48px 24px;color:var(--muted)}
.empty h3{font-family:var(--serif);font-size:22px;color:var(--ink);margin-bottom:8px;font-weight:500}
.empty p{font-size:14px;line-height:1.6;max-width:420px;margin:0 auto}

/* respect reduced motion */
@media(prefers-reduced-motion:reduce){
  #app,.btn,.reveal-card{animation:none!important;transition:none!important}
}

/* ============================================================
   UPDATE #50 — social links across all footers
   ============================================================ */
.bf-socials{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:8px;font-family:var(--mono);font-size:12px}
.bf-socials a{color:var(--gold-deep);text-decoration:none}
.bf-socials a:hover{text-decoration:underline}
.bf-socials span{color:var(--muted)}
.cv-socials{display:flex;flex-wrap:wrap;justify-content:center;gap:14px;margin-top:14px}
.cv-socials a{color:var(--gold-deep);text-decoration:none;font-size:13px;font-weight:500}
.cv-socials a:hover{text-decoration:underline}
.ro-socials{margin-top:12px;font-size:12px;color:var(--muted)}
.ro-socials a{color:#C6A667;text-decoration:none}
.ro-socials a:hover{text-decoration:underline}
.esx-socials{margin-top:14px;text-align:center;font-family:var(--mono,monospace);font-size:11.5px;color:#9A8256}
.esx-socials a{color:#C6A667;text-decoration:none}
.esx-socials a:hover{text-decoration:underline}
