:root{--bg:#070B13;--panel:#0F172A;--panel2:#111C30;--line:#233248;--txt:#F1F5F9;--mut:#94A3B8;--dim:#64748B;--pink:#E91E8C;--cyan:#38BDF8;--vio:#7C3AED;--grn:#34D399;--amb:#F59E0B;--red:#F87171}
*{box-sizing:border-box}html,body{margin:0;height:100%}
body{font-family:'Plus Jakarta Sans',Arial,sans-serif;background:var(--bg);color:var(--txt);font-size:13px}
.bgfx{position:fixed;inset:0;z-index:-2;background:radial-gradient(circle at 12% 8%,rgba(233,30,140,.14),transparent 32%),radial-gradient(circle at 90% 15%,rgba(124,58,237,.14),transparent 30%),radial-gradient(circle at 50% 100%,rgba(56,189,248,.10),transparent 40%),var(--bg)}
button{font-family:inherit}
input,select,textarea{width:100%;background:#080D18;border:1px solid #243247;border-radius:9px;padding:9px 11px;color:var(--txt);outline:none;font-family:inherit;font-size:12px}
input:focus,select:focus,textarea:focus{border-color:var(--pink);box-shadow:0 0 0 3px rgba(233,30,140,.10)}
textarea{resize:vertical;min-height:80px;line-height:1.55;max-width:100%;overflow:auto}
textarea.jr-texto-longo{min-height:220px;max-height:none;overflow:auto;white-space:pre-wrap}
textarea.jr-texto-gigante{min-height:360px;max-height:640px;overflow:auto;white-space:pre-wrap}
.jr-previa-rica{min-height:360px;max-height:54vh;overflow:auto;background:#07101f;border:1px solid #263854;border-radius:11px;padding:20px 22px;color:#eaf2ff;line-height:1.72;font-size:13px;outline:none}
.jr-previa-rica h4{margin:20px 0 8px;color:#fff;font-size:13px;letter-spacing:.08em;text-transform:uppercase;border-left:3px solid #22d3ee;padding-left:10px}
.jr-previa-rica h4:first-child{margin-top:0}.jr-previa-rica p{margin:0 0 12px}.jr-previa-rica ul{margin:4px 0 14px 20px;padding:0}.jr-previa-rica li{margin:5px 0}.jr-previa-rica strong{color:#fff;font-weight:800}
textarea.jr-auto{overflow:hidden;max-height:none}
label.f{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.8px;font-weight:900;color:var(--dim);margin:0 0 5px}
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid #2b3b55;border-radius:9px;padding:8px 13px;font-weight:800;font-size:11.5px;cursor:pointer;color:var(--txt);background:#16233b;transition:.18s}
.btn:hover{transform:translateY(-1px);border-color:#3b4f70}
.btn.p{background:linear-gradient(135deg,var(--pink),var(--vio));border:none;color:#fff}
.btn.c{background:linear-gradient(135deg,#0284C7,var(--cyan));border:none;color:#04121f}
.btn.g{background:linear-gradient(135deg,#059669,var(--grn));border:none;color:#04120D}
.btn.gh{background:transparent;color:var(--mut)}
.btn.sm{padding:5px 9px;font-size:10.5px;border-radius:7px}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}
.jr-ai-field-tools{display:flex;justify-content:flex-end;margin:-2px 0 7px}.jr-ai-field-trigger{border:1px solid rgba(167,139,250,.42);border-radius:7px;background:rgba(124,58,237,.1);color:#DDD6FE;padding:4px 8px;font:800 9.5px/1.2 'Plus Jakarta Sans',sans-serif;cursor:pointer}.jr-ai-field-trigger:hover{border-color:#A78BFA;background:rgba(124,58,237,.2)}
.jr-ai-field-modal .mbox{width:min(620px,calc(100% - 24px))}.jr-ai-field-modal textarea{min-height:94px}.jr-ai-field-preview{padding:10px;border:1px solid rgba(167,139,250,.32);border-radius:10px;background:#0B1424}
.tag{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:999px;font-size:10px;font-weight:800;white-space:nowrap;max-width:100%}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px}
.hint{font-size:11px;color:var(--dim);line-height:1.55}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
hr.s{border:none;border-top:1px solid var(--line);margin:12px 0}
::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-thumb{background:#22314a;border-radius:6px}::-webkit-scrollbar-track{background:transparent}

/* ---------- login ---------- */
#tela-login{display:flex;min-height:100vh;align-items:center;justify-content:center;padding:20px}
.login-box{width:100%;max-width:400px;background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:28px;box-shadow:0 30px 90px rgba(0,0,0,.5)}
.login-box h1{margin:0 0 4px;font-size:21px}.login-box h1 em{font-style:normal;color:var(--pink)}
.login-box p{margin:0 0 18px;color:var(--dim);font-size:12px}

/* ---------- app shell ---------- */
#app{display:none;height:100vh;flex-direction:column}
.topbar{display:flex;align-items:center;gap:14px;padding:10px 16px;background:rgba(7,11,19,.9);border-bottom:1px solid var(--line);backdrop-filter:blur(14px);z-index:50}
.topbar img{width:34px;height:34px;object-fit:contain}
.topbar .tt b{display:block;font-size:13px}.topbar .tt small{color:var(--dim);font-size:10px}
.topbar .sp{flex:1}
.savestate{font-size:10px;color:var(--dim)}
.main{flex:1;display:flex;min-height:0}
.workzone{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}

/* ---------- pipeline ---------- */
#view-pipeline{flex:1;overflow:auto;padding:16px}
.solband{background:linear-gradient(135deg,rgba(56,189,248,.09),rgba(15,23,42,.6));border:1px solid rgba(56,189,248,.25);border-radius:14px;padding:12px;margin-bottom:16px}
.solrow{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;background:#111C30;border:1px solid var(--line);border-radius:10px;padding:10px;margin-top:8px}
.kanban{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:start}
.kcol{background:rgba(15,23,42,.65);border:1px solid var(--line);border-radius:14px;padding:10px;min-height:120px}
.kcol h4{margin:2px 4px 10px;font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--mut);display:flex;justify-content:space-between}
.kcard{background:var(--panel2);border:1px solid var(--line);border-left:4px solid transparent;border-radius:11px;padding:11px;margin-bottom:8px;cursor:pointer;transition:.18s}
.kcard:hover{border-top-color:rgba(233,30,140,.45);border-right-color:rgba(233,30,140,.45);border-bottom-color:rgba(233,30,140,.45);transform:translateY(-2px)}
.kcard:not(.jr-row-alerta):not(.jr-row-obra):hover{border-left-color:rgba(233,30,140,.45)}
.kcard b{display:block;font-size:12.5px}.kcard .v{color:var(--grn);font-weight:900;font-size:12px;margin-top:3px}
.kcard small{color:var(--dim);font-size:10px}

/* ---------- editor ---------- */
#view-editor{flex:1;display:none;min-height:0;flex-direction:column}
.edhead{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.edhead-main{display:flex;align-items:center;gap:8px;flex:1;min-width:280px;flex-wrap:wrap}
.edhead-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}
.edhead-actions .primary-actions,.edhead-actions .secondary-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.workflow-status{display:flex;align-items:center;gap:8px;padding:8px 16px;background:rgba(15,23,42,.72);border-bottom:1px solid var(--line);overflow-x:auto}
.workflow-status span{white-space:nowrap;font-size:10px;font-weight:900;color:var(--dim);letter-spacing:.35px}
.workflow-status i{height:1px;width:24px;background:#334155;flex:0 0 24px}
.workflow-status span.on{color:#7DD3FC}.workflow-status span.done{color:#6EE7B7}
.jornada-classica{display:none;padding:10px 16px 12px;background:linear-gradient(135deg,rgba(233,30,140,.08),rgba(124,58,237,.08));border-bottom:1px solid rgba(124,58,237,.28)}
.jornada-classica.on{display:block}
.jornada-topo{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.jornada-passos{display:grid;grid-template-columns:repeat(7,minmax(118px,1fr));gap:7px;margin-top:9px}
.jornada-passo{min-height:68px;text-align:left;border:1px solid #263650;background:#0B1424;color:var(--mut);border-radius:11px;padding:9px;cursor:pointer;transition:.18s}
.jornada-passo:hover{border-color:#526b91;transform:translateY(-1px)}
.jornada-passo b{display:block;color:#E2E8F0;font-size:10.5px;line-height:1.35}
.jornada-passo small{display:block;color:var(--dim);font-size:9px;line-height:1.35;margin-top:4px}
.jornada-passo.ok{border-color:rgba(52,211,153,.38);background:rgba(52,211,153,.07)}
.jornada-passo.ok b{color:#A7F3D0}.jornada-passo.at{border-color:rgba(233,30,140,.58);box-shadow:0 0 0 2px rgba(233,30,140,.09)}
.jornada-barra{height:5px;border-radius:999px;background:#16233A;overflow:hidden;margin-top:9px}.jornada-barra i{display:block;height:100%;background:linear-gradient(90deg,var(--pink),var(--vio),var(--grn));transition:width .3s}
.edhead input.title{background:transparent;border:none;font-size:16px;font-weight:900;color:#fff;padding:2px 4px;max-width:340px}
.edhead input.title:focus{box-shadow:none;border-bottom:1px solid var(--pink);border-radius:0}
.edtabs{display:flex;gap:8px;padding:8px 16px;border-bottom:1px solid var(--line);overflow-x:auto;background:rgba(7,11,19,.72)}
/* flex-shrink:0 é o que faltava: sem isso, num celular os 4 grupos (Preparar/
   Compor/Fechar/Acompanhar) encolhiam pra caber lado a lado em vez de a
   barra inteira rolar de lado — cada grupo espremido forçava os próprios
   botões a empilhar verticalmente, virando uma parede de botões antes de
   qualquer conteúdo aparecer ("os botões tomando a tela toda"). */
.edtab-group{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:3px;padding:6px 7px;border:1px solid #1e2b40;background:#0B1424;border-radius:11px}
.edtab-group>span{flex:0 0 100%;padding:0 2px 5px;margin-bottom:2px;color:#7DD3FC;font-size:9.5px;font-weight:900;text-transform:uppercase;letter-spacing:1.1px;border-bottom:1px solid rgba(125,211,252,.16);white-space:nowrap}
.edtab{border:none;background:transparent;color:var(--dim);font-weight:800;font-size:11.5px;padding:9px 13px;border-radius:10px 10px 0 0;cursor:pointer;white-space:nowrap}
.edtab.on{color:#fff;background:#18263e;border:1px solid #355174;border-radius:8px}
.jr-fluxo-essencial{display:flex;align-items:center;gap:6px;padding:9px 16px;border-bottom:1px solid var(--line);background:#0B1424;min-width:0}
.jr-fluxo-passos{display:flex;align-items:center;gap:6px;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.jr-fluxo-passos::-webkit-scrollbar{display:none}
.jr-fluxo-essencial .edtab{flex:0 0 auto;border-radius:9px;border:1px solid #263650;padding:9px 12px}
.jr-fluxo-essencial .edtab.on{border-color:#38BDF8;background:#163047;color:#fff}
.jr-fluxo-essencial .jr-etapas-avancadas{flex:0 0 auto;margin-left:6px;white-space:nowrap;background:#1E293B;border:1px solid #334155;color:#94A3B8;border-radius:9px;padding:9px 12px;font-weight:800;font-size:11.5px;cursor:pointer}
.jr-fluxo-essencial .jr-etapas-avancadas:hover{border-color:#38BDF8;color:#FFF;background:#243247}
#jr-linha-copiada-status:not([hidden]){display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:8px 0;padding:9px 12px;border:1px solid #38BDF877;border-radius:9px;background:#0B2B3A;color:#D7F4FF;font-size:11px}
#jr-linha-copiada-status[hidden]{display:none!important}
body.jr-orc-simples .edtabs,body.jr-orc-simples #workflow-status,body.jr-orc-simples #jr-cockpit-actions-bar,body.jr-orc-simples #cockpit-cerebro-card{display:none!important}
body.jr-orc-simples #cockpit-cerebro-card+.jr-cockpit-sep{display:none!important}
#pipe-outras-acoes .jr-pipe-menu-label{grid-column:1/-1;min-height:0;padding:5px 3px 0;color:#94a3b8;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.7px}
#pipe-organizar .jr-pipe-controls{margin:0;padding:0;border:0;background:transparent}
#pipe-organizar #pipe-resumo{flex-basis:100%;grid-column:1/-1;margin:3px 0 0}
#pipe-filtro-ativo{color:#38bdf8;font-size:10px;font-weight:700}
@media(max-width:760px){.jr-fluxo-essencial{padding:8px;gap:5px}.jr-fluxo-essencial .edtab{min-height:44px}.jr-fluxo-essencial .jr-etapas-avancadas{margin-left:0;min-height:44px}}
.edbody{flex:1;overflow:auto;padding:16px;min-height:0}
.pane{display:none;max-width:1080px;margin:0 auto}
.pane.on{display:block}

/* Botões que viviam soltos no rodapé (versão, busca rápida ⌘K, ações da
   tela) sobem pra topbar — mesmo ajuste que admin.html/cliente.html já
   fizeram pro mesmo problema ("botões soltos pela tela"). Aqui a doca de
   ações continua útil (não existe outra navegação inferior no editor), então
   em vez de só escondida ela vira o botão "🧭 Ações" nativo da topbar, que
   aciona a mesma folha de atalhos/ajuda por baixo. */
#jr83-doca{display:none!important}
#topo-embutidos{display:flex;align-items:center;gap:6px}
.jr-topo-embutido{
  position:static!important;inset:auto!important;right:auto!important;left:auto!important;bottom:auto!important;top:auto!important;
  display:inline-flex!important;align-items:center;justify-content:center;
  width:auto!important;height:auto!important;min-height:34px;border-radius:9px!important;
  padding:7px 12px!important;font:800 10.5px/1 system-ui,-apple-system,Segoe UI,Arial!important;letter-spacing:.3px!important;
  background:rgba(255,255,255,.05)!important;border:1px solid #263650!important;color:#CBD5E1!important;
  box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;z-index:auto!important;
}
#jr-ux-launcher.jr-topo-embutido:after{content:"Buscar";margin-left:6px;font-weight:800}
@media(max-width:760px){#topo-embutidos{display:none}}
/* "🌐 Visualizar" e "🚀 Enviar / Link" (.topbar, nunca escondidos pela
   gaveta lateral — ver comentário acima, linha ~333) ficavam com o
   rótulo de texto inteiro sempre visível, mesmo no celular — junto com
   "← Pipeline" e "☰ Ferramentas" na mesma fileira, a soma nunca cabia
   numa tela de ~390px; a "Enviar / Link" saía cortada na borda da tela,
   só alcançável rolando a barra de lado (sem nenhuma pista visual de
   que ela rola). Achado numa varredura pedida pelo Júnior ("acho que
   varias coisas para arrumar no orcamento pro"), 2026-09-16 — o próprio
   AGENTS.md já registrava a intenção ("em telas estreitas, os dois
   viram ícones compactos") mas a regra nunca tinha sido escrita de
   verdade. Escondendo só o rótulo (title= já dá o nome completo por
   acessibilidade), os dois cabem como ícones ao lado dos outros botões
   sem precisar rolar. */
@media(max-width:760px){#bt-top-visualizar .jr-btn-lb,#bt-top-enviar .jr-btn-lb{display:none}}
@media(max-width:1080px){#topo-acoes-full .jr-btn-lb{display:none}}
/* Padrões/Admin/Sair, sempre visíveis na topbar em telas largas — pedido
   do Júnior (2026-09-17): "tem que clicar nesse botão três pontinhos pra
   aparecer... tira esse botão e coloca ele nessa barra inteira, que tem
   espaço pra deixar ele nessa barra". Antes disso (comentário logo acima
   de #topo-mais no HTML) os 3 botões viraram um "⋯" só de propósito, mas
   só por causa do CELULAR — "num celular pequeno essa fileira inteira
   empurrava o conteúdo pra baixo da metade da tela" — nunca foi um
   problema em desktop, onde sobra espaço na topbar. `#topo-acoes-full`
   (os 3 botões soltos) e `#topo-mais` (o "⋯" antigo, intacto) convivem no
   HTML; o CSS decide qual aparece — nunca os dois ao mesmo tempo. */
#topo-acoes-full{display:flex;gap:6px;flex-wrap:nowrap}
#topo-mais{display:none}
@media(max-width:900px){#topo-acoes-full{display:none}#topo-mais{display:inline-flex}}

/* blocos */
.bloco{background:var(--panel);border:1px solid var(--line);border-radius:14px;margin-bottom:12px;overflow:hidden}
.bloco.aberto{border-color:rgba(56,189,248,.35)}
.bhead{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer}
.bhead .drag{color:#334155;cursor:grab}
.bhead b{flex:1;font-size:13px}
.bhead .bv{color:var(--grn);font-weight:900}
.bbody{display:none;padding:0 14px 14px;border-top:1px solid var(--line)}
.bloco.aberto .bbody{display:block}
.unid{background:#0B1424;border:1px solid var(--line);border-radius:11px;padding:11px;margin-top:10px}
.unid .uh{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.servline{display:flex;gap:6px;align-items:center;margin-bottom:6px;transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease;border-radius:9px;padding:4px 6px;min-height:40px;border:1px solid transparent}
.servline:hover{background:rgba(30,41,59,.42);border-color:rgba(56,189,248,.16)}
.servline:focus-within{background:rgba(15,23,42,.92);border-color:rgba(56,189,248,.35);box-shadow:0 2px 10px rgba(0,0,0,.3)}
.servline input,.servline select{height:33px;box-sizing:border-box;border-radius:8px;padding:5px 8px;font-size:12px;background:#080D18;border:1px solid #243247}
.servline input:focus,.servline select:focus{border-color:var(--pink);box-shadow:0 0 0 2px rgba(233,30,140,.15)}
.servline.aplicado-ia{background:rgba(52,211,153,.10);border:1px solid rgba(52,211,153,.28);border-radius:10px;padding:5px}
.servline.editado-manual{background:rgba(56,189,248,.10);border:1px solid rgba(56,189,248,.28);border-radius:10px;padding:5px}
.badge-aplicado{font-size:9.5px;font-weight:900;border-radius:999px;padding:3px 7px;background:rgba(52,211,153,.18);color:#6EE7B7;white-space:nowrap}
.badge-editado{font-size:9.5px;font-weight:900;border-radius:999px;padding:3px 7px;background:rgba(56,189,248,.18);color:#7DD3FC;white-space:nowrap}
.sug-card{background:#0B1424;border:1px solid var(--line);border-radius:12px;padding:10px;margin-top:8px}
.sug-card.aplicada{border-color:rgba(52,211,153,.45);background:rgba(52,211,153,.08)}
.servline input{flex:1}
.servline .srv-qtd{width:86px!important;flex:0 0 86px}.servline .srv-un{width:92px!important;flex:0 0 92px}.servline .srv-pu{width:112px!important;flex:0 0 112px;text-align:right}.servline .item-qtd{width:86px!important;flex:0 0 86px}.servline .item-un{width:92px!important;flex:0 0 92px}.servline .item-pu{width:112px!important;flex:0 0 112px;text-align:right}
.servline .srv-qtd,.servline .item-qtd,.servline .srv-pu,.servline .item-pu,.servline .price{font-variant-numeric:tabular-nums}
.servline .price{display:inline-flex;align-items:center;justify-content:flex-end;width:105px;color:var(--grn);font-weight:900;font-size:12.5px;text-align:right}
.servline .jr-confirmar-linha{height:33px;padding:0 10px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
@media(min-width:761px){
  .servline .btn.sm.gh:not(.jr-confirmar-linha){opacity:.4;transition:opacity .15s ease,background .15s ease}
  .servline:hover .btn.sm.gh:not(.jr-confirmar-linha),.servline .btn.sm.gh:focus-visible{opacity:1}
}
.ln{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:26px;border-radius:8px;background:rgba(56,189,248,.10);border:1px solid rgba(56,189,248,.20);color:#7DD3FC;font-size:10px;font-weight:900;font-variant-numeric:tabular-nums;flex-shrink:0}
.dupmark{outline:2px solid rgba(245,158,11,.55);background:rgba(245,158,11,.07)!important;border-radius:8px}
.chipbar{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}
.chip{border:1px dashed #33507a;background:rgba(56,189,248,.06);color:#7DD3FC;border-radius:999px;padding:4px 11px;font-size:10.5px;font-weight:700;cursor:pointer}
.chip:hover{background:rgba(56,189,248,.15)}
@media(max-width:760px){.chip{display:inline-flex;align-items:center;min-height:44px;padding:10px 14px}}

/* Cockpit Executivo (HUD do Orçamentista) */
.jr-orc-cockpit{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 18px;margin-bottom:14px;background:rgba(15,23,42,.90);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid rgba(56,189,248,.24);border-radius:14px;box-shadow:0 4px 20px rgba(0,0,0,.35);flex-wrap:wrap}
.jr-cockpit-card{display:flex;flex-direction:column;gap:2px;min-width:90px;transition:transform .16s ease}
.jr-cockpit-card:hover{transform:translateY(-1px)}
.jr-cockpit-label{font-size:9.5px;text-transform:uppercase;letter-spacing:.6px;color:#94A3B8;font-weight:800}
.jr-cockpit-val{font-size:13.5px;font-weight:800;color:#F8FAFC;font-variant-numeric:tabular-nums}
.jr-cockpit-val.jr-cockpit-total{color:var(--grn);font-size:16px;font-weight:900;letter-spacing:-.2px}
.jr-cockpit-val.jr-cockpit-margem{color:#38BDF8}
#cockpit-import-alert{display:none;flex-basis:100%;grid-column:1/-1;padding:9px 12px;border:1px solid rgba(245,158,11,.5);border-radius:10px;background:rgba(120,53,15,.22);color:#FDE68A;font-size:12px;line-height:1.5}
.jr-cockpit-sep{width:1px;height:28px;background:rgba(255,255,255,.12)}
@keyframes jrPulseGlowBio{0%,100%{box-shadow:0 0 5px #10B981}50%{box-shadow:0 0 12px #10B981,0 0 18px rgba(16,185,129,.4)}}
@keyframes jrPulseGlowCerebro{0%,100%{box-shadow:0 0 5px #8B5CF6}50%{box-shadow:0 0 12px #8B5CF6,0 0 18px rgba(139,92,246,.4)}}
.jr-bio-pulse-dot{animation:jrPulseGlowBio 2.2s infinite ease-in-out}
.jr-cerebro-pulse-dot{animation:jrPulseGlowCerebro 2.2s infinite ease-in-out}
@media(max-width:760px){
  .jr-orc-cockpit{position:static;display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:12px}
  .jr-cockpit-sep{display:none}
  .jr-cockpit-card:first-child{grid-column:1/-1;border-bottom:1px solid rgba(255,255,255,.1);padding-bottom:8px}
}

/* Divulgação progressiva nos formulários de apoio */
details.jr147-form-section{background:rgba(15,23,42,.75);border:1px solid var(--line);border-radius:12px;transition:border-color .2s ease,box-shadow .2s ease}
details.jr147-form-section[open]{border-color:rgba(56,189,248,.35);background:rgba(15,23,42,.95);box-shadow:0 4px 14px rgba(0,0,0,.25)}
details.jr147-form-section>summary{cursor:pointer;user-select:none;transition:color .15s ease}
details.jr147-form-section>summary:hover{color:#38bdf8}

/* biblioteca */
.libwrap{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.libcol{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px;max-height:70vh;overflow:auto}
.libitem{display:flex;justify-content:space-between;gap:8px;align-items:center;padding:8px 9px;border-bottom:1px solid #17233a}
.libitem:hover{background:#101c31}
.libitem .d{flex:1;min-width:0}
.libitem b{font-size:12px;display:block}
.libitem small{color:var(--dim);font-size:10px}
.price{color:var(--grn);font-weight:900;white-space:nowrap;font-size:12px}

/* financeiro */
table.fin{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
table.fin th{font-size:10px;text-transform:uppercase;letter-spacing:.6px;color:var(--dim);text-align:left;padding:7px 8px;border-bottom:1px solid var(--line)}
table.fin td{padding:8px;border-bottom:1px solid #16233a;font-size:12px}
table.fin tbody tr{transition:background-color .15s ease}
table.fin tbody tr:hover{background:rgba(30,41,59,.45)}
table.fin input{padding:6px 8px;font-size:12px}
.abcbar{height:9px;border-radius:6px;background:#1a2740;overflow:hidden;margin-top:4px}
.abcbar i{display:block;height:100%}
.fin-fluxo-resumo{margin-bottom:12px;border-color:rgba(56,189,248,.36);background:linear-gradient(135deg,rgba(56,189,248,.08),rgba(124,58,237,.07))}
.fin-fluxo-topo{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.fin-fluxo-passos{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:7px;margin-top:12px}
.fin-fluxo-passo{min-height:70px;border:1px solid #2A3A52;border-radius:11px;background:#0B1424;color:#CBD5E1;padding:9px;text-align:left;cursor:pointer;font:inherit}
.fin-fluxo-passo b{display:block;font-size:10.5px;line-height:1.35}.fin-fluxo-passo small{display:block;margin-top:4px;color:#64748B;font-size:9px;line-height:1.35}
.fin-fluxo-passo.ok{border-color:rgba(52,211,153,.42);background:rgba(52,211,153,.07)}.fin-fluxo-passo.ok b{color:#A7F3D0}
.fin-fluxo-passo.pendente{border-color:rgba(245,158,11,.46);background:rgba(245,158,11,.06)}.fin-fluxo-passo.pendente b{color:#FCD34D}
.fin-etapa{margin:0 0 12px;border:1px solid var(--line);border-radius:14px;background:rgba(15,23,42,.72);overflow:hidden}
.fin-etapa>summary{cursor:pointer;list-style:none;padding:13px 14px;font-weight:900;color:#E2E8F0;display:flex;align-items:center;gap:9px}.fin-etapa>summary::-webkit-details-marker{display:none}
.fin-etapa>summary:after{content:'⌄';margin-left:auto;color:#64748B}.fin-etapa[open]>summary:after{content:'⌃'}
.fin-etapa>summary small{display:block;color:#64748B;font-size:9.5px;font-weight:600;margin-top:2px}.fin-etapa-corpo{padding:0 12px 12px}
.fin-etapa-num{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;flex:0 0 24px;border-radius:8px;background:#18263E;color:#7DD3FC;font-size:10px}
.fin-politica-metodo{display:grid;grid-template-columns:minmax(150px,1.4fr) 110px 130px 150px;gap:8px;align-items:end;padding:9px 0;border-top:1px solid #1E293B}
.fin-politica-metodo:not(.ativo)>:not(:first-child){display:none}.fin-politica-metodo:not(.ativo){grid-template-columns:1fr;opacity:.72}
.fin-previsao{border:1px solid #365570;border-radius:14px;background:linear-gradient(135deg,#122037,#17202d);padding:16px;margin:0 0 12px}.fin-previsao-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:9px;margin-top:12px}.fin-previsao-item{background:#0b1525;border:1px solid #30435d;border-radius:10px;padding:12px}.fin-previsao-item b{display:block;font-size:16px;color:#fff}.fin-previsao-item small{color:#a9bbcc}.fin-preset-actions{display:flex;gap:7px;flex-wrap:wrap;margin:11px 0}.fin-preset-actions button{min-height:38px}
@media(max-width:900px){.fin-fluxo-passos{grid-template-columns:repeat(3,minmax(0,1fr))}.fin-politica-metodo{grid-template-columns:1fr 1fr}.fin-politica-metodo>label:first-child{grid-column:1/-1}}
@media(max-width:560px){.fin-fluxo-passos{display:flex;overflow-x:auto;padding-bottom:4px}.fin-fluxo-passo{flex:0 0 148px}.fin-etapa>summary{align-items:flex-start}.fin-politica-metodo{grid-template-columns:1fr}.fin-politica-metodo>*{grid-column:auto!important}}


.jr-ia-dash{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-top:12px}
.jr-ia-metric{background:linear-gradient(135deg,rgba(124,58,237,.10),rgba(15,23,42,.85));border:1px solid rgba(124,58,237,.28);border-radius:12px;padding:11px}
.jr-ia-metric b{display:block;font-size:16px;margin-top:3px}
.jr-stage{display:flex;gap:8px;align-items:flex-start;margin-top:8px;padding:9px;background:#0B1424;border:1px solid var(--line);border-radius:10px}

/* ---------- cérebro dock ---------- */
#dock{width:360px;flex-shrink:0;border-left:1px solid var(--line);background:linear-gradient(180deg,rgba(124,58,237,.08),rgba(15,23,42,.9));display:flex;flex-direction:column;min-height:0;transition:width .25s}
#dock.min{width:52px}
#dock.min .dockbody,#dock.min .dockfoot,#dock.min .dockhead span{display:none}
.dockhead{display:flex;align-items:center;gap:8px;padding:12px;border-bottom:1px solid var(--line)}
.dockhead .br{width:30px;height:30px;border-radius:9px;background:linear-gradient(135deg,var(--cyan),var(--vio));display:flex;align-items:center;justify-content:center;font-size:16px;cursor:pointer;flex-shrink:0}
.dockhead b{font-size:12.5px}
.dockbody{flex:1;overflow:auto;padding:12px;display:flex;flex-direction:column;gap:10px}
.qa{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.qa button{border:1px solid rgba(56,189,248,.3);background:rgba(56,189,248,.07);color:#A5DDFB;border-radius:9px;padding:8px;font-size:10.5px;font-weight:800;cursor:pointer;text-align:left;line-height:1.3}
.qa button:hover{background:rgba(56,189,248,.16)}
.msg{border-radius:11px;padding:10px 11px;font-size:12px;line-height:1.6;white-space:pre-wrap;word-break:break-word}
.msg.ia{background:#101B31;border:1px solid rgba(124,58,237,.35)}
.msg.eu{background:rgba(233,30,140,.10);border:1px solid rgba(233,30,140,.3)}
.msg.alerta{background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.35);color:#FCD34D}
.msg.okc{background:rgba(52,211,153,.08);border:1px solid rgba(52,211,153,.3);color:#6EE7B7}
.dockfoot{padding:10px;border-top:1px solid var(--line);display:flex;gap:6px}
.dockfoot textarea{min-height:44px;max-height:110px}

/* modais */
.mback{display:none;position:fixed;inset:0;background:rgba(2,6,17,.75);backdrop-filter:blur(4px);z-index:200;align-items:center;justify-content:center;padding:18px}
.mback.on{display:flex}
.mbox{width:100%;max-width:640px;max-height:88vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:0 40px 120px rgba(0,0,0,.6)}
.mbox h3{margin:0 0 4px;font-size:15px}
.mbox .sub{color:var(--dim);font-size:11px;margin-bottom:14px}
.mclose{float:right;background:none;border:none;color:var(--dim);font-size:18px;cursor:pointer}

.toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);background:#0B1220;border:1px solid var(--line);border-radius:12px;padding:11px 16px;font-size:12px;font-weight:700;z-index:400;box-shadow:0 18px 50px rgba(0,0,0,.5);display:none}

@media(max-width:1000px){
  #ia-revisao [id^=iagrp-rev-]{overflow-x:auto}
  #ia-revisao [data-rid]{min-width:860px}
  .main{flex-direction:column}
  #dock{width:100%!important;max-height:44vh;border-left:none;border-top:1px solid var(--line);order:2}
  #dock.min{max-height:52px}
  .libwrap,.grid3{grid-template-columns:1fr}
  .grid2{grid-template-columns:1fr}
  .jornada-passos{display:flex;overflow-x:auto;padding-bottom:3px}.jornada-passo{flex:0 0 154px}
  .edhead input.title{max-width:100%}
  .edhead-main,.edhead-actions{width:100%;justify-content:flex-start}.edhead-actions{padding-top:4px;border-top:1px solid #1b293e}.edhead-actions .primary-actions,.edhead-actions .secondary-actions{width:100%}
}
/* Abaixo de 640px a linha de serviço (descrição + qtd + unidade + valor +
   confirmar/excluir) não cabia numa tela de celular e obrigava rolagem
   horizontal por linha — justo o contrário do "uma mão só, na obra" que o
   app tenta ser em todo o resto. Empilha em grade de 2 colunas em vez de
   uma fileira só.
   Dois bugs reais achados numa varredura (2026-09-16, harness Playwright
   com dados reais, viewport 390px — pedido do Júnior "acho que varias
   coisas para arrumar no orcamento pro"):
   1) `grid-template-columns:1fr 1fr` (a grade de 2 colunas desta regra)
      nunca vencia de verdade — `assets/jr-refino-2026-148.css` tem
      `body:has(#view-editor) .servline{grid-template-columns:minmax(0,
      1fr) 72px 76px}` (a grade de 3 colunas do DESKTOP) dentro do mesmo
      alcance de celular (`@media max-width:860px`, cobre os 640px daqui).
      Como nenhuma das duas tinha !important nessa propriedade específica,
      especificidade decidia — e `:has(#id)` pesa como um ID inteiro,
      então a regra de lá (1 id + 1 classe + 1 elemento) sempre vencia
      esta aqui (só 1 classe), mesmo essa sendo escrita depois e
      claramente pensada pro celular. Preso com !important, mesmo remédio
      já usado noutras brigas iguais nesta mesma sessão.
   2) `.servline>button` pegava QUALQUER botão filho direto — não só o "✓
      Confirmar" (`.jr-confirmar-linha`, que faz sentido ocupar a linha
      inteira), mas também os botões pequenos de ícone (📐 medir, 👁️
      ocultar, 🔀 transferir, ✕ excluir), cada um virando uma barra em
      branco ocupando a tela inteira, um embaixo do outro — a lista de
      serviços no celular ficava enorme e ilegível. Removido o `>button`
      genérico: só o Confirmar continua forçado a ocupar a linha inteira
      (faz sentido, é a ação principal); os ícones voltam a fluir
      compactos, lado a lado, na mesma grade de 2 colunas dos outros
      campos — do jeito que sempre pareceram destinados a ficar. */
@media(max-width:640px){
  .servline{display:grid!important;grid-template-columns:1fr 1fr!important;gap:6px;align-items:center}
  .servline .srv-desc,.servline .item-desc{grid-column:1/-1}
  .servline .srv-qtd,.servline .item-qtd,.servline .srv-un,.servline .item-un,.servline .srv-pu,.servline .item-pu{width:100%!important;flex:auto!important}
  .servline .price{grid-column:1/-1;text-align:left!important}
  .servline .jr-confirmar-linha{grid-column:1/-1;width:100%}
  /* Cabeçalho do bloco (título + tag + valor + ↑/↓/⋯) media com um teste
     real (375px, título "Revestimento cerâmico"): a soma dos itens de
     largura fixa (⋮⋮ + tag + valor + 3 botões, todos sem flex-shrink)
     JÁ excede o espaço disponível ANTES do título ganhar qualquer
     largura — e como .bloco usa overflow:hidden, o excesso não vira
     scroll, ele é CORTADO. O botão "⋯" (2026.282) é o mais à direita —
     era o primeiro a sumir, inacessível, sem nenhum aviso visual. ⋮⋮ é
     só decorativo (não existe drag-and-drop de verdade nesta tela, ver
     comentário de toggleMenuBloco acima — reordenar é só por ↑/↓), por
     isso pode sumir no celular sem perder função nenhuma. */
  .bhead{flex-wrap:wrap;gap:6px;row-gap:8px}
  .bhead .drag{display:none}
  .bhead b{flex-basis:100%;min-width:0}
}
/* Ergonomia de caixas de texto com scroll suave e dimensionamento elegante */
textarea,
textarea.jr-texto-longo,
#entrada-escopo-texto-rapido,
#wave-modal-input,
#entrada-escopo-texto,
#d-pgto,
#d-carta,
#fin-forma-fechamento-detalhe,
#fin-modelo-cobranca-detalhe,
#pp-escopo-leigo,
#pp-boasvindas,
#pp-transicao,
#pp-notas,
#chat-in {
  box-sizing: border-box;
  font-family: inherit;
  font-size: 12.5px;
  line-height: 1.6;
  border-radius: 10px;
  padding: 10px 14px;
  background: #060A12;
  border: 1px solid #223249;
  color: #F1F5F9;
  min-height: 65px;
  max-height: 380px;
  overflow-y: auto;
  resize: vertical;
  scrollbar-width: thin;
  scrollbar-color: rgba(56,189,248,0.25) transparent;
}
textarea:focus,
textarea.jr-texto-longo:focus,
#entrada-escopo-texto-rapido:focus,
#wave-modal-input:focus,
#entrada-escopo-texto:focus,
#d-pgto:focus,
#d-carta:focus {
  border-color: #38BDF8;
  outline: none;
  box-shadow: 0 0 0 2px rgba(56,189,248,0.20);
}
textarea::-webkit-scrollbar,
textarea.jr-texto-longo::-webkit-scrollbar,
#entrada-escopo-texto-rapido::-webkit-scrollbar,
#wave-modal-input::-webkit-scrollbar {
  width: 6px;
}
textarea::-webkit-scrollbar-thumb,
textarea.jr-texto-longo::-webkit-scrollbar-thumb,
#entrada-escopo-texto-rapido::-webkit-scrollbar-thumb,
#wave-modal-input::-webkit-scrollbar-thumb {
  background: rgba(56, 189, 248, 0.25);
  border-radius: 999px;
}

@media print{body{display:none}}

/* Indicador de upload consolidado em assets/jr-upload-progresso-2026-329.js
   (painel #jr-uplote, injeta o próprio CSS) — ver AGENTS.md 2026-09-07. */

