/* ===== Data Science Summit 2025 — clone da grade (timeline) ===== */
:root{
  --bg:#070709;
  --panel:rgba(16,16,26,.72);
  --panel-2:rgba(22,20,34,.6);
  --border:rgba(140,130,190,.18);
  --border-2:rgba(150,140,200,.28);
  --text:#eef2f8;
  --muted:#aeb0c6;
  --muted-2:#7f80a0;
  /* identidade DSS 2026: menta-ciano (assinatura) + roxo (brilho) */
  --mint:#00ffd4;
  --purple:#a855f7;
  --peach:#ffbc7d;
  --blue:#a855f7;            /* "accent preenchido": roxo, texto branco legível */
  --blue-ink:#ead9ff;
  --focus:#00ffd4;
  --zoom:1;          /* zoom da grade (A-/A+): escala colunas, cabeçalhos e fontes dos cards em conjunto */
  --row-h:74px;      /* altura de cada 30min */
  --time-col:calc(76px * var(--zoom));
  --day-min:250px;
  --room-min:calc(120px * var(--zoom));  /* largura mínima de cada coluna de sala (o texto tem piso; badges cedem antes) */
  --header-h:77px;   /* altura do header fixo (offset dos filtros sticky) */
  --dayhead-h:calc(54px * var(--zoom));  /* altura do cabeçalho de dia (offset do sticky das salas) */
  --maxw:none;       /* grade ocupa toda a largura do navegador */
  --radius:12px;
  /* escala tipográfica */
  --fs-xs:11px; --fs-sm:12px; --fs-base:14px; --fs-md:15px; --fs-lg:18px; --fs-xl:22px; --fs-2xl:26px;
  --shadow-sm:0 4px 14px rgba(0,0,0,.28);
  --shadow-md:0 12px 30px rgba(0,0,0,.42);
  --shadow-lg:0 30px 80px rgba(0,0,0,.6);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
html{scroll-behavior:smooth}
body{
  font-family:'Inter',system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  font-feature-settings:'cv11','ss01';
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  color:var(--text);background:var(--bg);
  font-size:var(--fs-base);line-height:1.5;letter-spacing:-0.006em;
  /* a PÁGINA INTEIRA rola (como a grade original) — layout arejado e zoom-safe: o topo e os
     cabeçalhos de dia grudam (sticky), o resto flui e a página cresce com o conteúdo */
}
/* fundo tech escuro */
body::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(900px circle at 10% -5%,rgba(168,85,247,.18),transparent 45%),
    radial-gradient(1100px circle at 100% 8%,rgba(0,255,212,.08),transparent 45%),
    linear-gradient(rgba(120,110,200,.04) 1px,transparent 1px),
    linear-gradient(90deg,rgba(120,110,200,.04) 1px,transparent 1px);
  background-size:auto,auto,46px 46px,46px 46px;
}
.app{position:relative;z-index:1;min-height:100dvh;display:flex;flex-direction:column}
/* itens do topo têm altura natural; a timeline ocupa o resto e é o único que rola */
.app>header.site,.painel-row,.toolbar,.active-filters,.edit-banner,footer.site{flex:none}
button{font-family:inherit}
::selection{background:rgba(59,130,246,.35);color:#fff}
/* foco de teclado consistente e visível */
:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:8px}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--focus);outline-offset:2px}

/* ===== Header ===== */
header.site{position:sticky;top:0;z-index:60;background:rgba(6,9,15,.82);backdrop-filter:blur(14px);border-bottom:1px solid var(--border)}
.header-inner{max-width:var(--maxw);margin:0 auto;padding:10px 22px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:14px;min-width:0;flex:none}
/* filtros agora vivem na barra do topo (entre a marca e as ações) — ganha altura pra timeline */
.filters{display:flex;align-items:center;gap:16px;flex-wrap:wrap;flex:1 1 340px;min-width:0}
.brand-logo{height:52px;width:auto;filter:drop-shadow(0 0 14px rgba(0,255,212,.25))}
.brand-tag{font-size:var(--fs-xs);font-weight:700;text-transform:uppercase;letter-spacing:1.5px;color:var(--mint);
  padding:4px 10px;border:1px solid rgba(0,255,212,.35);border-radius:999px;background:rgba(0,255,212,.06);white-space:nowrap}
