/* ============================================================
   CANTIERI — Base · "Mesa de Corte"
   Reset + primitivos visuais compartilhados por todos os apps.
   Estilos específicos de cada app ficam em css/<app>.css.
============================================================ */
*{box-sizing:border-box;}
html,body{
  margin:0;
  height:100%;
  background:var(--bg);
  color:var(--text);
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

::selection{background:var(--accent);color:var(--ink);}

/* foco de teclado visível em tudo (a11y) */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px;}

/* grain: quebra o flat digital; fixo e inerte, custo zero de repaint no scroll */
body::after{
  content:"";position:fixed;inset:0;z-index:var(--z-grain);pointer-events:none;
  opacity:.05;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.6'/%3E%3C/svg%3E");
}

/* --- Scrollbar técnica (escura) --- */
.scroll{overflow-y:auto;}
.scroll::-webkit-scrollbar{width:10px;}
.scroll::-webkit-scrollbar-thumb{background:var(--line);border-radius:5px;border:3px solid var(--ink);}
.scroll::-webkit-scrollbar-thumb:hover{background:var(--text-faint);}
.scroll::-webkit-scrollbar-track{background:transparent;}

/* --- Botões base --- */
.btn{
  background:var(--surface-2);border:1px solid var(--line);color:var(--text);
  font-family:var(--sans);font-size:12.5px;font-weight:500;padding:11px;
  cursor:pointer;border-radius:var(--r-sm);
  transition:border-color var(--dur) var(--ease),color var(--dur) var(--ease),
             background var(--dur) var(--ease),transform var(--dur) var(--ease);
}
.btn:hover{border-color:var(--accent-line);color:var(--accent);}
.btn:active{transform:scale(.98);}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--ink);font-weight:600;}
.btn.primary:hover{background:var(--accent-2);color:var(--ink);box-shadow:var(--shadow-accent);}

/* --- Rótulo mono (labels técnicos) --- */
.mono-label{
  font-family:var(--mono);font-size:10px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--text-faint);font-weight:500;
}

/* números sempre tabulares (datas, medidas, contadores) */
.num,.proj-date,.rec-tool,.tx-sw-hex{font-variant-numeric:tabular-nums;}

/* --- Utilitário: esconder --- */
[hidden],.hidden{display:none !important;}

/* --- Chip de zoom (reutilizável, ver js/shared/zoom.js) --- */
.zoom-ctl{position:absolute;right:14px;bottom:14px;z-index:20;display:flex;align-items:center;gap:2px;
  background:rgba(20,20,20,.78);backdrop-filter:blur(8px);border:1px solid var(--line-soft);
  border-radius:9px;padding:3px;user-select:none;}
.zoom-ctl button{width:26px;height:26px;border:none;background:none;color:var(--text-dim);cursor:pointer;
  border-radius:6px;font-size:15px;line-height:1;display:flex;align-items:center;justify-content:center;transition:.12s;}
.zoom-ctl button:hover{background:var(--surface-2);color:var(--accent);}
.zoom-ctl .zoom-pct{font-family:var(--mono);font-size:10.5px;color:var(--text-dim);min-width:38px;text-align:center;}

/* --- Movimento: respeita quem prefere menos --- */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;}
}
