/* ==========================================================================
   Economiza Aí — folha de estilo unica (base do Giz).
   Mobile-first, tema claro/escuro, sem dependencia externa.
   Ordem: variaveis > base > estrutura > componentes > utilitarios.
   ========================================================================== */

:root{
  color-scheme:light;   /* deixa scrollbar, autofill e widgets nativos na cor certa */
  /* superficies e texto */
  --bg:#f6f7f9;
  --superficie:#ffffff;
  --superficie2:#f1f3f6;
  --superficie3:#e9ecf1;
  --borda:#e4e7ec;
  --borda-forte:#d3d8e0;
  --texto:#14161a;
  --texto2:#616b7a;
  --texto3:#8b95a4;

  /* marca e estados */
  --marca:#0f8a6a;
  --marca-forte:#0b6e55;
  --marca-suave:#e3f5ef;
  --ok:#15803d;      --ok-suave:#e8f6ed;
  --alerta:#b45309;  --alerta-suave:#fdf3e3;
  --ruim:#b91c1c;    --ruim-suave:#fdecec;
  --info:#0369a1;    --info-suave:#e6f3fb;

  --sombra-1:0 1px 2px rgba(16,24,40,.05);
  --sombra-2:0 1px 3px rgba(16,24,40,.06),0 8px 24px -12px rgba(16,24,40,.14);
  --sombra-3:0 12px 40px -12px rgba(16,24,40,.22);

  --r-g:16px; --r-m:11px; --r-p:8px;
  --topo:58px;
  --lateral:244px;
  --trans:.16s cubic-bezier(.4,0,.2,1);
}

@media (prefers-color-scheme:dark){
  html:not([data-tema="claro"]){
    color-scheme:dark;
    --bg:#0d0f13;
    --superficie:#15181e;
    --superficie2:#1c2027;
    --superficie3:#242932;
    --borda:#262b34;
    --borda-forte:#333a45;
    --texto:#eaecef;
    --texto2:#98a1b0;
    --texto3:#6f7889;
    --marca:#34d3a6; --marca-forte:#6ee7c4; --marca-suave:#10302a;
    --ok:#4ade80;    --ok-suave:#10261a;
    --alerta:#fbbf24;--alerta-suave:#2a2110;
    --ruim:#f87171;  --ruim-suave:#2b1616;
    --info:#38bdf8;  --info-suave:#0d2230;
    --sombra-1:0 1px 2px rgba(0,0,0,.4);
    --sombra-2:0 1px 3px rgba(0,0,0,.4),0 8px 24px -12px rgba(0,0,0,.6);
    --sombra-3:0 12px 40px -12px rgba(0,0,0,.7);
  }
}
html[data-tema="escuro"]{
  color-scheme:dark;
  --bg:#0d0f13; --superficie:#15181e; --superficie2:#1c2027; --superficie3:#242932;
  --borda:#262b34; --borda-forte:#333a45; --texto:#eaecef; --texto2:#98a1b0; --texto3:#6f7889;
  --marca:#34d3a6; --marca-forte:#6ee7c4; --marca-suave:#10302a;
  --ok:#4ade80; --ok-suave:#10261a; --alerta:#fbbf24; --alerta-suave:#2a2110;
  --ruim:#f87171; --ruim-suave:#2b1616; --info:#38bdf8; --info-suave:#0d2230;
  --sombra-1:0 1px 2px rgba(0,0,0,.4);
  --sombra-2:0 1px 3px rgba(0,0,0,.4),0 8px 24px -12px rgba(0,0,0,.6);
  --sombra-3:0 12px 40px -12px rgba(0,0,0,.7);
}

/* ---------------------------------------------------------------- base -- */
*,*::before,*::after{box-sizing:border-box}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--bg);color:var(--texto);
  font:400 15px/1.55 ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  font-feature-settings:"cv02","cv03","cv04";
  -webkit-font-smoothing:antialiased;
}
a{color:var(--marca);text-decoration:none}
a:hover{color:var(--marca-forte)}
h1,h2,h3{margin:0;line-height:1.25;letter-spacing:-.019em;font-weight:650}
h1{font-size:1.4rem}
h2{font-size:1.02rem}
h3{font-size:.94rem}
p{margin:0}
small{font-size:.8rem;color:var(--texto2)}
::selection{background:var(--marca-suave);color:var(--marca-forte)}
:focus-visible{outline:2px solid var(--marca);outline-offset:2px;border-radius:4px}

/* icones do sprite */
.ico{width:1.15em;height:1.15em;flex:none;vertical-align:-.18em}
.ico-g{width:1.5em;height:1.5em}

