/* =====================================================================
   Base, cabeçalho, trilho de filtros, barra de controles e rodapé.
   ===================================================================== */
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  background:var(--bg); color:var(--text); font-family:var(--sans);
  font-size:var(--fs-md); line-height:1.55; -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
a{color:inherit;text-decoration:none}
button,input,select{font:inherit;color:inherit}
button{background:none;border:none;cursor:pointer}
:focus-visible{outline:2px solid var(--purple-2);outline-offset:2px;border-radius:4px}
::selection{background:var(--select)}

/* Ambiência do fundo. É o único brilho de página inteira; os elementos em
   si ficam sem halo. */
.aura{position:fixed;inset:0;pointer-events:none;z-index:0;
  background:radial-gradient(820px 440px at 15% -10%, var(--aura), transparent 64%)}

.container{width:100%;max-width:var(--max);margin:0 auto;padding:0 24px}

/* ===== CABEÇALHO =====
   Só a marca. O logotipo é um PNG com margem interna própria, então um
   deslocamento negativo alinha o desenho — e não a caixa do arquivo — à
   mesma coluna do título e dos cards. */
.nav{height:76px;display:flex;align-items:center}
.brand{display:inline-flex}
.brand img{display:block;width:124px;height:auto}

/* ===== ABERTURA ===== */
.hero{padding-top:8px;padding-bottom:30px;position:relative}
.kicker{font-family:var(--mono);font-size:var(--fs-xs);letter-spacing:.18em;
  text-transform:uppercase;color:var(--purple-2);margin-bottom:14px;
  display:flex;align-items:center;gap:9px}
.kicker::before{content:'';width:24px;height:1px;background:var(--purple)}
.hero h1{font-size:clamp(34px,5.4vw,50px);font-weight:700;letter-spacing:-.025em;line-height:1.06}
.hero p{color:var(--text-3);max-width:62ch;margin-top:14px;font-size:var(--fs-md)}
.hero code{font-family:var(--mono);font-size:.92em;color:var(--purple-2)}
.docs-link{display:inline-flex;align-items:center;gap:7px;margin-top:16px;
  border:1px solid var(--line-2);border-radius:var(--r);padding:9px 15px;
  font-size:var(--fs-sm);color:var(--text-2);transition:border-color .22s,color .22s}
.docs-link:hover{border-color:var(--purple);color:var(--text)}
.docs-link svg{width:12px;height:12px;flex:none}

/* ===== ESTRUTURA ===== */
.shell{display:grid;grid-template-columns:var(--rail) minmax(0,1fr);gap:34px;
  align-items:start;position:relative;padding-bottom:60px}

/* ===== TRILHO ===== */
.rail{position:sticky;top:18px;max-height:calc(100vh - 36px);overflow-y:auto;
  padding-right:6px;scrollbar-width:thin;scrollbar-color:var(--line) transparent}
.rail::-webkit-scrollbar{width:6px}
.rail::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:99px}
.rail-close{display:none}
.grp{margin-bottom:24px}
.grp h3{font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--text-4);margin-bottom:11px;display:flex;justify-content:space-between;align-items:center}
.grp h3 button{font-family:var(--sans);font-size:11px;letter-spacing:0;text-transform:none;
  color:var(--purple-2);opacity:0;transition:opacity .2s}
.grp:hover h3 button,.grp h3 button:focus-visible{opacity:1}
.grp h3 button:hover{text-decoration:underline}

.opt{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border-radius:10px;
  color:var(--text-3);font-size:var(--fs-sm);text-align:left;
  transition:background .18s,color .18s;position:relative}
.opt:hover{background:var(--tint-2);color:var(--text)}
.opt.on{background:var(--accent-tint);color:var(--text)}
.opt.on::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:3px;height:16px;border-radius:99px;background:var(--purple)}
.opt .ico{width:18px;text-align:center;flex:none;opacity:.85;font-size:var(--fs-sm)}
.opt .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.opt .n{font-family:var(--mono);font-size:var(--fs-xs);color:var(--text-4);flex:none}
.opt.on .n{color:var(--purple-2)}

