/* Painel de Sistemas — Ponto Mix Express.
   Visual aprovado no mockup. As adições estão marcadas com [NOVO] e existem
   só porque o dado real exige: dia sem amostra, coleta parada e login. */
:root{
  color-scheme: dark;
  --bg:#040405;
  --surface:#0c0c0f; --surface-2:#0f0f13; --surface-hi:#141419;
  --line:#191920; --line-hi:#28282f;
  --ink:#f6f5f0; --ink-2:#96959f; --ink-3:#5b5a64;
  --good:#22c55e; --warning:#fab219; --critical:#f0484a;
  --good-glow:rgba(34,197,94,.22); --crit-glow:rgba(240,72,74,.22);
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{color:var(--ink);background:var(--bg);
  font:14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}

/* ---------- CAPA ---------- */
#intro{position:fixed;inset:0;z-index:20;background:#020203;overflow:hidden;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;transition:opacity .7s ease, visibility .7s}
#intro.gone{opacity:0;visibility:hidden}
#intro.skip{display:none}
#intro .glow{position:absolute;top:50%;left:50%;width:120vmin;height:120vmin;transform:translate(-50%,-50%);
  pointer-events:none;border-radius:50%;
  background:radial-gradient(closest-side, rgba(120,140,190,.13), rgba(90,100,150,.05) 45%, transparent 70%);animation:breathe 7s ease-in-out infinite}
#intro .grain{position:absolute;inset:0;opacity:.05;pointer-events:none;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>")}
#intro .vign{position:absolute;inset:0;pointer-events:none;background:radial-gradient(62% 62% at 50% 50%, transparent 45%, rgba(0,0,0,.7) 100%)}
.hero{position:relative;text-align:center;padding:0 24px;display:flex;flex-direction:column;align-items:center;animation:floaty 7s ease-in-out 1.7s infinite}
.hero .word{margin:0;font-weight:600;letter-spacing:-.04em;line-height:.9;font-size:clamp(54px,13vw,164px)}
.hero .word .l{display:block;overflow:hidden}
/* [NOVO] O gradiente vai NO SPAN, não no h1 ancestral.
   Com `background-clip:text` no pai, os glifos ficam invisíveis: eles moram
   nestes spans, que têm animação própria e viram camada de composição —
   pintam por cima do fundo já recortado do pai. Resultado: título sumido.
   `background-size:100% 200%` + posição por linha mantém UM gradiente
   contínuo atravessando as duas linhas, como no mockup aprovado. */
.hero .word .l span{display:block;transform:translateY(106%);
  background-image:linear-gradient(180deg,#ffffff 0%,#cfcfd7 52%,#7f7f89 100%);
  background-size:100% 200%;-webkit-background-clip:text;background-clip:text;color:transparent;
  animation:reveal 1.05s cubic-bezier(.16,.85,.28,1) forwards}
.hero .word .l:nth-child(1) span{animation-delay:.35s;background-position:0 0}
.hero .word .l:nth-child(2) span{animation-delay:.5s;background-position:0 100%}
.enter{display:inline-block;margin-top:32px;font-size:13px;letter-spacing:.34em;text-transform:uppercase;font-weight:600;color:var(--ink);
  padding-bottom:9px;border-bottom:1px solid rgba(255,255,255,.5);opacity:0;animation:fadeIn 1.1s 1.15s forwards;transition:letter-spacing .3s,border-color .3s}
#intro:hover .enter{letter-spacing:.42em;border-color:#fff}
.cfoot{position:absolute;bottom:8%;left:50%;transform:translateX(-50%);font-size:11.5px;letter-spacing:.34em;text-transform:uppercase;
  color:var(--ink-3);font-weight:600;display:flex;align-items:center;gap:10px;opacity:0;animation:fadeIn 1.1s 1.4s forwards}
.cfoot .d{width:6px;height:6px;border-radius:50%;background:var(--good);animation:pgood 2.2s infinite}
.cfoot .d.crit{background:var(--critical)}

@keyframes reveal{to{transform:none}}
@keyframes fadeIn{to{opacity:1}}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-13px)}}
@keyframes breathe{0%,100%{transform:translate(-50%,-50%) scale(1);opacity:.85}50%{transform:translate(-50%,-50%) scale(1.12);opacity:1}}
@keyframes pgood{0%,100%{box-shadow:0 0 0 0 var(--good-glow)}50%{box-shadow:0 0 0 5px transparent}}
@keyframes pcrit{0%{box-shadow:0 0 0 0 var(--crit-glow)}70%{box-shadow:0 0 0 7px transparent}100%{box-shadow:0 0 0 0 transparent}}
@keyframes rise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes grow{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important}}

