
  :root{
    --bg:#f3f6f9;--ink:#1d2a33;--ink-soft:#566976;
    --wine:#2e6da8;--wine-deep:#1d4e89;--gold:#e0a40c;--gold-soft:#f2e3b4;
    --card:#ffffff;--line:#d3e4f1;--ok:#3f6b4a;--warn:#a8521a;--blue:#1d4e89;
    --strip:#eef6fc;
    --shadow:0 1px 2px rgba(29,42,51,.07),0 12px 32px -16px rgba(29,42,51,.30);
    /* Tamaños de letra de Multidance (Configuración → Tamaños de letra): deltas en px que se SUMAN
       al tamaño base de cada elemento vía calc(), no lo reemplazan — así el default (0px) no cambia
       nada visualmente hasta que el usuario los ajusta, y cada tabla conserva sus proporciones
       relativas actuales (p.ej. encabezados más chicos que el cuerpo en la grilla de jueces). */
    --fsd-admin-title:0px;--fsd-admin-heat:0px;--fsd-admin-grid:0px;
    --fsd-jueces-title:0px;--fsd-jueces-heat:0px;--fsd-jueces-grid:0px;
    --fsd-locutor-title:0px;--fsd-locutor-heat:0px;--fsd-locutor-grid:0px;
  }
  /* Paleta negro/dorado OCBD BA (ver carpeta de marca): fondo negro, acentos dorados
     (mismo --gold/--wine-deep que ya usa la marca para insignias/CP), texto blanco. */
  body.dark{
    --bg:#0a0a0a;--ink:#ffffff;--ink-soft:#b8aa86;
    --wine:#e0a40c;--wine-deep:#8a6508;--card:#161310;--line:#3a2f1c;--strip:#1f1a10;
    --shadow:0 1px 2px rgba(0,0,0,.4),0 12px 32px -16px rgba(0,0,0,.6);
  }
  body.dark{background-image:radial-gradient(circle at 12% -5%,rgba(255,255,255,.035),transparent 40%),radial-gradient(circle at 92% 0%,rgba(224,164,12,.10),transparent 42%)}
  *{box-sizing:border-box}
  html,body{margin:0;padding:0}
  body{background:var(--bg);color:var(--ink);font-family:"Hanken Grotesk",sans-serif;font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;
    background-image:radial-gradient(circle at 12% -5%,rgba(29,42,51,.06),transparent 40%),radial-gradient(circle at 92% 0%,rgba(224,164,12,.12),transparent 42%);}
  .grain{position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.5;mix-blend-mode:multiply;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.04'/%3E%3C/svg%3E");}
  .app-layout{display:flex;min-height:100vh;position:relative;z-index:1}
  .cfg-acc-hdr{width:100%;display:flex;align-items:center;justify-content:space-between;background:none;border:none;border-bottom:1px solid var(--line);padding:10px 2px 8px;margin-bottom:12px;cursor:pointer;font-family:inherit;text-align:left;font-size:13px;font-weight:700;color:var(--ink);letter-spacing:.03em;text-transform:uppercase}
  .cfg-acc-hdr:hover{color:var(--gold)}
  .cfg-acc-arr{font-size:11px;color:var(--ink-soft);flex-shrink:0;margin-left:8px}
  .sb-collapsed .sidebar{width:0!important;min-width:0!important;padding:0!important;overflow:hidden!important;border-right:none!important}
  .sb-toggle-btn{position:fixed;left:300px;top:50%;transform:translateY(-50%);z-index:200;background:var(--card);border:1px solid var(--line);border-left:none;border-radius:0 8px 8px 0;width:18px;height:56px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--ink-soft);transition:left .25s,color .15s;box-shadow:2px 0 8px rgba(0,0,0,.08);padding:0}
  .sb-toggle-btn:hover{color:var(--ink)}
  .sb-collapsed .sb-toggle-btn{left:0!important}
  @media(max-width:700px){.sb-toggle-btn{display:none}}
  .sidebar{width:300px;min-width:260px;flex-shrink:0;background:var(--card);border-right:1px solid var(--line);padding:24px 18px 40px;display:flex;flex-direction:column;gap:0;position:sticky;top:0;height:100vh;overflow-y:auto;box-shadow:2px 0 12px rgba(20,18,10,.06)}
  .main-content{flex:1;min-width:0;padding:28px 32px 80px;overflow-x:hidden}
  .wrap{display:none}
  header.top{padding:22px 0 16px;border-bottom:1px solid var(--line);margin-bottom:16px;position:relative}
  header.top::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:4px;border-radius:3px;background:linear-gradient(90deg,#74ACDF 0%,#74ACDF 34%,#fff 34%,#fff 46%,#F6B900 46%,#F6B900 54%,#fff 54%,#fff 66%,#74ACDF 66%,#74ACDF 100%)}
  .eyebrow{font-size:12px;letter-spacing:.32em;text-transform:uppercase;color:var(--wine);font-weight:700}
  h1{font-family:"Fraunces",serif;font-weight:900;font-size:clamp(24px,2.8vw,34px);line-height:.98;margin:.16em 0 .1em;letter-spacing:-.01em}
  h1 em{font-style:italic;font-weight:500;color:var(--wine)}
  .sub{color:var(--ink-soft);max-width:64ch;font-size:13px;display:none}
  .sidebar .drop .ic{font-size:24px}
  .sidebar .drop h3{font-size:15px;margin:.2em 0 .1em}
  .sidebar .drop p{font-size:12px}
  .drop{margin-top:12px;border:1.5px dashed var(--gold);border-radius:14px;background:linear-gradient(180deg,#ffffff,#eef6fc);padding:16px 14px;text-align:center;cursor:pointer;transition:.18s}
  .drop:hover,.drop.over{border-color:var(--wine);background:var(--card);box-shadow:var(--shadow);transform:translateY(-1px)}
  body.dark .drop{background:linear-gradient(180deg,#1f1a10,#161310)}
  body.dark .drop:hover,body.dark .drop.over{background:var(--strip)}
  .drop .ic{font-family:"Fraunces",serif;font-size:38px;color:var(--wine)}
  .drop h3{margin:.4em 0 .2em;font-family:"Fraunces",serif;font-weight:600;font-size:20px}
  .drop p{margin:0;color:var(--ink-soft);font-size:13.5px}
  .drop .pill{display:inline-block;margin-top:13px;background:var(--wine-deep);color:#fff;padding:9px 20px;border-radius:999px;font-weight:600;font-size:14px}
  input[type=file]{display:none}
  .controls{display:none;flex-direction:column;gap:7px;margin:12px 0 0;padding:0}
  .controls.show{display:flex}
  .controls .grow{display:none}
  .controls .act{width:100%;justify-content:center;margin:0;font-size:13px;padding:8px 12px}
  .ctrl-sep{width:100%;height:1px;background:var(--line);margin:4px 0}
  .ctl{display:flex;align-items:center;gap:8px;font-size:13.5px}
  .ctl label{color:var(--ink-soft);font-weight:600}
  .ctl input[type=number]{width:58px;padding:7px 9px;border:1px solid var(--line);border-radius:8px;font:inherit;font-weight:600;text-align:center}
  .ctl input[type=search]{padding:8px 12px;border:1px solid var(--line);border-radius:9px;font:inherit;min-width:190px}
  .ctl select{padding:8px 11px;border:1px solid var(--line);border-radius:9px;font:inherit;font-weight:600;background:var(--card);cursor:pointer;min-width:130px}
  .grow{flex:1}
  button.act{font:inherit;font-weight:600;font-size:13.5px;border:1px solid var(--wine);background:var(--card);color:var(--wine);padding:9px 15px;border-radius:9px;cursor:pointer;transition:.15s}
  button.act:hover{background:var(--wine-deep);color:#fff}
  button.act.solid{background:var(--wine-deep);color:#fff}button.act.solid:hover{filter:brightness(1.3)}
  /* Botón "Actualizar" flotante (Resultados Singles/Multidance) — position:fixed real, no depende de
     ningún contenedor con scroll propio (a diferencia del sticky de los headers, que quedó adentro
     del flujo normal del documento). Siempre visible en la esquina mientras la solapa esté activa. */
  #fabActualizar{position:fixed;right:24px;bottom:24px;z-index:900;width:56px;height:56px;border-radius:50%;border:none;background:var(--wine-deep);color:#fff;font-size:22px;cursor:pointer;box-shadow:0 4px 14px rgba(0,0,0,.28);display:none;align-items:center;justify-content:center;transition:.15s}
  #fabActualizar:hover{filter:brightness(1.18);transform:scale(1.05)}
  #fabActualizar:active{transform:scale(.95)}
  #fabActualizar.spin{animation:fabspin .6s linear}
  @keyframes fabspin{to{transform:rotate(360deg)}}
  .stats{display:none;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px;margin:8px 0 16px}
  .stats.show{display:grid}
  .stat{background:var(--card);border:1px solid var(--line);border-radius:13px;padding:13px 15px;box-shadow:var(--shadow)}
  .stat b{display:block;font-family:"Fraunces",serif;font-weight:900;font-size:27px;line-height:1;color:var(--wine)}
  .stat span{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-soft);font-weight:600}
  .tabs{display:none;gap:4px;margin:22px 0 18px;border-bottom:2px solid var(--line);flex-wrap:wrap}
  .tabs.show{display:flex}
  .tab{font:inherit;font-weight:600;font-size:14px;border:none;background:none;color:var(--ink-soft);padding:11px 16px;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;transition:.15s}
  .tab:hover{color:var(--ink)}
  .tab.on{color:var(--wine);border-bottom-color:var(--wine)}
  .comptitle{display:none;align-items:center;gap:14px;margin:18px 0 2px;flex-wrap:wrap;border-radius:12px;transition:padding .15s,background .15s}
  .comptitle.has-logos{background:var(--card);border:1px solid var(--line);padding:10px 16px;margin:18px 0 10px}
  .comptitle .ct-center{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
  .comptitle .ct-name{font-family:"Fraunces",serif;font-weight:900;font-size:25px;color:var(--wine);line-height:1.1}
  .comptitle .ct-date{font-size:14px;font-weight:700;color:var(--gold)}
  .ct-logo{height:64px;width:auto;max-width:130px;object-fit:contain;border-radius:6px;flex-shrink:0}
  .ct-logos{display:flex;gap:8px;align-items:center;flex-shrink:0}
  .pane{display:none}.pane.on{display:block}
  .sech{font-family:"Fraunces",serif;font-size:22px;font-weight:600;margin:26px 0 4px;display:flex;align-items:baseline;gap:11px}
  .sech:first-child{margin-top:0}
  .sech .tag{font-family:"Hanken Grotesk";font-size:11px;font-weight:700;letter-spacing:.05em;color:#fff;background:var(--blue);padding:3px 10px;border-radius:999px}
  .sech .tag.b2{background:var(--gold);color:#3a2a06}
  .rule{height:2px;background:linear-gradient(90deg,var(--gold),transparent);margin:7px 0 16px;border-radius:2px}
  .cfg-sec{margin:0 0 32px}
  .cfg-sec:last-child{margin-bottom:8px}
  .cfg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin-bottom:14px}
  .cfg-card{background:var(--strip);border:1px solid var(--line);border-radius:13px;padding:16px 18px;display:flex;flex-direction:column;gap:11px;box-shadow:var(--shadow)}
  .cfg-card h4{margin:0;font-size:11.5px;font-weight:700;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.06em}
  .cfg-card .ctl{justify-content:space-between;flex-wrap:wrap}
  .cfg-wide{background:var(--strip);border:1px solid var(--line);border-radius:13px;padding:16px 18px;margin-bottom:14px;box-shadow:var(--shadow)}
  .cfg-actions{display:flex;flex-wrap:wrap;gap:8px}
  .cfg-actions .act{flex:1 1 170px;width:auto}
  table.t{width:100%;border-collapse:collapse;font-size:13.5px;background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:var(--shadow);margin-bottom:8px}
  table.t th{text-align:left;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);font-weight:700;padding:9px 11px;background:var(--strip);border-bottom:1px solid var(--line)}
  /* Tamaños de letra configurables (Configuración → Tamaños de letra → Admin): solo las tablas
     dentro del panel de Resultados Multidance (#mdreportBody), no las demás tablas .t del admin. */
  #mdreportBody table.t{font-size:calc(13.5px + var(--fsd-admin-grid,0px))}
  #mdreportBody table.t th{font-size:calc(10.5px + var(--fsd-admin-grid,0px))}
  table.t td{padding:8px 11px;border-bottom:1px solid var(--line);vertical-align:top}
  table.t tr:last-child td{border-bottom:none}
  .num{color:var(--gold);font-weight:700;font-family:"Fraunces",serif}
  .dor{display:inline-block;min-width:26px;text-align:center;background:var(--wine-deep);color:#fff;font-weight:700;font-size:12px;padding:2px 7px;border-radius:7px;font-family:"Hanken Grotesk"}
  .lead{font-weight:600}.foll{color:var(--ink-soft)}
  .ev{background:var(--card);border:1px solid var(--line);border-radius:13px;margin-bottom:12px;box-shadow:var(--shadow);overflow:hidden}
  .ev summary{list-style:none;cursor:pointer;padding:14px 16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
  .ev summary::-webkit-details-marker{display:none}
  .ev .chev{transition:.2s;color:var(--gold);font-size:14px}.ev[open] .chev{transform:rotate(90deg)}
  .ev .name{font-family:"Fraunces",serif;font-weight:600;font-size:17px;flex:1;min-width:180px}
  .ev .name small{display:block;font-family:"Hanken Grotesk";font-weight:500;font-size:12px;color:var(--ink-soft);margin-top:2px}
  .badge{font-size:11px;font-weight:700;padding:4px 10px;border-radius:999px;white-space:nowrap}
  .b-cnt{background:var(--gold-soft);color:#6a4e12}.b-ph{background:#efe7da;color:#1c1c1a}
  .b-warn{background:#f6e2d0;color:var(--warn)}.b-op{background:#dde9f0;color:var(--blue)}.b-lm{background:#e7eee8;color:var(--ok)}
  .b-ab{background:#efe1ef;color:#7a2a6a}
  .b-ch{background:#f3e0e0;color:#9a2b2b}
  .b-sy{background:#d8eeea;color:#1a6b5a}
  .b-cp{background:#f3e3cf;color:#8a5a12}
  .b-conflict{background:#f8d7da;color:#a4161a}
  .b-voided{background:#3a3a3a;color:#fff}
  .heat.voided,.ev.voided,.cronrow.voided{opacity:.55}
  .heat.voided .hh .hn,.ev.voided summary .name,.cronrow.voided .hh2-link{text-decoration:line-through}
  .hr.void-couple,.tr.void-couple,tr.void-couple{opacity:.5;text-decoration:line-through}
  .void-btn{font:inherit;font-size:11px;font-weight:700;padding:3px 9px;border-radius:7px;border:1px solid #a4161a;background:#fff;color:#a4161a;cursor:pointer;white-space:nowrap}
  .void-btn.is-voided{background:#a4161a;color:#fff}
  .void-couple-btn{font-size:14px;line-height:1;border:none;background:none;cursor:pointer;color:#a4161a;padding:0 4px}
  .ev-sel{display:flex;align-items:center;gap:8px;padding:7px 16px 0;border-top:1.5px dashed var(--gold)}
  .ev-sel input[type=checkbox]{width:17px;height:17px;accent-color:var(--wine);cursor:pointer;flex-shrink:0}
  .ev-sel label{font-size:12.5px;font-weight:600;color:var(--wine);cursor:pointer}
  .merge-bar{display:none;position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:1000;background:var(--wine-deep);color:#fff;border-radius:14px;padding:12px 20px;box-shadow:0 8px 32px rgba(0,0,0,.28);align-items:center;gap:12px;flex-wrap:wrap;white-space:nowrap}
  .merge-bar.show{display:flex}
  .merge-bar b{font-family:"Fraunces",serif;font-size:16px}
  .merge-bar button{font:inherit;font-weight:700;font-size:13px;padding:7px 16px;border-radius:9px;border:none;cursor:pointer;transition:.15s}
  .merge-bar .mb-ok{background:#fff;color:var(--wine)}
  .merge-bar .mb-ok:hover{background:var(--gold-soft)}
  .merge-bar .mb-cl{background:rgba(255,255,255,.18);color:#fff}
  .merge-bar .mb-cl:hover{background:rgba(255,255,255,.32)}
  .cp{font-size:11px;font-weight:700;color:#8a5a12;background:#f3e3cf;padding:1px 7px;border-radius:6px}
  .vs{font-size:11px;font-weight:700;color:var(--ok);background:#e7eee8;padding:1px 7px;border-radius:6px}
  .catdim{color:rgba(40,55,70,.26);font-weight:500}
  body.dark .catdim{color:rgba(255,255,255,.18)}
  .cpsheet{border:1.5px solid var(--ink);border-radius:8px;margin:0 0 18px;overflow:hidden;break-inside:avoid;page-break-inside:avoid}
  .cph{display:flex;justify-content:space-between;align-items:center;background:var(--strip);border-bottom:1px solid var(--line);padding:8px 12px}
  .cph .cpt{font-size:15px}.cph .cpn{font-weight:900;color:var(--gold);background:var(--card);border:1.5px solid var(--gold);border-radius:6px;padding:2px 12px}
  .cpsub{padding:9px 12px;border-bottom:1px solid var(--line);font-size:14px}
  table.cptab{width:100%;border-collapse:collapse}
  table.cptab th,table.cptab td{border:1px solid var(--line);padding:8px 10px;text-align:center;font-size:13px}
  table.cptab th{background:var(--strip);font-weight:700}
  table.cptab td.rl{text-align:left;font-weight:600;white-space:nowrap}
  table.cptab tbody td:not(.rl){height:30px;min-width:44px}
  .ev .body{padding:4px 16px 14px;border-top:1px solid var(--line)}
  .phases{display:flex;gap:7px;flex-wrap:wrap;margin:12px 0 4px}
  .phase{font-size:11.5px;font-weight:600;padding:5px 12px;border-radius:8px;background:var(--strip);border:1px solid var(--line)}
  .phase.final{background:var(--wine-deep);color:#fff;border-color:var(--wine-deep)}.phase .ar{color:var(--gold);margin:0 2px}
  .heat{border:1px solid var(--line);border-radius:11px;margin-bottom:10px;background:var(--card);box-shadow:var(--shadow);overflow:hidden}
  .heat .hh{display:flex;align-items:center;gap:10px;padding:9px 13px;background:var(--strip);border-bottom:1px solid var(--line);font-weight:700;font-size:13px}
  .heat .hh .hn{font-family:"Fraunces",serif;color:var(--wine);font-size:15px}
  .heat .hr{display:flex;align-items:center;gap:10px;padding:6px 13px;border-bottom:1px solid var(--line);font-size:13.5px}
  .heat .hr:last-child{border-bottom:none}
  .cronrow{display:flex;align-items:center;gap:14px;padding:9px 13px;border-bottom:1px solid var(--line);font-size:14px}
  .cronrow:last-child{border-bottom:none}
  .cronrow .hh2{font-family:"Fraunces",serif;font-weight:700;color:var(--wine);min-width:74px}
  .cronrow 
.drag-handle{cursor:grab;color:var(--ink-soft);font-size:15px;padding:0 5px 0 0;opacity:0;transition:opacity .15s;user-select:none;display:inline;vertical-align:middle;letter-spacing:-1px;}
.drag-handle:active{cursor:grabbing;}
.cronrow:hover .drag-handle,.ev:hover>summary .drag-handle{opacity:.5;}
.dragging{opacity:.4;}
.drag-over-top{box-shadow:0 -2px 0 0 var(--blue);}
.drag-over-bot{box-shadow:0 2px 0 0 var(--blue);}
.pista{font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--blue);background:#dde9f0;padding:2px 8px;border-radius:6px}
  .empty{display:none;text-align:center;color:var(--ink-soft);padding:54px 0;font-family:"Fraunces",serif;font-style:italic;font-size:18px}
  .err{display:none;background:#fbe6e1;border:1px solid #e0a89a;color:#7a1e10;padding:13px 16px;border-radius:11px;margin-top:16px;font-size:14px}
  .note{font-size:12.5px;color:var(--ink-soft);margin:6px 0}
  .note.warn{color:var(--warn);font-style:italic}
  .bucket{margin:10px 0 0;border-left:3px solid var(--gold);padding-left:11px}
  .bucket .bh{font-weight:700;font-size:13px;color:var(--ink);margin:0 0 5px}
  .bucket table.t{margin-bottom:2px}
  .tanda{border:1px solid var(--line);border-radius:10px;margin:8px 0 0;background:var(--strip);overflow:hidden}
  .tanda .th{font-weight:700;font-size:12px;color:var(--wine);padding:7px 11px;background:var(--strip);border-bottom:1px solid var(--line)}
  .tanda .tr{display:flex;align-items:center;gap:10px;padding:6px 11px;border-bottom:1px solid var(--line);font-size:13.5px}
  .tanda .tr:last-child{border-bottom:none}
  .bktag{margin-left:auto;font-size:11px;font-weight:700;color:var(--blue);background:#dde9f0;padding:2px 8px;border-radius:6px;white-space:nowrap}
  .hclock{font-family:"Hanken Grotesk";font-weight:700;font-size:12.5px;color:#fff;background:var(--gold);padding:3px 9px;border-radius:7px}
  .fileinfo{margin-top:10px;font-size:13px;font-weight:600;color:var(--wine);background:#e3eff8;border:1px solid var(--line);border-radius:9px;padding:8px 13px;display:inline-block}
  body.dark .fileinfo{background:var(--card)}
  footer{margin-top:54px;padding-top:18px;border-top:1px solid var(--line);color:var(--ink-soft);font-size:12.5px;text-align:center}
  @media print{body{background:#fff}.grain,.drop,.controls,.tabs,footer .noprint{display:none!important}.pane{display:block!important}.ev .body{display:block!important}}
  @media print{body.print-cp .pane:not([data-p="cp"]){display:none!important}body.print-cp .pane[data-p="cp"]{display:block!important}}
  /* ---------- Export PDF de Resultados Singles (jreport) ---------- */
  #jreportPrintArea,#mdreportPrintArea{display:none;background:#fff;color:#1a1a1a;font-family:"Hanken Grotesk",system-ui,sans-serif}
  .jrp-head{background:linear-gradient(135deg,#1d4e89,#2e6da8);color:#fff;padding:22px 26px 18px;margin-bottom:18px;position:relative}
  .jrp-head::after{content:"";position:absolute;left:0;right:0;bottom:0;height:5px;background:linear-gradient(90deg,#e0a40c,#f2e3b4)}
  .jrp-head-top{display:flex;justify-content:space-between;align-items:baseline;font-size:11px;opacity:.85;margin-bottom:10px}
  .jrp-brand{font-family:"Fraunces",serif;font-weight:700;font-size:13px}
  .jrp-brand em{font-style:italic;font-weight:500}
  .jrp-title{font-family:"Fraunces",serif;font-weight:900;font-size:25px;margin:0 0 10px;letter-spacing:-.01em}
  .jrp-meta{display:flex;gap:18px;flex-wrap:wrap;font-size:12px}
  .jrp-meta b{font-weight:700;color:#f2e3b4}
  .jrp-heat{margin:0 26px 24px;page-break-inside:avoid}
  .jrp-heat-title{font-family:"Fraunces",serif;font-weight:700;font-size:14.5px;line-height:1.45;color:#1d4e89;border-left:4px solid #e0a40c;padding-left:9px;margin-bottom:11px}
  .jrp-sub{font-size:11.5px;font-weight:700;line-height:1.45;color:#2e6da8;margin:13px 0 6px;padding-left:13px}
  table.jrp-table{width:100%;border-collapse:collapse;font-size:11.5px;margin-bottom:4px}
  table.jrp-table th{background:#1d4e89;color:#fff;text-align:left;font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;padding:6px 8px;font-weight:700}
  table.jrp-table td{padding:5px 8px;border-bottom:1px solid #e3e3e3}
  table.jrp-table tbody tr:nth-child(even){background:#f7f4ec}
  table.jrp-table td.jrp-rank{font-weight:800;text-align:center}
  table.jrp-table td.jrp-avg{font-weight:800;text-align:center;color:#1d4e89}
  table.jrp-table td.jrp-score{text-align:center;color:#555}
  .jrp-badge{font-size:8.5px;font-weight:700;padding:1px 5px;border-radius:5px;margin-left:5px;background:#e8f0fe;color:#1a5c8c}
  table.jrp-marks th,table.jrp-marks td,table.jrp-calc th,table.jrp-calc td{padding:3px 4px;font-size:9px}
  table.jrp-marks th{font-size:8px}
  /* Tamaños de letra configurables (Configuración → Tamaños de letra → Admin): solo dentro del PDF
     de Resultados Multidance (#mdreportPrintArea) — el de Single Dances (#jreportPrintArea) reutiliza
     las mismas clases .jrp-* pero queda fuera de este ajuste a propósito. .jrp-heat-num es un span
     nuevo (solo "Heat N") para poder darle un tamaño distinto al resto del título. */
  #mdreportPrintArea .jrp-heat-title{font-size:calc(14.5px + var(--fsd-admin-title,0px))}
  #mdreportPrintArea .jrp-heat-num{font-size:calc(14.5px + var(--fsd-admin-heat,0px))}
  #mdreportPrintArea .jrp-sub{font-size:calc(11.5px + var(--fsd-admin-title,0px))}
  #mdreportPrintArea table.jrp-table{font-size:calc(11.5px + var(--fsd-admin-grid,0px))}
  #mdreportPrintArea table.jrp-table th{font-size:calc(9.5px + var(--fsd-admin-grid,0px))}
  #mdreportPrintArea table.jrp-marks th,#mdreportPrintArea table.jrp-marks td,#mdreportPrintArea table.jrp-calc th,#mdreportPrintArea table.jrp-calc td{font-size:calc(9px + var(--fsd-admin-grid,0px))}
  #mdreportPrintArea table.jrp-marks th{font-size:calc(8px + var(--fsd-admin-grid,0px))}
  .jrp-foot{margin:24px 26px 10px;padding-top:10px;border-top:1px solid #e3e3e3;font-size:10px;color:#888;text-align:center;font-style:italic}
  /* ---------- Diplomas de participación (impresión) ---------- */
  /* dip-page usaba height:297mm exacto = ancho/alto físico EXACTO de A4. Eso seguía generando una
     hoja en blanco extra entre cada diploma (border + contenido terminaban excediendo el alto
     imprimible por una fracción de mm — redondeo px↔mm del motor de impresión, distinto en cada
     navegador/zoom — y el page-break-after:always entonces dejaba un sliver del borde como página
     aparte). Fix definitivo: bajar height a 280mm, deliberadamente POR DEBAJO del A4 físico (297mm),
     para tener ~17mm de margen de seguridad — ningún redondeo va a volver a empujar un segundo page-
     break. Sigue siendo notablemente más grande que el min-height:250mm original ("ocupe mas el A4").
     dip-border ocupa 100% de ese alto con box-sizing:border-box (su padding/borde no suman alto
     extra). dip-top (logo) queda pegado arriba, dip-bottom (firma/fecha) pegado abajo, y dip-mid
     (desde "Se otorga..." hasta el Jurado) es flex:1 + justify-content:center — toma TODO el espacio
     que quede en el medio y centra su contenido ahí, en vez del viejo justify-content:space-between
     en .dip-border que dejaba huecos dispares arriba/abajo de cada bloque (pedido de Roberto
     2026-06-29: "todo mas centrado a mitad de la hoja desde lo que dice 'Se otorga'"). El Jurado se
     movió de dip-bottom a dip-mid (debajo del puesto, no pegado a la firma) y .dip-result (el puesto)
     se agrandó. */
  #diplomasPrintArea{display:none;background:#fff}
  .dip-page{width:210mm;height:280mm;box-sizing:border-box;padding:10mm;page-break-after:always}
  .dip-page:last-child{page-break-after:auto}
  .dip-border{width:100%;height:100%;box-sizing:border-box;overflow:hidden;border:3px double #c9a24b;padding:16mm 18mm;display:flex;flex-direction:column;align-items:center;text-align:center;font-family:'Fraunces',serif;color:#3a2e1f}
  .dip-top{display:flex;flex-direction:column;align-items:center}
  .dip-logo{max-height:190px;max-width:420px;margin-bottom:22px}
  .dip-eyebrow{font-size:15px;letter-spacing:.3em;text-transform:uppercase;color:#9a7a2e;font-weight:700}
  .dip-mid{flex:1;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}
  .dip-rule{width:120px;height:3px;background:#c9a24b;margin:12px 0 28px}
  .dip-text{font-size:17px;color:#555;font-family:"Hanken Grotesk",system-ui,sans-serif}
  .dip-name{font-size:38px;font-weight:800;color:#5c1a2b;margin:16px 0 22px;text-transform:uppercase;line-height:1.2}
  .dip-cat{font-size:21px;font-weight:700;color:#3a2e1f;margin:8px 0}
  .dip-result{font-size:30px;font-weight:800;color:#9a7a2e;margin-top:18px}
  .dip-judges{font-size:13px;color:#777;font-family:"Hanken Grotesk",system-ui,sans-serif;letter-spacing:.02em;margin-top:20px}
  .dip-bottom{width:100%;display:flex;flex-direction:column;align-items:center;gap:12px}
  .dip-sign{display:flex;flex-direction:column;align-items:center}
  .dip-sign-line{width:240px;border-top:1px solid #3a2e1f;margin-bottom:8px}
  .dip-sign-name{font-size:15px;font-weight:700;color:#3a2e1f;font-family:"Hanken Grotesk",system-ui,sans-serif}
  .dip-sign-role{font-size:11px;color:#888;text-transform:uppercase;letter-spacing:.1em;font-family:"Hanken Grotesk",system-ui,sans-serif;margin-top:2px}
  .dip-date{font-size:12.5px;color:#888;font-family:"Hanken Grotesk",system-ui,sans-serif}
  /* ---------- Listado de pasantes Semifinal (impresión) ---------- */
  #sfPrintArea{display:none;background:#fff}
  /* ---------- Lista de resultados por dorsal, Single Dances (impresión) ---------- */
  #jrplPrintArea{display:none;background:#fff}
  .jrpl-page{width:100%;min-height:250mm;box-sizing:border-box;padding:14mm 12mm;page-break-after:always;color:#222}
  .jrpl-page:last-child{page-break-after:auto}
  .jrpl-head{border-bottom:2px solid #1d4e89;padding-bottom:10px;margin-bottom:20px}
  .jrpl-title{font-family:'Fraunces',serif;font-weight:800;font-size:20px;color:#1d4e89}
  .jrpl-sub{font-size:12px;color:#666;margin-top:2px}
  .jrpl-name{font-size:18px;font-weight:800;margin-bottom:16px}
  .jrpl-table{width:100%;border-collapse:collapse;font-size:13px}
  .jrpl-table th{text-align:left;padding:8px 10px;border-bottom:2px solid #ddd;font-size:11px;text-transform:uppercase;color:#888}
  .jrpl-table td{padding:9px 10px;border-bottom:1px solid #eee}
  .jrpl-puesto{font-weight:800;text-align:right;color:#1a5c8c}
  @media print{
    @page{size:A4;margin:14mm 12mm}
    body.print-jreport #app-layout,body.print-jreport #locutor-view,body.print-jreport #judge-view,body.print-jreport #inscripcion-view{display:none!important}
    body.print-jreport #jreportPrintArea{display:block!important}
    body.print-jreport .jrp-head{margin:-14mm -12mm 18px}
    body.print-mdreport #app-layout,body.print-mdreport #locutor-view,body.print-mdreport #judge-view,body.print-mdreport #inscripcion-view{display:none!important}
    body.print-mdreport #mdreportPrintArea{display:block!important}
    body.print-mdreport #mdreportPrintArea .jrp-head{margin:-14mm -12mm 18px}
    body.print-diplomas #app-layout,body.print-diplomas #locutor-view,body.print-diplomas #judge-view,body.print-diplomas #inscripcion-view{display:none!important}
    body.print-diplomas #diplomasPrintArea{display:block!important}
    body.print-jrplist #app-layout,body.print-jrplist #locutor-view,body.print-jrplist #judge-view,body.print-jrplist #inscripcion-view{display:none!important}
    body.print-jrplist #jrplPrintArea{display:block!important}
    body.print-sflist #app-layout,body.print-sflist #locutor-view,body.print-sflist #judge-view,body.print-sflist #inscripcion-view{display:none!important}
    body.print-sflist #sfPrintArea{display:block!important}
  }
  /* PIN overlay */
  #pin-overlay{position:fixed;inset:0;z-index:9999;background:var(--bg);display:flex;flex-direction:column;overflow-y:auto;}
  .eb-pin-body{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;padding:24px 16px 40px;box-sizing:border-box}
  .pin-box{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:40px 48px;text-align:center;max-width:360px;width:90%;box-shadow:0 8px 32px rgba(0,0,0,.12);}
  .pin-box h2{margin:0 0 6px;font-size:22px;color:var(--wine);}
  .pin-box h2 em{font-style:italic;font-weight:500;color:var(--gold);}
  .pin-box p{margin:0 0 24px;color:var(--ink-soft);font-size:14px;}
  .pin-box input{width:100%;box-sizing:border-box;padding:12px 16px;font-size:22px;letter-spacing:6px;text-align:center;border:2px solid var(--line);border-radius:10px;background:var(--bg);color:var(--ink);outline:none;margin-bottom:14px;}
  .pin-box input:focus{border-color:var(--wine);}
  .pin-box button{width:100%;padding:12px;background:var(--gold);color:var(--bg);border:none;border-radius:10px;font-size:15px;font-weight:700;cursor:pointer;transition:.2s}
  .pin-box button:hover{background:var(--gold-soft);transform:translateY(-1px)}
  /* .pin-box button ya pisa a .eb-back-link (misma especificidad "clase+elemento" vs solo "clase")
     y lo hacía ver como un botón sólido en vez de un link de texto — se sube la especificidad acá
     para que gane .eb-back-link cuando el <button> tiene esa clase. */
  .pin-box button.eb-back-link{width:auto;padding:0;background:none;color:var(--ink-soft);font-size:12.5px;font-weight:400;text-decoration:underline;text-align:left}
  .pin-box button.eb-back-link:hover{background:none;transform:none;opacity:.8}
  .pin-err{color:#c0392b;font-size:13px;margin-top:10px;min-height:18px;}
  /* ===== Header + hero (pantalla de inicio + inscripción pública) ===== */
  /* Paleta propia de la landing pública (#pin-overlay envuelve nav + hero + categorías/galería/
     sponsors + login + footer, y es hermano de .app-layout, no descendiente) — pisa acá las mismas
     variables que ya consumen todas las reglas eb-, pin-box y cd- de abajo, así que todo el bloque
     público queda re-temado de una sin tocar :root/body.dark (admin) ni reescribir cada regla.
     Las pantallas públicas secundarias (Consultar inscripción / Inscripción en pausa) viven fuera
     de #pin-overlay y NO se ven afectadas — quedan con la paleta clara de siempre. */
  #pin-overlay{
    --bg:#0b0a10;--card:#18141a;--line:#332a22;--strip:#211c22;
    --ink:#f7f2e7;--ink-soft:#c9b8a0;
    --gold:#e8b23f;--gold-soft:#f6dfa0;
    --wine:#ff4d6d;--wine-deep:#14111a;
    --shadow:0 10px 40px -12px rgba(0,0,0,.6);
  }
  .eb-page{min-height:100vh;background:var(--bg)}
  .eb-nav{width:100%;box-sizing:border-box;background:var(--wine-deep);color:#fff;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 18px;flex-wrap:wrap}
  .eb-nav .eb-brand-logo{height:34px;width:auto;vertical-align:middle;display:inline-block}
  .eb-nav .eb-brand{:'Fraunces',serif;font-weight:700;font-size:14px;color:#fff;white-space:nowrap}
  .eb-nav .eb-brand em{font-style:italic;font-weight:500;color:var(--gold)}
  .eb-nav-links{display:flex;gap:2px;flex-wrap:wrap}
  .eb-nav-links a,.eb-nav-links button{color:rgba(255,255,255,.75);text-decoration:none;font-weight:600;font-size:12px;letter-spacing:.04em;text-transform:uppercase;padding:7px 12px;border-radius:7px;transition:.15s;background:none;border:none;font-family:inherit;cursor:pointer}
  .eb-nav-links a:hover,.eb-nav-links button:hover{color:#fff;background:rgba(255,255,255,.08)}
  .eb-nav-links a.on,.eb-nav-links button.on{color:var(--gold);background:rgba(255,255,255,.06)}
  .eb-hero{width:100%;box-sizing:border-box;background:linear-gradient(180deg,var(--card) 0%,var(--bg) 100%);color:var(--ink);padding:38px 22px 36px;text-align:center;border-bottom:3px solid var(--gold)}
  .eb-hero .eb-logo{max-width:340px;max-height:220px;margin:0 auto 14px;display:block;border-radius:8px}
  .eb-eyebrow{font-size:11.5px;letter-spacing:.32em;text-transform:uppercase;color:var(--gold);font-weight:700}
  .eb-title{font-family:'Fraunces',serif;font-weight:900;font-size:clamp(30px,7vw,50px);line-height:1.03;margin:.32em 0 .14em;letter-spacing:-.01em;color:var(--ink)}
  .eb-title em{font-style:italic;font-weight:500;color:var(--wine)}
  .eb-mkt-title{font-family:'Fraunces',serif;font-weight:800;font-size:clamp(22px,4vw,30px);line-height:1.1;margin:.2em 0 0;color:var(--ink)}
  .eb-rule{width:56px;height:2px;background:var(--gold);margin:14px auto}
  .eb-sub{color:var(--ink-soft);font-size:13.5px;max-width:46ch;margin:0 auto}
  .eb-countdown{display:none;justify-content:center;gap:8px;margin:16px auto 2px;flex-wrap:wrap}
  .eb-countdown .cd-box{background:var(--card);border:1px solid var(--gold);border-radius:14px;padding:10px 8px;min-width:58px;box-shadow:var(--shadow)}
  .eb-countdown .cd-num{display:block;font-family:'Fraunces',serif;font-weight:900;font-size:21px;color:var(--wine);line-height:1}
  .eb-countdown .cd-lbl{display:block;font-size:9.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-soft);margin-top:3px}
  /* Sin overflow:hidden acá: .eb-hero-bg ya se recorta a sí mismo (línea de abajo), así que esta
     regla no lo necesita para las fotos — y dejarlo acá es lo que venía recortando invisiblemente
     los botones/CTA cuando el contenido real (texto + countdown + botones) termina siendo más alto
     que la caja calculada por flex. Sin este overflow, si el contenido no entra el box simplemente
     crece (como min-height ya permite) en vez de tapar contenido. */
  .eb-commercial-hero{position:relative;flex:1;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:44px 20px 60px;color:var(--ink);text-align:center;box-sizing:border-box}
  /* Escritorio: el nav (~54px) queda arriba del hero, así que centrado puro dentro de una caja de
     100vh cae un poco más abajo de lo que se ve en el primer pantallazo. En vez de achicar el
     min-height (eso hizo que en pantallas bajas la caja quedara MÁS CHICA que su propio contenido
     y, sin overflow:hidden, el contenido se superponía con "Categorías" en vez de simplemente no
     entrar) subimos el contenido solo con padding asimétrico — el min-height:100vh de la regla
     base nunca se toca, así la caja jamás queda más chica que lo que necesita. En mobile el nav
     puede ocupar 2 líneas, así que se deja el padding parejo de siempre. */
  @media(min-width:769px){
    .eb-commercial-hero{padding-top:20px;padding-bottom:90px}
  }
  .eb-sparkle-bg{position:absolute;inset:0;z-index:0;pointer-events:none;background-color:#0a141d;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='280' height='280'%3E%3Cfilter id='s'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch' result='n'/%3E%3CfeColorMatrix in='n' type='matrix' values='0 0 0 0 .88  0 0 0 0 .64  0 0 0 0 .05  0 0 0 9 -7'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23s)'/%3E%3C/svg%3E"),
      radial-gradient(circle at 16% 18%,rgba(224,164,12,.32),transparent 40%),
      radial-gradient(circle at 84% 10%,rgba(224,164,12,.22),transparent 42%),
      radial-gradient(circle at 50% 94%,rgba(224,164,12,.20),transparent 46%);
    background-size:280px 280px,auto,auto,auto;
    background-repeat:repeat,no-repeat,no-repeat,no-repeat;
    background-blend-mode:screen,normal,normal,normal;}
  /* Collage de fotos del hero: reusa las fotos de "Galería" (marketing-gallery.json). Si hay
     0-1 fotos queda vacío (transparent) y se ve el .eb-sparkle-bg de abajo como fallback; si hay
     2+ pinta encima gracias al orden en el DOM (mismo z-index, pero después en el markup). */
  .eb-hero-bg{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
  .eb-hero-bg-slide{position:absolute;inset:0;background-size:cover;background-position:center;opacity:0;transform:scale(1.04);transition:opacity 1.8s ease}
  .eb-hero-bg-slide.on{opacity:1}
  .eb-hero-overlay{position:absolute;inset:0;background:linear-gradient(180deg,rgba(11,10,16,.35) 0%,rgba(11,10,16,.74) 62%,var(--bg) 100%)}
  @keyframes eb-hero-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
  .eb-commercial-content{position:relative;z-index:2;max-width:520px;width:100%;animation:eb-hero-in .9s ease both}
  .eb-commercial-hero .eb-logo{max-width:min(460px,88vw);max-height:290px;margin:0 auto 8px;display:block;filter:drop-shadow(0 6px 18px rgba(0,0,0,.5))}
  .eb-commercial-hero .eb-eyebrow{color:var(--gold-soft)}
  .eb-cta-row{position:absolute;top:16px;left:16px;z-index:5;display:flex;gap:9px;flex-wrap:wrap}
  .eb-btn{font-family:"Hanken Grotesk",sans-serif;font-weight:800;font-size:14.5px;letter-spacing:.04em;text-transform:uppercase;padding:16px 34px;border-radius:999px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;border:1.5px solid var(--gold);transition:.2s}
  .eb-btn:hover{transform:translateY(-3px)}
  .eb-btn-solid{background:var(--gold);color:var(--bg);box-shadow:0 12px 34px -10px rgba(232,178,63,.55)}
  .eb-btn-solid:hover{background:var(--gold-soft);box-shadow:0 16px 42px -10px rgba(232,178,63,.7)}
  .eb-btn-outline{background:rgba(255,255,255,.05);color:var(--gold-soft)}
  .eb-btn-outline:hover{background:rgba(255,255,255,.12);box-shadow:var(--shadow)}
  .eb-login-view{display:none;flex:1;flex-direction:column;align-items:center;justify-content:center;width:100%;padding:24px 16px 40px;box-sizing:border-box}
  .eb-back-link{display:block;background:none;border:none;color:var(--ink-soft);font-size:12.5px;cursor:pointer;text-decoration:underline;padding:0;margin:0 0 14px}
  .eb-foot-discreet{text-align:center;font-family:'Fraunces',serif;font-weight:700;font-size:13px;color:var(--ink-soft);margin:0;padding:14px 0 18px;opacity:.85}
  .eb-foot-discreet em{font-style:italic;font-weight:500;color:var(--gold)}
  /* Hero comercial: fila de CTA en flujo (la regla base .eb-cta-row es position:absolute,
     pensada para otro uso y no la usa nadie más — la pisamos acá en vez de tocarla). */
  .eb-commercial-content .eb-cta-row{position:static;justify-content:center;gap:16px;margin-top:32px}
  /* Categorías / galería / sponsors: ahora sobre la misma paleta oscura del hero (heredan las
     variables pisadas en #pin-overlay), así que la página se lee como una sola pieza. */
  .eb-mkt-categories,.eb-mkt-gallery,.eb-mkt-sponsors{max-width:900px;margin:0 auto;padding:52px 20px;text-align:center;box-sizing:border-box}
  .eb-reveal{opacity:0;transform:translateY(22px);transition:opacity .6s ease,transform .6s ease}
  .eb-reveal.in{opacity:1;transform:none}
  .eb-mkt-chip-row{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:22px}
  .eb-mkt-chip{background:var(--card);border:1px solid var(--gold);color:var(--ink);font-size:13px;font-weight:600;padding:8px 18px;border-radius:999px;transition:transform .15s,border-color .15s}
  .eb-mkt-chip:hover{transform:translateY(-2px);border-color:var(--gold-soft)}
  .eb-mkt-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px;margin-top:22px}
  .eb-mkt-photo{border-radius:16px;overflow:hidden;border:1px solid var(--line);box-shadow:var(--shadow);aspect-ratio:4/3}
  .eb-mkt-photo img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s ease}
  .eb-mkt-photo:hover img{transform:scale(1.08)}
  .eb-mkt-sponsors-strip{display:flex;flex-wrap:wrap;gap:28px;justify-content:center;align-items:center;margin-top:22px}
  .eb-mkt-sponsors-strip img{max-height:56px;max-width:130px;object-fit:contain;filter:grayscale(1);opacity:.7;transition:filter .25s,opacity .25s}
  .eb-mkt-sponsors-strip img:hover{filter:none;opacity:1}
  @media(max-width:520px){
    .eb-mkt-gallery-grid{grid-template-columns:repeat(2,1fr)}
    .eb-mkt-chip-row{gap:6px}
    .eb-mkt-chip{font-size:11.5px;padding:6px 12px}
    .eb-mkt-sponsors-strip img{max-height:44px;max-width:100px}
    .eb-btn{font-size:12.5px;padding:13px 24px}
    .eb-commercial-content .eb-cta-row{gap:10px;margin-top:24px}
  }
  /* view-mode: hide admin controls */
  /* iPhone-style toggle */
  .toggle-switch{position:relative;display:inline-block;cursor:pointer;line-height:0}
  .toggle-switch input{opacity:0;width:0;height:0;position:absolute}
  .toggle-track{display:inline-block;width:44px;height:26px;background:#ccc;border-radius:13px;transition:background .25s;position:relative}
  .toggle-switch input:checked+.toggle-track{background:#2e7d4f}
  .toggle-thumb{position:absolute;top:3px;left:3px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .25s;box-shadow:0 1px 4px rgba(0,0,0,.25)}
  .toggle-switch input:checked+.toggle-track .toggle-thumb{transform:translateX(18px)}
  .view-mode .edit-only{display:none!important}
  .view-mode .share-ov{display:none!important}
  .hh2-link{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px;}
  .hh2-link:hover{color:var(--wine);}
  .view-mode .view-only-msg{display:block!important}
  .view-mode #controls{padding-top:4px}
  .historico-mode .edit-only{display:none!important}
/* ── RESPONSIVE MOBILE ─────────────────────────────────────────────────────── */
@media(max-width:768px){
  .app-layout{flex-direction:column}
  .sidebar{
    width:100%!important;min-width:0!important;height:auto!important;
    position:static!important;overflow-y:visible!important;
    padding:12px 14px 8px!important;box-shadow:none!important;
    border-right:none!important;border-bottom:1px solid var(--line)
  }
  header.top{padding:10px 0 10px!important;margin-bottom:8px!important}
  header.top h1{font-size:18px!important}
  header.top p{font-size:12px!important}
  /* Collapse sidebar controls into a toggle */
  .sidebar-collapsible{display:none}
  .sidebar-collapsible.open{display:block}
  .sidebar-toggle-btn{
    display:flex!important;width:100%;background:none;border:1px solid var(--line);
    border-radius:8px;padding:8px 12px;font-size:13px;color:var(--ink);
    cursor:pointer;align-items:center;gap:6px;margin-bottom:8px
  }
  .main-content{padding:14px 12px 80px!important}
  .tabs{margin:12px 0 10px!important;flex-wrap:nowrap!important;overflow-x:auto!important;
    -webkit-overflow-scrolling:touch;scrollbar-width:none}
  .tabs::-webkit-scrollbar{display:none}
  .tab{font-size:12px!important;padding:8px 10px!important;white-space:nowrap}
  /* Tables scroll horizontally */
  table{font-size:11px!important}
  .cronrow{font-size:12px!important}
  details summary{font-size:13px!important}
  /* Stats wrap */
  .stats{display:flex;flex-wrap:wrap;gap:6px!important}
  .stat-card{min-width:70px!important;padding:8px 10px!important}
  .stat-num{font-size:20px!important}
  .stat-label{font-size:10px!important}
  /* Merge bar */
  .merge-bar{padding:10px 12px!important;font-size:12px!important}
  /* Hide non-essential sidebar controls on mobile for view mode */
  .view-mode .sidebar-collapsible{display:block!important}
  .view-mode .sidebar-toggle-btn{display:none!important}
}
@media(max-width:480px){
  header.top h1{font-size:15px!important}
  .tab{font-size:11px!important;padding:6px 8px!important}
  .main-content{padding:10px 8px 80px!important}
}


/* ── LOCUTOR MODE ─────────────────────────────────────────────── */
#locutor-view{max-width:680px;margin:0 auto;padding-bottom:40px}
.loc-hdr{display:flex;align-items:center;gap:12px;padding:16px 14px 10px;background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}
.loc-prog-wrap{height:6px;background:var(--line);margin:0}
.loc-prog-fill{height:6px;background:#2e7d4f;transition:width .4s}
.loc-banner{padding:11px 16px;background:#1a5c8c;color:#fff;font-size:14px;font-weight:600;letter-spacing:.01em}
.loc-blk{padding:8px 14px 4px;font-size:11px;font-weight:700;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.08em;background:var(--strip)}
.loc-item{background:var(--card);border-bottom:1px solid var(--line);cursor:pointer;user-select:none;transition:background .15s;-webkit-tap-highlight-color:rgba(0,0,0,.06)}
.loc-item:active{background:var(--strip)}
.lc-done{background:var(--strip)}
.lc-done .loc-top{opacity:.42}
.lc-next{background:#f0f9f3;border-left:4px solid #2e7d4f}
body.dark .lc-next{background:#15261c}
.loc-top{display:flex;align-items:baseline;gap:8px;padding:13px 14px 4px}
.loc-icon{font-size:15px;width:20px;flex-shrink:0;color:var(--ink-soft)}
.lc-done .loc-icon{color:#2e7d4f}
.lc-next .loc-icon{color:#2e7d4f;font-size:16px}
.loc-hn{font-weight:700;font-size:14px;color:var(--ink);white-space:nowrap;flex-shrink:0}
.lc-done .loc-hn{text-decoration:line-through;color:var(--ink-soft)}
.loc-nm{font-size:13px;color:var(--ink-soft);line-height:1.3}
.lc-done .loc-nm{text-decoration:line-through;color:var(--ink-soft)}
/* Tamaños de letra configurables (Configuración → Tamaños de letra): .loc-hn/.loc-nm se reutilizan
   tanto en Locutor (#locutor-view) como en la grilla de votación Multidance de Jueces (#judge-view),
   así que cada vista tiene su propio delta para poder ajustarlas de forma independiente. */
#judge-view .loc-hn{font-size:calc(14px + var(--fsd-jueces-heat,0px))}
#judge-view .loc-nm{font-size:calc(13px + var(--fsd-jueces-title,0px))}
#locutor-view .loc-hn{font-size:calc(14px + var(--fsd-locutor-heat,0px))}
#locutor-view .loc-nm{font-size:calc(13px + var(--fsd-locutor-title,0px))}
.loc-pairs{padding:4px 14px 10px 42px;display:flex;flex-direction:column;gap:3px}
.loc-pair{display:flex;align-items:baseline;gap:8px;font-size:13px;color:var(--ink)}
#locutor-view .loc-pair{font-size:calc(13px + var(--fsd-locutor-grid,0px))}
#locutor-view .loc-dor{font-size:calc(13px + var(--fsd-locutor-grid,0px))}
.loc-dor{font-weight:700;color:#1a5c8c;min-width:28px;flex-shrink:0}
.loc-pname{color:var(--ink)}

/* ── JUDGE MODE ───────────────────────────────────────────────── */
#judge-view{max-width:680px;margin:0 auto;padding-bottom:40px}
.jv-rows{padding:6px 14px 12px 14px;display:flex;flex-direction:column;gap:6px}
.jv-row{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:9px;padding:7px 8px;flex-wrap:wrap}
.jv-row.jv-voted{background:#f0f9f3;border-color:#cfe8d6}
body.dark .jv-row.jv-voted{background:#15261c;border-color:#2e7d4f}
.jv-dor{font-weight:700;color:#1a5c8c;min-width:26px;flex-shrink:0;font-size:12px}
.jv-pname{color:var(--ink);flex:1;min-width:80px}
.jv-btns{display:flex;gap:5px;flex-shrink:0}
.jv-pos{border:1.5px solid #ddd;background:var(--card);color:var(--ink-soft);border-radius:7px;padding:5px 10px;font-size:12px;font-weight:700;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,.06)}
.jv-pos.sel{background:#1a5c8c;border-color:#1a5c8c;color:#fff}
.jv-clear{border:1.5px solid #eee;background:var(--card);color:#c0392b;border-radius:7px;padding:5px 9px;font-size:12px;cursor:pointer}
.jv-num{width:52px;height:38px;text-align:center;font-size:18px;font-weight:800;color:#1a5c8c;border:1.5px solid var(--line);border-radius:8px;background:var(--card);flex-shrink:0;-moz-appearance:textfield}
.jv-num::-webkit-outer-spin-button,.jv-num::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.jv-row.jv-voted .jv-num{border-color:#7fb88e;background:var(--card)}
.jv-row.jv-dup{background:#fdeeee;border-color:#e3a6a0}
body.dark .jv-row.jv-dup{background:#2a1414;border-color:#7a3a32}
.jv-row.jv-dup .jv-num{border-color:#c0392b;color:#c0392b}
.jv-incomplete{margin-left:auto;font-size:11px;font-weight:700;color:#b5650a;background:#fdf0e0;border:1px solid #f0d9b8;border-radius:6px;padding:2px 7px;white-space:nowrap;flex-shrink:0}
.md-dance-lbl{font-size:11.5px;font-weight:700;color:var(--wine);padding:6px 14px 0;text-transform:uppercase;letter-spacing:.03em}
.md-sub{font-size:10.5px;font-weight:600;color:var(--ink-soft);padding:0 14px 2px}
.jv-modebtn{flex:1;font-size:12.5px;font-weight:700;padding:8px;border-radius:8px;border:1px solid var(--line);cursor:pointer;background:var(--card);color:var(--ink)}
.jv-modebtn.on{background:var(--wine-deep);border-color:var(--wine-deep);color:#fff}
.md-grid-wrap{overflow-x:auto;margin:6px 14px 12px;-webkit-overflow-scrolling:touch;border:1px solid var(--line);border-radius:10px}
.md-grid{border-collapse:collapse;width:100%;min-width:320px}
.md-grid th,.md-grid td{border-bottom:1px solid var(--line);border-right:1px solid var(--line);padding:5px 4px;text-align:center;font-size:11.5px}
#judge-view .md-grid th,#judge-view .md-grid td{font-size:calc(11.5px + var(--fsd-jueces-grid,0px))}
.md-grid th:last-child,.md-grid td:last-child{border-right:none}
.md-grid thead th{background:var(--strip);color:var(--ink-soft);font-weight:700;white-space:nowrap;padding:7px 5px}
.md-grid thead th:first-child{position:sticky;left:0;z-index:2;background:var(--strip);box-shadow:2px 0 4px -1px rgba(0,0,0,0.12)}
.md-grid td.md-grid-name{text-align:center;font-weight:600;color:var(--ink);white-space:nowrap;background:var(--card);min-width:54px;position:sticky;left:0;z-index:1;box-shadow:2px 0 4px -1px rgba(0,0,0,0.12)}
.md-grid-dor{color:#1a5c8c;font-weight:800;font-size:14px}
#judge-view .md-grid-dor{font-size:calc(14px + var(--fsd-jueces-grid,0px))}
.md-grid td.md-grid-sum{font-weight:800;color:var(--ink-soft);background:var(--strip);min-width:34px}
.md-cell{width:42px;height:34px;text-align:center;font-size:15px;font-weight:800;color:#1a5c8c;border:1.5px solid var(--line);border-radius:7px;background:var(--card);-moz-appearance:textfield}
.md-team-cell{width:58px;height:34px;text-align:center;font-size:15px;font-weight:800;color:#1a5c8c;border:1.5px solid var(--line);border-radius:7px;background:var(--card);-moz-appearance:textfield}
.md-cell::-webkit-outer-spin-button,.md-cell::-webkit-inner-spin-button,.md-team-cell::-webkit-outer-spin-button,.md-team-cell::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
td.md-cell-voted{background:#f0f9f3}
body.dark td.md-cell-voted{background:#15261c}
td.md-cell-voted .md-cell,td.md-cell-voted .md-team-cell{border-color:#7fb88e}
td.md-cell-dup{background:#fdeeee}
body.dark td.md-cell-dup{background:#2a1414}
td.md-cell-dup .md-cell{border-color:#c0392b;color:#c0392b}
.md-wait{padding:60px 24px;text-align:center;color:var(--ink-soft);font-size:14.5px;line-height:1.6}
.md-enable-btn{font-size:10.5px;font-weight:700;padding:3px 9px;border-radius:7px;border:1px solid var(--line);background:var(--card);color:var(--ink-soft);cursor:pointer;white-space:nowrap}
.md-enable-btn.on{background:#1f7a43;border-color:#1f7a43;color:#fff}
.md-pm-btn{font-weight:700;padding:6px 10px;border:none;border-right:1px solid var(--line);background:var(--card);color:var(--ink-soft);cursor:pointer;white-space:nowrap}
.md-pm-btn:last-child{border-right:none}
.md-pm-btn.on{background:var(--wine-deep);color:#fff}
.jp-btn{display:block;width:100%;padding:13px 16px;border:1.5px solid #ddd;border-radius:11px;background:var(--card);font-size:15px;font-weight:600;color:var(--ink);cursor:pointer;text-align:left;transition:background .15s}
.jp-btn:active{background:var(--strip)}
