/* ================================================================
   Laguna Content Board — app.css
   Vibe: A1 Editorial Luxury · Fraunces + Manrope
   Paleta Laguna. Whitespace premium (taste-master §16).
   Efeitos densos (3× o baseline) — grão, blobs, choreography.
   ================================================================ */

/* ---------------- Tokens ---------------- */
:root{
  --sand:      #FAF7F2;   /* fundo areia/off-white */
  --sand-2:    #F3EEE4;   /* superfície levemente mais quente */
  --paper:     #FFFDF9;   /* cards */
  --ink:       #1E3A2F;   /* verde-escuro (texto forte) */
  --graphite:  #3D4440;   /* grafite (texto corpo) */
  --muted:     #6E6C62;   /* secundário — AA (~4.9:1 no sand) */
  --faint:     #78756A;   /* terciário / legendas — AA (~4.6:1 no sand) */
  --faint-2:   #A8A498;   /* decorativo apenas (ícones/traços), nunca texto legível */
  --gold:      #B8934A;   /* destaque dourado suave */
  --gold-soft: #D9C39A;
  --forest:    #4A6B5A;   /* verde-mata */
  --forest-2:  #3C5A4B;
  --line:      rgba(30,58,47,.10);
  --line-2:    rgba(30,58,47,.06);
  --shadow-1:  0 1px 2px rgba(30,58,47,.04), 0 8px 24px -14px rgba(30,58,47,.14);
  --shadow-2:  0 2px 6px rgba(30,58,47,.05), 0 26px 60px -28px rgba(30,58,47,.30);
  --shadow-3:  0 40px 120px -40px rgba(30,58,47,.42);
  --ease:      cubic-bezier(0.16, 1, 0.3, 1);
  --ease-2:    cubic-bezier(0.22, 1, 0.36, 1);
  --spring:    cubic-bezier(0.32, 0.72, 0, 1);
  --r-lg:      1.6rem;
  --r-md:      1.15rem;
  --r-sm:      0.7rem;
  --side-w:    260px;
  --serif:     'Fraunces', 'Times New Roman', serif;
  --sans:      'Manrope', system-ui, sans-serif;
}

