
  :root{
    --bg:#f2f5f1;
    --paper:#ffffff;
    --surface-2:#f7f6f0;
    --ink:#182821;
    --ink-soft:#5b6b60;
    --forest-deep:#123423;
    --forest:#1f6b45;
    --forest-light:#7fbe98;
    --brand:#2e9e63;
    --brand-dark:#0f2a1f;
    --soil:#7a5b3a;
    --line:#e1e6de;
    --warn-bg:#fdf1de;
    --warn-ink:#8a5a15;
    --accent:#1f6b45;
    --accent-soft:#e3f5ea;
    --danger:#a33;
    --danger-ink:#a33;
    --danger-soft:#fbeaea;
    --danger-border:#d99;
    --disabled-bg:#c3c0b2;
    /* usado em toast/tooltip: fica sempre escuro (texto branco), nas duas
       paletas, então não é redefinido no bloco de modo noturno abaixo */
    --overlay-dark:#123423;
    /* barra fixa (cabeçalho/subtítulo/etapas): translúcida com desfoque —
       --header-fade acompanha --paper, --bg-fade acompanha --bg */
    --header-fade:rgba(255,255,255,.82);
    --bg-fade:rgba(242,245,241,.82);
    --shadow-sm:0 1px 2px rgba(15,30,20,.05), 0 1px 1px rgba(15,30,20,.04);
    --shadow-md:0 10px 26px rgba(15,40,25,.10), 0 2px 8px rgba(15,40,25,.05);
    --shadow-lg:0 22px 55px rgba(10,30,18,.20);
    --radius-sm:8px;
    --radius-md:14px;
    --radius-lg:20px;
    --sidebar-w:270px;
    --sidebar-w-collapsed:76px;
    /* alturas reais medidas em JS (atualizarStickyOffsets, em app-shell.js)
       — os valores aqui são só o chute inicial antes da primeira medição */
    --sticky-header-h:87px;
    --sticky-subhead-h:76px;
    --sticky-stepper-h:90px;
  }
  /* Modo noturno: só redefine a paleta de cores (variáveis acima) — o resto
     do CSS não muda, porque já usa essas variáveis em vez de cores fixas.
     Ativado/desativado via atributo data-theme na <html>, gravado em
     localStorage (ver toggleTheme() em app-shell.js). */
  :root[data-theme="dark"]{
    --bg:#111815;
    --paper:#1a2420;
    --surface-2:#212c26;
    --ink:#e9f1ec;
    --ink-soft:#9bb3a6;
    --forest-deep:#9fe0bb;
    --forest:#6cc490;
    --forest-light:#86d1a3;
    --line:#2c3a33;
    --warn-bg:#3c2f16;
    --warn-ink:#e3ac58;
    --accent-soft:#1c3529;
    --danger-ink:#e08a8a;
    --danger-soft:#3a2020;
    --danger-border:#6b3333;
    --disabled-bg:#3a453f;
    --header-fade:rgba(26,36,32,.82);
    --bg-fade:rgba(17,24,21,.82);
    --shadow-sm:0 1px 2px rgba(0,0,0,.3), 0 1px 1px rgba(0,0,0,.2);
    --shadow-md:0 10px 26px rgba(0,0,0,.45), 0 2px 8px rgba(0,0,0,.3);
    --shadow-lg:0 22px 55px rgba(0,0,0,.55);
  }
  *{box-sizing:border-box;}
  html,body{margin:0; padding:0; height:100%;}
  body{
    background:var(--bg);
    color:var(--ink);
    font-family:"Segoe UI","Helvetica Neue",Arial,sans-serif;
    line-height:1.5;
    overflow:hidden;
    transition:background .2s ease, color .2s ease;
  }
  .wrap{max-width:1180px; margin:0 auto; padding:0 32px 80px;}
  h1,h2,h3,h4{
    font-family:"Segoe UI","Helvetica Neue",Arial,sans-serif;
    color:var(--forest-deep);
    line-height:1.25;
    font-weight:800;
    letter-spacing:-.01em;
  }

  /* ---- cabeçalho fixo no topo do conteúdo (marca + aba atual) ---- */
  .content-header{
    display:flex; align-items:center; justify-content:space-between; gap:16px;
    padding:20px 32px; border-bottom:1px solid var(--line);
    position:sticky; top:0; z-index:20;
    background:var(--header-fade); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  }
  .brand-lockup{display:flex; align-items:center; gap:14px;}
  .logo-mark{
    flex:0 0 46px; width:46px; height:46px; border-radius:13px;
    /* --overlay-dark (fixo) em vez de --forest-deep: esse selo tem o texto
       "DF" em branco por cima, então o fundo precisa continuar escuro nas
       duas paletas — --forest-deep clareia no modo noturno. */
    background:linear-gradient(135deg, var(--brand), var(--overlay-dark));
    color:#fff; display:flex; align-items:center; justify-content:center;
    font-weight:800; font-size:1.05rem; letter-spacing:-.02em; box-shadow:var(--shadow-md);
  }
  .brand-lockup h1{font-size:1.36rem; margin:0; line-height:1.1;}
  .brand-lockup p{margin:2px 0 0; color:var(--ink-soft); font-size:.82rem; letter-spacing:.2px;}
  .header-avatar{
    flex:0 0 40px; width:40px; height:40px; border-radius:50%; cursor:pointer;
    background:var(--accent-soft); color:var(--forest); border:1px solid var(--line);
    display:flex; align-items:center; justify-content:center; transition:background .12s ease;
  }
  .header-avatar:hover{background:var(--forest-light); color:#fff;}

  /* padding calculado em vez de max-width+margin:auto: o fundo (sticky) cobre
     a largura toda do conteúdo, mas o ícone/texto fica alinhado com o título
     de dentro dos cards (.step h2), não só com a borda externa do card —
     por isso 56px (32px do .wrap + 24px do padding interno do .step), não
     32px. */
  .view-subhead{
    display:flex; align-items:flex-start; gap:14px;
    padding:26px calc(56px + max(0px, (100% - 1180px)/2)) 4px;
    position:sticky; top:var(--sticky-header-h, 87px); z-index:19;
    background:var(--bg-fade); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  }
  .view-subhead .vsh-ic{
    flex:0 0 42px; width:42px; height:42px; border-radius:12px; background:var(--accent-soft);
    color:var(--forest); display:flex; align-items:center; justify-content:center;
  }
  .view-subhead h2{font-size:1.32rem; margin:0 0 4px;}
  .view-subhead p{margin:0; color:var(--ink-soft); font-size:.95rem;}

  /* =====================================================================
     APP SHELL — sidebar + content, WinUI-style acrylic navigation
     ===================================================================== */
  .app-shell{display:flex; height:100%; width:100%; overflow:hidden;}

  .sidebar{
    position:relative; flex:0 0 var(--sidebar-w); width:var(--sidebar-w);
    display:flex; flex-direction:column;
    /* --overlay-dark (não --forest-deep) de propósito: a barra lateral fica
       sempre escura, nas duas paletas — --forest-deep muda de tom no modo
       noturno (pra servir de cor de texto/título em outras partes da tela). */
    background:linear-gradient(175deg, var(--brand-dark) 0%, var(--overlay-dark) 60%, #163a29 100%);
    color:#eef4ef; box-shadow:var(--shadow-lg);
    transition:flex-basis .22s ease, width .22s ease;
    z-index:30; overflow:hidden;
  }
  .sidebar::before{
    content:''; position:absolute; inset:0; pointer-events:none; opacity:.10; z-index:0;
    background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 560"><g fill="none" stroke="%23ffffff" stroke-width="2"><path d="M40 560 C 30 420, 90 380, 70 260 C 55 170, 110 120, 95 20"/><path d="M70 260 C 120 250, 150 200, 140 150"/><path d="M70 340 C 130 335, 165 290, 160 235"/><path d="M75 430 C 140 425, 175 380, 172 320"/><path d="M95 20 C 130 40, 150 30, 160 0"/></g></svg>');
    background-repeat:no-repeat; background-position:-30px 40px; background-size:260px 480px;
  }
  .app-shell.collapsed .sidebar{flex-basis:var(--sidebar-w-collapsed); width:var(--sidebar-w-collapsed);}

  .sidebar-head{
    position:relative; z-index:1; display:flex; align-items:center; gap:11px; padding:18px 16px;
    border-bottom:1px solid rgba(255,255,255,.10); min-height:64px;
  }
  .app-shell.collapsed .sidebar-head{padding:18px 8px; justify-content:center;}
  .sidebar-head .brand-mark{
    flex:0 0 36px; width:36px; height:36px; border-radius:11px;
    background:linear-gradient(135deg, var(--brand), #1b4a32);
    display:flex; align-items:center; justify-content:center; color:#fff;
    font-weight:800; font-size:.82rem; letter-spacing:-.02em;
    box-shadow:0 2px 8px rgba(0,0,0,.3);
  }
  .app-shell.collapsed .sidebar-head .brand-mark{display:none;}
  .sidebar-head .brand-text{overflow:hidden; white-space:nowrap; opacity:1; transition:opacity .15s ease;}
  .app-shell.collapsed .sidebar-head .brand-text{opacity:0; width:0;}
  .sidebar-head .brand-text strong{display:block; font-size:.94rem; letter-spacing:.2px; font-weight:700;}
  .sidebar-head .brand-text span{display:block; font-size:.7rem; color:#a9c9b4;}

  #sidebarToggle{
    position:relative; z-index:2; margin-left:auto; background:rgba(255,255,255,.08); border:none; color:#eef4ef;
    width:30px; height:30px; min-width:30px; border-radius:8px; padding:0; font-size:15px; font-weight:400;
    display:flex; align-items:center; justify-content:center; flex:0 0 30px;
  }
  #sidebarToggle:hover{background:rgba(255,255,255,.18);}
  .app-shell.collapsed #sidebarToggle{margin-left:0; flex:0 0 30px;}

  .side-nav-scroll{position:relative; z-index:1; flex:1; overflow-y:auto; padding-bottom:10px;}
  .side-nav-group{margin:16px 8px 6px;}
  .side-nav-group .grp-label{
    padding:0 13px 8px; font-size:.68rem; font-weight:700; letter-spacing:.09em;
    color:#7fa08e; text-transform:uppercase; white-space:nowrap;
  }
  .app-shell.collapsed .side-nav-group .grp-label{opacity:0; height:0; padding:0; overflow:hidden;}
  .side-nav{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:3px;}
  .side-nav .nav-item{
    display:flex; align-items:center; gap:13px; padding:10px 13px; border-radius:var(--radius-sm);
    color:#dfeee2; text-decoration:none; cursor:pointer; font-size:.9rem; white-space:nowrap;
    border:1px solid transparent; transition:background .12s ease;
  }
  .side-nav .nav-item .ic{flex:0 0 20px; width:20px; height:20px; display:flex; align-items:center; justify-content:center; opacity:.85;}
  .side-nav .nav-item .ic svg{width:18px; height:18px;}
  .side-nav .nav-item .lbl{overflow:hidden; text-overflow:ellipsis; opacity:1; transition:opacity .15s ease;}
  .app-shell.collapsed .side-nav .nav-item .lbl{opacity:0; width:0;}
  .app-shell.collapsed .side-nav .nav-item{justify-content:center; padding:11px;}
  .side-nav .nav-item:hover{background:rgba(255,255,255,.09);}
  /* --grupo-cor-ativa é atualizada em JS (aplicarCorDoGrupoAtivo) conforme o
     grupo/ambiente ativo — assim toda a navegação (não só a linha do grupo)
     usa essa cor como destaque, reforçando em qual grupo você está. */
  .side-nav .nav-item.active{background:var(--grupo-cor-ativa, var(--brand)); color:#fff; font-weight:600; box-shadow:0 4px 14px rgba(0,0,0,.25);}
  .side-nav .nav-item.active .ic{opacity:1;}

  .sidebar-foot{position:relative; z-index:1; display:flex; align-items:center; gap:10px; margin-top:auto; padding:14px 16px; font-size:.72rem; color:#9db89f; border-top:1px solid rgba(255,255,255,.10); white-space:nowrap; overflow:hidden;}
  .sidebar-foot .foot-mark{flex:0 0 22px; width:22px; height:22px; border-radius:7px; background:rgba(255,255,255,.10); display:flex; align-items:center; justify-content:center;}
  .sidebar-foot .foot-mark svg{width:13px; height:13px;}
  .app-shell.collapsed .sidebar-foot span{display:none;}

  .content{flex:1 1 auto; min-width:0; height:100%; overflow-y:auto; overflow-x:hidden; background:transparent; position:relative;}
  .view{display:none;}
  .view.active{display:block;}

  .card{background:var(--paper); border:1px solid var(--line); border-radius:var(--radius-md); box-shadow:var(--shadow-sm);}
  .card-pad{padding:20px 22px;}

  .step{
    background:var(--paper); border:1px solid var(--line); border-radius:var(--radius-md);
    box-shadow:var(--shadow-sm); padding:22px 24px; margin-bottom:22px;
    /* ao clicar numa etapa do stepper (irParaEtapa em app-shell.js), o
       scrollIntoView() respeita essa margem — sem ela, o topo do card fica
       escondido atrás do cabeçalho+subtítulo+stepper, que ficaram fixos */
    scroll-margin-top:calc(var(--sticky-header-h, 87px) + var(--sticky-subhead-h, 76px) + var(--sticky-stepper-h, 90px) + 14px);
  }
  .step h2{font-size:1.12rem; margin:0 0 4px; display:flex; align-items:center; gap:10px;}
  .step h2 .step-no{
    display:inline-flex; align-items:center; justify-content:center; width:26px; height:26px;
    border-radius:50%; background:var(--accent-soft); color:var(--forest-deep); font-size:.82rem;
    font-family:"Segoe UI",sans-serif; font-weight:700; flex:0 0 26px;
  }
  .step .hint{color:var(--ink-soft); font-size:0.9rem; margin:0 0 16px;}

  .field-row{display:flex; flex-wrap:wrap; gap:16px 20px; margin-bottom:14px;}
  .field{flex:1 1 220px; display:flex; flex-direction:column; gap:5px;}
  .field.narrow{flex:0 1 160px;}
  label{font-size:0.85rem; color:var(--ink-soft); font-weight:600; display:flex; align-items:center; gap:6px;}
  label .lbl-ic{flex:0 0 15px; width:15px; height:15px; color:var(--forest); opacity:.85;}
  label .lbl-ic svg{width:15px; height:15px;}
  input[type=text], input[type=number], input[type=date], select{
    padding:10px 12px; border:1px solid var(--line); border-radius:var(--radius-sm);
    background:var(--paper); font-size:0.95rem; color:var(--ink);
    font-variant-numeric:tabular-nums; transition:border-color .12s ease, box-shadow .12s ease;
  }
  input:focus, select:focus{outline:none; border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft);}
  input::placeholder{color:#aab3ac;}

  .filebox{
    border:1.5px dashed var(--line); border-radius:var(--radius-md); padding:18px;
    background:var(--paper); flex:1 1 300px; transition:border-color .12s ease;
  }
  .filebox:hover{border-color:var(--forest-light);}
  .filebox > label{display:flex; font-weight:700; color:var(--forest-deep); margin-bottom:2px; font-size:0.98rem;}
  .filebox .sub{font-size:.8rem; color:var(--ink-soft); margin:0 0 12px;}
  .filebox input[type=file]{font-size:0.85rem;}
  .filebox .status{margin-top:8px; font-size:0.85rem; color:var(--ink-soft);}
  .filebox .status.ok{color:var(--forest);}
  .filebox .status.err{color:var(--danger-ink);}
  .filebox-ic{flex:0 0 30px; width:30px; height:30px; border-radius:9px; background:var(--accent-soft); color:var(--forest); display:inline-flex; align-items:center; justify-content:center; margin-right:9px;}
  .filebox-ic svg{width:16px; height:16px;}
  .inline-ic{display:inline-flex; width:14px; height:14px; vertical-align:-2px;}
  .inline-ic svg{width:14px; height:14px;}

  /* ---- zona de arrastar-e-soltar da planilha de indivíduos ---- */
  .dropzone{
    border:2px dashed var(--line); border-radius:var(--radius-md); padding:26px 18px;
    text-align:center; background:var(--paper); cursor:pointer; transition:border-color .15s ease, background .15s ease;
  }
  .dropzone:hover, .dropzone.dragover{border-color:var(--brand); background:var(--accent-soft);}
  .dropzone .dz-ic{width:38px; height:38px; margin:0 auto 10px; color:var(--forest); opacity:.8;}
  .dropzone .dz-ic svg{width:38px; height:38px;}
  .dropzone strong{display:block; font-size:.95rem; color:var(--forest-deep);}
  .dropzone .dz-sub{font-size:.82rem; color:var(--ink-soft); margin:2px 0 14px;}
  .dropzone .dz-hint{font-size:.74rem; color:var(--ink-soft); margin-top:10px;}

  .modelo-box{
    background:var(--accent-soft); border:1px solid var(--line); border-radius:var(--radius-md);
    padding:14px 16px; margin-top:14px;
  }
  .modelo-box .mb-title{display:flex; align-items:center; gap:8px; font-weight:700; font-size:.88rem; color:var(--forest-deep); margin-bottom:10px;}
  .modelo-box .mb-title svg{width:15px; height:15px;}

  .file-card{
    display:flex; align-items:center; gap:12px; padding:12px 14px; margin-top:12px;
    background:var(--paper); border:1px solid var(--line); border-radius:var(--radius-sm);
  }
  .file-card .fc-ic{flex:0 0 34px; width:34px; height:34px; border-radius:8px; background:var(--accent-soft); color:var(--forest); display:flex; align-items:center; justify-content:center;}
  .file-card .fc-ic svg{width:18px; height:18px;}
  .file-card .fc-meta{flex:1; min-width:0;}
  .file-card .fc-name{font-size:.88rem; font-weight:600; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
  .file-card .fc-sub{font-size:.78rem; color:var(--ink-soft);}
  .file-card .fc-remove{flex:0 0 auto; background:transparent; box-shadow:none; color:var(--danger-ink); padding:6px; border-radius:8px;}
  .file-card .fc-remove:hover{background:var(--danger-soft); transform:none; box-shadow:none;}
  .file-card .fc-remove svg{width:16px; height:16px;}
  .upload-success{display:flex; align-items:center; gap:7px; color:var(--forest); font-size:.85rem; font-weight:600; margin-top:12px;}
  .upload-success svg{width:16px; height:16px;}
  .upload-error{color:var(--danger-ink); font-size:.85rem; font-weight:600; margin-top:12px;}

  /* ---- indicador de etapas (topo do fluxo "Processar dados") ---- */
  .stepper{
    display:flex; align-items:flex-start; overflow-x:auto;
    padding:6px calc(56px + max(0px, (100% - 1180px)/2)) 28px;
    position:sticky; top:calc(var(--sticky-header-h, 87px) + var(--sticky-subhead-h, 76px)); z-index:18;
    background:var(--bg-fade); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  }
  .stepper .st-item{display:flex; align-items:flex-start; gap:10px; flex:0 1 auto; max-width:220px; min-width:0;}
  .stepper .st-circle{
    flex:0 0 34px; width:34px; height:34px; border-radius:50%; display:flex; align-items:center; justify-content:center;
    font-weight:800; font-size:.86rem; background:var(--paper); border:2px solid var(--line); color:var(--ink-soft);
    transition:background .15s ease, border-color .15s ease, color .15s ease;
  }
  .stepper .st-item.active .st-circle, .stepper .st-item.done .st-circle{background:var(--brand); border-color:var(--brand); color:#fff;}
  .stepper .st-text strong{display:block; font-size:.88rem; color:var(--ink-soft);}
  .stepper .st-item.active .st-text strong, .stepper .st-item.done .st-text strong{color:var(--forest-deep);}
  .stepper .st-text span{display:block; font-size:.76rem; color:var(--ink-soft); margin-top:1px; line-height:1.3;}
  .stepper .st-line{flex:1 1 auto; min-width:16px; height:2px; background:var(--line); margin:16px 8px 0; align-self:flex-start;}
  .stepper .st-line.done{background:var(--brand);}
  @media (max-width: 1080px){
    .stepper .st-text span{display:none;}
    .stepper .st-item{max-width:none;}
  }

  details{background:var(--paper); border:1px solid var(--line); border-radius:var(--radius-sm); padding:10px 14px; margin-top:10px;}
  details summary{cursor:pointer; font-size:0.9rem; color:var(--forest-deep); font-weight:600;}
  details .field-row{margin-top:14px;}

  button{
    font-family:inherit; font-size:0.94rem; padding:11px 20px;
    border:none; border-radius:var(--radius-sm); cursor:pointer;
    background:var(--brand); color:#fff; font-weight:700;
    box-shadow:var(--shadow-sm); transition:background .12s ease, transform .08s ease, box-shadow .12s ease;
    display:inline-flex; align-items:center; gap:8px;
  }
  button:hover{background:var(--forest); box-shadow:var(--shadow-md); transform:translateY(-1px);}
  button:active{transform:translateY(0);}
  button:disabled{background:var(--disabled-bg); cursor:not-allowed; box-shadow:none; transform:none;}
  button.secondary{background:transparent; color:var(--forest-deep); border:1px solid var(--line); font-weight:600; padding:9px 16px; font-size:0.86rem; box-shadow:none;}
  button.secondary:hover{background:var(--accent-soft); border-color:var(--forest-light); box-shadow:none; transform:none;}
  button.danger{background:#a33; }
  button.danger:hover{background:#c44;}
  button.ghost{background:transparent; color:var(--ink-soft); box-shadow:none; padding:7px 12px; font-size:.85rem;}
  button.ghost:hover{background:var(--surface-2); box-shadow:none; transform:none; color:var(--ink);}
  button.next-step{margin-top:6px;}

  #erroBox{background:var(--danger-soft); border:1px solid var(--danger-border); color:var(--danger-ink); padding:14px 18px; border-radius:var(--radius-sm); margin-bottom:24px; white-space:pre-wrap; font-size:0.92rem;}

  /* o relatório gerado imita uma folha impressa (Word/PDF) — mantém o fundo
     branco e o texto escuro mesmo no modo noturno, redefinindo as variáveis
     de cor só dentro dele, pra não sair diferente do que vai ser exportado. */
  #relatorio{display:none;}
  :root[data-theme="dark"] #relatorio{
    --bg:#f2f5f1; --paper:#ffffff; --surface-2:#f1f1ee; --ink:#182821; --ink-soft:#5b6b60;
    --forest-deep:#123423; --forest:#1f6b45; --forest-light:#7fbe98; --line:#e1e6de;
    --warn-bg:#fdf1de; --warn-ink:#8a5a15; --accent-soft:#e3f5ea;
    --danger-ink:#a33; --danger-soft:#fbeaea; --danger-border:#d99; --disabled-bg:#c3c0b2;
    background:#fff; color:var(--ink); padding:28px 32px; border-radius:var(--radius-md);
  }
  .rel-actions{position:sticky; top:0; background:var(--bg); padding:14px 0; z-index:5; border-bottom:1px solid var(--line); margin-bottom:28px; display:flex; flex-wrap:wrap; gap:10px; align-items:center;}

  /* ---- conteúdo do relatório: estilo formal, alinhado ao modelo Word ---- */
  #relatorio, #relatorio .rel-sec, #relatorio .rel-cover{font-family:"Times New Roman",Georgia,serif;}
  .rel-cover{padding:26px 0 34px; border-bottom:2px solid var(--ink); margin-bottom:30px; font-family:Arial,Helvetica,sans-serif;}
  .rel-cover h1{font-size:1.55rem; margin-bottom:4px; color:var(--ink); font-family:Arial,Helvetica,sans-serif; letter-spacing:.3px;}
  .rel-cover .meta{color:var(--ink); font-size:0.95rem; margin-top:14px; line-height:1.7;}
  .rel-cover .meta div{margin-bottom:3px;}

  /* mesma lógica do .step: os links do sumário (#s1, #s11...) pulam pra cá,
     e a barra de ações do relatório (.rel-actions) também fica fixa no topo */
  section.rel-sec{margin-bottom:38px; scroll-margin-top:76px;}
  section.rel-sec h2{font-size:1.24rem; border-bottom:1px solid var(--line); padding-bottom:8px; margin-bottom:14px; color:var(--ink);}
  section.rel-sec h3{font-size:1.08rem; margin:24px 0 10px; color:var(--ink);}
  section.rel-sec h4{font-size:0.98rem; margin:18px 0 6px; font-style:italic; color:var(--ink);}
  section.rel-sec p{margin:0 0 12px; text-align:justify;}

  table.data{border-collapse:collapse; width:100%; margin-bottom:10px; font-size:0.88rem;}
  table.data caption{caption-side:top; text-align:left; font-size:0.85rem; color:var(--ink-soft); margin-bottom:6px; font-style:italic;}
  table.data th{background:var(--ink); color:#fff; padding:8px 10px; text-align:center; font-weight:600;}
  table.data td{padding:6px 10px; text-align:center; border-bottom:1px solid var(--line); font-variant-numeric:tabular-nums;}
  table.data td.txt{text-align:left; font-style:italic;}
  table.data tbody tr:nth-child(even){background:var(--surface-2);}
  table.data tfoot td{font-weight:700; border-top:2px solid var(--ink);}
  .table-actions{margin:-4px 0 18px; text-align:right;}

  .callout{background:var(--accent-soft); color:var(--ink); border-left:3px solid var(--forest); padding:12px 16px; border-radius:0 var(--radius-sm) var(--radius-sm) 0; margin:14px 0;}
  .callout.warn{background:var(--warn-bg); border-left-color:var(--soil); color:var(--warn-ink);}
  .callout.bad{background:var(--danger-soft); border-left-color:var(--danger-ink);}

  .validation-card{border:1px solid var(--line); border-radius:var(--radius-md); overflow:hidden;}
  .validation-head{padding:12px 16px; font-size:.88rem; font-weight:600; border-bottom:1px solid var(--line); background:var(--surface-2);}
  .validation-list{list-style:none; margin:0; padding:0; max-height:260px; overflow-y:auto;}
  .validation-item{display:flex; gap:10px; padding:10px 16px; font-size:.85rem; border-bottom:1px solid var(--line); align-items:flex-start;}
  .validation-item:last-child{border-bottom:none;}
  .validation-item .tag{flex:0 0 auto; font-size:.68rem; font-weight:700; text-transform:uppercase; letter-spacing:.3px; padding:2px 8px; border-radius:20px; margin-top:1px; white-space:nowrap;}
  .validation-item.erro .tag{background:var(--danger-soft); color:var(--danger-ink);}
  .validation-item.aviso .tag{background:var(--warn-bg); color:var(--warn-ink);}
  .validation-item span.msg{color:var(--ink); line-height:1.4;}
  .validation-summary{padding:9px 16px; font-size:.8rem; color:var(--ink-soft); background:var(--surface-2); border-top:1px solid var(--line);}

  .help-icon{
    display:inline-flex; align-items:center; justify-content:center;
    width:15px; height:15px; border-radius:50%; background:var(--forest-light); color:#fff;
    font-size:10.5px; font-weight:700; cursor:help; margin-left:5px; position:relative; vertical-align:middle;
  }
  .help-icon .tooltip{
    visibility:hidden; opacity:0; transition:opacity .15s ease;
    position:absolute; bottom:135%; left:50%; transform:translateX(-50%);
    background:var(--overlay-dark); color:#fff; text-align:left; font-weight:400;
    padding:9px 11px; border-radius:4px; width:240px; font-size:0.78rem; line-height:1.4;
    z-index:20; box-shadow:0 3px 10px rgba(0,0,0,0.25); pointer-events:none;
  }
  .help-icon .tooltip::after{
    content:""; position:absolute; top:100%; left:50%; margin-left:-5px;
    border-width:5px; border-style:solid; border-color:var(--overlay-dark) transparent transparent transparent;
  }
  .help-icon:hover .tooltip, .help-icon:focus .tooltip{visibility:visible; opacity:1;}

  .rel-quote{border-left:3px solid var(--line); margin:14px 0 18px 4px; padding:2px 0 2px 18px; font-style:italic; color:var(--ink-soft);}  section.rel-sec ul{margin:0 0 14px; padding-left:22px;}
  section.rel-sec li{margin-bottom:6px;}
  .rel-toc{list-style:none; margin:0 0 20px; padding:0;}
  .rel-toc li{margin-bottom:7px;}
  .rel-toc a{color:var(--forest-deep); text-decoration:none; border-bottom:1px dotted var(--line);}
  .rel-toc a:hover{border-bottom-color:var(--forest-deep);}
  .rel-toc .l2{padding-left:20px; font-size:0.95em;}
  .rel-toc .l3{padding-left:40px; font-size:0.9em; color:var(--ink-soft);}

  .chart-wrap{margin:16px 0 24px; background:var(--paper); border:1px solid var(--line); border-radius:4px; padding:14px;}
  .stat-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:14px; margin:16px 0 20px;}
  .stat-box{background:var(--paper); border:1px solid var(--line); border-radius:4px; padding:12px 14px;}
  .stat-box .v{font-family:Georgia,serif; font-size:1.5rem; color:var(--forest-deep); font-weight:700;}
  .stat-box .l{font-size:0.78rem; color:var(--ink-soft);}

  footer.rel-footer{margin-top:50px; padding-top:16px; border-top:1px solid var(--line); font-size:0.8rem; color:var(--ink-soft); font-family:Arial,Helvetica,sans-serif;}

  /* =====================================================================
     Registro de responsáveis técnicos / histórico / componentes utilitários
     ===================================================================== */
  .toolbar{display:flex; flex-wrap:wrap; gap:10px; align-items:center; justify-content:space-between; margin-bottom:18px;}
  .toolbar .toolbar-title{display:flex; flex-direction:column; gap:2px;}
  .toolbar .toolbar-title span{font-size:.82rem; color:var(--ink-soft);}

  .empty-state{
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px;
    padding:56px 20px; color:var(--ink-soft); text-align:center;
  }
  .empty-state .ic{width:44px; height:44px; color:var(--forest-light); opacity:.8;}
  .empty-state .ic svg{width:44px; height:44px;}
  [data-icon] svg{width:1em; height:1em; display:block;}
  .vsh-ic svg, .header-avatar svg{width:20px; height:20px;}
  .empty-state strong{color:var(--forest-deep); font-size:1.02rem;}

  .badge{display:inline-flex; align-items:center; gap:5px; font-size:.74rem; font-weight:700; padding:3px 9px; border-radius:20px; background:var(--accent-soft); color:var(--forest-deep); text-transform:uppercase; letter-spacing:.3px;}

  .list-table{width:100%; border-collapse:collapse;}
  .list-table th{text-align:left; font-size:.78rem; text-transform:uppercase; letter-spacing:.3px; color:var(--ink-soft); padding:0 14px 10px; border-bottom:1px solid var(--line); font-weight:600;}
  .list-table td{padding:13px 14px; border-bottom:1px solid var(--line); font-size:.93rem; vertical-align:middle;}
  .list-table tr:last-child td{border-bottom:none;}
  .list-table tr:hover td{background:var(--surface-2);}
  .row-actions{display:flex; gap:6px; justify-content:flex-end;}

  .tec-avatar{width:34px; height:34px; border-radius:50%; background:linear-gradient(135deg,var(--forest-light),var(--forest)); color:#fff; display:inline-flex; align-items:center; justify-content:center; font-weight:700; font-size:.85rem; margin-right:10px; vertical-align:middle;}

  .accordion-group{margin-bottom:16px; border:1px solid var(--line); border-radius:var(--radius-md); overflow:hidden; background:var(--paper);}
  .accordion-head{display:flex; align-items:center; gap:12px; padding:15px 18px; cursor:pointer; background:var(--surface-2); user-select:none;}
  .accordion-head:hover{background:var(--line);}
  .accordion-head .chev{transition:transform .15s ease; color:var(--ink-soft); font-size:.8rem;}
  .accordion-group.open .accordion-head .chev{transform:rotate(90deg);}
  .accordion-head strong{font-size:.98rem; color:var(--forest-deep);}
  .accordion-head .count{margin-left:auto; font-size:.8rem; color:var(--ink-soft);}
  .accordion-body{display:none; padding:6px 0;}
  .accordion-group.open .accordion-body{display:block;}
  .hist-entry{display:flex; align-items:center; gap:14px; padding:13px 18px; border-top:1px solid var(--line);}
  .hist-entry .when{flex:0 0 150px; font-size:.82rem; color:var(--ink-soft);}
  .hist-entry .stats{flex:1; font-size:.86rem; color:var(--ink-soft);}
  .hist-entry .stats strong{color:var(--ink);}
  .hist-entry .stats .who{display:flex; align-items:center; gap:5px; margin-top:3px; font-size:.78rem; color:var(--ink-soft);}
  .hist-entry .stats .who .inline-ic{color:var(--forest-light);}
  .hist-entry .acts{display:flex; gap:6px; flex-wrap:wrap;}

  .modal-overlay{
    position:fixed; inset:0; background:rgba(20,30,22,.42); backdrop-filter:blur(2px);
    display:none; align-items:center; justify-content:center; z-index:100;
  }
  .modal-overlay.open{display:flex;}
  .modal-box{background:var(--paper); border-radius:var(--radius-lg); box-shadow:var(--shadow-lg); width:min(420px,92vw); padding:24px 26px; }
  .modal-box h3{margin:0 0 6px; font-size:1.12rem;}
  .modal-box p{margin:0 0 16px; color:var(--ink-soft); font-size:.9rem;}
  .modal-actions{display:flex; justify-content:flex-end; gap:10px; margin-top:18px;}

  .toast-wrap{position:fixed; bottom:22px; right:22px; z-index:200; display:flex; flex-direction:column; gap:8px;}
  .toast{background:var(--overlay-dark); color:#fff; padding:12px 18px; border-radius:var(--radius-sm); box-shadow:var(--shadow-md); font-size:.88rem; opacity:0; transform:translateY(8px); transition:opacity .2s ease, transform .2s ease;}
  .toast.show{opacity:1; transform:translateY(0);}

  @media print{
    body{background:#fff; padding:0; overflow:visible;}
    .app-shell{display:block; height:auto; width:auto;}
    .sidebar, .content-header, .view-subhead, .stepper, .rel-actions, .no-print{display:none !important;}
    .content{height:auto; overflow:visible;}
    #relatorio{display:block !important;}
    .chart-wrap, section.rel-sec{page-break-inside:avoid;}
    a[href]:after{content:"";}
  }

  /* =====================================================================
     LOGIN / CADASTRO e GRUPOS DE TRABALHO
     ===================================================================== */
  .auth-gate{
    position:fixed; inset:0; z-index:500; display:flex; align-items:center; justify-content:center;
    background:
      radial-gradient(1200px 700px at 15% -10%, #16362672 0%, transparent 60%),
      var(--brand-dark);
    padding:20px; overflow-y:auto;
  }
  .auth-card{
    background:var(--paper); border-radius:var(--radius-lg); box-shadow:var(--shadow-lg);
    width:min(420px, 100%); padding:36px 32px; text-align:center;
  }
  .auth-card-wide{width:min(720px, 100%); text-align:left;}
  .auth-card-wide h1, .auth-card-wide .auth-sub{text-align:center;}
  .auth-logo{margin:0 auto 16px;}
  .auth-card h1{font-size:1.4rem; margin:0 0 6px;}
  .auth-sub{color:var(--ink-soft); font-size:.9rem; margin:0 0 22px;}
  .auth-card .field{margin-bottom:14px; text-align:left;}
  .auth-card button{width:100%; justify-content:center;}
  .auth-switch{margin:16px 0 0; font-size:.85rem; color:var(--ink-soft);}
  .auth-switch a{color:var(--forest); font-weight:600; text-decoration:none;}
  .auth-switch a:hover{text-decoration:underline;}
  .auth-info{background:var(--accent-soft); color:var(--forest-deep); border-radius:var(--radius-sm); padding:10px 14px; font-size:.85rem; margin-bottom:14px;}

  .ws-actions-grid{display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:6px;}
  .ws-actions-grid label{font-weight:700; color:var(--forest-deep); font-size:.9rem;}
  @media (max-width:640px){ .ws-actions-grid{grid-template-columns:1fr;} }
  .ws-item{display:flex; align-items:center; justify-content:space-between; padding:12px 16px; border-bottom:1px solid var(--line); font-size:.9rem;}
  .ws-item:last-child{border-bottom:none;}
  .ws-item .ws-code{font-size:.78rem; color:var(--ink-soft); font-family:monospace;}

  /* nav-item "Criar ou entrar em grupo", no fim da lista de grupos */
  .ws-nav-newbtn{border:1px dashed rgba(255,255,255,.25); opacity:.9;}
  .ws-nav-newbtn:hover{opacity:1;}
  .ws-membros-toggle{margin-left:auto; flex:0 0 12px; width:12px; height:12px; opacity:.8; transform:rotate(90deg);}
  .ws-membros-toggle svg{width:12px; height:12px;}

  .ws-panel{
    position:absolute; left:8px; right:8px; top:0; z-index:50;
    background:var(--paper); border-radius:var(--radius-md); box-shadow:var(--shadow-lg);
    padding:14px; max-height:min(60vh, 420px); overflow-y:auto; overflow-x:hidden;
    border:1px solid var(--line);
  }
  .app-shell.collapsed .ws-panel{left:70px; right:auto; width:260px;}
  .ws-panel-label{display:flex; align-items:center; gap:7px; font-size:.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-soft); margin-bottom:10px;}
  .ws-membro-row{display:flex; align-items:center; gap:10px; padding:8px 6px; font-size:.88rem; color:var(--ink); border-radius:var(--radius-sm); min-width:0;}
  .ws-membro-row:hover{background:var(--surface-2);}
  .ws-membro-row + .ws-membro-row{margin-top:2px;}
  .ws-membro-ic{flex:0 0 30px; width:30px; height:30px; border-radius:50%; background:var(--accent-soft); color:var(--forest); display:flex; align-items:center; justify-content:center;}
  .ws-membro-ic svg{width:15px; height:15px;}
  .ws-membro-info{flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:1px;}
  .ws-membro-info .nome{font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
  .ws-membro-info .email{display:block; font-size:.76rem; color:var(--ink-soft); font-weight:400; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
  .ws-membro-remover{margin-left:auto; flex:0 0 auto; padding:5px 7px; box-shadow:none; background:transparent; color:var(--danger-ink);}
  .ws-membro-remover:hover{background:var(--danger-soft); box-shadow:none; transform:none;}
  #wsPanelRodape:not(:empty){margin-top:10px; padding-top:10px; border-top:1px solid var(--line);}
  .ws-cor-resumo{display:flex; align-items:center; gap:9px; cursor:pointer; font-size:.85rem; color:var(--ink); padding:2px 0;}
  .ws-cor-resumo:hover{color:var(--forest-deep);}
  .ws-cor-dot{flex:0 0 16px; width:16px; height:16px; border-radius:50%; border:1px solid rgba(0,0,0,.08);}
  .ws-cor-chevron{margin-left:auto; flex:0 0 12px; width:12px; height:12px; color:var(--ink-soft); transition:transform .15s ease;}
  .ws-cor-chevron svg{width:12px; height:12px;}
  .ws-cor-chevron.aberto{transform:rotate(90deg);}

  /* badge colorido do grupo (letra inicial), usado em todo lugar que representa o grupo */
  .ws-grupo-badge{
    display:inline-flex; align-items:center; justify-content:center; border-radius:7px;
    color:#fff; font-weight:800; flex:0 0 auto; line-height:1;
  }
  .color-palette{display:flex; flex-wrap:wrap; gap:9px; margin:8px 0 2px;}
  .color-palette .color-swatch{
    width:26px !important; height:26px !important; flex:0 0 26px; border-radius:50%; border:2px solid transparent;
    padding:0; box-shadow:none; cursor:pointer; transition:transform .1s ease; min-width:0;
  }
  .color-palette .color-swatch:hover{transform:scale(1.1); box-shadow:none;}
  .color-palette .color-swatch.selected{border-color:var(--ink);}
  .ws-excluir-grupo-btn{width:100%; justify-content:center; font-size:.85rem; padding:9px 12px;}

  .header-actions{display:flex; align-items:center; gap:12px;}
  .header-user-email{font-size:.82rem; color:var(--ink-soft);}
  .theme-toggle{
    flex:0 0 40px; width:40px; height:40px; border-radius:50%; padding:0;
    background:var(--accent-soft); color:var(--forest); border:1px solid var(--line);
    display:flex; align-items:center; justify-content:center; box-shadow:none;
  }
  .theme-toggle:hover{background:var(--forest-light); color:#fff; box-shadow:none; transform:none;}
  .theme-toggle svg{width:19px; height:19px;}