/* ----------------------------------------------------------- estrutura -- */
.topo{
  position:sticky;top:0;z-index:40;height:var(--topo);
  display:flex;align-items:center;gap:.5rem;padding:0 .85rem;
  background:color-mix(in srgb,var(--superficie) 88%,transparent);
  backdrop-filter:saturate(1.6) blur(10px);
  border-bottom:1px solid var(--borda);
}
.marca{display:flex;align-items:center;gap:.5rem;font-weight:700;font-size:1.1rem;color:var(--texto);letter-spacing:-.03em}
.marca-simbolo{width:26px;height:26px;border-radius:8px;background:linear-gradient(135deg,var(--marca),#2a78d6);
  display:grid;place-items:center;color:#fff;box-shadow:var(--sombra-1)}
.marca-simbolo .ico{width:15px;height:15px}
.topo-acoes{margin-left:auto;display:flex;align-items:center;gap:.35rem}
.icone-btn{
  display:grid;place-items:center;width:36px;height:36px;border:0;border-radius:10px;
  background:transparent;color:var(--texto2);cursor:pointer;transition:var(--trans)
}
.icone-btn:hover{background:var(--superficie2);color:var(--texto)}
.icone-btn .ico{width:19px;height:19px}
.avatar{
  width:33px;height:33px;border-radius:50%;display:grid;place-items:center;
  background:var(--marca);color:#fff;font-size:.75rem;font-weight:700;letter-spacing:.02em
}

.moldura{display:flex;min-height:calc(100dvh - var(--topo))}
.principal{flex:1;min-width:0;padding:1.05rem .85rem calc(84px + env(safe-area-inset-bottom))}
.principal-limpa{
  max-width:400px;margin:0 auto;padding:1.5rem 1.1rem;
  min-height:100dvh;display:flex;flex-direction:column;justify-content:center
}

/* menu lateral */
.lateral{
  position:fixed;inset:var(--topo) auto 0 0;width:var(--lateral);z-index:45;
  display:flex;flex-direction:column;gap:.15rem;padding:.7rem .6rem;overflow-y:auto;
  background:var(--superficie);border-right:1px solid var(--borda);
  transform:translateX(-101%);transition:transform var(--trans);
}
.lateral.aberta{transform:none;box-shadow:var(--sombra-3)}
.lateral-grupo{
  padding:.85rem .6rem .3rem;font-size:.68rem;font-weight:700;letter-spacing:.07em;
  text-transform:uppercase;color:var(--texto3)
}
.lateral-grupo:first-child{padding-top:.25rem}
.lateral a{
  display:flex;align-items:center;gap:.65rem;padding:.55rem .65rem;border-radius:9px;
  color:var(--texto2);font-size:.9rem;font-weight:500;transition:var(--trans)
}
.lateral a:hover{background:var(--superficie2);color:var(--texto)}
.lateral a.ativo{background:var(--marca-suave);color:var(--marca);font-weight:600}
.lateral a .ico{width:18px;height:18px}
.lateral-rodape{margin-top:auto;padding-top:.6rem;border-top:1px solid var(--borda)}
.lateral-fundo{position:fixed;inset:0;z-index:44;background:rgba(9,11,15,.45);backdrop-filter:blur(2px)}

/* barra inferior (celular) */
.barra-inferior{
  position:fixed;left:0;right:0;bottom:0;z-index:40;display:flex;
  background:color-mix(in srgb,var(--superficie) 92%,transparent);
  backdrop-filter:saturate(1.6) blur(10px);
  border-top:1px solid var(--borda);padding-bottom:env(safe-area-inset-bottom)
}
.barra-inferior a{
  flex:1;display:grid;justify-items:center;gap:3px;padding:.5rem .15rem .45rem;
  font-size:.66rem;font-weight:500;color:var(--texto3);transition:var(--trans)
}
.barra-inferior .ico{width:21px;height:21px}
.barra-inferior a.ativo{color:var(--marca)}

@media (min-width:900px){
  :root{--topo:60px}
  .lateral{position:sticky;top:var(--topo);height:calc(100dvh - var(--topo));transform:none;box-shadow:none}
  .lateral-fundo,.barra-inferior,#btn-menu{display:none!important}
  .principal{padding:1.6rem 1.8rem 3rem;max-width:none}
}

/* ---------------------------------------------------------- componentes -- */
.cabecalho{display:flex;align-items:flex-start;gap:.8rem;flex-wrap:wrap;margin-bottom:1.1rem}
.cabecalho .titulo{flex:1;min-width:min(100%,240px)}
.cabecalho .sub{margin-top:.2rem;color:var(--texto2);font-size:.875rem}
.cabecalho .acoes{display:flex;gap:.4rem;flex-wrap:wrap}

.cartao{
  background:var(--superficie);border:1px solid var(--borda);border-radius:var(--r-g);
  padding:1.05rem;box-shadow:var(--sombra-1)
}
.cartao + .cartao{margin-top:.85rem}
.cartao-topo{display:flex;align-items:center;justify-content:space-between;gap:.7rem;flex-wrap:wrap;margin-bottom:.2rem}
.cartao-topo h2{display:flex;align-items:center;gap:.5rem}
.cartao-topo h2 .ico{width:17px;height:17px;color:var(--texto3)}
a.cartao{display:block;color:inherit;transition:var(--trans)}
a.cartao:hover{border-color:var(--borda-forte);box-shadow:var(--sombra-2);transform:translateY(-1px)}

.grade{display:grid;gap:.85rem}
.grade > *{min-width:0}   /* sem isso o input de data estica o grid e a pagina rola de lado */
.grade.g4{grid-template-columns:repeat(2,minmax(0,1fr));gap:.6rem}
@media (min-width:640px){
  .grade.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
  .grade.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (min-width:1000px){.grade.g4{grid-template-columns:repeat(4,minmax(0,1fr));gap:.85rem}}
.linha{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.entre{display:flex;align-items:center;justify-content:space-between;gap:.6rem;flex-wrap:wrap}

/* metricas */
.metrica{
  background:var(--superficie);border:1px solid var(--borda);border-radius:var(--r-m);
  padding:.75rem .85rem;display:flex;flex-direction:column;gap:.15rem;min-width:0
}
.metrica .valor{font-size:1.55rem;font-weight:680;letter-spacing:-.03em;line-height:1.1}
.metrica .rot{font-size:.745rem;color:var(--texto2);line-height:1.3}
.metrica.destaque{border-color:color-mix(in srgb,var(--marca) 35%,var(--borda));background:var(--marca-suave)}
.metrica.destaque .valor{color:var(--marca)}

/* etiquetas */
.etiqueta{
  display:inline-flex;align-items:center;gap:.28rem;padding:.16rem .5rem;border-radius:999px;
  font-size:.735rem;font-weight:600;line-height:1.45;background:var(--superficie2);color:var(--texto2);
  border:1px solid transparent;white-space:nowrap
}
.etiqueta .ico{width:13px;height:13px}
.etiqueta.ok{background:var(--ok-suave);color:var(--ok)}
.etiqueta.alerta{background:var(--alerta-suave);color:var(--alerta)}
.etiqueta.ruim{background:var(--ruim-suave);color:var(--ruim)}
.etiqueta.marca{background:var(--marca-suave);color:var(--marca)}
.etiqueta.info{background:var(--info-suave);color:var(--info)}
.etiqueta.contorno{background:transparent;border-color:var(--borda-forte);color:var(--texto2)}

/* botoes */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.4rem;
  padding:.56rem .9rem;border:1px solid transparent;border-radius:10px;
  background:var(--marca);color:#fff;font:inherit;font-size:.885rem;font-weight:600;
  cursor:pointer;transition:var(--trans);white-space:nowrap;text-decoration:none
}
.btn:hover{background:var(--marca-forte);color:#fff}
.btn:active{transform:translateY(1px)}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.btn .ico{width:16px;height:16px}
.btn.suave{background:var(--superficie2);color:var(--texto);border-color:var(--borda)}
.btn.suave:hover{background:var(--superficie3);color:var(--texto)}
.btn.ghost{background:transparent;color:var(--texto2);border-color:var(--borda)}
.btn.ghost:hover{background:var(--superficie2);color:var(--texto)}
.btn.perigo{background:var(--ruim)}
.btn.perigo:hover{background:color-mix(in srgb,var(--ruim) 82%,#000)}
.btn.ia{background:linear-gradient(120deg,var(--marca),#2563eb);box-shadow:0 4px 14px -6px var(--marca)}
.btn.ia:hover{filter:brightness(1.08)}
.btn.pequeno{padding:.35rem .65rem;font-size:.8rem;border-radius:8px}
.btn.pequeno .ico{width:14px;height:14px}
.btn.bloco{width:100%}

/* formularios */
label{display:block;margin:.85rem 0 .3rem;font-size:.82rem;font-weight:600;color:var(--texto2)}
label.inline{display:flex;align-items:center;gap:.55rem;margin:.7rem 0 0;font-weight:500;color:var(--texto);cursor:pointer}
input,select,textarea,.campo{
  width:100%;padding:.58rem .7rem;font:inherit;font-size:.92rem;color:var(--texto);
  background:var(--superficie);border:1px solid var(--borda-forte);border-radius:10px;
  transition:border-color var(--trans),box-shadow var(--trans)
}
input[type=checkbox]{width:18px;height:18px;accent-color:var(--marca);cursor:pointer}
input[type=color]{height:42px;padding:.2rem;cursor:pointer}
/* o widget nativo de data/hora tem largura minima propria; sem isto ele empurra o layout */
input[type=date],input[type=time],input[type=number]{min-width:0}
textarea{min-height:120px;resize:vertical;line-height:1.6}
input:focus,select:focus,textarea:focus{
  outline:none;border-color:var(--marca);box-shadow:0 0 0 3px var(--marca-suave)
}
select{appearance:none;cursor:pointer;padding-right:2rem;
  background-image:linear-gradient(45deg,transparent 50%,var(--texto3) 50%),linear-gradient(135deg,var(--texto3) 50%,transparent 50%);
  background-position:calc(100% - 15px) 52%,calc(100% - 10px) 52%;
  background-size:5px 5px,5px 5px;background-repeat:no-repeat}
.dica{margin-top:.3rem;font-size:.79rem;color:var(--texto3);line-height:1.5}
fieldset{border:1px solid var(--borda);border-radius:var(--r-m);padding:.5rem .85rem .85rem;margin:.9rem 0 0}
legend{padding:0 .35rem;font-size:.78rem;font-weight:700;color:var(--texto2);text-transform:uppercase;letter-spacing:.05em}

/* avisos */
.flash{
  display:flex;align-items:flex-start;gap:.55rem;padding:.7rem .85rem;margin-bottom:.9rem;
  border-radius:var(--r-m);font-size:.88rem;font-weight:500;border:1px solid transparent
}
.flash .ico{width:17px;height:17px;margin-top:.1rem}
.flash.ok{background:var(--ok-suave);color:var(--ok);border-color:color-mix(in srgb,var(--ok) 22%,transparent)}
.flash.erro{background:var(--ruim-suave);color:var(--ruim);border-color:color-mix(in srgb,var(--ruim) 22%,transparent)}
.flash.aviso{background:var(--alerta-suave);color:var(--alerta);border-color:color-mix(in srgb,var(--alerta) 22%,transparent)}

/* listas */
.lista{display:grid;gap:.45rem;grid-template-columns:minmax(0,1fr)}  /* minmax(0) impede o item de crescer com o texto */
.item{
  display:flex;align-items:center;gap:.7rem;padding:.7rem .8rem;color:inherit;
  background:var(--superficie);border:1px solid var(--borda);border-radius:var(--r-m);transition:var(--trans)
}
a.item:hover{border-color:var(--borda-forte);background:var(--superficie2)}
.item .corpo{flex:1;min-width:0;display:block}
.item .titulo{display:block;font-size:.9rem;font-weight:600;color:var(--texto);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item .sub{display:block;margin-top:.1rem;font-size:.795rem;color:var(--texto2);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item .fim{display:flex;align-items:center;gap:.15rem;flex:none}
.item .fim .icone-btn{width:32px;height:32px}
.item .fim .icone-btn .ico{width:17px;height:17px}
.pino{
  width:32px;height:32px;flex:none;border-radius:9px;display:grid;place-items:center;
  background:var(--superficie2);color:var(--texto2)
}
.pino .ico{width:17px;height:17px}
.pino.marca{background:var(--marca-suave);color:var(--marca)}
.pino.ok{background:var(--ok-suave);color:var(--ok)}
.pino.alerta{background:var(--alerta-suave);color:var(--alerta)}
.pino.ruim{background:var(--ruim-suave);color:var(--ruim)}
.bolinha{width:9px;height:9px;border-radius:50%;flex:none}
.data-grupo{margin:.9rem 0 .3rem;font-size:.75rem;font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:var(--texto3)}
.data-grupo:first-child{margin-top:0}

/* tabelas */
.tabela-rolagem{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--borda);
  border-radius:var(--r-m);background:var(--superficie)}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:.885rem}
th,td{padding:.6rem .75rem;text-align:left;white-space:nowrap;border-bottom:1px solid var(--borda)}
th{position:sticky;top:0;z-index:1;background:var(--superficie2);color:var(--texto2);
  font-size:.71rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
tbody tr:last-child td{border-bottom:0}
tbody tr:hover td{background:var(--superficie2)}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
.col-presa{position:sticky;left:0;z-index:2;background:var(--superficie);
  box-shadow:1px 0 0 var(--borda)}
th.col-presa{z-index:3;background:var(--superficie2)}
tbody tr:hover td.col-presa{background:var(--superficie2)}
.grade-notas input{width:74px;padding:.32rem .3rem;text-align:center;font-variant-numeric:tabular-nums}
.linha-clicavel{cursor:pointer}
/* nome dentro de lista/tabela nao precisa gritar de azul; o hover mostra que e clicavel */
.item .titulo a,td a{color:inherit}
.item .titulo a:hover,td a:hover{color:var(--marca)}

/* tabela que vira lista no celular: cada linha vira um bloco com o rotulo na frente.
   So vale pra tabela marcada como .responsiva — a grade de notas continua rolando. */
@media (max-width:639px){
  .tabela-rolagem:has(.responsiva){border:0;background:transparent;overflow:visible}
  table.responsiva thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  table.responsiva tr{display:grid;grid-template-columns:1fr auto;gap:.15rem .6rem;
    padding:.65rem .8rem;margin-bottom:.45rem;background:var(--superficie);
    border:1px solid var(--borda);border-radius:var(--r-m)}
  table.responsiva td{display:flex;align-items:center;gap:.4rem;padding:0;border:0;white-space:normal}
  table.responsiva td::before{content:attr(data-rot);font-size:.73rem;color:var(--texto3);font-weight:600}
  table.responsiva td:first-child{grid-column:1/-1;font-weight:600;font-size:.94rem;margin-bottom:.15rem}
  table.responsiva td:first-child::before{display:none}
  table.responsiva td.num{justify-content:flex-start;text-align:left}
  table.responsiva tbody tr:hover td{background:transparent}
}

/* estado vazio */
.vazio{display:grid;justify-items:center;gap:.5rem;padding:2rem 1rem;text-align:center;color:var(--texto2)}
.vazio .simbolo{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;
  background:var(--superficie2);color:var(--texto3)}
.vazio .simbolo .ico{width:22px;height:22px}
.vazio p{font-size:.89rem;max-width:34ch}

/* barras e mini-graficos */
.barra{height:7px;border-radius:999px;background:var(--superficie3);overflow:hidden}
.barra i{display:block;height:100%;border-radius:999px;background:var(--marca);transition:width var(--trans)}
.barra i.ok{background:var(--ok)} .barra i.alerta{background:var(--alerta)} .barra i.ruim{background:var(--ruim)}
.colunas{display:flex;align-items:stretch;gap:5px;height:56px;margin:.8rem 0 .6rem}
.colunas i{flex:1;position:relative;background:var(--superficie2);border-radius:5px}
.colunas i b{position:absolute;inset:auto 0 0;display:block;border-radius:5px;
  background:linear-gradient(180deg,var(--marca),color-mix(in srgb,var(--marca) 70%,#2a78d6))}
.colunas-rot{display:flex;gap:5px}
.colunas-rot span{flex:1;text-align:center;font-size:.7rem;color:var(--texto3)}

/* abas e chips */
.abas{display:flex;gap:.15rem;overflow-x:auto;scrollbar-width:none;margin-bottom:1rem;
  border-bottom:1px solid var(--borda)}
.abas::-webkit-scrollbar{display:none}
.abas a{padding:.5rem .75rem;font-size:.865rem;font-weight:600;color:var(--texto2);
  white-space:nowrap;border-bottom:2px solid transparent;margin-bottom:-1px;transition:var(--trans)}
.abas a:hover{color:var(--texto)}
.abas a.ativo{color:var(--marca);border-bottom-color:var(--marca)}
.chip{display:inline-flex;align-items:center;gap:.3rem;padding:.32rem .7rem;border-radius:999px;
  border:1px solid var(--borda-forte);background:var(--superficie);color:var(--texto2);
  font-size:.82rem;font-weight:500;cursor:pointer;transition:var(--trans)}
.chip:hover{background:var(--superficie2);color:var(--texto)}
.chip.ativo{background:var(--marca-suave);border-color:transparent;color:var(--marca);font-weight:600}
.chip .ico{width:14px;height:14px}

/* texto gerado pela IA */
.texto-ia{font-size:.92rem;line-height:1.68;color:var(--texto)}
.texto-ia p{margin:.5rem 0;white-space:pre-wrap}
.texto-ia h3{margin:1.1rem 0 .35rem;font-size:.9rem;color:var(--marca);letter-spacing:0}
.texto-ia ul,.texto-ia ol{margin:.4rem 0 .7rem;padding-left:1.25rem}
.texto-ia li{margin:.22rem 0}
.texto-ia > *:first-child{margin-top:0}
.texto-ia.placeholder{color:var(--texto2)}
.marca-dagua{display:flex;align-items:center;gap:.4rem;margin-top:.7rem;font-size:.755rem;color:var(--texto3)}
.marca-dagua .ico{width:13px;height:13px}

/* competencias da redacao */
.comp{padding:.8rem;border:1px solid var(--borda);border-radius:var(--r-m);background:var(--superficie)}
.comp + .comp{margin-top:.5rem}
.comp .nota{font-size:1.02rem;font-weight:700;font-variant-numeric:tabular-nums}
.comp .nota small{font-weight:500;color:var(--texto3)}
.comp p{margin:.45rem 0 0;font-size:.83rem;color:var(--texto2);line-height:1.55}


/* ------------------------------------------------- modal de formulario -- */
.modalx-fundo{position:fixed;inset:0;z-index:55;display:flex;align-items:flex-end;justify-content:center;
  background:rgba(9,11,15,.5);backdrop-filter:blur(3px);animation:surge .14s ease}
.modalx{display:flex;flex-direction:column;width:100%;max-height:92dvh;
  background:var(--superficie);border-radius:var(--r-g) var(--r-g) 0 0;box-shadow:var(--sombra-3);
  animation:sobeFolha .2s cubic-bezier(.2,.9,.3,1)}
.modalx-topo{display:flex;align-items:center;gap:.6rem;padding:.9rem 1rem;border-bottom:1px solid var(--borda)}
.modalx-topo h3{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.modalx-topo .pino{width:30px;height:30px}
.modalx-corpo{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:1rem;-webkit-overflow-scrolling:touch}
/* dentro do modal o cartao vira secao simples: quem desenha a moldura e o modal */
.modalx-corpo .cartao{border:0;box-shadow:none;padding:0;background:transparent}
.modalx-corpo .cartao + .cartao{margin-top:1.1rem;padding-top:1.1rem;border-top:1px solid var(--borda)}
.modalx-corpo .cartao-topo h2{font-size:.8rem;text-transform:uppercase;letter-spacing:.05em;color:var(--texto3)}
.modalx-corpo .cartao-topo h2 .ico{width:15px;height:15px}
.modalx-corpo > *:first-child > label:first-child{margin-top:0}
.acoes-form{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:1rem}
.modalx-corpo .acoes-form{position:sticky;bottom:-1rem;margin:1.1rem -1rem -1rem;padding:.85rem 1rem;
  background:var(--superficie);border-top:1px solid var(--borda);z-index:2}
@media (min-width:640px){
  .modalx-fundo{align-items:center;padding:1.2rem}
  .modalx{max-width:560px;border-radius:var(--r-g);animation:sobe .18s cubic-bezier(.2,.9,.3,1)}
  .modalx.largo{max-width:900px}
}
@keyframes sobeFolha{from{transform:translateY(14px);opacity:.6}}

/* esqueleto de carregamento */
.esqueleto{display:grid;gap:.6rem;padding:.3rem 0}
.esqueleto span{display:block;height:14px;border-radius:7px;
  background:linear-gradient(90deg,var(--superficie2),var(--superficie3),var(--superficie2));
  background-size:200% 100%;animation:brilho 1.2s ease-in-out infinite}
@keyframes brilho{to{background-position:-200% 0}}

/* ---------------------------------------------------------- barra busca -- */
.busca{position:relative;flex:1;min-width:160px}
.busca .ico{position:absolute;left:.62rem;top:50%;transform:translateY(-50%);
  width:16px;height:16px;color:var(--texto3);pointer-events:none}
.busca input{padding-left:2.05rem}
.busca input::-webkit-search-cancel-button{cursor:pointer}
.barra-ferramentas{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap;margin-bottom:.9rem}
.barra-ferramentas select{width:auto;min-width:150px;max-width:100%}
/* no celular a busca fica com a linha inteira e os filtros descem pra linha de baixo */
@media (max-width:639px){
  .barra-ferramentas .busca{flex:1 1 100%}
  .cartao-topo .busca{flex:1 1 100%;order:3}
}
.atalho{display:none;position:absolute;right:.5rem;top:50%;transform:translateY(-50%);
  padding:.05rem .35rem;border:1px solid var(--borda-forte);border-radius:5px;
  font-size:.7rem;color:var(--texto3);background:var(--superficie2)}
@media (min-width:900px){.busca:not(:focus-within) .atalho{display:block}}

/* resultado da busca global */
.res-grupo{margin:.7rem 0 .25rem;font-size:.7rem;font-weight:700;letter-spacing:.06em;
  text-transform:uppercase;color:var(--texto3)}
.res-grupo:first-child{margin-top:0}

/* modal e overlay */
.modal-fundo{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:1rem;
  background:rgba(9,11,15,.5);backdrop-filter:blur(3px);animation:surge .14s ease}
.modal{width:min(430px,100%);padding:1.15rem;border-radius:var(--r-g);background:var(--superficie);
  box-shadow:var(--sombra-3);animation:sobe .18s cubic-bezier(.2,.9,.3,1)}
.modal h3{font-size:1.02rem}
.modal p{margin:.35rem 0 0;font-size:.89rem;color:var(--texto2);line-height:1.55}
.modal-botoes{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1.1rem}
.overlay-ia{position:fixed;inset:0;z-index:70;display:grid;place-items:center;padding:1rem;
  background:rgba(9,11,15,.55);backdrop-filter:blur(3px)}
.overlay-caixa{width:min(330px,100%);padding:1.5rem 1.2rem;border-radius:var(--r-g);text-align:center;
  background:var(--superficie);box-shadow:var(--sombra-3)}
.overlay-caixa p{margin:.85rem 0 .25rem;font-weight:600;font-size:.94rem}
.overlay-caixa small{display:block;margin-bottom:1rem}
.rodela{width:42px;height:42px;margin:0 auto;border-radius:50%;
  background:conic-gradient(from 0deg,transparent,var(--marca),#2a78d6,transparent);
  animation:girar 1s linear infinite;
  -webkit-mask:radial-gradient(circle 14px at center,transparent 98%,#000);
  mask:radial-gradient(circle 14px at center,transparent 98%,#000)}
@keyframes girar{to{transform:rotate(360deg)}}
@keyframes surge{from{opacity:0}}
@keyframes sobe{from{opacity:0;transform:translateY(10px) scale(.98)}}
@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* passos (primeiros passos) */
.passo{display:flex;gap:.85rem;align-items:flex-start;padding:.85rem 0}
.passo + .passo{border-top:1px solid var(--borda)}
.passo .numero{width:28px;height:28px;flex:none;border-radius:50%;display:grid;place-items:center;
  background:var(--superficie2);color:var(--texto2);font-size:.82rem;font-weight:700}
.passo.feito .numero{background:var(--ok-suave);color:var(--ok)}
.passo .corpo{flex:1;min-width:0}
.passo .corpo strong{display:block;font-size:.92rem}
.passo .corpo p{margin-top:.15rem;font-size:.83rem;color:var(--texto2)}

/* utilitarios */
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.mt{margin-top:.85rem}
.mt-p{margin-top:.5rem}
.centro{text-align:center}
.esticar{flex:1}

/* ======================================================= Economiza Aí: extras == */
.pos{color:var(--ok)} .neg{color:var(--ruim)}
.metrica .valor.pos{color:var(--ok)} .metrica .valor.neg{color:var(--ruim)}
.metrica small{font-size:.72rem;color:var(--texto3)}
.num{font-variant-numeric:tabular-nums}
.valor-item{font-variant-numeric:tabular-nums;font-size:.92rem;white-space:nowrap}
.valor-item.grande{font-size:1.15rem}
.valor-col{display:flex;flex-direction:column;align-items:flex-end;line-height:1.2}
.valor-col small{font-size:.68rem}
.item.pendente{border-style:dashed;opacity:.85}
.item .fim{gap:.45rem}
.tem-contexto{color:var(--texto3);display:inline-flex;vertical-align:-2px}
.tem-contexto .ico{width:13px;height:13px}
.apagado{opacity:.6}
.contexto-box{display:flex;gap:.45rem;align-items:flex-start;padding:.55rem .7rem;border-radius:var(--r-p);
  background:var(--superficie2);font-size:.82rem;color:var(--texto2);line-height:1.5}
.contexto-box .ico{width:14px;height:14px;margin-top:.2rem;flex:none;color:var(--texto3)}

/* ponto de importancia (1 cor por nivel, com title) */
.ponto-imp{width:9px;height:9px;border-radius:50%;flex:none;display:inline-block;background:var(--texto3)}
.ponto-imp.ok{background:var(--ok)} .ponto-imp.info{background:var(--info)} .ponto-imp.alerta{background:var(--alerta)} .ponto-imp.ruim{background:var(--ruim)}
.barra i.info{background:var(--info)}
.legenda i.ok-bg{background:var(--ok)} .legenda i.info-bg{background:var(--info)} .legenda i.alerta-bg{background:var(--alerta)} .legenda i.ruim-bg{background:var(--ruim)}

/* seletor de importancia */
.seletor-imp{display:flex;flex-wrap:wrap;gap:.35rem}
.opcao-imp{position:relative;margin:0;cursor:pointer;font-weight:500;color:var(--texto)}
.opcao-imp input{position:absolute;opacity:0;width:0;height:0}
.opcao-imp span{display:inline-flex;align-items:center;padding:.38rem .7rem;border-radius:999px;border:1px solid var(--borda-forte);
  background:var(--superficie);font-size:.82rem;transition:var(--trans)}
.opcao-imp input:checked + span{border-color:transparent;font-weight:650;background:var(--marca-suave);color:var(--marca)}
.opcao-imp.ok input:checked + span{background:var(--ok-suave);color:var(--ok)}
.opcao-imp.info input:checked + span{background:var(--info-suave);color:var(--info)}
.opcao-imp.alerta input:checked + span{background:var(--alerta-suave);color:var(--alerta)}
.opcao-imp.ruim input:checked + span{background:var(--ruim-suave);color:var(--ruim)}
.opcao-imp input:focus-visible + span{outline:2px solid var(--marca);outline-offset:2px}

/* abas de tipo (despesa / receita / transferencia) */
.abas-tipo{display:flex;gap:.3rem;padding:.25rem;border-radius:12px;background:var(--superficie2);margin-bottom:.4rem}
.aba-tipo{flex:1;margin:0;position:relative;cursor:pointer}
.aba-tipo input{position:absolute;opacity:0;width:0;height:0}
.aba-tipo span{display:block;text-align:center;padding:.5rem .4rem;border-radius:9px;font-size:.85rem;font-weight:600;color:var(--texto2);transition:var(--trans)}
.aba-tipo input:checked + span{background:var(--superficie);box-shadow:var(--sombra-1);color:var(--texto)}
.aba-tipo.despesa input:checked + span{color:var(--ruim)}
.aba-tipo.receita input:checked + span{color:var(--ok)}
.aba-tipo.transferencia input:checked + span{color:var(--info)}

/* campo de dinheiro */
.campo-valor{display:flex;align-items:center;border:1px solid var(--borda-forte);border-radius:10px;background:var(--superficie);
  transition:border-color var(--trans),box-shadow var(--trans)}
.campo-valor:focus-within{border-color:var(--marca);box-shadow:0 0 0 3px var(--marca-suave)}
.campo-valor span{padding:0 .3rem 0 .7rem;color:var(--texto3);font-weight:600;font-size:.9rem}
.campo-valor input{border:0;background:transparent;box-shadow:none;font-size:1.15rem;font-weight:650;font-variant-numeric:tabular-nums;padding-left:.2rem}
.campo-valor input:focus{box-shadow:none;border:0}
#form-lanc .campo-valor input,#form-rec .campo-valor input{font-size:1.5rem}

/* seletor de icone da categoria */
.seletor-icone{display:flex;flex-wrap:wrap;gap:.25rem}
.seletor-icone label{margin:0;position:relative;cursor:pointer}
.seletor-icone input{position:absolute;opacity:0;width:0;height:0}
.seletor-icone span{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;border:1px solid var(--borda);color:var(--texto2)}
.seletor-icone input:checked + span{background:var(--marca-suave);color:var(--marca);border-color:transparent}

/* navegacao de mes */
.nav-mes{display:inline-flex;align-items:center;gap:.1rem;border:1px solid var(--borda);border-radius:10px;background:var(--superficie);padding:.1rem}
.nav-mes input{border:0;width:auto;min-width:0;padding:.3rem .2rem;font-weight:600;font-size:.85rem;background:transparent;text-align:center}
.nav-mes input:focus{box-shadow:none}
.nav-mes .icone-btn{width:32px;height:32px}

/* graficos */
.grafico-caixa{position:relative;height:210px;margin-top:.5rem}
.grafico-caixa.alto{height:260px} .grafico-caixa.baixo{height:150px}
.rosca-wrap{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin-top:.4rem}
.rosca{position:relative;width:150px;height:150px;flex:none}
.legenda{list-style:none;margin:0;padding:0;flex:1;min-width:150px;display:grid;gap:.3rem}
.legenda li{display:flex;align-items:center;gap:.5rem;font-size:.83rem}
.legenda i{width:10px;height:10px;border-radius:3px;flex:none}
.legenda .nome{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--texto2)}
.legenda .num{font-weight:600}
.legenda-linha{display:flex;gap:1rem;justify-content:center;margin-top:.4rem;font-size:.76rem;color:var(--texto2)}
.legenda-linha span{display:inline-flex;align-items:center;gap:.35rem}
.legenda-linha i{width:10px;height:10px;border-radius:3px}
.l-rec{background:#1baf7a} .l-desp{background:#e34948} .l-saldo{background:#2a78d6}
.orc-linha{padding:.5rem 0;border-bottom:1px solid var(--borda);font-size:.86rem}
.orc-linha:last-child{border-bottom:0}
.orc-linha .barra{margin-top:.35rem}
.orc-linha small{display:block;margin-top:.25rem;font-size:.74rem}
.barra.mini{height:4px;margin-top:.3rem;max-width:280px}

/* IA */
.cartao-ia{border-color:color-mix(in srgb,var(--marca) 30%,var(--borda));background:linear-gradient(160deg,var(--marca-suave),var(--superficie) 55%)}
.proximo-passo{display:flex;gap:.5rem;align-items:flex-start;padding:.65rem .8rem;border-radius:var(--r-m);background:var(--marca-suave);color:var(--texto);font-size:.88rem;line-height:1.5}
.proximo-passo .ico{color:var(--marca);flex:none;margin-top:.15rem}
.analise-topo{display:flex;gap:.9rem;align-items:flex-start}
.nota-circ{width:64px;height:64px;flex:none;border-radius:50%;display:grid;place-content:center;text-align:center;line-height:1;
  border:3px solid var(--texto3);font-weight:800;font-size:1.35rem;font-variant-numeric:tabular-nums}
.nota-circ small{font-size:.62rem;font-weight:600;color:var(--texto3)}
.nota-circ.ok{border-color:var(--ok);color:var(--ok)} .nota-circ.alerta{border-color:var(--alerta);color:var(--alerta)} .nota-circ.ruim{border-color:var(--ruim);color:var(--ruim)}
.bloco-ia{padding:.8rem .9rem;border-radius:var(--r-m);border:1px solid var(--borda);background:var(--superficie)}
.bloco-ia h3{display:flex;align-items:center;gap:.4rem;font-size:.82rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.4rem}
.bloco-ia.ruim h3{color:var(--ruim)} .bloco-ia.alerta h3{color:var(--alerta)} .bloco-ia.info h3{color:var(--info)} .bloco-ia.ok h3{color:var(--ok)}
.bloco-ia ul{margin:0;padding-left:1.1rem;font-size:.86rem;line-height:1.5}
.bloco-ia li{margin:.3rem 0}
.bloco-ia li p{margin:.1rem 0 0;color:var(--texto2);font-size:.8rem}
.bloco-ia .dica{margin-top:.5rem}

/* chat */
.grade-chat{display:grid;gap:.85rem}
@media (min-width:1000px){.grade-chat{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}}
.chat-cartao{display:flex;flex-direction:column;padding:0;overflow:hidden;min-height:420px;max-height:calc(100dvh - 220px)}
.chat{flex:1;overflow-y:auto;padding:1rem;display:flex;flex-direction:column;gap:.6rem;scroll-behavior:smooth}
.chat-vazio{text-align:center;padding:1.5rem .5rem;color:var(--texto2);font-size:.88rem;display:grid;gap:.7rem;justify-items:center}
.balao{max-width:85%;padding:.65rem .85rem;border-radius:14px;font-size:.9rem;line-height:1.55}
.balao small{display:block;margin-top:.25rem;font-size:.68rem;color:var(--texto3)}
.balao.usuario{align-self:flex-end;background:var(--marca);color:#fff;border-bottom-right-radius:4px}
.balao.usuario small{color:rgba(255,255,255,.7)}
.balao.ia{align-self:flex-start;background:var(--superficie2);border-bottom-left-radius:4px}
.balao.ia .texto-ia p{margin:.3rem 0}
.balao.pensando{color:var(--texto3);font-style:italic}
.balao .memorias-novas{margin-top:.5rem;padding-top:.45rem;border-top:1px dashed var(--borda-forte);font-size:.76rem;color:var(--texto2)}
.chat-form{display:flex;gap:.5rem;padding:.7rem;border-top:1px solid var(--borda);background:var(--superficie)}
.chat-form textarea{min-height:44px;max-height:160px;resize:none;line-height:1.4}
.chat-form .btn{width:46px;padding:0;flex:none}
.memorias{list-style:none;margin:.3rem 0 0;padding:0;display:grid;gap:.3rem}
.memorias li{display:flex;align-items:center;gap:.4rem;padding:.4rem .55rem;border-radius:var(--r-p);background:var(--superficie2);font-size:.82rem;line-height:1.4}
.memorias li span{flex:1;min-width:0}
.memorias li small{font-size:.66rem;color:var(--texto3);white-space:nowrap}
.memorias li .icone-btn{width:26px;height:26px}
.memorias li .icone-btn .ico{width:14px;height:14px}
#btn-novo-topo span{display:none}
@media (min-width:640px){#btn-novo-topo span{display:inline}}
.flash.ok strong,.flash.erro strong{font-weight:700}

/* cartoes */
.item-cartao{border-style:dashed}
.item-add{border-style:dashed;opacity:.75}
.item-add:hover{opacity:1}
.item-add .pino{background:transparent}
h1.linha .pino{width:34px;height:34px}

/* sugestao de categorias novas na importacao */
.sugestao-novas{margin:.8rem 0;padding:.75rem .9rem;border-radius:var(--r-m);background:var(--marca-suave);border:1px solid color-mix(in srgb,var(--marca) 30%,transparent)}
.sugestao-novas .ico{color:var(--marca)}
.chip-nova{gap:.4rem;border-style:dashed}
.chip-nova.pequeno{padding:.2rem .5rem;font-size:.74rem}
.chip-nova.ativo{border-style:solid;background:var(--ok-suave);color:var(--ok)}
.chip-nova:disabled{cursor:default}