.brand h1{margin:0;font-size:var(--fs-xl);font-weight:800;line-height:1.05;letter-spacing:-0.02em}
.brand p{margin:3px 0 0;font-size:var(--fs-sm);color:var(--muted);font-weight:500}
.header-actions{display:none;gap:10px;flex:none}   /* público: sem ações; só aparecem em /admin */
body.admin .header-actions{display:flex}
/* Exportar e Entrar: só ícone (texto some; rótulo acessível fica no aria-label) */
#exportBtn span,#authBtn span{display:none}
#exportBtn,#authBtn{padding:10px 12px}
/* gate de login: só quem entrou vê editar / nova palestra / publicar */
body:not(.authed) #addBtn,body:not(.authed) #editBtn,body:not(.authed) #publishBtn{display:none}
body.authed #authBtn{border-color:rgba(0,255,212,.4);color:var(--mint)}
.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:11px;font-size:var(--fs-base);font-weight:600;cursor:pointer;border:1px solid transparent;white-space:nowrap;transition:filter .15s,background .15s,border-color .15s,transform .08s;letter-spacing:-0.01em}
.btn:active{transform:translateY(1px)}
.btn svg{width:16px;height:16px}
.btn-outline{background:rgba(255,255,255,.03);border-color:var(--border-2);color:var(--text)}
.btn-outline:hover{background:rgba(255,255,255,.08);border-color:var(--border-2)}
.btn-blue{background:linear-gradient(120deg,#a855f7,#7c3aed);color:#fff;box-shadow:0 6px 20px rgba(168,85,247,.4),0 0 0 1px rgba(0,255,212,.12) inset}
.btn-blue:hover{filter:brightness(1.1)}

/* ===== Painel pills row ===== */
.painel-row{max-width:var(--maxw);margin:0 auto;padding:14px 22px 4px;display:flex;gap:9px;flex-wrap:wrap}
.pill{padding:7px 15px;border-radius:999px;font-size:var(--fs-sm);font-weight:600;cursor:pointer;border:1px solid;background:transparent;transition:filter .15s,transform .08s,box-shadow .15s;letter-spacing:-0.005em}
.pill:hover{filter:brightness(1.22);transform:translateY(-1px)}
.pill:active{transform:translateY(0)}
.pill.active{color:#fff!important;box-shadow:0 4px 14px rgba(0,0,0,.35)}

/* ===== Toolbar (stats + search + salas) ===== */
/* z-index eleva o contexto acima da timeline (que tem backdrop-filter e vem depois no DOM),
   senão o popover de filtros fica escondido atrás da grade */
.toolbar{max-width:var(--maxw);margin:14px auto 0;padding:0 22px;position:relative;z-index:40}
.toolbar-inner{background:var(--panel);border:1px solid var(--border);border-radius:18px;padding:16px 18px;display:flex;align-items:center;gap:22px;flex-wrap:wrap;backdrop-filter:blur(10px)}
.stats{display:flex;gap:24px}
.stat{position:relative}
.stat .num{font-size:var(--fs-2xl);font-weight:800;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-0.03em}
.stat .lbl{font-size:var(--fs-xs);color:var(--muted);margin-top:4px;font-weight:500}
.stat#stShowWrap .num,.stat .num.hl{color:var(--mint)}
.search{position:relative;flex:0 0 auto;width:calc(10ch + 66px);min-width:0}
.search svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);width:17px;height:17px;color:var(--muted);opacity:.85}
.search input{width:100%;padding:11px 30px 11px 36px;border-radius:11px;font-size:var(--fs-base);background:rgba(8,12,20,.7);border:1px solid var(--border-2);color:#fff;outline:none;transition:border-color .15s,box-shadow .15s}
.search input::placeholder{color:var(--muted-2)}
.search input:focus{border-color:var(--mint);box-shadow:0 0 0 3px rgba(0,255,212,.16)}
.search .clear-q{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:24px;height:24px;border:none;border-radius:7px;background:rgba(255,255,255,.06);color:var(--muted);cursor:pointer;font-size:14px;display:none;align-items:center;justify-content:center}
.search input:not(:placeholder-shown)+.clear-q{display:flex}
.search .clear-q:hover{background:rgba(255,255,255,.14);color:#fff}
.locais{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* grupos de botões dos filtros inline (estavam em style="" no HTML; saíram de lá para o
   modo compacto poder sobrescrever — ver mobile.css) */
#diaRow,#fSala{display:flex;gap:7px;flex-wrap:wrap}
/* controles que só existem no celular (o modo compacto os liga em mobile.css) */
.only-compact,.st-compact,#popBottom label,.tl-hint{display:none}
.locais .lbl{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--muted);font-weight:500}
.room{padding:7px 13px;border-radius:9px;font-size:var(--fs-sm);font-weight:600;cursor:pointer;background:rgba(255,255,255,.04);border:1px solid var(--border-2);color:var(--text);transition:all .15s}
.room:hover{border-color:var(--mint);background:rgba(0,255,212,.08)}
.room.active{background:var(--blue);border-color:var(--blue);color:#fff;box-shadow:0 4px 14px rgba(168,85,247,.35)}
.room.ticket{display:inline-flex;align-items:center;gap:6px}
.filtros-wrap{position:relative}
#filtrosBtn.has-active::after{content:"";position:absolute;top:7px;right:9px;width:7px;height:7px;border-radius:50%;background:var(--mint);box-shadow:0 0 0 2px rgba(7,7,9,.9),0 0 8px var(--mint)}
.popover{position:absolute;left:0;top:calc(100% + 8px);z-index:70;width:min(340px,86vw);max-height:min(70vh,540px);overflow-y:auto;background:#0d1220;border:1px solid var(--border-2);border-radius:14px;padding:16px;box-shadow:var(--shadow-lg);display:none}
.popover.open{display:block;animation:popIn .14s ease}
@keyframes popIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
.popover label{display:block;font-size:var(--fs-xs);color:var(--muted);margin:14px 0 7px;text-transform:uppercase;letter-spacing:.5px;font-weight:600}
.popover label:first-child{margin-top:0}
/* grupos de toggles multi-seleção */
.opt-group{display:flex;flex-wrap:wrap;gap:6px}
.opt{display:inline-flex;align-items:center;gap:6px;padding:7px 11px;border-radius:9px;font-size:var(--fs-sm);font-weight:600;cursor:pointer;background:rgba(255,255,255,.04);border:1px solid var(--border-2);color:var(--text);transition:all .13s;letter-spacing:-0.005em}
.opt-dot{width:9px;height:9px;border-radius:50%;flex:none;box-shadow:0 0 0 2px rgba(255,255,255,.12)}
.opt:hover{border-color:var(--mint);background:rgba(0,255,212,.08)}
.opt.active{background:var(--blue);border-color:var(--blue);color:#fff;box-shadow:0 3px 12px rgba(168,85,247,.35)}
.opt.active::before{content:"✓ ";font-weight:800}
.popover .clear{margin-top:16px;width:100%;justify-content:center}

/* ===== Active filters chip bar ===== */
.active-filters{max-width:var(--maxw);margin:0 auto;padding:0 22px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.active-filters:not(:empty){margin-top:14px}
.active-filters .af-label{font-size:var(--fs-xs);color:var(--muted-2);text-transform:uppercase;letter-spacing:.5px;font-weight:600;margin-right:2px}
.chip{display:inline-flex;align-items:center;gap:7px;padding:5px 8px 5px 12px;border-radius:999px;font-size:var(--fs-sm);font-weight:600;background:rgba(0,255,212,.1);border:1px solid rgba(0,255,212,.38);color:#b6fff0}
.chip .k{opacity:.7;font-weight:500}
.chip button{border:none;background:rgba(255,255,255,.08);color:inherit;width:18px;height:18px;border-radius:50%;cursor:pointer;font-size:12px;line-height:1;display:inline-flex;align-items:center;justify-content:center}
.chip button:hover{background:rgba(255,255,255,.2)}
.chip.clear-all{background:transparent;border-color:var(--border-2);color:var(--muted);padding:5px 12px}
.chip.clear-all:hover{color:#fff;border-color:var(--muted)}

/* ===== Timeline ===== */
.timeline-wrap{flex:0 0 auto;width:100%;max-width:var(--maxw);margin:16px auto 28px;padding:0 22px;display:flex}
/* a timeline tem ALTURA NATURAL e a página inteira rola (overflow visible) — sem scroll interno travado.
   Na visão "por dia" as colunas são flexíveis (minmax(0,1fr)) e não forçam scroll horizontal: cabe na tela
   e re-empilha ao estreitar/zoom, como a grade original. */
.timeline{flex:1 1 auto;overflow:visible;border:1px solid var(--border);border-radius:18px;background:rgba(8,11,18,.5);backdrop-filter:blur(4px)}
.tl-inner{display:grid;grid-template-columns:var(--time-col) repeat(4,minmax(0,1fr))}
/* header row */
.tl-head{z-index:30;background:rgba(10,14,22,.96);backdrop-filter:blur(8px)}
/* canto fixo (horário) — cobre as duas linhas de cabeçalho */
.tl-corner{grid-column:1;grid-row:1 / span 2;position:sticky;top:0;left:0;z-index:34;display:flex;align-items:center;
  padding:13px 14px;color:var(--muted);font-size:var(--fs-sm);font-weight:600;background:rgba(10,14,22,.98);border-bottom:1px solid var(--border-2)}
/* cabeçalho do dia (linha 1) */
.tl-dayhead{position:sticky;top:var(--header-h);z-index:32;height:var(--dayhead-h);padding:0 14px;display:flex;flex-direction:column;justify-content:center;overflow:hidden;
  border-left:1px solid var(--border);border-bottom:1px solid var(--border)}
.tl-dayhead .d{font-size:calc(1rem * var(--zoom,1));line-height:1.2;font-weight:800;letter-spacing:-0.01em}
.tl-dayhead .c{font-size:calc(0.78rem * var(--zoom,1));line-height:1.15;color:var(--muted);margin-top:2px;font-variant-numeric:tabular-nums}
/* cabeçalho da sala (linha 2) */
.tl-roomhead{position:sticky;top:calc(var(--header-h) + var(--dayhead-h));z-index:31;padding:9px 12px;font-size:calc(0.85rem * var(--zoom,1));font-weight:600;color:var(--muted);
  border-left:1px solid var(--border);border-bottom:1px solid var(--border-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  display:flex;align-items:center;gap:6px;background:rgba(10,14,22,.96)}
.tl-roomhead::before{content:"";width:7px;height:7px;border-radius:2px;background:var(--mint);opacity:.55;flex:none}
/* divisória mais forte entre dias */
.tl-day-start{border-left:2px solid var(--border-2)!important}
/* Sala VIP: coluna dourada transparente + acesso restrito no cabeçalho */
.tl-col.col-vip{background:linear-gradient(180deg, rgba(246,200,90,.12), rgba(246,200,90,.035))}
.tl-roomhead.rh-vip{flex-direction:column;align-items:flex-start;gap:1px;white-space:normal;color:#f4cd63;
  background:linear-gradient(180deg, rgba(246,200,90,.20), rgba(20,16,6,.96))}
.tl-roomhead.rh-vip::before{display:none}
.tl-roomhead .rh-note{font-size:calc(0.68rem * var(--zoom,1));font-weight:800;color:#f4cd63;letter-spacing:.01em;white-space:nowrap}
/* badge de sala VIP (visão por dia) em dourado */
.ev .ev-room.rm-vip{color:#f4cd63;background:rgba(246,200,90,.16);border-color:rgba(246,200,90,.55)}
/* time axis column — sticky à esquerda; rótulos por hora + faixas de vão comprimido */
.tl-times{position:sticky;left:0;z-index:20;border-right:1px solid var(--border);background:rgba(9,12,19,.94);backdrop-filter:blur(6px)}
.tl-tick{position:absolute;left:0;right:0;height:0}
.tl-tick::after{content:"";position:absolute;top:0;right:0;width:6px;height:1px;background:var(--border)}
.tl-tick span{position:absolute;top:-8px;right:12px;font-size:calc(0.8rem * var(--zoom,1));color:var(--muted-2);font-weight:600;font-variant-numeric:tabular-nums}
.tl-gap{position:absolute;left:0;right:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;color:var(--muted-2);font-size:9.5px;font-variant-numeric:tabular-nums;pointer-events:none}
.tl-gap-dots{font-size:15px;line-height:.7;letter-spacing:1px;opacity:.8}
.tl-gap-lbl{opacity:.85;line-height:1.2}
/* day column */
.tl-col{position:relative;border-left:1px solid var(--border)}
.tl-hline{position:absolute;left:0;right:0;height:1px;background:rgba(120,140,180,.09)}
.tl-gapband{position:absolute;left:0;right:0;border-top:1px dashed var(--border);border-bottom:1px dashed var(--border);
  background-image:repeating-linear-gradient(-45deg,rgba(120,140,180,.05) 0 6px,transparent 6px 12px)}
/* faixa fixa do intervalo de almoço (12h–13h) — decorativa; cards agendados nela ficam por cima */
.tl-lunch{position:absolute;left:0;right:0;pointer-events:none;background:rgba(246,200,90,.13);
  background-image:repeating-linear-gradient(-45deg,rgba(246,200,90,.09) 0 7px,transparent 7px 14px);
  border-top:2px solid rgba(246,200,90,.8);border-bottom:2px solid rgba(246,200,90,.8);
  box-shadow:inset 0 0 22px rgba(246,200,90,.1)}
.tl-lunchlbl{position:absolute;left:0;right:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  color:#ffd76a;font-size:calc(0.7rem * var(--zoom,1));font-weight:800;letter-spacing:.03em;text-transform:uppercase;
  pointer-events:none;text-align:center;text-shadow:0 1px 3px rgba(0,0,0,.6);
  background:rgba(246,200,90,.12);border-top:2px solid rgba(246,200,90,.8);border-bottom:2px solid rgba(246,200,90,.8)}
.tl-lunchlbl .ll-ico{font-size:calc(0.95rem * var(--zoom,1));line-height:1}
.tl-events{position:absolute;inset:0}
/* event block — gradiente suave + sombra colorida difusa (à la original) */
.ev{position:absolute;border-radius:var(--radius);padding:8px 10px;overflow:hidden;cursor:pointer;color:#fff;display:flex;flex-direction:column;justify-content:space-between;gap:3px;
  border:1px solid rgba(255,255,255,.14);border-left:5px solid var(--tc,rgba(255,255,255,.2));
  box-shadow:0 10px 15px -3px var(--sc,rgba(0,0,0,.14)),0 4px 6px -4px var(--sc,rgba(0,0,0,.14));
  transition:transform .14s ease,box-shadow .14s ease,filter .14s ease}
.ev:hover{transform:translateY(-3px);filter:brightness(1.05);z-index:20;
  box-shadow:0 20px 34px -8px var(--sc2,rgba(0,0,0,.3)),0 8px 12px -6px var(--sc2,rgba(0,0,0,.3))}
.ev:focus-visible{outline:2px solid rgba(255,255,255,.9);outline-offset:1px;z-index:21}
/* tipografia dos cards em rem * --zoom: cresce com o zoom da grade (A-/A+) E com o zoom do navegador
   (rem), em vez de encolher como o cqi/vw antigo. O nº de linhas do título vem de --tl-lines (JS). */
/* etiqueta de tipo (Keynote/Mini-curso/Workshop) — linha própria acima do título */
.ev .ev-tags{display:flex;align-items:center;gap:5px;flex:none;min-width:0;padding-right:26px}
/* topo do card: título (esquerda, várias linhas) + pin da sala (direita, na visão por dia) */
.ev .ev-top{display:flex;align-items:flex-start;justify-content:space-between;gap:7px}
.ev .ev-title{flex:1 1 auto;min-width:0;font-size:calc(0.95rem * var(--zoom,1));font-weight:800;line-height:1.18;letter-spacing:-0.016em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:var(--tl-lines,3);-webkit-box-orient:vertical;overflow-wrap:anywhere;hyphens:auto;text-shadow:0 1px 2px rgba(0,0,0,.4)}
.ev .ev-spk{display:flex;align-items:center;gap:5px;font-size:calc(0.8rem * var(--zoom,1));opacity:.94;min-width:0}
.ev .ev-spk svg{flex:none;opacity:.85}
.ev .ev-spk .nm{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
/* card curto (sem rodapé): o TEMA vira etiqueta à direita, na linha do palestrante */
.ev .ev-tema{flex:none;margin-left:auto;max-width:58%;display:inline-flex;align-items:center;gap:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;
  font-size:calc(0.68rem * var(--zoom,1));font-weight:700;padding:1px 7px;border-radius:999px;background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.24)}
/* pin da sala (só na visão por dia) — neutro, no topo à direita */
.ev .ev-room{flex:none;font-size:calc(0.72rem * var(--zoom,1));font-weight:700;padding:1px 8px;border-radius:999px;background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.28);white-space:nowrap}
/* rodapé do card (anatomia da grade original): nome do painel (esq.) + ingresso (dir.) */
.ev .ev-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto}
.ev .ev-painel{display:inline-flex;align-items:center;gap:6px;min-width:0;font-size:calc(0.72rem * var(--zoom,1));font-weight:700;color:#fff;opacity:.94;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ev .ev-dot{width:8px;height:8px;border-radius:2px;flex:none;box-shadow:0 0 0 1px rgba(255,255,255,.25)}
.ev .ev-ingresso{flex:none;font-size:calc(0.68rem * var(--zoom,1));font-weight:700;padding:1px 8px;border-radius:999px;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.26);white-space:nowrap}
.ev .ev-ingresso.restrito{color:#ffe08a;background:rgba(244,205,99,.16);border-color:rgba(244,205,99,.5)}
/* segmento de visão (Por dia | Por sala) */
.viewseg{display:inline-flex;gap:6px}
.viewseg .vopt.active{background:var(--mint);color:#04120e;border-color:var(--mint)}
.viewseg .vopt:disabled{opacity:.45;cursor:not-allowed}
.viewseg .fs-val{min-width:40px;text-align:center;font-size:var(--fs-sm);font-weight:700;color:var(--muted);font-variant-numeric:tabular-nums;align-self:center}
#fsDown,#fsUp{min-width:34px;font-weight:800}
/* ícone de ingresso restrito (canto sup. direito) — cor do tier */
.ev-tkt{position:absolute;top:6px;right:7px;z-index:3;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;color:#fff;background:var(--kc,#64748b);box-shadow:0 1px 3px rgba(0,0,0,.35)}
body.editing .ev-tkt{right:31px}
/* densidade adaptativa: nº de linhas do título vem de --tl-lines (calculado pela altura no JS) */
.ev.small{padding:7px 10px;gap:2px}
.ev.tiny{padding:6px 9px;gap:1px}
/* etiqueta do TIPO de sessão no rodapé do card */
/* etiqueta de tipo: selo sólido na cor do tipo (background vem inline do JS) */
.ev .ev-tipo{font-size:calc(0.66rem * var(--zoom,1));font-weight:800;padding:1px 8px;border-radius:999px;color:#fff;text-transform:uppercase;letter-spacing:.045em;
  border:1px solid rgba(255,255,255,.5);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:0 2px 6px rgba(0,0,0,.4)}
/* legenda dos tipos (cores do card) */
.tipo-legend{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding:7px 18px;font-size:var(--fs-sm);color:var(--muted)}
.tipo-legend .tl-key{display:inline-flex;align-items:center;gap:6px;font-weight:600}
.tipo-legend .tl-key i{width:11px;height:11px;border-radius:3px;flex:none;box-shadow:0 0 0 1px rgba(255,255,255,.15)}
.tipo-legend .tl-key i.pill{width:5px;height:15px;border-radius:2px}
.tipo-legend .tl-lbl{color:var(--muted-2);font-weight:500}
/* faixa de pills de TEMA/painel no topo (como a grade original) */
.painel-row{max-width:var(--maxw);margin:0 auto;padding:9px 22px 3px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.painel-row:empty{display:none}
.pnl{display:inline-flex;align-items:center;gap:7px;padding:5px 13px;border-radius:999px;font-size:var(--fs-sm);font-weight:600;cursor:pointer;background:rgba(255,255,255,.04);border:1px solid var(--border-2);color:var(--text);transition:filter .13s,background .13s,border-color .13s;white-space:nowrap;letter-spacing:-0.005em}
.pnl .opt-dot{width:9px;height:9px;border-radius:3px;flex:none;box-shadow:0 0 0 1px rgba(255,255,255,.2)}
.pnl:hover{border-color:var(--border);background:rgba(255,255,255,.07)}
.pnl.active{background:rgba(0,255,212,.12);border-color:var(--mint);color:#eafffb}
/* modo edição: afford. de arraste/resize (touch-action:none evita o navegador tratar como rolagem) */
body.editing .ev{cursor:grab;touch-action:none}
body.editing .ev.dragging{cursor:grabbing}
body.editing .ev.resizing{cursor:ns-resize}
.ev-resize{position:absolute;left:0;right:0;bottom:0;height:11px;display:none;cursor:ns-resize;z-index:6}
body.editing .ev-resize{display:block}
.ev-resize::after{content:"";position:absolute;left:50%;bottom:3px;width:26px;height:3px;border-radius:2px;transform:translateX(-50%);background:rgba(255,255,255,.55);opacity:0;transition:opacity .12s}
body.editing .ev:hover .ev-resize::after{opacity:.9}
/* container queries: coluna estreita descarta ornamentos, mantém título+palestrante legíveis */
.tl-col{container-type:inline-size}
@container (max-width:150px){
  .ev .ev-ticket,.ev .ev-co{display:none}
  .ev{padding:7px 9px}
}
@container (max-width:120px){
  /* coluna muito estreita: cai o ingresso, mas a etiqueta de TEMA continua (é a informação-chave do card) */
  .ev .ev-foot .ev-ingresso{display:none}
}

.tl-empty{grid-column:1/-1;text-align:center;padding:70px 20px;color:var(--muted)}
.tl-empty strong{display:block;color:var(--text);font-size:var(--fs-lg);font-weight:700;margin-bottom:6px}

/* ===== Modal ===== */
.overlay{position:fixed;inset:0;z-index:100;background:rgba(4,6,10,.74);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;padding:24px 16px;overflow-y:auto}
.overlay.open{display:flex}
/* margin:auto centraliza e ainda permite rolagem quando o conteúdo é mais alto que a tela */
.modal{width:100%;max-width:620px;margin:auto;background:linear-gradient(165deg,#141b2b,#0a0e16);border:1px solid var(--border-2);border-radius:20px;padding:26px 28px;position:relative;box-shadow:var(--shadow-lg);animation:pop .18s ease}
.modal:focus{outline:none}
@keyframes pop{from{transform:scale(.97);opacity:0}to{transform:scale(1);opacity:1}}
.modal .close{position:absolute;top:15px;right:15px;background:rgba(255,255,255,.06);border:none;color:#fff;width:34px;height:34px;border-radius:10px;cursor:pointer;font-size:18px;transition:background .15s}
.modal .close:hover{background:rgba(255,255,255,.16)}
.modal .m-badges{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.m-badge{font-size:var(--fs-xs);font-weight:700;padding:5px 12px;border-radius:999px;color:#fff;letter-spacing:0.01em}
.modal h2{margin:0 0 14px;font-size:var(--fs-xl);font-weight:900;line-height:1.25;letter-spacing:-0.02em;padding-right:34px}
/* modal largo: layout em 2 colunas — atributos de um lado, dados da palestra + resumo do outro */
.modal.wide{max-width:1060px}
.m-cols{display:grid;grid-template-columns:minmax(0,0.92fr) minmax(0,1.08fr);gap:18px;align-items:stretch;margin:14px 0 18px}
.m-col{display:flex;flex-direction:column;min-width:0}
.m-col-h{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.7px;color:var(--mint);font-weight:800;
  padding-bottom:7px;margin-bottom:12px;border-bottom:1px solid rgba(0,255,212,.22)}
/* na edição, cada coluna é um painel; a de dados deixa o resumo esticar até o fim */
.m-edit.m-cols{padding:0;border:none;background:none}
.m-edit.m-cols>.m-col{padding:14px 16px;border:1px solid rgba(0,255,212,.28);border-radius:12px;background:rgba(0,255,212,.04)}
.mf-grow{flex:1 1 auto;min-height:0}
.mf-grow textarea.mi{flex:1 1 auto;min-height:clamp(220px,44vh,560px);resize:vertical}
.m-acts{margin-top:auto;padding-top:14px}
/* leitura: informações à esquerda (1 por linha), resumo à direita com espaço pra ler inteiro */
.m-read .m-info{grid-template-columns:1fr;margin:0}
.m-read .m-abstract{margin:0;max-height:min(56vh,520px);overflow:auto;padding-right:6px}
.m-info{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin:16px 0}
.m-info .item{background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:11px;padding:11px 13px}
.m-info .k{font-size:10.5px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted-2);margin-bottom:4px;font-weight:600}
.m-info .v{font-size:var(--fs-base);font-weight:600}
.m-abstract{font-size:var(--fs-base);line-height:1.7;color:#cdd8e6;margin:8px 0 20px;white-space:pre-line}
.m-actions{display:flex;gap:10px;flex-wrap:wrap}

footer.site{position:relative;z-index:1;text-align:center;padding:9px 20px;color:var(--muted-2);font-size:var(--fs-sm)}
footer.site code{color:var(--muted)}

/* ===== Responsive ===== */
@media(max-width:900px){
  .toolbar-inner{gap:14px}
  .stats{gap:18px}
  .stat .num{font-size:var(--fs-xl)}
  .m-info{grid-template-columns:1fr}
  .m-cols{grid-template-columns:1fr}          /* tela estreita: as 2 colunas do modal empilham */
  .mf-grow textarea.mi{min-height:180px}
  .m-read .m-abstract{max-height:none}
  :root{--day-min:220px;--room-min:122px}
  /* dock vira drawer inferior (não cabe uma coluna lateral em telas estreitas) */
  body.dock-open .app{padding-right:0;padding-bottom:46vh}
  .dock{top:auto;left:0;right:0;bottom:0;width:auto;height:46vh;border-left:none;
    border-top:1px solid var(--border-2);box-shadow:0 -16px 44px rgba(0,0,0,.45)}
}
@media(max-width:640px){
  .header-inner{padding:11px 16px;gap:10px}
  .brand h1{font-size:var(--fs-lg)}
  .brand-logo{height:42px}
  .brand-tag{display:none}                 /* libera espaço para os botões */
  .header-actions{gap:8px}
  .header-actions .btn span{display:none}
  .header-actions .btn{padding:10px 12px}
  .painel-row,.toolbar,.active-filters,.timeline-wrap,.edit-banner{padding-left:16px;padding-right:16px}
  :root{--day-min:200px;--room-min:118px;--time-col:60px;--header-h:67px}
  .modal{padding:22px 18px}
  .stats{gap:16px}
}
@media(prefers-reduced-motion:reduce){
  *{animation-duration:.01ms!important;transition-duration:.01ms!important}
  html{scroll-behavior:auto}
}

/* ===== FX de fundo — glow orbs, partículas (canvas) e scan ===== */
.fx{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
#fxCanvas{position:absolute;inset:0;width:100%;height:100%;opacity:.55}
.orb{position:absolute;border-radius:50%;filter:blur(64px);will-change:transform}
.orb-a{width:540px;height:540px;top:-170px;left:-130px;background:radial-gradient(circle,rgba(168,85,247,.5),transparent 68%);opacity:.55;animation:fxFloat1 19s ease-in-out infinite}
.orb-b{width:480px;height:480px;bottom:-180px;right:-110px;background:radial-gradient(circle,rgba(0,255,212,.32),transparent 68%);opacity:.5;animation:fxFloat2 23s ease-in-out infinite}
.orb-ring{width:640px;height:640px;top:6%;right:-240px;filter:blur(34px);opacity:.5;
  background:conic-gradient(from 200deg,transparent,rgba(120,80,255,.28),rgba(0,255,212,.2),transparent);
  animation:fxSpin 46s linear infinite}
@keyframes fxFloat1{0%,100%{transform:translate(0,0)}50%{transform:translate(44px,32px)}}
@keyframes fxFloat2{0%,100%{transform:translate(0,0)}50%{transform:translate(-40px,-30px)}}
@keyframes fxSpin{to{transform:rotate(360deg)}}
.scanline{position:absolute;left:0;right:0;top:0;height:200px;opacity:0;
  background:linear-gradient(to bottom,rgba(0,255,212,.12),transparent)}
body.intro .scanline{animation:fxScan 1.5s ease-out}
@keyframes fxScan{0%{opacity:.85;transform:translateY(-200px)}100%{opacity:0;transform:translateY(105vh)}}

/* ===== Entrada de impacto (só no 1º load, enquanto body.intro) ===== */
body.intro .brand,
body.intro .header-actions,
body.intro .painel-row,
body.intro .filters,
body.intro .timeline{animation:fxRise .6s both}
body.intro .painel-row{animation-delay:.06s}
body.intro .filters{animation-delay:.12s}
body.intro .timeline{animation-delay:.2s}
body.intro .brand-logo{animation:fxLogo .9s .05s both}
body.intro .tl-head-cell{animation:fxFade .7s .28s both}
body.intro .tl-events .ev{animation:fxEv .55s both}
body.intro .tl-events .ev:nth-child(1){animation-delay:.30s}
body.intro .tl-events .ev:nth-child(2){animation-delay:.36s}
body.intro .tl-events .ev:nth-child(3){animation-delay:.42s}
body.intro .tl-events .ev:nth-child(4){animation-delay:.48s}
body.intro .tl-events .ev:nth-child(5){animation-delay:.54s}
body.intro .tl-events .ev:nth-child(6){animation-delay:.6s}
body.intro .tl-events .ev:nth-child(7){animation-delay:.66s}
body.intro .tl-events .ev:nth-child(n+8){animation-delay:.72s}
@keyframes fxRise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes fxFade{from{opacity:0}to{opacity:1}}
@keyframes fxEv{from{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}
@keyframes fxLogo{0%{opacity:0;transform:scale(.9);filter:drop-shadow(0 0 0 rgba(0,255,212,0))}
  60%{opacity:1;filter:drop-shadow(0 0 26px rgba(0,255,212,.5))}
  100%{opacity:1;transform:scale(1);filter:drop-shadow(0 0 14px rgba(0,255,212,.25))}}

/* ===== Modo edição ===== */
.edit-banner{max-width:var(--maxw);margin:14px auto 0;padding:12px 18px;display:flex;align-items:center;gap:12px;
  background:rgba(0,255,212,.06);border:1px solid rgba(0,255,212,.3);border-radius:14px;color:#b6fff0;font-size:var(--fs-sm)}
.edit-banner svg{width:18px;height:18px;flex:none;color:var(--mint)}
.edit-banner[hidden]{display:none}
.eb-btn{margin-left:auto;flex:none;padding:6px 12px;border-radius:9px;font-size:var(--fs-sm);font-weight:600;cursor:pointer;
  background:rgba(255,255,255,.05);border:1px solid var(--border-2);color:var(--muted);white-space:nowrap;transition:all .13s}
.eb-btn:hover{color:#fff;border-color:var(--muted);background:rgba(255,255,255,.09)}
/* toast de auto-save */
.save-toast{position:fixed;left:22px;bottom:22px;z-index:150;padding:9px 14px;border-radius:10px;font-size:var(--fs-sm);font-weight:700;
  background:rgba(11,20,18,.95);border:1px solid rgba(0,255,212,.4);color:var(--mint);box-shadow:0 10px 30px rgba(0,0,0,.45);
  opacity:0;transform:translateY(8px);pointer-events:none;transition:opacity .2s,transform .2s}
.save-toast.show{opacity:1;transform:translateY(0)}
/* alça de arraste no card (só no modo edição) */
.ev-grip{display:none;margin-left:auto;opacity:.75}
body.editing .ev-grip{display:inline-flex;align-items:center}
body.editing .ev{cursor:grab;touch-action:none;outline:1px dashed rgba(255,255,255,.28);outline-offset:-3px}
body.editing .ev:hover{transform:none}                 /* sem "pulo" no hover enquanto edita */
body.grabbing,body.grabbing *{cursor:grabbing!important;user-select:none}
.ev.dragging{cursor:grabbing;opacity:.94;z-index:60!important;transition:none;
  box-shadow:0 24px 50px rgba(0,0,0,.55),0 0 0 2px var(--mint)}
.drag-tip{position:fixed;z-index:200;pointer-events:none;background:#0d1220;border:1px solid var(--mint);color:var(--mint);
  font-size:var(--fs-sm);font-weight:700;padding:5px 9px;border-radius:8px;box-shadow:0 8px 20px rgba(0,0,0,.5);font-variant-numeric:tabular-nums}
/* controles de edição dentro do modal */
.m-edit{margin:6px 0 16px;padding:14px;border:1px solid rgba(0,255,212,.28);border-radius:12px;background:rgba(0,255,212,.04)}
.m-edit-row{display:flex;flex-direction:column;gap:8px}
.m-edit-row+.m-edit-row{margin-top:14px}
.m-edit-row+.mf{margin-top:14px}
.m-edit .k{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-weight:600}
.m-dis,.m-dup,.m-del{justify-content:center;margin-top:4px}
/* ação destrutiva: excluir de vez (o desabilitar continua sendo o caminho reversível) */
.m-del{color:#ff9d9d;border-color:rgba(255,90,90,.45);background:rgba(255,60,60,.06)}
.m-del:hover{color:#fff;border-color:rgba(255,90,90,.85);background:rgba(255,60,60,.22)}
/* campos de texto/select/textarea do formulário de edição */
.mf{display:flex;flex-direction:column;gap:5px;margin-bottom:11px}
.mf label{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-weight:600}
.mf2{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.mf-hint{font-size:var(--fs-xs);line-height:1.4;color:var(--muted)}
/* no modo edição, o espaço vazio da grade é clicável (cria palestra ali) */
body.editing .tl-col{cursor:copy}
.mi{width:100%;padding:9px 11px;border-radius:9px;font-size:var(--fs-sm);background:rgba(8,12,20,.7);border:1px solid var(--border-2);color:#fff;outline:none;font-family:inherit;transition:border-color .13s,box-shadow .13s}
.mi:focus{border-color:var(--mint);box-shadow:0 0 0 3px rgba(0,255,212,.14)}
textarea.mi{resize:vertical;min-height:64px;line-height:1.5}
/* botão Editar ativo herda o visual .btn-blue via JS */

/* botões de ação no card: duplicar e desabilitar (só no modo edição) */
.ev-disable,.ev-dup{position:absolute;top:5px;z-index:4;display:none;width:22px;height:22px;padding:0;border:none;border-radius:7px;
  background:rgba(0,0,0,.38);color:#fff;cursor:pointer;align-items:center;justify-content:center;transition:background .13s}
.ev-disable{right:5px}
.ev-dup{right:31px}
.ev-disable:hover,.ev-dup:hover{background:rgba(0,0,0,.65)}
body.editing .ev-disable,body.editing .ev-dup{display:inline-flex}
/* o duplicar só aparece no hover do card (o card estreito/baixo nem recebe o botão — ver evBlock) */
.ev-dup{opacity:0;transition:opacity .12s,background .13s}
.ev:hover .ev-dup,.ev:focus-within .ev-dup{opacity:1}

/* ===== Palestra TRAVADA (dados confirmados) ===== */
/* destaque forte e fácil de bater o olho: anel âmbar + cadeado no canto; não arrasta.
   Só no ADMIN — o visitante público não vê o estado de travamento (é conceito de autoria). */
body.admin .ev.locked{box-shadow:0 0 0 2px #ffd76a, 0 0 0 5px rgba(255,215,106,.28), 0 7px 20px rgba(0,0,0,.42)}
.ev.locked .ev-resize{display:none}
body.editing .ev.locked{cursor:default;outline:none}   /* sem tracejado/grab de edição */
.ev .ev-lock{display:none}
body.admin .ev .ev-lock{position:absolute;top:5px;right:5px;z-index:6;width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;
  border-radius:7px;background:#ffd76a;color:#3a2c00;box-shadow:0 1px 4px rgba(0,0,0,.4)}
/* modal com palestra travada: campos bloqueados; só o botão Destravar e o Fechar ficam ativos */
.modal.m-locked .m-edit .mi,
.modal.m-locked .m-edit .opt-group,
.modal.m-locked .m-edit [data-pick],
.modal.m-locked .m-acts .btn:not(.m-lock){pointer-events:none;opacity:.5}
.m-lockbar{display:flex;align-items:center;gap:8px;margin:0 0 12px;padding:9px 12px;border-radius:10px;font-weight:700;
  font-size:var(--fs-sm);color:#ffdf8a;background:rgba(255,215,106,.12);border:1px solid rgba(255,215,106,.5)}
.m-lockbar svg{width:17px;height:17px;flex:none}
.m-lock{justify-content:center;margin-top:4px;color:#ffdf8a;border-color:rgba(255,215,106,.5);background:rgba(255,215,106,.08)}
.m-lock svg{width:17px;height:17px}
.m-lock:hover,.m-lock.on{color:#3a2c00;background:#ffd76a;border-color:#ffd76a}

/* ===== Dock de palestras desabilitadas ===== */
/* dock = drawer fixo sobre a página (não faz parte do grid) */
.dock{position:fixed;top:0;right:0;bottom:0;width:290px;z-index:80;overflow-y:auto;
  background:rgba(11,10,18,.94);backdrop-filter:blur(12px);border-left:1px solid var(--border-2);
  box-shadow:-16px 0 44px rgba(0,0,0,.45);padding:16px}
.dock[hidden]{display:none}
/* quando o dock está aberto, reserva espaço à direita para não cobrir a grade nem o header */
body.dock-open .app{padding-right:290px}
.dock-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 6px 12px;font-size:var(--fs-sm);
  font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border);margin-bottom:10px}
.dock-count{background:var(--purple);color:#fff;font-size:var(--fs-xs);font-weight:800;padding:2px 9px;border-radius:999px;min-width:22px;text-align:center}
.dock-empty{color:var(--muted-2);font-size:var(--fs-sm);line-height:1.6;padding:14px 8px;text-align:center}
.dock-item{position:relative;padding:10px 12px 10px 14px;border-radius:11px;background:rgba(255,255,255,.03);border:1px solid var(--border);
  margin-bottom:9px;cursor:pointer;overflow:hidden;transition:background .13s,border-color .13s}
.dock-item::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--dc,var(--purple))}
.dock-item:hover{background:rgba(255,255,255,.06);border-color:var(--border-2)}
.di-title{font-size:var(--fs-sm);font-weight:800;line-height:1.25;margin-bottom:3px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.di-spk{font-size:var(--fs-xs);color:var(--text);opacity:.85;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.di-meta{font-size:10.5px;color:var(--muted-2);margin-top:3px;font-variant-numeric:tabular-nums}
.di-on{margin-top:9px;width:100%;border:1px solid rgba(0,255,212,.4);background:rgba(0,255,212,.1);color:#b6fff0;
  font-size:var(--fs-xs);font-weight:700;padding:6px;border-radius:8px;cursor:pointer;transition:background .13s}
.di-on:hover{background:rgba(0,255,212,.2)}