.box{width:16px;height:16px;border-radius:5px;border:1px solid var(--line-2);flex:none;
  display:grid;place-items:center;transition:background .18s,border-color .18s}
.opt.on .box{background:var(--purple);border-color:var(--purple)}
.box svg{width:9px;height:9px;opacity:0;transition:opacity .18s}
.opt.on .box svg{opacity:1}

.rail-reset{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px;
  font-size:var(--fs-sm);color:var(--text-3);transition:border-color .25s,color .25s}
.rail-reset:hover{border-color:var(--purple);color:var(--text)}

/* ===== CONTROLES ===== */
.controls{position:sticky;top:0;z-index:60;padding:12px 0 14px;
  background:linear-gradient(180deg,var(--bg) 64%,var(--fade) 84%,transparent)}
.searchrow{display:flex;gap:10px;align-items:center}
.search{flex:1;min-width:0;display:flex;align-items:center;gap:11px;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  padding:0 13px;height:48px;transition:border-color .25s,box-shadow .25s}
.search:focus-within{border-color:var(--purple);box-shadow:var(--focus)}
.search .glass{width:17px;height:17px;color:var(--text-4);flex:none}
.search input{flex:1;min-width:0;background:none;border:none;outline:none;font-size:var(--fs-md)}
.search input::placeholder{color:var(--text-4)}
/* O Chrome desenha um "x" próprio em input[type=search]; ele duplicaria o
   nosso botão de limpar. */
.search input::-webkit-search-cancel-button,
.search input::-webkit-search-decoration{-webkit-appearance:none;appearance:none;display:none}
kbd{font-family:var(--mono);font-size:11px;color:var(--text-3);background:var(--tint-2);
  border:1px solid var(--line);border-bottom-width:2px;border-radius:6px;padding:3px 7px;
  flex:none;line-height:1}
.search .clear{color:var(--text-4);font-size:17px;line-height:1;padding:0 2px;display:none}
.search.has .clear{display:block}
.search .clear:hover{color:var(--text)}

.sortwrap{position:relative;flex:none}
.sortwrap select{appearance:none;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--r);height:48px;padding:0 36px 0 14px;font-size:var(--fs-sm);
  cursor:pointer;transition:border-color .25s;max-width:240px}
.sortwrap select:hover{border-color:var(--line-2)}
.sortwrap::after{content:'';position:absolute;right:14px;top:50%;width:6px;height:6px;
  border-right:1.5px solid var(--text-4);border-bottom:1.5px solid var(--text-4);
  transform:translateY(-70%) rotate(45deg);pointer-events:none}
.filterbtn{display:none;height:48px;padding:0 16px;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--r);font-size:var(--fs-sm);
  align-items:center;gap:8px;flex:none}
.filterbtn .badge{background:var(--purple);border-radius:99px;min-width:18px;height:18px;
  font-size:11px;display:grid;place-items:center;padding:0 5px;font-family:var(--mono);color:var(--on-accent)}

.summary{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}
.count{font-family:var(--mono);color:var(--text-3);font-size:var(--fs-sm)}
.count b{color:var(--text);font-weight:500}
.chips{display:flex;gap:7px;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:6px;background:var(--accent-tint);
  border:1px solid var(--purple-line);border-radius:99px;padding:3px 6px 3px 11px;
  font-size:var(--fs-xs);color:var(--text-2)}
.chip button{color:var(--purple-2);font-size:14px;line-height:1;padding:0 3px}
.chip button:hover{color:var(--text)}

/* ===== RODAPÉ ===== */
.footer{border-top:1px solid var(--line);padding-top:32px;padding-bottom:32px;color:var(--text-4);
  font-size:var(--fs-sm);display:flex;justify-content:space-between;align-items:center;
  flex-wrap:wrap;gap:16px;position:relative}
.footer img{width:112px;opacity:.85;transition:opacity .3s}
.footer img:hover{opacity:1}
.footer a{color:var(--text-3);transition:color .22s}
.footer a:hover{color:var(--purple-2)}