/* ---------- PAINEL ---------- */
#dash{opacity:0;transition:opacity .8s ease .1s;position:relative}
#dash.show{opacity:1}
#dash::before{content:"";position:fixed;top:0;left:50%;transform:translateX(-50%);width:100vw;height:42vh;pointer-events:none;
  background:radial-gradient(48% 100% at 50% 0, rgba(120,140,190,.07), transparent 72%)}
.wrap{max-width:1080px;margin:0 auto;padding:34px 26px 90px;position:relative}
.anim{opacity:0} #dash.show .anim{animation:rise .6s cubic-bezier(.2,.7,.3,1) forwards;animation-delay:calc(var(--i,0)*45ms)}

header.top{display:flex;align-items:center;gap:12px}
.brandmark{width:7px;height:20px;border-radius:3px;background:linear-gradient(180deg,#fff,#7a7a84)}
header.top h1{font-size:19px;font-weight:600;letter-spacing:-.02em;margin:0}
header.top .muted{font-size:12px;color:var(--ink-3)}
.toolbar{margin-left:auto;display:flex;align-items:center;gap:14px}
.back{font-size:12px;color:var(--ink-3);cursor:pointer;background:none;border:none;padding:0;transition:color .2s;font-family:inherit}
.back:hover{color:var(--ink-2)}
.refresh{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:8px;font-variant-numeric:tabular-nums}
.pulse{width:7px;height:7px;border-radius:50%;background:var(--good);animation:pgood 2.2s infinite}
.pulse.parada{background:var(--critical);animation:pcrit 1.8s infinite}

.verdict{margin:28px 0 8px;font-size:clamp(22px,3vw,30px);font-weight:600;letter-spacing:-.02em;line-height:1.25}
.verdict .off{color:var(--critical)}
.verdict-sub{font-size:13px;color:var(--ink-2);margin-bottom:26px}

/* [NOVO] faixa de coleta parada — o painel tem que gritar quando cegou */
.aviso{margin:0 0 22px;padding:13px 16px;border-radius:12px;font-size:13px;
  background:rgba(240,72,74,.09);border:1px solid rgba(240,72,74,.32);color:#ffb9ba}
.aviso b{color:#fff;font-weight:600}

.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
@media(max-width:720px){.tiles{grid-template-columns:repeat(2,1fr)}}
.tile{background:var(--surface-2);border:1px solid var(--line);border-radius:16px;padding:18px 18px 17px;transition:border-color .25s,transform .25s}
.tile:hover{border-color:var(--line-hi);transform:translateY(-2px)}
.tile .k{font-size:10.5px;color:var(--ink-3);font-weight:600;letter-spacing:.06em;text-transform:uppercase;margin-bottom:13px}
.tile .v{font-size:30px;font-weight:640;letter-spacing:-.035em;line-height:1;font-variant-numeric:tabular-nums}
.tile .v small{font-size:14px;font-weight:520;color:var(--ink-2)}
.tile .sub{font-size:11.5px;color:var(--ink-2);margin-top:9px}

.sec{font-size:10.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin:36px 2px 15px;display:flex;align-items:center;gap:12px}
.sec::after{content:"";flex:1;height:1px;background:var(--line)}
.sec .note{text-transform:none;letter-spacing:0;font-weight:500}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:20px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:18px;display:flex;flex-direction:column;gap:0;transition:border-color .25s,transform .25s,box-shadow .25s}
.card:hover{border-color:var(--line-hi);transform:translateY(-2px);box-shadow:0 14px 40px rgba(0,0,0,.35)}
.card .row1{display:flex;align-items:center;gap:10px}
.card .name{font-weight:580;font-size:15px;letter-spacing:-.01em}
.card .st{margin-left:auto;display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:580}
.card .st .dot{width:7px;height:7px;border-radius:50%}
.st.good{color:var(--good)} .st.good .dot{background:var(--good);animation:pgood 2.4s infinite}
.st.warning{color:var(--warning)} .st.warning .dot{background:var(--warning)}
.st.critical{color:var(--critical)} .st.critical .dot{background:var(--critical);animation:pcrit 1.8s infinite}
.card .port{font-size:11px;color:var(--ink-3);font-family:var(--mono);margin-top:3px}

.metrics{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;margin:16px 0 15px}
.metrics .lab{font-size:10px;color:var(--ink-3);letter-spacing:.03em;margin-bottom:4px}
.metrics .val{font-size:14px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.metrics .val.dim{color:var(--ink-2);font-weight:520;font-size:13px}
/* [NOVO] valor que não temos fonte para afirmar */
.metrics .val.vazio{color:var(--ink-3);font-weight:520;font-size:14px;cursor:help;border-bottom:1px dotted var(--ink-3);display:inline-block;line-height:1.2}
.extra{font-size:12px;color:var(--good);margin:-6px 0 15px}
.extra.alerta{color:var(--warning)}
.cat{font-size:12px;color:var(--ink-2);margin:-4px 0 15px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cat b{color:var(--ink);font-weight:600}
.cat .tagm{font-size:10px;color:var(--ink-3);border:1px solid var(--line-hi);border-radius:5px;padding:1px 6px;letter-spacing:.03em}

.spark{display:flex;align-items:center;gap:11px;padding-top:15px;border-top:1px solid var(--line)}
.spark .lab{font-size:10px;color:var(--ink-3);letter-spacing:.03em}
.bars{display:flex;gap:3px;margin-left:auto;align-items:flex-end}
.bars i{width:11px;height:20px;border-radius:2.5px;display:block;transform-origin:bottom;opacity:.9}
#dash.show .bars i{animation:grow .55s cubic-bezier(.2,.7,.3,1) forwards;animation-delay:calc(var(--b,0)*40ms + .35s);transform:scaleY(0)}
.bars i.g{background:var(--good)} .bars i.w{background:var(--warning)} .bars i.c{background:var(--critical)}
/* [NOVO] dia sem amostra: o painel ainda não estava vivo para ver */
.bars i.n{background:var(--line-hi)}

.listcard{background:var(--surface);border:1px solid var(--line);border-radius:16px;overflow:hidden}
.li{display:flex;align-items:center;gap:13px;padding:15px 18px;border-top:1px solid var(--line);transition:background .2s}
.li:first-child{border-top:none} .li:hover{background:var(--surface-hi)}
.li .sdot{width:8px;height:8px;border-radius:50%;flex:none}
.li .sdot.good{background:var(--good);box-shadow:0 0 9px var(--good-glow)} .li .sdot.critical{background:var(--critical);box-shadow:0 0 9px var(--crit-glow)}
.li .nm{font-weight:540;font-size:14px} .li .when{font-size:12.5px;color:var(--ink-2);margin-left:auto;font-variant-numeric:tabular-nums;text-align:right}

footer{margin-top:38px;padding-top:20px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-3);display:flex;flex-wrap:wrap;gap:6px 20px;align-items:center}
footer b{color:var(--good);font-weight:600}
.legend{display:flex;gap:16px;flex-wrap:wrap;margin-left:auto}
.legend span{display:inline-flex;align-items:center;gap:7px} .legend i{width:8px;height:8px;border-radius:2px;display:block}
.sair{background:none;border:none;color:var(--ink-3);font-size:12px;cursor:pointer;padding:0;font-family:inherit;text-decoration:underline}
.sair:hover{color:var(--ink-2)}

/* ---------- [NOVO] LOGIN ---------- */
.loginwrap{min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px;position:relative}
.loginwrap .glow{position:fixed;top:50%;left:50%;width:120vmin;height:120vmin;transform:translate(-50%,-50%);
  pointer-events:none;border-radius:50%;
  background:radial-gradient(closest-side, rgba(120,140,190,.10), rgba(90,100,150,.04) 45%, transparent 70%)}
.loginbox{position:relative;width:100%;max-width:355px;background:var(--surface);border:1px solid var(--line);
  border-radius:18px;padding:32px 30px 28px;animation:rise .6s cubic-bezier(.2,.7,.3,1) both}
.loginbox h1{margin:0 0 4px;font-size:20px;font-weight:600;letter-spacing:-.02em}
.loginbox .sub{font-size:12.5px;color:var(--ink-3);margin-bottom:24px}
.loginbox label{display:block;font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);margin:0 0 7px}
.loginbox input{width:100%;background:var(--bg);border:1px solid var(--line-hi);border-radius:10px;color:var(--ink);
  padding:11px 13px;font-size:14px;font-family:inherit;margin-bottom:16px;transition:border-color .2s}
.loginbox input:focus{outline:none;border-color:#3d3d47}
.loginbox button{width:100%;background:var(--ink);color:#08080a;border:none;border-radius:10px;padding:12px;
  font-size:13px;font-weight:600;letter-spacing:.02em;cursor:pointer;font-family:inherit;transition:opacity .2s}
.loginbox button:hover{opacity:.88}
.loginerro{background:rgba(240,72,74,.1);border:1px solid rgba(240,72,74,.3);color:#ffb9ba;
  border-radius:10px;padding:10px 13px;font-size:12.5px;margin-bottom:18px}
.loginfoot{margin-top:20px;font-size:11px;color:var(--ink-3);text-align:center;letter-spacing:.02em}

/* ---------- [NOVO] ERRO ---------- */
.erro{max-width:460px;margin:18vh auto;padding:0 24px;text-align:center}
.erro h1{font-size:20px;font-weight:600;margin:0 0 8px;letter-spacing:-.02em}
.erro p{color:var(--ink-2);font-size:13.5px;margin:0 0 22px}
.erro a{color:var(--ink);font-size:12.5px}