*,*::before,*::after{ box-sizing:border-box; }
html{ -webkit-text-size-adjust:100%; }
body{
  margin:0; min-height:100dvh;
  background:var(--sand);
  color:var(--graphite);
  font-family:var(--sans);
  font-size:16px; line-height:1.6;
  font-weight:400;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
h1,h2,h3,h4{ font-family:var(--serif); color:var(--ink); font-weight:500; letter-spacing:-.02em; margin:0; }
a{ color:inherit; text-decoration:none; }
button{ font-family:inherit; }
::selection{ background:var(--gold-soft); color:var(--ink); }
:focus-visible{ outline:2px solid var(--gold); outline-offset:2px; border-radius:4px; }

/* visualmente escondido, disponível pra leitor de tela */
.vh{ position:absolute!important; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden;
  clip:rect(0 0 0 0); white-space:nowrap; border:0; }

/* ================= Efeito 1 — grão global ================= */
.grain{
  position:fixed; inset:0; z-index:1000; pointer-events:none; opacity:.028;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  mix-blend-mode:multiply;
}

/* ================= Efeito 2 — blobs de luz ambiente ================= */
.ambient{ position:fixed; inset:0; z-index:0; pointer-events:none; overflow:hidden; }
.blob{ position:absolute; border-radius:50%; filter:blur(70px); opacity:.5; will-change:transform; }
.blob-a{ width:46vw; height:46vw; left:-14vw; top:-10vw;
  background:radial-gradient(circle at 40% 40%, rgba(74,107,90,.34), transparent 68%);
  animation:drift-a 28s var(--ease) infinite alternate; }
.blob-b{ width:40vw; height:40vw; right:-12vw; top:22vh;
  background:radial-gradient(circle at 50% 50%, rgba(184,147,74,.28), transparent 66%);
  animation:drift-b 34s var(--ease) infinite alternate; }
.blob-c{ width:34vw; height:34vw; left:34vw; bottom:-16vw;
  background:radial-gradient(circle at 50% 50%, rgba(217,195,154,.30), transparent 66%);
  animation:drift-c 40s var(--ease) infinite alternate; }
@keyframes drift-a{ to{ transform:translate3d(7vw,5vh,0) scale(1.12); } }
@keyframes drift-b{ to{ transform:translate3d(-6vw,-4vh,0) scale(1.08); } }
@keyframes drift-c{ to{ transform:translate3d(4vw,-6vh,0) scale(1.14); } }

/* ================================================================
   GATE
   ================================================================ */
.gate{
  position:fixed; inset:0; z-index:900;
  display:grid; place-items:center; padding:6vw 1.25rem;
  background:
    radial-gradient(120% 90% at 50% -10%, var(--sand-2), var(--sand) 60%);
  transition:opacity .6s var(--ease), transform .6s var(--ease);
}
.gate-out{ opacity:0; transform:scale(1.03); pointer-events:none; }
.gate-ambient{ position:absolute; inset:0; overflow:hidden; z-index:0; }
.gate-ambient .blob-a{ opacity:.42; }
.gate-ambient .blob-b{ opacity:.36; }

.gate-inner{
  position:relative; z-index:1; width:100%; max-width:430px; text-align:center;
  animation:gate-rise .9s var(--ease) both;
}
@keyframes gate-rise{ from{ opacity:0; transform:translateY(20px); } to{ opacity:1; transform:none; } }

/* Efeito 3 — logo com ondas que desenham (stroke draw) */
.gate-mark{ width:76px; height:76px; margin:0 auto 2rem;
  display:grid; place-items:center;
  background:linear-gradient(155deg, var(--paper), var(--sand-2));
  border-radius:22px; box-shadow:var(--shadow-1); border:1px solid var(--line-2); }
.mark-svg{ width:52px; height:52px; }
.mark-svg .wave{ fill:none; stroke-linecap:round; stroke-width:2.4;
  stroke-dasharray:80; stroke-dashoffset:80; animation:draw 1.5s var(--ease) forwards; }
.mark-svg .wave-1{ stroke:var(--gold);   animation-delay:.15s; }
.mark-svg .wave-2{ stroke:var(--forest); animation-delay:.30s; }
.mark-svg .wave-3{ stroke:var(--ink);    animation-delay:.45s; }
@keyframes draw{ to{ stroke-dashoffset:0; } }

.gate-ey{ font-size:.72rem; letter-spacing:.26em; text-transform:uppercase;
  color:var(--gold); font-weight:600; margin:0 0 .9rem; }
.gate-title{ font-size:clamp(2.6rem,7vw,3.5rem); line-height:1; letter-spacing:-.04em;
  color:var(--ink); font-weight:500; }
.gate-title{ font-optical-sizing:auto; }

.gate-rotator{ margin:1.4rem 0 2.6rem; color:var(--muted); font-size:1.02rem;
  display:flex; gap:.4rem; justify-content:center; align-items:baseline; flex-wrap:wrap; }
.gate-rot-pre{ opacity:.85; }
.rotate-wrap{ position:relative; display:inline-block; overflow:hidden; height:1.5em;
  min-width:8.5ch; text-align:left; }
.rotate-word{ position:absolute; left:0; white-space:nowrap; font-weight:600;
  color:var(--forest); font-style:italic; font-family:var(--serif);
  will-change:transform,opacity;
  transition:transform .55s var(--ease-2), opacity .34s ease; }
.rotate-word.state-visible{ transform:translateY(0); opacity:1; }
.rotate-word.state-exit{ transform:translateY(-120%); opacity:0; }
.rotate-word.state-enter{ transform:translateY(120%); opacity:0; transition:none; }

/* form */
.gate-form{ display:flex; flex-direction:column; gap:1rem; text-align:left; }
.field{ display:flex; flex-direction:column; gap:.45rem; }
.field-lab{ font-size:.72rem; letter-spacing:.14em; text-transform:uppercase;
  color:var(--faint); font-weight:600; padding-left:.15rem; }
.field-in{
  width:100%; padding:.95rem 1.1rem; font-size:1rem; font-family:var(--sans);
  color:var(--ink); background:var(--paper);
  border:1px solid var(--line); border-radius:var(--r-md);
  box-shadow:var(--shadow-1); transition:border-color .2s, box-shadow .25s var(--ease), transform .25s var(--ease);
}
.field-in::placeholder{ color:var(--faint); }
.field-in:focus{ outline:none; border-color:var(--gold);
  box-shadow:0 0 0 4px rgba(184,147,74,.14), var(--shadow-1); transform:translateY(-1px); }

.gate-err{ min-height:1.1em; margin:.1rem 0 .2rem; font-size:.85rem; color:#9A6A63;
  opacity:0; transform:translateY(-3px); transition:opacity .25s, transform .25s var(--ease); }
.gate-err-on{ opacity:1; transform:none; }

.gate-btn{ margin-top:.4rem; justify-content:center; }
.gate-note{ text-align:center; margin:1.2rem 0 0; font-size:.8rem; color:var(--faint); }

/* shake em PIN errado (efeito) */
@keyframes shake{ 10%,90%{transform:translateX(-1px)} 20%,80%{transform:translateX(2px)}
  30%,50%,70%{transform:translateX(-4px)} 40%,60%{transform:translateX(4px)} }
.gate-form.shake{ animation:shake .5s var(--ease); }

/* ================================================================
   BOTÕES
   ================================================================ */
.btn{
  position:relative; display:inline-flex; align-items:center; gap:.6rem;
  padding:.85rem 1.5rem; font-size:.95rem; font-weight:600; font-family:var(--sans);
  border:1px solid transparent; border-radius:999px; cursor:pointer;
  color:var(--ink); background:var(--paper);
  box-shadow:var(--shadow-1);
  transition:transform .2s var(--ease), box-shadow .25s var(--ease), background .2s, color .2s, border-color .2s;
  overflow:hidden; -webkit-tap-highlight-color:transparent;
}
.btn:hover{ transform:translateY(-2px); box-shadow:var(--shadow-2); }
.btn:active{ transform:translateY(0) scale(.98); }
.btn-primary{ background:linear-gradient(160deg, var(--forest), var(--forest-2)); color:#F6F3EC;
  border-color:rgba(255,255,255,.08); }
.btn-primary:hover{ box-shadow:0 20px 44px -18px rgba(74,107,90,.6); }
/* shine sweep no primário (efeito) */
.btn-primary::after{ content:''; position:absolute; inset:0;
  background:linear-gradient(120deg, transparent 30%, rgba(255,255,255,.22) 50%, transparent 70%);
  transform:translateX(-120%); transition:transform .8s var(--ease); }
.btn-primary:hover::after{ transform:translateX(120%); }
.btn-gold{ background:linear-gradient(160deg, var(--gold), #A8813D); color:#FBF7EE; }
.btn-ghost{ background:transparent; box-shadow:none; border-color:var(--line); }
.btn-ghost:hover{ background:var(--paper); box-shadow:var(--shadow-1); }
.btn-ic{ display:inline-flex; width:20px; height:20px; }
.btn-ic svg{ width:100%; height:100%; }

/* ================================================================
   SHELL + SIDEBAR
   ================================================================ */
.shell{ position:relative; z-index:1; display:grid; grid-template-columns:var(--side-w) 1fr;
  min-height:100dvh; opacity:0; transition:opacity .5s var(--ease); }
.shell-in{ opacity:1; }

.sidebar{
  position:sticky; top:0; align-self:start; height:100dvh;
  display:flex; flex-direction:column; gap:0;
  padding:1.9rem 1.15rem; background:rgba(255,253,249,.55);
  backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border-right:1px solid var(--line-2);
}
.side-brand{ display:flex; align-items:center; gap:.7rem; padding:.2rem .5rem 1.6rem; }
.side-mark{ width:34px; height:34px; display:grid; place-items:center;
  background:linear-gradient(155deg, var(--ink), #16281f); border-radius:11px; }
.side-mark svg{ width:22px; height:22px; fill:none; stroke-linecap:round; stroke-width:2; }
.side-mark .sm1{ stroke:var(--gold); } .side-mark .sm2{ stroke:var(--forest); } .side-mark .sm3{ stroke:#EDE7DA; }
.side-name{ font-family:var(--serif); font-weight:500; font-size:1.08rem; color:var(--ink); letter-spacing:-.02em; }

.side-nav{ display:flex; flex-direction:column; gap:.2rem; margin-top:.4rem; }
.nav-link{ position:relative; display:flex; align-items:center; gap:.85rem;
  padding:.75rem .85rem; border-radius:var(--r-md); color:var(--graphite);
  font-weight:500; font-size:.96rem;
  transition:color .22s var(--ease), background .22s var(--ease), transform .22s var(--ease); }
.nav-link:hover{ background:rgba(74,107,90,.07); transform:translateX(3px); }
.nav-ic{ width:21px; height:21px; display:inline-flex; color:var(--faint); transition:color .22s; }
.nav-ic svg{ width:100%; height:100%; }
.nav-tx{ flex:1; }
/* indicador ativo (efeito) — barra dourada que desliza (anima só transform) */
.nav-link::before{ content:''; position:absolute; left:0; top:50%; width:3px; height:60%;
  background:var(--gold); border-radius:0 3px 3px 0;
  transform:translateY(-50%) scaleY(0); transform-origin:center;
  transition:transform .3s var(--spring); }
.nav-on{ background:linear-gradient(90deg, rgba(184,147,74,.12), transparent); color:var(--ink); }
.nav-on::before{ transform:translateY(-50%) scaleY(1); }
.nav-on .nav-ic{ color:var(--gold); }
.nav-cta{ margin-top:.6rem; background:linear-gradient(160deg, var(--forest), var(--forest-2));
  color:#F6F3EC; box-shadow:var(--shadow-1); }
.nav-cta:hover{ transform:translateY(-2px); background:linear-gradient(160deg, var(--forest), var(--forest-2)); }
.nav-cta .nav-ic{ color:#EDE7DA; }
.nav-cta.nav-on::before{ display:none; }

.nav-badge{ min-width:20px; height:20px; padding:0 6px; border-radius:999px;
  display:none; align-items:center; justify-content:center;
  font-size:.7rem; font-weight:700; font-variant-numeric:tabular-nums;
  background:var(--gold); color:#FBF7EE; }
.nav-badge.badge-on{ display:inline-flex; animation:badge-pop .4s var(--spring); }
@keyframes badge-pop{ from{ transform:scale(0); } to{ transform:scale(1); } }

.side-foot{ margin-top:auto; padding-top:1.4rem; border-top:1px solid var(--line-2);
  display:flex; flex-direction:column; gap:.7rem; }
.whoami-wrap{ display:flex; align-items:center; gap:.55rem; padding:0 .4rem; }
.whoami-dot{ width:8px; height:8px; border-radius:50%; background:var(--forest);
  box-shadow:0 0 0 0 rgba(74,107,90,.5); animation:pulse-dot 2.6s var(--ease) infinite; }
@keyframes pulse-dot{ 0%{ box-shadow:0 0 0 0 rgba(74,107,90,.4); } 70%{ box-shadow:0 0 0 7px rgba(74,107,90,0); } 100%{ box-shadow:0 0 0 0 rgba(74,107,90,0); } }
.whoami{ font-size:.85rem; color:var(--graphite); font-weight:600; }
.side-sair{ align-self:flex-start; background:none; border:none;
  min-height:44px; display:inline-flex; align-items:center; padding:.4rem .4rem;
  color:var(--muted); font-size:.8rem; cursor:pointer; transition:color .2s; }
.side-sair:hover{ color:var(--forest); }

/* ================================================================
   VIEW
   ================================================================ */
.view{ position:relative; padding:clamp(2rem,4vw,4.5rem) clamp(1.25rem,4vw,4rem) 7rem;
  max-width:1400px; width:100%; margin:0 auto; min-height:100dvh; outline:none; }
.view-in{ animation:view-enter .55s var(--ease) both; }
@keyframes view-enter{ from{ opacity:0; transform:translateY(14px); } to{ opacity:1; transform:none; } }

/* headings de seção (whitespace premium) */
.sec{ margin-bottom:clamp(3.5rem,7vw,6rem); }
.sh{ max-width:60ch; }
.ey{ font-size:.72rem; letter-spacing:.24em; text-transform:uppercase;
  color:var(--gold); font-weight:600; margin:0 0 2rem; }
.sh h1,.sh h2,.view-ph h1{ font-size:clamp(2.4rem,5.5vw,4rem); line-height:1.04;
  letter-spacing:-.04em; color:var(--ink); }
.sh .lead{ margin-top:2.25rem; font-size:1.1rem; line-height:1.75; color:var(--muted); max-width:54ch; }

/* ================================================================
   CHIPS / STATUS
   ================================================================ */
.chip{ display:inline-flex; align-items:center; gap:.4rem; padding:.28rem .7rem .28rem .55rem;
  border-radius:999px; font-size:.74rem; font-weight:600; letter-spacing:.01em;
  color:var(--chip, var(--muted)); background:color-mix(in srgb, var(--chip, #8A8579) 12%, transparent);
  border:1px solid color-mix(in srgb, var(--chip, #8A8579) 22%, transparent); white-space:nowrap; }
.chip-dot{ width:7px; height:7px; border-radius:50%; background:var(--chip, var(--muted)); flex:none; }
.upill{ display:inline-flex; align-items:center; padding:.24rem .6rem; border-radius:999px;
  font-size:.68rem; font-weight:700; letter-spacing:.03em; text-transform:uppercase; }
.upill-alta{ background:rgba(184,147,74,.16); color:#8f6d2e; }
.upill-hoje{ background:rgba(154,106,99,.16); color:#8a544b; }

/* ================================================================
   SKELETON (shimmer)
   ================================================================ */
.sk-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(230px,1fr)); gap:1.6rem; }
.sk-card{ background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r-md);
  padding:.9rem; box-shadow:var(--shadow-1); }
.sk-thumb{ aspect-ratio:4/5; border-radius:.8rem; margin-bottom:.9rem; }
.sk-line{ height:12px; border-radius:6px; margin:.5rem 0; }
.sk-line-sm{ width:55%; }
.shimmer{ position:relative; overflow:hidden; background:var(--sand-2); }
.shimmer::after{ content:''; position:absolute; inset:0;
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.55), transparent);
  transform:translateX(-100%); animation:shimmer 1.5s var(--ease) infinite; }
@keyframes shimmer{ to{ transform:translateX(100%); } }

/* ================================================================
   EMPTY STATE
   ================================================================ */
.empty{ display:flex; flex-direction:column; align-items:center; text-align:center;
  padding:clamp(3rem,8vw,6rem) 1.5rem; gap:1rem; }
.empty-icon{ width:60px; height:60px; display:grid; place-items:center; color:var(--gold);
  background:linear-gradient(155deg, var(--paper), var(--sand-2));
  border:1px solid var(--line-2); border-radius:20px; box-shadow:var(--shadow-1); }
.empty-icon svg{ width:28px; height:28px; }
.empty-title{ font-size:1.5rem; letter-spacing:-.02em; }
.empty-text{ color:var(--muted); max-width:42ch; margin:0; }
.empty-acao{ margin-top:.8rem; }

/* ================================================================
   FORM PRIMITIVES (upload + modais de decisão)
   ================================================================ */
.up-lab{ display:block; font-size:.72rem; letter-spacing:.13em; text-transform:uppercase;
  color:var(--faint); font-weight:600; margin-bottom:.5rem; }
.up-field{ display:block; margin-bottom:1.6rem; }
.up-hint{ display:block; margin-top:.5rem; font-size:.78rem; color:var(--faint); }
.up-in{ width:100%; padding:.85rem 1rem; font-size:.98rem; font-family:var(--sans);
  color:var(--ink); background:var(--paper); border:1px solid var(--line); border-radius:var(--r-md);
  box-shadow:var(--shadow-1); transition:border-color .2s, box-shadow .25s var(--ease); }
.up-in:focus{ outline:none; border-color:var(--gold); box-shadow:0 0 0 4px rgba(184,147,74,.13), var(--shadow-1); }
.up-in[readonly]{ background:var(--sand-2); color:var(--muted); }
.up-ta{ resize:vertical; line-height:1.6; min-height:3.2em; }

.up-pills{ display:flex; flex-wrap:wrap; gap:.5rem; }
.up-pill{ padding:.55rem 1.05rem; font-size:.9rem; font-weight:600; font-family:var(--sans);
  color:var(--graphite); background:var(--paper); border:1px solid var(--line); border-radius:999px;
  cursor:pointer; transition:all .2s var(--ease); }
.up-pill:hover{ border-color:var(--gold-soft); transform:translateY(-1px); }
.up-pill.on{ background:linear-gradient(160deg, var(--forest), var(--forest-2)); color:#F3EFE7; border-color:transparent; box-shadow:var(--shadow-1); }

/* toggle */
.up-toggle{ display:flex; align-items:center; gap:.7rem; cursor:pointer; margin:.4rem 0 1.4rem; user-select:none; }
.up-toggle input{ position:absolute; opacity:0; width:0; height:0; }
.up-toggle-track{ width:44px; height:26px; border-radius:999px; background:var(--sand-2);
  border:1px solid var(--line); position:relative; transition:background .25s var(--ease); flex:none; }
.up-toggle-dot{ position:absolute; top:2px; left:2px; width:20px; height:20px; border-radius:50%;
  background:var(--paper); box-shadow:var(--shadow-1); transition:transform .25s var(--spring); }
.up-toggle input:checked + .up-toggle-track{ background:var(--forest); border-color:transparent; }
.up-toggle input:checked + .up-toggle-track .up-toggle-dot{ transform:translateX(18px); }
.up-toggle input:focus-visible + .up-toggle-track{ outline:2px solid var(--gold); outline-offset:2px; }
.up-toggle-tx{ font-size:.92rem; font-weight:600; color:var(--graphite); }

/* ================================================================
   UPLOAD VIEW
   ================================================================ */
.up-head{ margin-bottom:clamp(2.5rem,5vw,3.5rem); }
.up-lote-link{ display:inline-block; margin-top:1.4rem; font-size:.9rem; font-weight:600; color:var(--forest);
  transition:color .2s; }
.up-lote-link:hover{ color:var(--gold); text-decoration:underline; }

/* ================================================================
   ADICIONAR EM LOTE
   ================================================================ */
.lote-head{ margin-bottom:clamp(2rem,4vw,3rem); }
.lote-rows{ display:flex; flex-direction:column; gap:1rem; }
.lote-row{ background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r-md);
  padding:1.2rem 1.3rem; box-shadow:var(--shadow-1); animation:view-enter .35s var(--ease) both;
  transition:border-color .25s var(--ease), opacity .25s; }
.lote-row-saving{ opacity:.6; }
.lote-row-ok{ border-color:var(--forest); box-shadow:0 0 0 1px rgba(74,107,90,.3); }
.lote-row-fail{ border-color:#9A6A63; box-shadow:0 0 0 1px rgba(154,106,99,.4); }
.lote-row-h{ display:flex; justify-content:space-between; align-items:center; margin-bottom:1rem; }
.lote-row-n{ font-family:var(--serif); font-size:1.05rem; color:var(--gold); font-variant-numeric:tabular-nums; }
.lote-row-x{ width:30px; height:30px; display:grid; place-items:center; border:none; border-radius:50%;
  background:var(--sand-2); color:var(--muted); cursor:pointer; transition:background .2s, color .2s; }
.lote-row-x:hover{ background:var(--sand); color:#9A6A63; }
.lote-row-x svg{ width:16px; height:16px; }

.lote-row-grid{ display:grid; grid-template-columns:1.4fr 1fr 1fr .8fr 1fr; gap:1rem 1.1rem; align-items:start; }
.lote-f{ display:flex; flex-direction:column; gap:.4rem; min-width:0; }
.lote-f .up-lab{ margin-bottom:0; }
.lote-f .up-pills{ gap:.3rem; }
.lote-f .up-pill{ padding:.4rem .7rem; font-size:.8rem; }
.lote-f-arq{ grid-column:1 / -1; }
.lote-f-leg{ grid-column:1 / -1; }
.lr-pick{ display:inline-flex; align-items:center; gap:.4rem; align-self:flex-start; padding:.5rem 1rem;
  border:1px dashed var(--line); border-radius:var(--r-sm); background:var(--sand-2); color:var(--forest);
  font-size:.85rem; font-weight:600; cursor:pointer; font-family:var(--sans); transition:border-color .2s, background .2s; }
.lr-pick:hover{ border-color:var(--gold); background:var(--paper); }
.lr-pick svg{ width:15px; height:15px; }
.lr-previews{ list-style:none; margin:.7rem 0 0; padding:0; display:flex; flex-wrap:wrap; gap:.6rem; }
.lr-prev{ position:relative; width:64px; height:80px; border-radius:8px; overflow:hidden; border:1px solid var(--line-2); }
.lr-prev img, .lr-prev video{ width:100%; height:100%; object-fit:cover; display:block; }
.lr-prev-x{ position:absolute; top:2px; right:2px; width:20px; height:20px; display:grid; place-items:center;
  border:none; border-radius:50%; background:rgba(255,253,249,.9); color:var(--graphite); cursor:pointer; }
.lr-prev-x svg{ width:12px; height:12px; }

.lote-toolbar{ display:flex; justify-content:space-between; align-items:center; gap:1rem; flex-wrap:wrap;
  margin-top:1.4rem; padding-top:1.4rem; border-top:1px solid var(--line-2); }
.lote-toolbar-r{ display:flex; align-items:center; gap:1.2rem; }
.lote-count{ font-size:.85rem; color:var(--faint); font-variant-numeric:tabular-nums; }

@media (max-width:820px){
  .lote-row-grid{ grid-template-columns:1fr 1fr; }
  .lote-f-titulo{ grid-column:1 / -1; }
}
.up-grid{ display:grid; grid-template-columns:1fr 340px; gap:clamp(1.5rem,3vw,3rem); align-items:start; }
.up-main{ min-width:0; }
.up-side{ position:sticky; top:2rem; }
.up-card{ background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r-lg);
  padding:clamp(1.5rem,3vw,2rem); box-shadow:var(--shadow-2); }
.up-submit{ width:100%; justify-content:center; margin-top:.4rem; }
.up-cancel{ width:100%; justify-content:center; margin-top:.7rem; }

/* dropzone */
.up-drop{ border:1.5px dashed var(--line); border-radius:var(--r-md); padding:2.2rem 1.5rem; text-align:center;
  background:var(--sand-2); cursor:pointer; transition:border-color .25s var(--ease), background .25s var(--ease), transform .25s var(--ease); }
.up-drop:hover, .up-drop:focus-visible{ border-color:var(--gold); background:var(--paper); outline:none; }
.up-drop.drag{ border-color:var(--forest); background:var(--paper); transform:scale(1.01); }
.up-drop-ic{ display:inline-flex; width:34px; height:34px; color:var(--gold);
  background:var(--paper); border-radius:12px; padding:6px; box-shadow:var(--shadow-1); margin-bottom:.7rem; }
.up-drop-ic svg{ width:100%; height:100%; }
.up-drop-t{ font-family:var(--serif); font-size:1.1rem; color:var(--ink); margin:0 0 .25rem; }
.up-drop-s{ font-size:.82rem; color:var(--muted); margin:0; }

/* previews */
.up-previews{ list-style:none; margin:1rem 0 0; padding:0; display:grid; grid-template-columns:repeat(auto-fill,minmax(120px,1fr)); gap:.9rem; }
.up-prev{ position:relative; border-radius:var(--r-sm); overflow:hidden; border:1px solid var(--line-2);
  background:var(--paper); box-shadow:var(--shadow-1); cursor:grab; animation:view-enter .4s var(--ease) both; }
.up-prev.dragging{ opacity:.4; }
.up-prev-media{ aspect-ratio:4/5; position:relative; }
.up-prev-media img, .up-prev-media video{ width:100%; height:100%; object-fit:cover; display:block; }
.up-prev-h{ position:absolute; top:.4rem; left:.4rem; z-index:2; font-size:.68rem; font-weight:700;
  padding:.15rem .45rem; border-radius:6px; background:rgba(30,58,47,.72); color:#F3EFE7;
  font-variant-numeric:tabular-nums; }
.up-prev-badge{ position:absolute; bottom:.4rem; left:.4rem; z-index:2; width:24px; height:24px;
  display:grid; place-items:center; border-radius:7px; background:rgba(30,58,47,.72); color:#F3EFE7; }
.up-prev-badge svg{ width:15px; height:15px; }
.up-prev-x{ position:absolute; top:.35rem; right:.35rem; z-index:2; width:26px; height:26px;
  display:grid; place-items:center; border:none; border-radius:50%; background:rgba(255,253,249,.9);
  color:var(--graphite); cursor:pointer; opacity:0; transition:opacity .2s, transform .2s var(--ease); }
.up-prev:hover .up-prev-x{ opacity:1; }
.up-prev-x:hover{ transform:scale(1.1); color:#9A6A63; }
.up-prev-x svg{ width:14px; height:14px; }

/* ================================================================
   MODAL
   ================================================================ */
.scrim{ position:fixed; inset:0; z-index:1100; display:grid; place-items:center; padding:1.25rem;
  background:rgba(30,58,47,.28); backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
  opacity:0; transition:opacity .22s var(--ease); }
.scrim-in{ opacity:1; }
.scrim-out{ opacity:0; }
.modal{ position:relative; width:100%; max-width:520px; max-height:88dvh; overflow:auto;
  background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r-lg);
  box-shadow:var(--shadow-3); padding:clamp(1.6rem,4vw,2.5rem);
  transform:translateY(16px) scale(.98); opacity:0;
  transition:transform .3s var(--spring), opacity .3s var(--ease); }
.modal-wide{ max-width:920px; }
.scrim-in .modal{ transform:none; opacity:1; }
.modal-x{ position:absolute; top:1rem; right:1rem; width:36px; height:36px; display:grid; place-items:center;
  border:none; border-radius:50%; background:var(--sand-2); color:var(--graphite); cursor:pointer;
  transition:background .2s, transform .2s var(--ease); }
.modal-x:hover{ background:var(--sand); transform:rotate(90deg); }
.modal-x svg{ width:18px; height:18px; }
.modal-body{ }

/* ================================================================
   TOAST
   ================================================================ */
.toast-host{ position:fixed; z-index:1200; left:50%; bottom:calc(1.5rem + env(safe-area-inset-bottom,0));
  transform:translateX(-50%); display:flex; flex-direction:column; gap:.6rem; align-items:center;
  pointer-events:none; }
.toast{ padding:.8rem 1.2rem; border-radius:999px; font-size:.9rem; font-weight:600; color:#F6F3EC;
  background:var(--ink); box-shadow:var(--shadow-2);
  opacity:0; transform:translateY(14px) scale(.96); transition:opacity .26s var(--ease), transform .26s var(--spring); }
.toast-in{ opacity:1; transform:none; }
.toast-out{ opacity:0; transform:translateY(8px); }
.toast-ok{ background:linear-gradient(160deg, var(--forest), var(--forest-2)); }
.toast-warn{ background:linear-gradient(160deg, #A8813D, var(--gold)); }
.toast-err{ background:linear-gradient(160deg, #9A6A63, #7d554f); }

/* ================================================================
   PEÇA CARD (compartilhado entre visões)
   ================================================================ */
.pcard{ display:block; border-radius:var(--r-md); overflow:hidden; background:var(--paper);
  border:1px solid var(--line-2); box-shadow:var(--shadow-1);
  transition:transform .28s var(--ease), box-shadow .28s var(--ease); }
.pcard:hover{ transform:translateY(-3px); box-shadow:var(--shadow-2); }
.pcard-media{ position:relative; aspect-ratio:4/5; background:var(--sand-2); overflow:hidden; }
.pcard-media img{ width:100%; height:100%; object-fit:cover; display:block;
  transition:transform .5s var(--ease); }
.pcard:hover .pcard-media img{ transform:scale(1.04); }
.pcard-noimg{ width:100%; height:100%; display:grid; place-items:center; color:var(--faint-2); }
.pcard-noimg svg{ width:30px; height:30px; }
/* imagem que falhou ao carregar — esconde o glyph quebrado, mostra o fundo areia */
img.img-broken{ visibility:hidden; }
.pcard-fmt{ position:absolute; top:.5rem; right:.5rem; width:26px; height:26px; display:grid; place-items:center;
  border-radius:8px; background:rgba(255,253,249,.86); color:var(--forest); box-shadow:var(--shadow-1); }
.pcard-fmt svg{ width:15px; height:15px; }
.pcard-count{ position:absolute; top:.5rem; left:.5rem; display:inline-flex; align-items:center; gap:.25rem;
  padding:.15rem .45rem; border-radius:7px; background:rgba(30,58,47,.72); color:#F3EFE7; font-size:.7rem; font-weight:700; }
.pcard-count svg{ width:12px; height:12px; }
.pcard-media .upill{ position:absolute; bottom:.5rem; left:.5rem; }
.pcard-body{ padding:.7rem .8rem .8rem; }
.pcard-title{ margin:0 0 .5rem; font-size:.86rem; font-weight:600; color:var(--ink); line-height:1.3;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.pcard-sm .pcard-title{ font-size:.8rem; }
.pcard-meta{ display:flex; align-items:center; gap:.4rem; flex-wrap:wrap; }

.cel-vazia{ display:grid; place-items:center; min-height:80px; color:var(--faint-2);
  font-size:1.4rem; border:1px dashed var(--line); border-radius:var(--r-sm); background:transparent; }

/* botão de ícone (nav de semana/mês) */
.icbtn{ width:42px; height:42px; display:grid; place-items:center; border:1px solid var(--line);
  border-radius:50%; background:var(--paper); color:var(--graphite); cursor:pointer; box-shadow:var(--shadow-1);
  transition:transform .2s var(--ease), box-shadow .2s var(--ease), border-color .2s; }
.icbtn:hover{ transform:translateY(-1px); box-shadow:var(--shadow-2); border-color:var(--gold-soft); }
.icbtn:active{ transform:scale(.95); }
.icbtn svg{ width:20px; height:20px; }

/* top de semana/mês */
.sem-top{ display:flex; justify-content:space-between; align-items:flex-end; gap:1.5rem; flex-wrap:wrap;
  margin-bottom:clamp(2rem,4vw,3rem); }
.sem-controls{ display:flex; align-items:center; gap:1rem; flex-wrap:wrap; }
.sem-nav{ display:flex; align-items:center; gap:.5rem; }
.sem-select{ padding:.6rem 1rem; font-size:.9rem; font-family:var(--sans); color:var(--ink);
  background:var(--paper); border:1px solid var(--line); border-radius:999px; box-shadow:var(--shadow-1); cursor:pointer; }
.sem-select:focus{ outline:none; border-color:var(--gold); }
.sem-title{ font-size:clamp(1.8rem,4vw,2.8rem)!important; }

/* ================================================================
   SEMANA — grade 7×2
   ================================================================ */
.sem-grid{ display:grid; grid-template-columns:auto repeat(7,1fr); gap:.6rem;
  align-items:start; overflow-x:auto; }
.sem-corner{ }
.sem-daycol{ position:relative; text-align:center; padding:.6rem .3rem .8rem; border-radius:var(--r-sm);
  display:flex; flex-direction:column; align-items:center; gap:.1rem; }
.sem-daycol.hoje{ background:linear-gradient(160deg, rgba(184,147,74,.14), transparent); }
.sem-dow{ font-size:.68rem; text-transform:uppercase; letter-spacing:.1em; color:var(--faint); font-weight:600; }
.sem-dnum{ font-family:var(--serif); font-size:1.35rem; color:var(--ink); line-height:1; }
.sem-daycol.hoje .sem-dnum{ color:var(--gold); }
.sem-hoje-tag{ font-size:.6rem; text-transform:uppercase; letter-spacing:.08em; color:var(--gold); font-weight:700; }
.sem-rowlab{ display:flex; flex-direction:column; justify-content:center; padding:.5rem .8rem .5rem 0;
  border-right:1px solid var(--line-2); min-width:64px; }
.sem-rowlab span{ font-family:var(--serif); font-size:1rem; color:var(--ink); }
.sem-rowlab small{ font-size:.72rem; color:var(--faint); font-variant-numeric:tabular-nums; }
.sem-cell{ display:flex; flex-direction:column; gap:.5rem; min-height:80px; padding:.15rem; border-radius:var(--r-sm); }
.sem-cell.hoje{ background:rgba(184,147,74,.05); }

/* ================================================================
   CALENDÁRIO — grade mensal
   ================================================================ */
.cal-ano, .cal-day .cal-dnum{ font-variant-numeric:tabular-nums; }
.cal-ano{ color:var(--faint); font-weight:400; }
.cal-grid{ display:grid; grid-template-columns:repeat(7,1fr); gap:.5rem; }
.cal-dow{ text-align:center; font-size:.7rem; text-transform:uppercase; letter-spacing:.1em;
  color:var(--faint); font-weight:600; padding:.4rem 0; }
.cal-day{ min-height:118px; padding:.55rem; border-radius:var(--r-sm); border:1px solid var(--line-2);
  background:var(--paper); display:flex; flex-direction:column; gap:.35rem; cursor:pointer;
  transition:border-color .2s var(--ease), transform .2s var(--ease), box-shadow .2s var(--ease); }
.cal-day:hover{ border-color:var(--gold-soft); transform:translateY(-2px); box-shadow:var(--shadow-1); }
.cal-day.fora{ background:transparent; border-color:transparent; }
.cal-day.fora .cal-dnum{ color:var(--faint-2); }
.cal-day.vazio{ background:transparent; border-style:dashed; }
.cal-day.hoje{ border-color:var(--gold); box-shadow:0 0 0 1px var(--gold); }
.cal-day-h{ display:flex; justify-content:space-between; align-items:center; }
.cal-day-hr{ display:flex; align-items:center; gap:.35rem; }
.cal-dnum{ font-family:var(--serif); font-size:1.05rem; color:var(--ink); }
.cal-day.hoje .cal-dnum{ color:var(--gold); }
.cal-dcount{ font-size:.66rem; font-weight:700; color:var(--faint); font-variant-numeric:tabular-nums; }
.cal-add{ width:22px; height:22px; display:grid; place-items:center; border:none; border-radius:7px;
  background:var(--sand-2); color:var(--forest); cursor:pointer; opacity:0; transform:scale(.85);
  transition:opacity .18s var(--ease), transform .18s var(--ease), background .18s; }
.cal-add svg{ width:14px; height:14px; }
.cal-day:hover .cal-add, .cal-add:focus-visible{ opacity:1; transform:scale(1); }
.cal-add:hover{ background:var(--forest); color:#F3EFE7; }
.cal-day-items{ display:flex; flex-direction:column; gap:.25rem; overflow:hidden; }
.cal-mini{ display:flex; align-items:center; gap:.35rem; padding:.2rem .35rem; border-radius:6px;
  background:var(--sand-2); transition:background .18s; }
.cal-mini:hover{ background:var(--sand); }
.cal-mini-dot{ width:7px; height:7px; border-radius:50%; background:var(--dot,#8A8579); flex:none; }
.cal-mini-tx{ font-size:.72rem; color:var(--graphite); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cal-more{ font-size:.68rem; color:var(--faint); padding-left:.35rem; }

/* ================================================================
   DASHBOARD
   ================================================================ */
.dash-hero{ margin-bottom:clamp(2.5rem,5vw,3.5rem); }
.dash-hero h1{ font-size:clamp(2.2rem,5vw,3.4rem); }
.dash-grid{ display:grid; grid-template-columns:1fr 1fr; gap:clamp(1.25rem,2.5vw,2rem); align-items:start; }
.dash-pend{ grid-column:1 / -1; }
.dash-block{ background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r-lg);
  padding:clamp(1.5rem,3vw,2.2rem); box-shadow:var(--shadow-1); }
.dash-bh{ display:flex; justify-content:space-between; align-items:baseline; margin-bottom:1.4rem; gap:1rem; }
.dash-bh h2{ font-size:1.5rem; }
.dash-date{ font-size:.8rem; color:var(--faint); font-variant-numeric:tabular-nums; }
.dash-stats-inline{ display:flex; gap:1.2rem; margin-bottom:1.2rem; }
.dstat{ font-size:.85rem; color:var(--muted); }
.dstat b{ color:var(--ink); font-weight:700; }
.dash-cards{ display:grid; grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:.9rem; }
.dash-count-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:.8rem; margin-bottom:1.6rem; }
.dcount{ text-align:center; padding:1rem .5rem; border-radius:var(--r-md); background:var(--sand-2); }
.dcount-n{ display:block; font-family:var(--serif); font-size:2rem; color:var(--ink); line-height:1; font-variant-numeric:tabular-nums; }
.dcount-l{ display:block; font-size:.72rem; text-transform:uppercase; letter-spacing:.08em; color:var(--faint); margin-top:.4rem; }
.dash-camps-lab{ display:block; font-size:.72rem; text-transform:uppercase; letter-spacing:.12em; color:var(--faint); font-weight:600; margin-bottom:.7rem; }
.dash-camp-tags{ display:flex; flex-wrap:wrap; gap:.5rem; }
.dash-camp-tag{ padding:.35rem .8rem; border-radius:999px; font-size:.8rem; font-weight:600; color:var(--forest);
  background:rgba(74,107,90,.1); border:1px solid rgba(74,107,90,.18); }
.dash-camps-none{ font-size:.85rem; color:var(--faint); }
.pend-list{ list-style:none; margin:0; padding:0; }
.pend-item{ border-bottom:1px solid var(--line-2); }
.pend-item:last-child{ border-bottom:none; }
.pend-link{ display:flex; justify-content:space-between; align-items:center; gap:1rem; padding:.9rem .4rem;
  border-radius:var(--r-sm); transition:background .18s var(--ease), padding-left .2s var(--ease); }
.pend-link:hover{ background:var(--sand-2); padding-left:.8rem; }
.pend-title{ font-weight:600; color:var(--ink); font-size:.95rem; }
.pend-meta{ display:flex; align-items:center; gap:.6rem; flex-wrap:wrap; }
.pend-data{ font-size:.8rem; color:var(--faint); font-variant-numeric:tabular-nums; }

/* ================================================================
   PEÇA — detalhe
   ================================================================ */
.pv-back{ display:inline-flex; align-items:center; gap:.35rem; margin-bottom:1.6rem; padding:.5rem .9rem .5rem .6rem;
  border-radius:999px; font-size:.85rem; font-weight:600; color:var(--muted); background:var(--paper);
  border:1px solid var(--line-2); box-shadow:var(--shadow-1); transition:transform .2s var(--ease), color .2s; }
.pv-back:hover{ transform:translateX(-2px); color:var(--forest); }
.pv-back svg{ width:16px; height:16px; }
.pv-grid{ display:grid; grid-template-columns:1fr 380px; gap:clamp(1.5rem,3vw,3rem); align-items:start; }
.pv-left{ min-width:0; }
.pv-right{ position:sticky; top:2rem; display:flex; flex-direction:column; gap:1.25rem; }

/* tabs */
.pv-tabs{ display:flex; gap:.3rem; flex-wrap:wrap; margin-bottom:1.4rem; border-bottom:1px solid var(--line-2); }
.pv-tab{ position:relative; padding:.7rem .95rem; font-size:.9rem; font-weight:600; font-family:var(--sans);
  color:var(--muted); background:none; border:none; cursor:pointer; transition:color .2s var(--ease); }
.pv-tab::after{ content:''; position:absolute; left:.95rem; right:.95rem; bottom:-1px; height:2px;
  background:var(--gold); transform:scaleX(0); transform-origin:left; transition:transform .28s var(--spring); }
.pv-tab:hover{ color:var(--ink); }
.pv-tab.on{ color:var(--ink); }
.pv-tab.on::after{ transform:scaleX(1); }
.pv-tabn{ display:inline-flex; align-items:center; justify-content:center; min-width:18px; height:18px; padding:0 5px;
  border-radius:999px; background:var(--sand-2); font-size:.68rem; font-weight:700; color:var(--muted); font-variant-numeric:tabular-nums; }

.pv-panel{ display:none; animation:view-enter .35s var(--ease) both; }
.pv-panel.on{ display:block; }

/* frames de preview */
.pv-frame{ position:relative; margin:0 auto; border-radius:var(--r-md); overflow:hidden; background:var(--ink);
  box-shadow:var(--shadow-2); }
.pv-frame-45{ max-width:480px; aspect-ratio:4/5; }
.pv-frame-11{ max-width:480px; aspect-ratio:1/1; }
.pv-frame-916{ max-width:320px; aspect-ratio:9/16; }
.pv-ratio{ display:flex; justify-content:center; gap:.25rem; margin:0 auto 1rem; padding:.25rem; border-radius:999px;
  background:var(--sand-2); border:1px solid var(--line-2); width:fit-content; }
.pv-ratio-btn{ padding:.35rem .9rem; font-size:.8rem; font-weight:600; font-family:var(--sans); color:var(--muted);
  background:none; border:none; border-radius:999px; cursor:pointer; transition:all .2s var(--ease); }
.pv-ratio-btn.on{ background:var(--paper); color:var(--ink); box-shadow:var(--shadow-1); }
.pv-slide{ position:absolute; inset:0; opacity:0; pointer-events:none; transition:opacity .4s var(--ease); }
.pv-slide.on{ opacity:1; pointer-events:auto; }
.pv-media{ width:100%; height:100%; object-fit:contain; background:#14231b; display:block; }
.pv-dl{ position:absolute; bottom:.7rem; left:50%; transform:translateX(-50%); display:inline-flex; align-items:center; gap:.4rem;
  padding:.5rem 1rem; border:none; border-radius:999px; background:rgba(255,253,249,.92); color:var(--ink);
  font-size:.8rem; font-weight:600; cursor:pointer; box-shadow:var(--shadow-1); backdrop-filter:blur(6px);
  transition:transform .2s var(--ease), background .2s; }
.pv-dl:hover{ transform:translateX(-50%) translateY(-2px); background:var(--paper); }
.pv-dl svg{ width:15px; height:15px; }
.pv-slide-nav{ display:flex; align-items:center; justify-content:center; gap:1rem; margin-top:1rem; }
.pv-dots{ display:flex; gap:.2rem; }
/* hit area >=32px via padding; o ponto visível continua 8px */
.pv-dot{ width:8px; height:8px; box-sizing:content-box; padding:12px; border-radius:50%;
  background:var(--line); background-clip:content-box; cursor:pointer; transition:background .2s, transform .2s var(--ease); }
.pv-dot.on{ background:var(--gold); background-clip:content-box; transform:scale(1.25); }

/* legenda / texto */
.pv-legenda{ font-size:1rem; line-height:1.7; color:var(--graphite); white-space:pre-line;
  background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r-md); padding:1.5rem; box-shadow:var(--shadow-1); }
.pv-texto-lab{ font-size:.72rem; text-transform:uppercase; letter-spacing:.13em; color:var(--gold); font-weight:700; margin:0 0 .8rem; }
.pv-texto{ font-family:var(--serif); font-size:1.25rem; line-height:1.5; color:var(--ink);
  background:linear-gradient(160deg, rgba(184,147,74,.13), rgba(217,195,154,.08));
  border:1px solid rgba(184,147,74,.25); border-radius:var(--r-md); padding:1.6rem; }
.pv-texto-vazio{ color:var(--muted); font-size:.92rem; line-height:1.6; margin:0; max-width:52ch; }
.pv-texto-edit{ margin-top:1rem; }
.pv-texto-editbtn{ background:none; border:1px solid var(--line); border-radius:999px; padding:.5rem 1.1rem;
  font-size:.82rem; font-weight:600; color:var(--forest); cursor:pointer; font-family:var(--sans);
  transition:border-color .2s, background .2s; }
.pv-texto-editbtn:hover{ border-color:var(--gold-soft); background:var(--paper); }

/* observações */
.obs-list{ list-style:none; margin:0 0 1.2rem; padding:0; display:flex; flex-direction:column; gap:1rem; }
.obs-item{ background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r-md); padding:1.1rem 1.3rem; box-shadow:var(--shadow-1); }
.obs-h{ display:flex; align-items:center; gap:.7rem; margin-bottom:.5rem; flex-wrap:wrap; }
.obs-autor{ font-weight:700; color:var(--ink); font-size:.9rem; }
.obs-area{ font-size:.68rem; text-transform:uppercase; letter-spacing:.06em; padding:.15rem .5rem; border-radius:6px;
  background:rgba(74,107,90,.1); color:var(--forest); font-weight:600; }
.obs-data{ margin-left:auto; font-size:.78rem; color:var(--faint); }
.obs-txt{ margin:0; color:var(--graphite); line-height:1.6; font-size:.95rem; }

/* versões */
.ver-list{ list-style:none; margin:0 0 1.2rem; padding:0; display:flex; flex-direction:column; gap:.7rem; }
.ver-item{ display:flex; gap:1rem; align-items:center; background:var(--paper); border:1px solid var(--line-2);
  border-radius:var(--r-md); padding:.7rem; box-shadow:var(--shadow-1); }
.ver-item.atual{ border-color:var(--gold-soft); box-shadow:0 0 0 1px rgba(184,147,74,.25), var(--shadow-1); }
.ver-thumb{ width:56px; height:70px; border-radius:8px; overflow:hidden; background:var(--sand-2); flex:none; display:grid; place-items:center; color:var(--faint-2); }
.ver-thumb img{ width:100%; height:100%; object-fit:cover; }
.ver-thumb svg{ width:22px; height:22px; }
.ver-info{ display:flex; flex-direction:column; gap:.2rem; min-width:0; }
.ver-num{ font-weight:700; color:var(--ink); font-size:.9rem; }
.ver-data{ font-size:.78rem; color:var(--faint); }
.ver-nota{ font-size:.82rem; color:var(--muted); font-style:italic; }

/* ficha (direita) */
.pv-card{ background:var(--paper); border:1px solid var(--line-2); border-radius:var(--r-lg);
  padding:clamp(1.4rem,3vw,1.9rem); box-shadow:var(--shadow-2); }
.pv-status-row{ display:flex; align-items:center; gap:.5rem; margin-bottom:1rem; flex-wrap:wrap; }
.pv-title{ font-size:1.6rem; line-height:1.15; margin-bottom:1.4rem; }
.pv-ficha{ margin:0 0 1.4rem; display:flex; flex-direction:column; gap:.85rem; }
.pv-ficha div{ display:flex; justify-content:space-between; gap:1rem; align-items:baseline; }
.pv-ficha dt{ font-size:.78rem; color:var(--faint); text-transform:uppercase; letter-spacing:.06em; }
.pv-ficha dd{ margin:0; font-size:.9rem; color:var(--ink); font-weight:600; text-align:right; }

.pv-oficial{ margin-bottom:1.4rem; padding:1rem 1.1rem; border-radius:var(--r-md);
  background:color-mix(in srgb, var(--chip) 8%, var(--paper)); border:1px solid color-mix(in srgb, var(--chip) 22%, transparent); }
.pv-oficial-lab{ font-size:.68rem; text-transform:uppercase; letter-spacing:.1em; color:var(--chip); font-weight:700; }
.pv-oficial-tx{ margin:.5rem 0; font-size:.9rem; color:var(--graphite); line-height:1.5; }
.pv-oficial-areas, .parecer-areas, .pv-oficial-areas{ display:flex; flex-wrap:wrap; gap:.3rem; margin-top:.4rem; }
.area-tag{ font-size:.68rem; padding:.12rem .45rem; border-radius:5px; background:rgba(30,58,47,.07); color:var(--graphite); }
.pv-oficial-data{ font-size:.75rem; color:var(--faint); }

.pv-actions{ display:grid; gap:.6rem; }
.pv-act{ width:100%; justify-content:center; }
.pv-reprovar{ color:#9A6A63; }
.pv-reprovar:hover{ color:#7d554f; border-color:rgba(154,106,99,.4); }
.pv-extra{ display:flex; flex-wrap:wrap; gap:.9rem 1.2rem; margin-top:1.2rem; padding-top:1.2rem; border-top:1px solid var(--line-2); }
.pv-extra-btn{ background:none; border:none; padding:0; font-size:.82rem; font-weight:600; color:var(--forest); cursor:pointer;
  font-family:var(--sans); transition:color .2s; text-decoration:none; }
.pv-extra-btn:hover{ color:var(--gold); text-decoration:underline; }

/* pareceres */
.pv-pareceres-lab{ font-size:.72rem; text-transform:uppercase; letter-spacing:.12em; color:var(--faint); font-weight:600; margin:0 0 .8rem; }
.parecer-list{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:.7rem; }
.parecer-item{ padding:.9rem 1.05rem; border-radius:var(--r-md); background:var(--paper); border:1px solid var(--line-2);
  border-left:3px solid var(--chip, var(--line)); box-shadow:var(--shadow-1); }
.parecer-h{ display:flex; justify-content:space-between; align-items:center; gap:.6rem; margin-bottom:.4rem; }
.parecer-autor{ font-weight:700; font-size:.85rem; color:var(--ink); }
.parecer-tx{ margin:0; font-size:.85rem; color:var(--graphite); line-height:1.5; }

/* ================================================================
   MODAIS DE DECISÃO (checklist, ajuste, comentar, comparar)
   ================================================================ */
.dec-h{ font-size:1.4rem; margin-bottom:.4rem; }
.dec-sub{ font-size:.9rem; color:var(--muted); margin:0 0 1.2rem; }
.dec-aviso{ display:flex; gap:.6rem; align-items:flex-start; padding:.8rem 1rem; margin-bottom:1.2rem;
  border-radius:var(--r-md); background:rgba(184,147,74,.1); border:1px solid rgba(184,147,74,.22); font-size:.85rem; color:var(--graphite); }
.dec-aviso svg{ width:18px; height:18px; color:var(--gold); flex:none; margin-top:.1rem; }
.dec-form{ }
.dec-actions{ margin-top:1.2rem; }
.dec-go{ width:100%; justify-content:center; }
.dec-go:disabled{ opacity:.45; cursor:not-allowed; }
.dec-reprovar{ color:#9A6A63; }

.chk-list{ list-style:none; margin:0 0 1.2rem; padding:0; display:flex; flex-direction:column; gap:.15rem; }
.chk-lab{ display:flex; align-items:center; gap:.7rem; padding:.6rem .5rem; border-radius:var(--r-sm); cursor:pointer;
  transition:background .18s; }
.chk-lab:hover{ background:var(--sand-2); }
.chk-box{ position:absolute; opacity:0; width:0; height:0; }
.chk-mark{ width:24px; height:24px; flex:none; display:grid; place-items:center; border-radius:7px;
  border:1.5px solid var(--line); background:var(--paper); color:transparent; transition:all .2s var(--spring); }
.chk-mark svg{ width:15px; height:15px; }
.chk-box:checked + .chk-mark{ background:var(--forest); border-color:var(--forest); color:#F3EFE7; transform:scale(1.05); }
.chk-box:focus-visible + .chk-mark{ outline:2px solid var(--gold); outline-offset:2px; }
.chk-tx{ font-size:.9rem; color:var(--graphite); line-height:1.35; }

.area-chips{ display:flex; flex-wrap:wrap; gap:.5rem; }
.area-chip{ padding:.45rem .85rem; font-size:.82rem; font-weight:600; font-family:var(--sans); color:var(--graphite);
  background:var(--paper); border:1px solid var(--line); border-radius:999px; cursor:pointer; transition:all .18s var(--ease); }
.area-chip:hover{ border-color:var(--gold-soft); }
.area-chip.on{ background:var(--forest); color:#F3EFE7; border-color:transparent; }

/* comparação */
.cmp-grid{ display:grid; grid-template-columns:1fr 1fr; gap:1.2rem; }
.cmp-col{ display:flex; flex-direction:column; gap:.8rem; }
.cmp-lab{ font-size:.72rem; text-transform:uppercase; letter-spacing:.1em; font-weight:700; color:var(--faint); }
.cmp-lab-new{ color:var(--gold); }
.cmp-media{ aspect-ratio:4/5; border-radius:var(--r-sm); overflow:hidden; background:var(--sand-2); }
.cmp-media img{ width:100%; height:100%; object-fit:cover; }
.cmp-noimg{ width:100%; height:100%; display:grid; place-items:center; color:var(--faint); font-size:.8rem; }
.cmp-fl{ font-size:.68rem; text-transform:uppercase; letter-spacing:.08em; color:var(--faint); font-weight:600; display:block; margin-bottom:.3rem; }
.cmp-val{ font-size:.88rem; color:var(--graphite); line-height:1.5; }
.cmp-diff{ background:rgba(184,147,74,.2); padding:.05rem .2rem; border-radius:3px; }
.cmp-same{ opacity:.65; }

/* ================================================================
   MODO APROVAÇÃO (fila de triagem)
   ================================================================ */
.apr{ max-width:960px; margin:0 auto; }
.apr-top{ display:flex; justify-content:space-between; align-items:center; margin-bottom:1.5rem; }
.apr-counter{ font-family:var(--serif); font-size:1.1rem; color:var(--ink); font-variant-numeric:tabular-nums; }
.apr-counter span{ color:var(--faint); font-family:var(--sans); font-size:.85rem; }

.apr-stage{ display:grid; grid-template-columns:1fr 1fr; gap:clamp(1.5rem,3vw,3rem); align-items:start;
  animation:view-enter .4s var(--ease) both; }
.apr-media-wrap{ position:relative; border-radius:var(--r-lg); overflow:hidden; background:var(--ink);
  box-shadow:var(--shadow-2); margin:0 auto; width:100%; }
.apr-media-wrap.r45{ aspect-ratio:4/5; max-width:500px; }
.apr-media-wrap.r916{ aspect-ratio:9/16; max-width:360px; }
.apr-media{ width:100%; height:100%; object-fit:contain; background:#14231b; display:block; }
.apr-noimg{ width:100%; height:100%; display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:.7rem; color:rgba(243,239,231,.55); }
.apr-noimg svg{ width:34px; height:34px; }
.apr-multi{ position:absolute; top:.7rem; left:.7rem; display:inline-flex; align-items:center; gap:.3rem;
  padding:.25rem .6rem; border-radius:8px; background:rgba(30,58,47,.72); color:#F3EFE7; font-size:.78rem; font-weight:700; }
.apr-multi svg{ width:14px; height:14px; }

.apr-info{ padding-top:.5rem; }
.apr-info-top{ display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; margin-bottom:1rem; }
.apr-fmt{ font-size:.75rem; text-transform:uppercase; letter-spacing:.08em; color:var(--faint); font-weight:600; }
.apr-title{ font-size:clamp(1.6rem,3vw,2.2rem); line-height:1.12; margin-bottom:.6rem; }
.apr-when{ font-size:.9rem; color:var(--muted); margin:0 0 1.6rem; }
.apr-texto{ background:linear-gradient(160deg, rgba(184,147,74,.14), rgba(217,195,154,.08));
  border:1px solid rgba(184,147,74,.25); border-radius:var(--r-md); padding:1.2rem 1.4rem; margin-bottom:1.2rem; }
.apr-texto-lab{ display:block; font-size:.68rem; text-transform:uppercase; letter-spacing:.12em; color:var(--gold); font-weight:700; margin-bottom:.5rem; }
.apr-texto p{ margin:0; font-family:var(--serif); font-size:1.15rem; line-height:1.45; color:var(--ink); }
.apr-legenda{ margin-bottom:1.4rem; }
.apr-legenda-lab{ display:block; font-size:.68rem; text-transform:uppercase; letter-spacing:.12em; color:var(--faint); font-weight:600; margin-bottom:.5rem; }
.apr-legenda p{ margin:0; font-size:.95rem; line-height:1.65; color:var(--graphite); white-space:pre-line; }
.apr-detalhe{ font-size:.85rem; font-weight:600; color:var(--forest); transition:color .2s; }
.apr-detalhe:hover{ color:var(--gold); }

.apr-actionbar{ display:flex; align-items:center; gap:1rem; justify-content:center; margin-top:clamp(2rem,4vw,3rem);
  position:sticky; bottom:1.5rem; }
.apr-buttons{ display:flex; gap:.7rem; flex-wrap:wrap; justify-content:center;
  padding:.7rem; background:rgba(255,253,249,.82); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border:1px solid var(--line-2); border-radius:999px; box-shadow:var(--shadow-2); }
.apr-btn{ padding:.85rem 1.6rem; }
.apr-reprovar{ color:#9A6A63; }
.apr-prev:disabled, .apr-next:disabled{ opacity:.35; cursor:not-allowed; }

/* estado zen */
.apr-zen{ min-height:60vh; display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center; gap:1rem; animation:view-enter .5s var(--ease) both; }
.apr-zen-mark{ width:80px; height:80px; display:grid; place-items:center; color:#F3EFE7;
  background:linear-gradient(160deg, var(--forest), var(--forest-2)); border-radius:26px; box-shadow:var(--shadow-2);
  margin-bottom:.6rem; animation:zen-pop .6s var(--spring) both; }
.apr-zen-mark svg{ width:38px; height:38px; }
@keyframes zen-pop{ from{ transform:scale(0) rotate(-12deg); } to{ transform:none; } }
.apr-zen h1{ font-size:clamp(2rem,4vw,2.8rem); }
.apr-zen p{ color:var(--muted); max-width:36ch; margin:0 0 .8rem; }

/* ================================================================
   BOTTOM-NAV (mobile) — escondida no desktop
   ================================================================ */
.botnav{ display:none; }

/* ================================================================
   RESPONSIVE
   ================================================================ */
@media (max-width:920px){
  .shell{ grid-template-columns:1fr; }
  .sidebar{ display:none; }
  .view{ padding:clamp(1.75rem,6vw,2.5rem) 1.25rem calc(6.5rem + env(safe-area-inset-bottom,0)); }

  .botnav{
    display:grid; grid-template-columns:repeat(5,1fr);
    position:fixed; left:0; right:0; bottom:0; z-index:800;
    padding:.5rem .4rem calc(.5rem + env(safe-area-inset-bottom,0));
    background:rgba(255,253,249,.82); backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px);
    border-top:1px solid var(--line-2);
  }
  .bn-link{ display:flex; flex-direction:column; align-items:center; gap:.2rem;
    padding:.4rem 0; border-radius:14px; color:var(--faint); position:relative;
    transition:color .2s var(--ease), background .2s var(--ease); min-height:52px; justify-content:center; }
  .bn-ic{ width:22px; height:22px; display:inline-flex; } .bn-ic svg{ width:100%; height:100%; }
  .bn-tx{ font-size:.66rem; font-weight:600; letter-spacing:.01em; }
  .bn-link.nav-on{ color:var(--forest); }
  .bn-link.nav-on .bn-ic{ transform:translateY(-1px); }
  .bn-cta{ color:var(--gold); }
  .bn-cta.nav-on{ color:var(--gold); }
  .bn-badge{ position:absolute; top:.15rem; right:calc(50% - 20px); min-width:16px; height:16px;
    padding:0 4px; border-radius:999px; display:none; align-items:center; justify-content:center;
    font-size:.6rem; font-weight:700; background:var(--gold); color:#FBF7EE; }
  .bn-badge.badge-on{ display:inline-flex; }

  .sh h1,.sh h2,.view-ph h1{ font-size:clamp(2rem,9vw,2.8rem); }

  /* upload empilha; card de config vai pro topo */
  .up-grid{ grid-template-columns:1fr; }
  .up-side{ position:static; order:-1; }

  /* dashboard empilha */
  .dash-grid{ grid-template-columns:1fr; }
  .dash-count-grid{ grid-template-columns:repeat(2,1fr); }

  /* semana vira lista por dia (grade 7col não cabe) */
  .sem-grid{ grid-template-columns:1fr; gap:1.25rem; }
  .sem-corner, .sem-daycol{ display:none; }
  .sem-rowlab{ border-right:none; border-bottom:1px solid var(--line-2); flex-direction:row;
    align-items:baseline; gap:.5rem; padding:.4rem 0; min-width:0; }
  .sem-cell{ display:grid; grid-template-columns:repeat(auto-fill,minmax(110px,1fr)); gap:.6rem;
    min-height:0; margin-bottom:.5rem; }
  .sem-cell:empty, .sem-cell .cel-vazia{ display:none; }

  /* calendário: dias menores */
  .cal-day{ min-height:88px; padding:.35rem; }
  .cal-mini-tx{ font-size:.66rem; }

  /* peça: empilha, ficha vai pro topo */
  .pv-grid{ grid-template-columns:1fr; }
  .pv-right{ position:static; }
  .cmp-grid{ grid-template-columns:1fr; }

  /* aprovação: empilha, botões ficam sticky no fim */
  .apr-stage{ grid-template-columns:1fr; }
  .apr-actionbar{ gap:.5rem; }
  .apr-btn{ padding:.75rem 1.1rem; font-size:.88rem; }
}

@media (max-width:640px){
  .cal-grid{ gap:.3rem; }
  .cal-day{ min-height:64px; }
  .cal-day-items{ display:none; }  /* no mobile pequeno mostra só o dot-count */
  .cal-day.vazio .cal-dnum, .cal-day .cal-dcount{ opacity:.9; }
}

@media (max-width:520px){
  .sk-grid{ grid-template-columns:repeat(2,1fr); gap:1rem; }
  .gate{ padding:2rem 1.25rem; }
  .up-previews{ grid-template-columns:repeat(3,1fr); }
}

/* ================================================================
   REDUCED MOTION
   ================================================================ */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{ animation-duration:.01ms !important; animation-iteration-count:1 !important;
    transition-duration:.01ms !important; scroll-behavior:auto !important; }
  .blob{ animation:none !important; }
  .mark-svg .wave{ stroke-dashoffset:0 !important; }
}
