/* ══ Ticflo — sistema de disseny (prototip local) ══ */
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700;800&display=swap');
*{box-sizing:border-box;margin:0}
:root{--brand:#5b50e6;--ink:#1a2140;--mut:#6b7390;--bg:#f4f5fa;--card:#fff;--line:#e4e7f2;
 --ok:#0fa572;--warn:#d98d07;--bad:#e04f5f;--r:14px;--sh:0 8px 30px rgba(26,33,64,.08)}
html{scroll-behavior:smooth}
body{font:15px/1.55 system-ui,"Segoe UI",Roboto,sans-serif;background:var(--bg);color:var(--ink)}
a{color:inherit;text-decoration:none}
h1{font-size:26px;margin:0 0 4px}h2{font-size:19px;margin:0 0 10px}h3{font-size:16px}
small,.mut{color:var(--mut)}
.wrap{max-width:1400px;margin:0 auto;padding:clamp(14px,2.5vw,30px) clamp(14px,3vw,26px)}

/* ── barres portal ── */
.redirbar{display:flex;align-items:center;gap:8px;background:#141a30;color:#aeb6d4;font-size:12.5px;padding:7px 18px}
.redirbar b{color:#fff}.redirbar .arr{color:#5fe3b3}
.redirbar select{margin-left:auto;background:#232b4a;color:#dfe3f5;border:1px solid #38406b;border-radius:8px;padding:3px 8px;font-size:12px}
.topbar{display:flex;align-items:center;gap:26px;background:var(--card);padding:13px 22px;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}
.topbar .logo{font-size:17px}
.topbar nav{display:flex;gap:4px;margin-right:auto}
.topbar nav a{padding:7px 13px;border-radius:9px;color:var(--mut);font-weight:500}
.topbar nav a.on,.topbar nav a:hover{background:color-mix(in srgb,var(--brand) 10%,#fff);color:var(--brand)}

/* ── botons / etiquetes ── */
.btn{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:var(--card);color:var(--ink);
 padding:9px 16px;border-radius:11px;font:600 14px/1 inherit;cursor:pointer;transition:.15s}
.btn:hover{border-color:var(--brand);color:var(--brand)}
.btn.pri{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.pri:hover{filter:brightness(1.08);color:#fff}
.btn.sm{padding:6px 11px;font-size:13px;border-radius:9px}
.btn.ghost{background:transparent}
.btn:disabled{opacity:.45;cursor:not-allowed}
/* parell de botons de compra «Afegeix a la cistella» + «Continua al pagament» (decisió 159): mateixa mida i mateixa lletra
   (el <button> i l'<a> agafaven lletres diferents perquè la drecera font:… inherit de .btn no és vàlida i el navegador la descarta) */
.btn.cta{width:100%;justify-content:center;min-height:44px;font-family:inherit;font-size:15px;font-weight:600;line-height:1}
.btn.cta+.btn.cta{margin-top:8px}
/* bloc d'identificació (decisió 169): Google · Apple · correu, igual a tot el portal */
.tf-auth{background:#fff;border:1px solid var(--line);border-radius:16px;padding:18px 16px;box-shadow:0 8px 28px rgba(20,26,48,.06)}
.tf-auth-t{font-weight:700;font-size:15px;margin:0 0 3px;color:var(--ink)}
.tf-auth-s{color:var(--mut);font-size:13px;margin:0 0 14px;line-height:1.45}
.tf-ab{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:46px;padding:0 14px;border-radius:12px;
 border:1px solid #dfe3ee;background:#fff;color:var(--ink);font-family:inherit;font-size:14.5px;font-weight:600;line-height:1;cursor:pointer;
 transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease,background .15s ease}
.tf-ab+.tf-ab{margin-top:8px}
.tf-ab:hover{border-color:#c5cbdc;box-shadow:0 3px 12px rgba(20,26,48,.08);transform:translateY(-1px)}
.tf-ab:active{transform:translateY(0)}
.tf-ab:focus-visible{outline:3px solid color-mix(in srgb,var(--brand) 40%,#fff);outline-offset:2px}
.tf-ab.apple{background:#000;color:#fff;border-color:#000}
.tf-ab.apple:hover{background:#1a1a1a;border-color:#1a1a1a}
.tf-ab.mail{border-color:color-mix(in srgb,var(--brand) 40%,#fff);color:var(--brand);background:color-mix(in srgb,var(--brand) 4%,#fff)}
.tf-ab.mail:hover{background:color-mix(in srgb,var(--brand) 8%,#fff)}
.tf-auth-or{display:flex;align-items:center;gap:10px;color:var(--mut);font-size:12px;margin:12px 0;text-transform:uppercase;letter-spacing:.06em}
.tf-auth-or::before,.tf-auth-or::after{content:"";flex:1;height:1px;background:var(--line)}
.tf-auth .lbl{margin-top:8px}
.badge{display:inline-block;padding:3px 10px;border-radius:99px;font-size:12px;font-weight:600;background:#eceef8;color:var(--mut)}
.badge.ok{background:#dcf5ec;color:var(--ok)}.badge.warn{background:#fdf1d8;color:var(--warn)}
.badge.bad{background:#fde3e6;color:var(--bad)}.badge.brand{background:color-mix(in srgb,var(--brand) 13%,#fff);color:var(--brand)}

/* ── targetes / graelles ── */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:20px;box-shadow:var(--sh)}
.cards{display:grid;gap:16px}
.g2{grid-template-columns:1fr 1fr}.g3{grid-template-columns:repeat(3,1fr)}.g4{grid-template-columns:repeat(4,1fr)}
@media(max-width:1100px){.g3,.g4{grid-template-columns:1fr 1fr}}
@media(max-width:640px){.g2,.g3,.g4{grid-template-columns:1fr}}
.split{display:grid;grid-template-columns:1fr clamp(310px,30%,400px);gap:clamp(14px,2vw,22px);align-items:start}
@media(max-width:900px){.split{grid-template-columns:1fr}}
.hero{background:linear-gradient(120deg,var(--brand),color-mix(in srgb,var(--brand) 55%,#20d3a8));color:#fff;
 border-radius:18px;padding:38px 34px;margin-bottom:22px}
.hero h1{font-size:30px}.hero p{opacity:.85;max-width:560px}
/* hero a TOTA l'amplada de la pàgina (portada del portal): surt del .wrap amb el truc
   dels 50vw; el contingut interior (.hin) es realinea amb el contenidor normal */
body{overflow-x:clip} /* el hero de 100vw no ha de crear desplaçament lateral */
.hero.full{width:100vw;margin-left:calc(50% - 50vw);border-radius:0;
 margin-top:calc(-1*clamp(14px,2.5vw,30px));padding:clamp(30px,4.5vw,58px) 0 clamp(28px,5vw,64px);
 min-height:clamp(280px,42vw,520px);display:flex;flex-direction:column;justify-content:flex-start}
.hero.full .hin{width:100%;max-width:1400px;margin:0 auto;padding:0 clamp(14px,3vw,26px)}
/* capçalera sobreposada a dalt de la imatge gran de la portada (estil poblet.cat, decisions 155-156): sense banda blanca,
   tot en blanc amb ombra, alineat amb el contingut (.hin) */
.hero.full{position:relative}
.hero.full .topbar{position:absolute;top:0;left:0;right:0;z-index:2;background:transparent;border:0;box-shadow:none;
 padding:10px max(clamp(14px,3vw,26px),calc((100% - 1400px)/2 + 26px));text-shadow:0 1px 6px rgba(0,0,0,.6)}
.hero.full .tlogo{height:clamp(70px,calc(8vw - 20px),100px)} /* tan gran com hi cap sense moure el títol (decisió 157) */
.hero.full .topbar nav{display:none} /* a la portada el menú sobra: les píndoles de l'hero ja hi porten (decisió 157) */
.hero.full .topbar .logo{margin-right:auto}
.hero.full .cartlink:not(.cist){filter:brightness(0) invert(1) drop-shadow(0 1px 4px rgba(0,0,0,.6))} /* 👤 en blanc sobre la foto */
.hero.full .topbar nav a,.t-poblet .hero.full .topbar nav a{color:rgba(255,255,255,.88);font-size:14px}
.hero.full .topbar nav a.on,.hero.full .topbar nav a:hover,.t-poblet .hero.full .topbar nav a.on,.t-poblet .hero.full .topbar nav a:hover{
 color:#fff;background:none;text-decoration:underline;text-underline-offset:5px;text-decoration-thickness:2px}
.hero.full .langs{font-size:16px;gap:6px}
.hero.full .langs a{color:rgba(255,255,255,.82);min-height:44px;display:inline-flex;align-items:center;padding:0 8px}
.hero.full .langs a.on,.hero.full .langs a:hover{color:#fff;background:none;text-decoration:underline;text-underline-offset:4px}
.hero.full .surtlink{color:#fff}
.hero.full.hastop{padding-top:clamp(90px,8vw,120px)}
/* PC ample (decisió 158): el logo de Poblet com a la portada de poblet.cat: gran i centrat al marge esquerre, fora del contingut,
   alineat per dalt amb les icones de la capçalera (48 px) i per baix amb les píndoles (325 px → 277 px d'alçada, 131 d'ample);
   títol, icones i idiomes no es mouen (la capçalera conserva els 120 px d'alçada que tenia). A partir de 1720 px, que és quan hi cap */
@media(min-width:1720px){
 .hero.full .topbar{min-height:120px;justify-content:flex-end}
 .hero.full .topbar .logo{position:absolute;top:48px;left:calc((100% - 1400px)/4);transform:translateX(-50%);margin:0}
 .hero.full .tlogo{height:277px;filter:drop-shadow(0 2px 8px rgba(0,0,0,.45))}
}
.hero.full h1{font-size:clamp(26px,3.4vw,44px)}
.hero.full p{font-size:clamp(14px,1.3vw,17px);max-width:640px}

/* ── CTA de l'hero del portal (Reserva / Esdeveniments / Botiga): botons grans que destaquen
   sobre la foto de fons. Primari amb degradat i ombra de color, secundari blanc sòlid i
   terciari «vidre» (blur). Al mòbil ocupen tota l'amplada (decisió 26). ── */
.hero-cta{display:flex;gap:12px;flex-wrap:wrap;margin-top:clamp(18px,2.4vw,28px)}
.hcta{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:52px;padding:0 26px 0 20px;
 border-radius:999px;font:700 16px/1 inherit;letter-spacing:.01em;color:#fff;border:1px solid transparent;
 text-shadow:none;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,background .18s ease,filter .18s}
.hcta svg{width:20px;height:20px;flex:none;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.hcta:hover{transform:translateY(-2px)}.hcta:active{transform:translateY(0)}
.hcta:focus-visible{outline:3px solid #fff;outline-offset:3px}
.hcta.pri{background:linear-gradient(135deg,color-mix(in srgb,var(--brand) 85%,#fff),var(--brand) 60%,color-mix(in srgb,var(--brand) 80%,#000));
 box-shadow:0 10px 28px color-mix(in srgb,var(--brand) 45%,transparent),inset 0 1px 0 rgba(255,255,255,.28)}
.hcta.pri:hover{filter:brightness(1.06);box-shadow:0 14px 34px color-mix(in srgb,var(--brand) 55%,transparent),inset 0 1px 0 rgba(255,255,255,.28)}
.hcta.white{background:#fff;color:var(--brand);box-shadow:0 10px 28px rgba(0,0,0,.28)}
.hcta.white:hover{background:#fff;box-shadow:0 14px 34px rgba(0,0,0,.34)}
.hcta.glass{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.55);
 backdrop-filter:blur(12px) saturate(1.4);-webkit-backdrop-filter:blur(12px) saturate(1.4);box-shadow:0 8px 24px rgba(0,0,0,.22)}
.hcta.glass:hover{background:rgba(255,255,255,.26)}
.t-poblet .hcta{border-radius:999px}
.t-poblet .hcta.pri{background:linear-gradient(135deg,#e4415a,#cf3048 55%,#a81a30);
 box-shadow:0 10px 28px rgba(207,48,72,.5),inset 0 1px 0 rgba(255,255,255,.28)}
.t-poblet .hcta.pri:hover{box-shadow:0 14px 34px rgba(207,48,72,.6),inset 0 1px 0 rgba(255,255,255,.28);color:#fff}
.t-poblet .hcta.white{color:#a81a30}.t-poblet .hcta.white:hover{color:#cf3048}
.t-poblet .hcta.glass:hover{color:#fff}
@media(max-width:640px){
 .hero-cta{gap:8px;margin-top:14px}
 .hcta{width:100%;min-height:44px;font-size:14.5px;padding:0 16px;gap:8px} /* decisió 208: píndoles més petites al mòbil (≥44 px tàctils) */
 .hcta svg{width:17px;height:17px}
}

/* franja de previsualització d'un apartat desactivat (decisió 138) */
.previbar{background:#fdf1d8;color:#6b4a00;border-bottom:1px solid #f0d9a3;font-size:13.5px;padding:9px 18px;text-align:center}
/* enllaç de tornada del portal (decisió 150): píndola com la resta del disseny */
.tornar{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:8px 16px;border-radius:999px;
 border:1.5px solid color-mix(in srgb,var(--brand) 40%,#fff);background:#fff;color:var(--brand);font-weight:700;font-size:13.5px;
 margin:6px 0 10px;transition:transform .15s ease,box-shadow .15s ease,background .15s}
.tornar:hover{background:color-mix(in srgb,var(--brand) 8%,#fff);transform:translateY(-1px);box-shadow:0 6px 16px color-mix(in srgb,var(--brand) 18%,transparent)}
/* ── kpi ── */
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px}
.kpi b{font-size:24px;display:block}.kpi small{font-size:12.5px}
.kpi .delta{font-size:12px;font-weight:700;color:var(--ok)}.kpi .delta.neg{color:var(--bad)}

/* ── taules ── */
.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl th{text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--mut);padding:8px 10px;border-bottom:1px solid var(--line)}
.tbl td{padding:10px;border-bottom:1px solid var(--line)}
.tbl tr:last-child td{border-bottom:0}
.tbl.click tbody tr{cursor:pointer}.tbl.click tbody tr:hover{background:#f7f8fd}

/* ── formularis ── */
.lbl{display:block;font-size:12.5px;font-weight:600;color:var(--mut);margin:12px 0 4px}
.inp{width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:10px;font:inherit;background:#fff}
.inp:focus{outline:2px solid color-mix(in srgb,var(--brand) 35%,#fff);border-color:var(--brand)}
.frow{display:flex;gap:12px}.frow>*{flex:1}
.check{display:flex;align-items:center;gap:8px;font-size:14px;margin:10px 0}
/* pagament (decisió 177): camps obligatoris marcats, error visible al camp i casella de condicions destacada */
.req{color:#d0342c;font-weight:700}
.inp.err{border-color:#d0342c;box-shadow:0 0 0 3px rgba(208,52,44,.15)}
.check.cond{font-weight:700;font-size:15px;line-height:1.35;padding:12px 14px;margin:16px 0 6px;border-radius:10px;
 border:1.5px solid color-mix(in srgb,var(--brand) 45%,#fff);background:color-mix(in srgb,var(--brand) 6%,#fff)}
.check.cond input{width:22px;height:22px;flex:0 0 22px;accent-color:var(--brand);cursor:pointer}
.check.cond.err{border-color:#d0342c;background:#fff1f0}

/* ── calendari ── */
.calhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.calhead b{text-transform:capitalize}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
.dow{text-align:center;font-size:11px;font-weight:700;text-transform:uppercase;color:var(--mut);padding:4px 0}
.day{min-height:56px;border:1px solid var(--line);border-radius:10px;padding:5px 7px;background:#fff;cursor:pointer;position:relative;font-size:13px;transition:.12s}
.day:hover{border-color:var(--brand)}
.day .dnum{font-weight:600}
.day.out{background:transparent;border-color:transparent;cursor:default}
.day.closed{background:#fbeef0;border-color:#f3ccd2;color:#b96a75}
.day.closed::after{content:"tancat";position:absolute;bottom:5px;left:7px;font-size:10px;font-weight:700;text-transform:uppercase;color:var(--bad)}
html[lang=es] .day.closed::after{content:"cerrado"}
html[lang=fr] .day.closed::after{content:"fermé"}
html[lang=en] .day.closed::after{content:"closed"}
.day.sel{outline:2.5px solid var(--brand);border-color:var(--brand)}
.day .cap{position:absolute;bottom:5px;left:7px;right:7px;height:4px;border-radius:4px;background:#e8eaf4;overflow:hidden}
.day .cap i{display:block;height:100%;background:var(--ok)}
.day .cap i.mid{background:var(--warn)}.day .cap i.high{background:var(--bad)}

/* ── franges horàries ── */
.slots{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.slot{border:1px solid var(--line);border-radius:11px;padding:9px;text-align:center;cursor:pointer;background:#fff}
.slot:hover{border-color:var(--brand)}
.slot.sel{background:var(--brand);color:#fff;border-color:var(--brand)}
.slot.sel small{color:#e6e2ff}
.slot.full{opacity:.4;cursor:not-allowed;text-decoration:line-through}
.slot b{display:block;font-size:15px}.slot small{font-size:11px}

/* ── plànol seients ── */
.stagewrap{background:#10152b;border-radius:var(--r);padding:10px;overflow:auto}
.stagewrap svg{display:block;width:100%;height:auto}
.seat{cursor:pointer;transition:.1s}
.seat.sold{cursor:not-allowed}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:13px;margin-top:10px}
.legend i{display:inline-block;width:13px;height:13px;border-radius:4px;margin-right:5px;vertical-align:-2px}

/* ── barra ocupació ── */
.gauge{height:12px;border-radius:8px;background:#e8eaf4;overflow:hidden}
.gauge i{display:block;height:100%;background:linear-gradient(90deg,var(--ok),#7ad3a9);border-radius:8px}
.gauge i.warn{background:linear-gradient(90deg,#e9b23a,var(--warn))}
.gauge i.bad{background:linear-gradient(90deg,#ef7a88,var(--bad))}

/* ── panell admin ── */
body.shell{display:grid;grid-template-columns:238px minmax(0,1fr);min-height:100vh} /* minmax(0,…): una taula ampla no eixampla la pàgina (decisió 201) */
.side{background:#141a30;color:#aeb6d4;padding:20px 14px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.slogo{font-size:19px;font-weight:800;color:#fff;padding:2px 10px 18px}
.slogo span{color:#8f86ff}.slogo small{display:block;font-size:11px;font-weight:500;color:#7d86ab;margin-top:2px}
.side nav{display:flex;flex-direction:column;gap:3px}
.side nav a{padding:9px 12px;border-radius:10px;font-size:14px}
.side nav a:hover{background:#1e2647;color:#fff}
.side nav a.on{background:var(--brand);color:#fff}
.sfoot{margin-top:auto;display:flex;flex-direction:column;gap:2px;border-top:1px solid #262e52;padding-top:12px}
.sfoot a{padding:7px 12px;font-size:13px;border-radius:9px}
.sfoot a:hover{background:#1e2647;color:#fff}
.main{padding:clamp(16px,2vw,30px) clamp(14px,2.2vw,34px);min-width:0} /* tota l'amplada de la pantalla (petició de l'usuari, decisió 201) */
.g2.fam{grid-template-columns:280px 1fr} /* famílies + articles de la botiga */
.phead{display:flex;align-items:center;gap:14px;margin-bottom:20px}
.phead .sp{margin-left:auto;display:flex;gap:9px}

/* ── modal / toast ── */
.modalbg{position:fixed;inset:0;background:rgba(16,20,40,.55);display:flex;align-items:center;justify-content:center;z-index:90;padding:20px}
.modal{background:#fff;border-radius:16px;padding:24px;max-width:560px;width:100%;max-height:88vh;overflow:auto;box-shadow:0 24px 70px rgba(0,0,0,.3)}
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);background:#141a30;color:#fff;padding:11px 20px;border-radius:12px;font-size:14px;z-index:99;box-shadow:var(--sh)}

/* ── entrada / factura ── */
.ticket{display:flex;gap:16px;align-items:center;border:1.5px dashed color-mix(in srgb,var(--brand) 45%,#fff);border-radius:var(--r);padding:14px 16px;background:color-mix(in srgb,var(--brand) 4%,#fff)}
.ticket canvas{border-radius:8px}
/* decisió 200: entrada a la pantalla com la del correu (capçalera blanca, foto en color amb vel fosc, textos en blanc) */
.tqp{border-radius:12px;overflow:hidden;border:1px solid #e1d3c4;background:#fff;max-width:560px}
.tqp-cap{padding:12px 10px 8px;text-align:center;background:#fff}.tqp-cap img{height:56px;width:auto;display:inline-block}
.tqp-cos{position:relative;background:#2b241f;color:#fff;padding:18px 20px 16px;min-height:220px;font-family:Arial,Helvetica,sans-serif}
.tqp-foto{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.tqp-vel{position:absolute;inset:0;background:linear-gradient(90deg,rgba(22,15,10,.82) 0%,rgba(22,15,10,.6) 55%,rgba(22,15,10,.3) 100%)}
.tqp-txt{position:relative;text-shadow:0 1px 3px rgba(0,0,0,.55);line-height:1.25}.tqp-txt,.tqp-txt *{color:#fff}
.tqp-t{font-size:22px;font-weight:800;letter-spacing:.5px}.tqp-s{font-size:12.5px;font-weight:700;margin-top:2px}
.tqp-d{font-size:15px;font-weight:700;margin-top:14px}.tqp-h{font-size:12px;font-weight:700;margin-top:2px}
.tqp-tip{font-size:18px;font-weight:800;margin-top:14px}
.tqp-qr{display:flex;align-items:center;gap:14px;margin-top:12px}.tqp-qr canvas{width:120px;height:120px;background:#fff;padding:5px;border-radius:6px;box-sizing:border-box;flex:0 0 auto}
.tqp-qr b{font-size:14px;font-weight:800}.tqp-num{font:11px/1.4 "Courier New",monospace;margin-top:10px}
.tqp-val{font-size:11.5px;font-weight:700;margin-top:2px}.tqp-ubi{font-size:11px;margin-top:2px}
.tqp-usada{display:inline-block;margin-top:8px;background:rgba(255,255,255,.92);color:#333!important;border-radius:99px;padding:3px 10px;font-size:12px;font-weight:700;text-shadow:none}
/* decisió 200: rèplica a la pantalla de la pàgina del PDF d'entrada (pdfEntradesTiquet a la funció venda): 510 × 420 pt (180 × 148 mm),
   capçalera blanca de 84 pt, foto enfosquida de fons, textos en blanc des de 150 pt, QR de 100 pt en caixa blanca, marca d'aigua */
.pdfp{position:relative;width:510pt;height:420pt;background:#2b241f;overflow:hidden;box-shadow:0 10px 40px rgba(20,25,60,.18);transform-origin:0 0;font-family:Helvetica,Arial,sans-serif;color:#fff}
.pdfp .cap{position:absolute;left:0;top:0;width:100%;height:84pt;background:#fff;display:flex;align-items:center;justify-content:center}.pdfp .cap img{height:64pt;width:auto}
.pdfp .fons{position:absolute;left:0;top:84pt;width:100%;height:336pt;object-fit:cover;object-position:center;display:block}
.pdfp .marca{position:absolute;right:22pt;bottom:14pt;height:130pt;width:auto;opacity:.3}
.pdfp .l{position:absolute;left:150pt;right:24pt;line-height:1;font-weight:700;white-space:nowrap;overflow:hidden;color:#fff}
.pdfp .qrb{position:absolute;left:150pt;top:258pt;width:100pt;height:100pt;background:#fff}.pdfp .qrb canvas{position:absolute;left:4pt;top:4pt;width:92pt;height:92pt}
.pdfp .esc{position:absolute;left:266pt;top:258pt;height:100pt;width:160pt;display:flex;align-items:center;font-size:13pt;font-weight:700;line-height:16pt;color:#fff}
.pdfp .prova{position:absolute;left:12pt;bottom:6pt;font-size:7.5pt;font-weight:700;color:#ffd966}
.pdfp .mostra{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;overflow:hidden}
.pdfp .mostra span{font-size:54px;font-weight:900;color:rgba(255,255,255,.14);transform:rotate(-24deg);letter-spacing:.1em}
.pdfw{position:relative;max-width:100%;overflow:hidden}
/* tiquet tèrmic de 72 mm (decisió 178), la mateixa plantilla que kiosk, taquilla, panell i tiquet.html: cal perquè el panell el previsualitzi */
.tiq{box-sizing:border-box;width:72mm;margin:0 auto;padding:1.5mm 2mm 3mm;font:11px/1.25 Arial,sans-serif;text-align:center;page-break-after:always;page-break-inside:avoid;break-inside:avoid;color:#000;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.tiq .tlogo{height:15mm;width:auto;display:block;margin:0 auto 1.5mm;image-rendering:pixelated}.tiq .tcli{font-weight:700;font-size:15px;margin-bottom:2mm}
.tiq .ttl{font-weight:900;font-size:18px;letter-spacing:.3px;line-height:1.1}.tiq .sub{font-weight:700;font-size:10.5px;margin:.5mm 0 1.5mm}
.tiq .tfoto{display:block;width:auto;max-width:100%;height:auto;max-height:40mm;margin:0 auto 1.5mm;image-rendering:pixelated} /* decisió 198: sencera */
.tiq .dat{font-weight:800;font-size:14px}.tiq .hor{font-weight:700;font-size:11px}
.tiq .tip{font-weight:900;font-size:15px;margin-top:1.5mm;line-height:1.15}.tiq .pre{font-weight:700;font-size:12px}
.tiq .qrrow{display:flex;align-items:center;justify-content:center;gap:3mm;margin:1.5mm 0 .5mm}
.tiq .qr{width:30mm;height:30mm;image-rendering:pixelated}.tiq .esc{font-weight:900;font-size:12px;text-align:left;width:24mm;line-height:1.15}
.tiq .num{font:bold 11px/1.2 monospace;letter-spacing:.5px}
.tiq .band{background:#fff;color:#000;margin:1.5mm 0 1.5mm;padding:1.5mm 0;border-top:2px solid #000;border-bottom:2px solid #000;display:flex;align-items:center;justify-content:space-between;gap:2mm;text-align:left}
.tiq .band b{font-size:18px;line-height:1.1;letter-spacing:.2px}.tiq .band small{font-size:9px;line-height:1.2;display:block;margin-top:1mm}.tiq .band .marca{height:12mm;width:auto;flex:0 0 auto;image-rendering:pixelated}
.tiq .peu{font-size:9px;line-height:1.2}
.factura{border:1px solid var(--line);border-radius:var(--r);padding:18px;background:#fff}
.factura .fh{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:10px}
.vqr{display:flex;gap:14px;align-items:center;background:#f2fbf7;border:1px solid #cdeddd;border-radius:11px;padding:11px 13px;margin-top:12px;font-size:12.5px}

/* ── mòbil ── */
.phone{width:375px;height:730px;margin:30px auto;background:#0c1022;border-radius:44px;padding:14px;box-shadow:0 30px 80px rgba(0,0,0,.4);position:relative}
.phone .notch{position:absolute;top:14px;left:50%;transform:translateX(-50%);width:120px;height:26px;background:#0c1022;border-radius:0 0 16px 16px;z-index:5}
.screen{background:#131936;border-radius:32px;height:100%;overflow:hidden;display:flex;flex-direction:column;color:#e7eaf8}
.scan{flex:1;position:relative;background:radial-gradient(circle at 50% 45%,#2a3158,#12172f 75%);display:flex;align-items:center;justify-content:center}
.reticle{width:230px;height:230px;position:relative}
.reticle::before,.reticle::after,.reticle i::before,.reticle i::after{content:"";position:absolute;width:34px;height:34px;border:4px solid #5fe3b3;border-radius:6px}
.reticle::before{top:0;left:0;border-right:0;border-bottom:0}
.reticle::after{top:0;right:0;border-left:0;border-bottom:0}
.reticle i::before{bottom:0;left:0;border-right:0;border-top:0}
.reticle i::after{bottom:0;right:0;border-left:0;border-top:0}
.laser{position:absolute;left:12px;right:12px;height:3px;background:#5fe3b3;border-radius:3px;box-shadow:0 0 14px #5fe3b3;animation:laser 2.1s ease-in-out infinite}
@keyframes laser{0%,100%{top:14px}50%{top:calc(100% - 14px)}}
.scanres{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;padding:26px;opacity:0;pointer-events:none;transition:.25s}
.scanres.show{opacity:1;pointer-events:auto}
.scanres .big{font-size:64px}.scanres h2{font-size:22px;margin:0}
.scanres.okres{background:rgba(10,122,84,.96)}.scanres.warnres{background:rgba(176,110,10,.96)}.scanres.badres{background:rgba(178,44,58,.96)}

/* ── cistella a la capçalera ── */
.cartlink{position:relative;font-size:21px;text-decoration:none;padding:4px 8px 4px 4px;line-height:1}
.surtlink{font-size:13px;color:var(--brand);text-decoration:underline;padding:8px 6px;white-space:nowrap;min-height:44px;display:inline-flex;align-items:center}
.cbadge{position:absolute;top:-3px;right:-2px;background:var(--brand);color:#fff;
 font-size:10.5px;font-weight:700;border-radius:99px;padding:2.5px 5.5px;line-height:1}

/* ── capçalera: logo d'imatge i idiomes ── */
.tlogo{height:30px;width:auto;display:block} /* barra de dalt més baixa (decisió 156) */
.tlogo.barra{height:34px} /* decisió 208: logo horitzontal vermell a les pàgines interiors, dins l'alçada de la barra */
.t-poblet .topbar .tlogo.barra{height:36px}
.langs{display:flex;gap:2px;font-size:12.5px;font-weight:700}
.langs a{padding:4px 7px;border-radius:6px;color:var(--mut)}
.langs a.on,.langs a:hover{color:var(--brand)}

/* ── peu del portal (patró poblet.cat: adreça centrada + columnes) ── */
.pfoot{background:#2b2320;color:#d8d2c8;margin-top:46px;font-size:13.5px}
.pfaddr{max-width:1320px;margin:0 auto;padding:40px 22px 6px;text-align:center}
.pfaddr img{max-width:280px;height:auto;filter:brightness(0) invert(1)}
.pfaddr p{margin-top:14px;font-weight:300;font-size:14.5px}
.pfaddr .tel{font-weight:700}
.pfwrap{max-width:1320px;margin:0 auto;padding:30px 22px 26px;display:grid;grid-template-columns:repeat(3,1fr);gap:0}
.pfwrap>div{padding:0 26px;border-right:1px solid rgba(255,255,255,.45)}
.pfwrap>div:first-child{padding-left:0}
.pfwrap>div:last-child{border-right:0}
@media(max-width:800px){.pfwrap{grid-template-columns:1fr}
 .pfwrap>div{border-right:0;border-bottom:1px solid rgba(255,255,255,.25);padding:14px 0}}
.pfoot .pfh{color:#fff;display:block;margin-bottom:9px;font-size:13.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.pfoot .pfh a{color:#fff}
.pfoot p{margin:4px 0;font-size:13px}
.pfoot a{color:#d8d2c8;text-decoration:underline;text-decoration-color:transparent;transition:.15s}
.pfoot a:hover{color:#fff;text-decoration-color:inherit}
.pflegal{border-top:1px solid rgba(255,255,255,.2);padding:14px 22px 18px;display:flex;gap:8px;flex-wrap:wrap;justify-content:center;font-size:12.5px}
.pflegal span{flex-basis:100%;text-align:center;margin-top:6px;color:#9a9186}

/* ── tema Monestir de Poblet — fidel a poblet.cat ──
   blanc, enllaços vermells #cf3048, menú majúscules negreta, daurats #c6854c,
   beix #e1d3c4, peu negre, Open Sans, cantonades sòbries */
.t-poblet{--bg:#fff;--ink:#363636;--mut:#7a6f66;--line:#e1d3c4;--r:8px;
 --sh:0 2px 10px rgba(80,55,30,.06);
 font-family:"Open Sans",system-ui,"Segoe UI",sans-serif}
.t-poblet .btn,.t-poblet .inp,.t-poblet .slot,.t-poblet .day{border-radius:5px}
.t-poblet .btn.pri{background:#cf3048;border-color:#cf3048}
.t-poblet .btn:hover{border-color:#cf3048;color:#cf3048}
.t-poblet .btn.pri:hover{color:#fff}
.t-poblet .topbar{border-bottom:3px solid #c6854c;padding:3px 22px}
.t-poblet .topbar nav a{text-transform:uppercase;font-weight:700;font-size:12.5px;
 letter-spacing:.02em;color:#363636;border-radius:0}
.t-poblet .topbar nav a.on,.t-poblet .topbar nav a:hover{background:none;color:#cf3048;
 text-decoration:underline;text-underline-offset:5px;text-decoration-thickness:2px}
.t-poblet .langs a{text-transform:uppercase}
.t-poblet .redirbar{background:#0a0a0a}
.t-poblet .hero{background:linear-gradient(115deg,#8f1f30,#cf3048 52%,#a96f2f);
 border-radius:8px;min-height:330px;display:flex;flex-direction:column;justify-content:flex-end}
.t-poblet .hero.full{border-radius:0;min-height:clamp(300px,46vw,560px);justify-content:flex-start}
.t-poblet .hero h1{font-weight:800;text-shadow:0 2px 14px rgba(0,0,0,.55)}
.t-poblet .hero p{text-shadow:0 1px 8px rgba(0,0,0,.6);opacity:1}
.t-poblet .badge.brand{background:#f3e9da;color:#896941;border-radius:4px}
.t-poblet h2,.t-poblet h3{color:#1c1c1c}
.t-poblet .card{box-shadow:none;border-color:#e1d3c4}
.t-poblet .ticket{border-color:#c6854c;background:#fdf9f3;border-radius:6px}
.t-poblet .kpi b{color:#cf3048}
.t-poblet .mut,.t-poblet small{color:#7a6f66}
.t-poblet .pfoot{background:#0a0a0a;color:#e8e4de}
.t-poblet .pfoot a{color:#e8e4de}
.t-poblet .day.sel{outline-color:#cf3048}
.t-poblet .slot.sel{background:#cf3048;border-color:#cf3048}
.t-poblet .slot.sel small{color:#ffd9de}

/* ── documentació ── */
.doc{max-width:820px;margin:0 auto;padding:34px 24px 70px}
.doc h1{font-size:30px;margin-bottom:6px}
.doc h2{font-size:21px;margin:34px 0 10px;padding-top:18px;border-top:1px solid var(--line)}
.doc h3{margin:20px 0 6px}
.doc p,.doc li{color:#333c5c;font-size:15px}
.doc ul,.doc ol{padding-left:22px;margin:8px 0}
.doc li{margin:5px 0}
.doc .tbl{margin:12px 0;background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.doc code{background:#edeffa;border-radius:5px;padding:1px 6px;font-size:13px}
.doc pre{background:#141a30;color:#cfe0ff;border-radius:12px;padding:15px 17px;font-size:13px;overflow:auto;margin:10px 0}
.doc .note{border-left:4px solid var(--brand);background:color-mix(in srgb,var(--brand) 6%,#fff);border-radius:0 11px 11px 0;padding:11px 15px;margin:13px 0;font-size:14px}
.doc .note.warn{border-color:var(--warn);background:#fdf6e5}
.docnav{display:flex;gap:8px;flex-wrap:wrap;background:var(--card);border-bottom:1px solid var(--line);padding:12px 24px;position:sticky;top:0}
.docnav a{padding:6px 12px;border-radius:9px;font-size:13.5px;font-weight:600;color:var(--mut)}
.docnav a.on,.docnav a:hover{background:color-mix(in srgb,var(--brand) 10%,#fff);color:var(--brand)}
.steps{counter-reset:s;display:grid;gap:10px;margin:14px 0}
.steps>div{background:#fff;border:1px solid var(--line);border-radius:12px;padding:13px 15px 13px 52px;position:relative}
.steps>div::before{counter-increment:s;content:counter(s);position:absolute;left:14px;top:12px;width:26px;height:26px;border-radius:50%;background:var(--brand);color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center;font-size:13px}

/* ══ NORMA (decisió 26): disseny completament responsive ══
   Al PC s'aprofita l'amplada (contenidors fins a 1320–1400px, graelles fluides);
   al mòbil tot ha de ser còmode per COMPRAR amb el dit: objectius tàctils grans,
   formularis d'una columna amb lletra ≥16px (evita el zoom d'iOS), CTA de compra
   a tota l'amplada, taules amb scroll propi i res que desbordi la pantalla. */

/* objectius tàctils generosos en pantalles de dit */
@media(pointer:coarse){
 .btn{padding:11px 18px;min-height:44px}
 .btn.sm{padding:9px 13px;min-height:38px}
 .topbar nav a{padding:10px 14px}
 .langs a{padding:8px 9px}
 .day{min-height:52px}
}

@media(max-width:640px){
 body{font-size:14.5px}
 h1{font-size:clamp(21px,6vw,26px)}
 .hero{padding:24px 18px;border-radius:14px}
 .hero h1{font-size:clamp(23px,6.5vw,30px)}
 .t-poblet .hero{min-height:220px}
 .hero.full{border-radius:0;padding:22px 0 20px;min-height:240px}
 .t-poblet .hero.full{min-height:250px}
 .hero.full.hastop{padding-top:76px} /* lloc per a la capçalera sobreposada d'una fila (decisions 155-157) */
 .hero.full .topbar{padding:8px 14px}
 .hero.full .tlogo{height:40px}
 .hero.full .topbar .logo{margin-right:0} /* compte, idiomes i cistella arran de la dreta */

 /* capçalera compacta: logo + cistella + idiomes; menú amb scroll lateral */
 .redirbar{display:none}
 .topbar{flex-wrap:wrap;gap:8px 14px;padding:10px 14px}
 .topbar .logo{order:1}.tlogo{height:42px}.tlogo.barra,.t-poblet .topbar .tlogo.barra{height:40px} /* decisió 208: la fila dels icones, sense créixer */
 .cartlink{order:2;margin-left:auto;font-size:24px}
 .surtlink{order:2}
 .langs{order:3}
 .cartlink.cist{order:4;margin-left:0} /* la cistella a la dreta del tot (decisió 154) */
 .topbar nav{order:5;flex-basis:100%;margin:0;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
 .topbar nav::-webkit-scrollbar{display:none}
 .topbar nav a{white-space:nowrap}

 /* comprar amb una mà: formularis d'una columna i CTA a tota l'amplada */
 .inp,select.inp{font-size:16px;padding:12px 13px}
 .frow{flex-direction:column;gap:0}
 .btn.pri:not(.sm){width:100%;justify-content:center;padding:13px 18px;font-size:15px}
 .check{align-items:flex-start}

 /* calendari i franges que caben a la pantalla */
 .cal{gap:3px}
 .day{min-height:46px;padding:4px 5px;font-size:12px;border-radius:8px}
 .day.closed::after{font-size:8.5px;bottom:3px;left:5px}
 .day .cap{bottom:3px;left:5px;right:5px}
 .slots{grid-template-columns:1fr 1fr}

 /* contingut que mai desborda */
 .tbl{display:block;overflow-x:auto;white-space:nowrap}
 .ticket{flex-wrap:wrap}
 .factura .fh{flex-direction:column;gap:6px}
 .kpi b{font-size:20px}

 /* modals com a full inferior, més naturals al polze */
 .modalbg{padding:0;align-items:flex-end}
 .modal{max-width:100%;border-radius:18px 18px 0 0;max-height:92vh;padding:20px 18px}

 /* peu més compacte */
 .pfaddr{padding:26px 16px 4px}
 .pfaddr img{max-width:200px}
 .pfwrap{padding:20px 16px 16px}
}

/* panells (admin i client) en pantalles petites: barra lateral a dalt */
@media(max-width:900px){
 body.shell{grid-template-columns:minmax(0,1fr)}
 .side{position:static;height:auto;padding:12px 14px}
 .side nav{flex-direction:row;overflow-x:auto;gap:6px;scrollbar-width:none}
 .side nav::-webkit-scrollbar{display:none}
 .side nav a{white-space:nowrap;font-size:13px;padding:8px 11px}
 .slogo{padding:2px 4px 10px;font-size:16px}
 .side .who{display:none}
 .sfoot{flex-direction:row;flex-wrap:wrap;margin-top:8px;padding-top:8px}
 .main{padding:16px 14px}
 .phead{flex-wrap:wrap;gap:10px}
 .g2.fam,.cards[style*="grid-template-columns"]{grid-template-columns:1fr!important} /* cap graella fixa al mòbil */
 .langbar{flex-wrap:wrap}
}

/* simulador de mòbil de l'app: que capiga en pantalles estretes */
@media(max-width:420px){.phone{width:100%;border-radius:32px;padding:10px}}

/* percentatge d'ocupació prevista al calendari del panell (decisió 37) */
.day .pct{position:absolute;top:4px;right:6px;font-size:9.5px;font-weight:700;color:var(--mut)}
.day .pct.mid{color:var(--warn)}.day .pct.high{color:var(--bad)}

/* llista de tancaments del panell: graella alineada (etiqueta · recurrència · motiu · treu) */
.regla{margin-bottom:11px}
.regla .rlab{font-size:12.5px;font-weight:600;margin-bottom:4px}
.regla .rctl{display:flex;gap:6px;align-items:center}
.regla select.inp{flex:0 0 104px;padding:5px 7px;font-size:12px}
.regla input.inp{flex:1;padding:5px 7px;font-size:12px}
.regla .btn{flex:0 0 auto;justify-content:center}

/* píndoles de mode del calendari (Aforaments / Dies tancats) */
.pill{border:1px solid var(--line);background:var(--card);border-radius:99px;padding:7px 15px;
 font:600 12.5px/1 inherit;cursor:pointer;color:var(--mut);transition:.13s}
.pill:hover{border-color:var(--brand);color:var(--brand)}
.pill.on{background:var(--brand);border-color:var(--brand);color:#fff}


/* ── bloc «Desa les entrades al mòbil» (decisió 68) ── */
.dlbox{margin:14px 0 18px;padding:16px 18px;border-radius:14px;border:1px solid color-mix(in srgb,var(--brand) 28%,#fff);
 background:linear-gradient(135deg,color-mix(in srgb,var(--brand) 9%,#fff),#fff 60%);box-shadow:0 6px 22px -14px color-mix(in srgb,var(--brand) 60%,#000)}
.dlhead{display:flex;gap:12px;align-items:center;margin-bottom:12px}
.dlhead b{font-size:16px}
.dlico{font-size:30px;line-height:1;flex:none}
.dlbtns{display:flex;flex-wrap:wrap;gap:9px}
.dlbtns .btn{font-weight:700}
.btn.wallet{background:#1f1f1f;border-color:#1f1f1f;color:#fff;border-radius:99px;padding-left:14px}
.btn.wallet:hover{background:#000;color:#fff}
.t-poblet .dlbox{border-radius:8px;border-color:#e2c9a6;background:linear-gradient(135deg,#fdf6ea,#fff 60%)}
@media(max-width:640px){
 .dlbox{padding:14px}
 .dlbtns{flex-direction:column}
 .dlbtns .btn{width:100%;justify-content:center;min-height:50px;font-size:15.5px}
}

/* resum de la cistella dins les caixes de compra (decisió 205) */
.cresum{margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}
.card>.cresum:first-child{margin-top:0;padding-top:0;border-top:0}
.cresum h3{font-size:16px;margin:0 0 4px}
.cline{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:7px 0;border-bottom:1px dashed var(--line);font-size:13.5px}
.cline .cth{width:36px;height:36px;flex:none;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:20px;overflow:hidden;
 background:linear-gradient(135deg,color-mix(in srgb,var(--brand) 14%,#fff),color-mix(in srgb,var(--brand) 4%,#fff))}
.cline .cth img{width:100%;height:100%;object-fit:cover}
.cline .nm{flex:1;line-height:1.35}.cline .nm small{color:var(--mut);display:block;font-size:12px}
.cline b.lt{white-space:nowrap}
.ctot{display:flex;justify-content:space-between;margin:14px 0 10px;font-size:17px}
