/* Event-Forger styles. Brand: deep teal, valley gold, cream. */
:root{
  --teal:#1F4E5F; --teal-dark:#163A47; --gold:#E0A43A; --gold-soft:#F6E3BC;
  --sage:#7A9E7E; --cream:#FAF7F2; --ink:#23313A; --muted:#5B6B74; --line:#E3DDD3;
  --white:#fff; --danger:#B4473B; --ok:#2F7D4F;
  --radius:14px; --shadow:0 6px 24px rgba(31,78,95,.08);
  --font-head:"Fraunces",Georgia,"Times New Roman",serif;
  --font-body:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:var(--font-body);color:var(--ink);background:var(--cream);line-height:1.6;font-size:17px}
img{max-width:100%}
a{color:var(--teal)}
h1,h2,h3,h4{font-family:var(--font-head);line-height:1.2;color:var(--teal-dark);margin:0 0 .5em}
h1{font-size:clamp(2.1rem,5vw,3.4rem)}
h2{font-size:clamp(1.6rem,3.5vw,2.3rem)}
h3{font-size:1.25rem}
.container{width:min(1120px,92%);margin:0 auto}
.narrow{width:min(780px,92%)}
.skip-link{position:absolute;left:-999px;top:0;background:var(--teal);color:#fff;padding:.5rem 1rem;z-index:100}
.skip-link:focus{left:0}
.small{font-size:.9rem;color:var(--muted)}
.center{text-align:center}

/* Header */
.site-header{position:sticky;top:0;z-index:50;background:rgba(250,247,242,.95);backdrop-filter:blur(6px);border-bottom:1px solid var(--line)}
.nav-wrap{display:flex;align-items:center;justify-content:space-between;padding:.7rem 0}
.brand{display:flex;align-items:center;gap:.55rem;text-decoration:none;font-family:var(--font-head);font-weight:700;font-size:1.35rem;color:var(--teal-dark)}
.brand-light{color:#fff}
.site-nav{display:flex;gap:1.1rem;align-items:center}
.site-nav a{text-decoration:none;color:var(--ink);font-weight:500;font-size:.95rem}
.site-nav a:hover{color:var(--teal)}
.nav-toggle{display:none;background:none;border:1px solid var(--line);border-radius:8px;padding:.4rem .8rem;font:inherit;color:var(--teal-dark)}

/* Buttons */
.btn{display:inline-block;background:var(--teal);color:#fff !important;border:2px solid var(--teal);border-radius:999px;padding:.7rem 1.3rem;font:600 1rem var(--font-body);text-decoration:none;cursor:pointer;transition:background .2s,transform .1s}
.btn:hover{background:var(--teal-dark)}
.btn:active{transform:translateY(1px)}
.btn:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
.btn-small{padding:.45rem 1rem;font-size:.9rem}
.btn-ghost{background:transparent;color:var(--teal) !important}
.btn-ghost:hover{background:var(--gold-soft)}
.btn-danger{background:transparent;border-color:var(--danger);color:var(--danger) !important}
.btn-danger:hover{background:#f7e3e0}
.btn-row{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:.5rem}
.file-btn input{display:none}

/* Hero */
.hero{padding:4.5rem 0 3.5rem;background:radial-gradient(1000px 400px at 85% 10%,var(--gold-soft),transparent 60%),var(--cream)}
.hero-grid{display:grid;grid-template-columns:1.25fr 1fr;gap:3rem;align-items:center}
.eyebrow{text-transform:uppercase;letter-spacing:.12em;font-size:.8rem;font-weight:700;color:var(--sage);margin:0 0 .6rem}
.accent{color:var(--gold)}
.lead{font-size:1.15rem;color:var(--muted);max-width:36em}
.hero-ctas{display:flex;gap:.8rem;flex-wrap:wrap;margin:1.5rem 0}
.trust-row{list-style:none;padding:0;margin:0;display:flex;gap:1.2rem;flex-wrap:wrap;font-size:.92rem;color:var(--teal-dark);font-weight:500}
.trust-row li::before{content:"✓ ";color:var(--sage);font-weight:700}
.hero-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:1.5rem;border:1px solid var(--line)}
.mini-card{display:flex;flex-direction:column;background:var(--teal);color:#fff;border-radius:10px;padding:1rem;margin-bottom:1rem}
.mini-card span{opacity:.85;font-size:.9rem}
.mini-list div{display:flex;align-items:center;gap:.6rem;padding:.55rem 0;border-bottom:1px dashed var(--line)}
.mini-list em{margin-left:auto;color:var(--muted);font-style:normal;font-size:.9rem}
.dot{width:10px;height:10px;border-radius:50%;background:var(--gold)}
.mini-note{font-size:.8rem;color:var(--muted);margin:.8rem 0 0}

/* Sections */
.section{padding:4rem 0}
.section-alt{background:#fff;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.section-intro{color:var(--muted);max-width:44em;margin-bottom:2rem}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1.2rem}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:1.5rem;box-shadow:var(--shadow);display:flex;flex-direction:column}
.cards-5{grid-template-columns:repeat(auto-fit,minmax(195px,1fr))}
.section-alt .card{background:var(--cream)}
.card p{flex:1;color:var(--muted)}
.card a{font-weight:600;text-decoration:none}
.card-icon{font-size:1.7rem;margin-bottom:.4rem}
.steps{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(4,1fr);gap:1.2rem}
.steps li{background:var(--cream);border-radius:var(--radius);padding:1.4rem;border:1px solid var(--line)}
.steps p{color:var(--muted);margin:0}
.step-num{display:inline-grid;place-items:center;width:38px;height:38px;border-radius:50%;background:var(--gold);color:var(--teal-dark);font-weight:700;margin-bottom:.6rem}

/* Forms */
.form{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:1.6rem;box-shadow:var(--shadow)}
.form label{display:block;font-weight:500;font-size:.95rem;margin-bottom:1rem}
.form label small{font-weight:400;color:var(--muted)}
input,select,textarea{width:100%;margin-top:.3rem;padding:.65rem .75rem;border:1px solid #CFC7BA;border-radius:9px;font:inherit;font-size:1rem;background:#fff;color:var(--ink)}
input[type=checkbox]{width:auto;margin:0 .4rem 0 0;accent-color:var(--teal)}
/* t1002: site-wide clearly visible checkboxes and radios (TEST). Custom-drawn (appearance:none) so the 2px dark border shows in every
   browser incl. Safari on iMac/iPhone. Placed right after the base input rules so the later, more specific per-page rules
   (Plan, Reservations, consent, #needs-form, .cat-sub, .res-pick/.res-done) and the vendor-manager .toggle switches keep their own look. */
input[type=checkbox],input[type=radio]{-webkit-appearance:none;appearance:none;box-sizing:border-box;width:20px;height:20px;min-width:20px;min-height:0;flex:none;margin:0 .45rem 0 0;padding:0;vertical-align:-4px;border:2px solid var(--teal-dark);border-radius:4px;background:#fff;cursor:pointer;display:inline-block;-webkit-print-color-adjust:exact;print-color-adjust:exact}
input[type=radio]{border-radius:50%}
input[type=checkbox]:checked{border-color:var(--teal-dark);background:var(--teal) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/14px no-repeat}
input[type=radio]:checked{border-color:var(--teal-dark);background:radial-gradient(circle,#fff 0 3.5px,var(--teal) 4.2px)}
input[type=checkbox]:hover,input[type=radio]:hover{box-shadow:0 0 0 3px rgba(22,58,71,.15)}
input[type=checkbox]:focus-visible,input[type=radio]:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
input[type=checkbox]:disabled,input[type=radio]:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}
/* vendor manager (body.admin): its generic ".admin input" rule would give these checkboxes a faint 1.5px border and padding */
.admin .chk input[type=checkbox],.admin .pr-check input[type=checkbox]{border:2px solid var(--teal-dark);border-radius:4px;padding:0;min-height:0}
@media (forced-colors:active){input[type=checkbox],input[type=radio]{-webkit-appearance:auto;appearance:auto;border:0;background:none}}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:0 1rem}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:0 1rem}
fieldset{border:1px solid var(--line);border-radius:10px;padding:.8rem 1rem;margin:0 0 1rem}
legend{font-weight:600;padding:0 .3rem;font-size:.95rem}
.checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.2rem .8rem}
.checks label{display:flex;align-items:center;font-weight:400;margin:0;padding:.25rem 0}
.consent{display:flex !important;align-items:flex-start;gap:.3rem;font-weight:400 !important;font-size:.9rem !important;color:var(--muted)}
.consent input{margin-top:.3rem}
.hp{position:absolute;left:-5000px}
.form-status{margin:.8rem 0 0;font-weight:600}
.form-status.ok{color:var(--ok)}
.form-status.err{color:var(--danger)}
.form-status.demo{color:#8a5a00}

/* Tools */
.tool{background:var(--cream);border:1px solid var(--line);border-radius:var(--radius);padding:1.8rem;margin-bottom:2rem}
.tool .form{box-shadow:none}
.subhead{margin-top:2rem}
.notice{background:var(--gold-soft);border-left:4px solid var(--gold);padding:.8rem 1rem;border-radius:8px;font-size:.92rem}
.output{margin-top:1.2rem;background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:1.4rem}
.output:empty{display:none}
.output h4{margin-top:0}
.tl-phase{margin-bottom:1rem;page-break-inside:avoid}
.tl-phase h5{font:700 .95rem var(--font-body);color:var(--teal);margin:0 0 .3rem;display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;border-bottom:2px solid var(--gold-soft);padding-bottom:.2rem}
.tl-phase h5 span{color:var(--muted);font-weight:500}
.tl-phase ul{list-style:none;padding:0;margin:0}
.tl-phase li{padding:.2rem 0}
.tl-phase li label{display:flex;gap:.4rem;align-items:flex-start;font-weight:400;margin:0}
.tl-phase li input{margin-top:.35rem}
.tl-phase.overdue h5{color:var(--danger)}
.flag{padding:.7rem 1rem;border-radius:8px;margin:.5rem 0;font-size:.95rem}
.flag-red{background:#f7e3e0;border-left:4px solid var(--danger)}
.flag-amber{background:var(--gold-soft);border-left:4px solid var(--gold)}
.flag-green{background:#e3f1e7;border-left:4px solid var(--ok)}
.flag.cl-catchup{font-size:1.2em;line-height:1.45;font-weight:700} /* t1303 (BACK-BURNER t1132/t1133): timeline catch-up banner, red and ~1.2x normal text; t1361: bold, to match live */
.table-wrap{overflow-x:auto;position:relative}
table{width:100%;border-collapse:collapse;font-size:.95rem}
th,td{padding:.5rem .6rem;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
thead th{background:var(--teal);color:#fff;font-weight:600}
.quote-table input,.quote-table select{margin:0;min-width:110px}
.best{background:#e3f1e7;font-weight:700}
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:.8rem;margin-bottom:1rem}
.stat{background:var(--cream);border-radius:10px;padding:.8rem;text-align:center;border:1px solid var(--line)}
.stat b{display:block;font-size:1.6rem;font-family:var(--font-head);color:var(--teal-dark)}
.stat span{font-size:.85rem;color:var(--muted)}
.del{background:none;border:none;color:var(--danger);cursor:pointer;font-size:1rem}

/* Pricing */
.price-card ul{padding-left:1.1rem;color:var(--muted);flex:1}
.price{font-family:var(--font-head);font-size:2.2rem;color:var(--teal-dark);margin:.2rem 0 .6rem}
.price small{font-size:.9rem;font-family:var(--font-body);color:var(--muted)}
.price-card.featured,.price-card.price-card-outline{border:2px solid var(--gold)} /* t1209 (t1193): vendor card outline matches the featured card */
.check-list{list-style:none;padding:0;margin:0 0 1.5rem}
.check-list li{padding:.25rem 0}
.check-list li::before{content:"✓ ";color:var(--sage);font-weight:700}

/* FAQ */
details{background:var(--cream);border:1px solid var(--line);border-radius:10px;padding:.9rem 1.1rem;margin-bottom:.7rem}
summary{cursor:pointer;font-weight:600;color:var(--teal-dark)}
details p{margin:.6rem 0 0;color:var(--muted)}
.contact-line{line-height:2}
.placeholder-tag{background:#fff3cd;color:#7a5800;border:1px dashed #d9a400;border-radius:6px;padding:0 .4rem;font-size:.85rem}

/* Footer */
.site-footer{background:var(--teal-dark);color:#dfe8ea;padding:3rem 0 1.5rem}
.site-footer h4{color:#fff;font-family:var(--font-body);font-size:1rem}
.site-footer .small{color:#b9c9cd}
.footer-grid{display:grid;grid-template-columns:1fr 1.2fr 1.2fr;gap:2rem}
.copyright{border-top:1px solid rgba(255,255,255,.15);padding-top:1rem;margin-top:2rem}

/* Responsive */
@media (max-width:900px){
  .hero-grid{grid-template-columns:1fr}
  .steps{grid-template-columns:1fr 1fr}
  .grid-3{grid-template-columns:1fr 1fr}
  .footer-grid{grid-template-columns:1fr}
  .nav-toggle{display:block}
  .site-nav{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;align-items:flex-start;background:var(--cream);padding:1rem 4%;border-bottom:1px solid var(--line)}
  .site-nav.open{display:flex}
}
@media (max-width:600px){
  body{font-size:16px}
  .grid-2,.grid-3,.steps{grid-template-columns:1fr}
  .section{padding:3rem 0}
  .tool,.form{padding:1.1rem}
  .hero{padding:2.5rem 0}
  th,td{padding:.4rem .3rem;font-size:.85rem}
  .quote-table input,.quote-table select{min-width:0;padding:.45rem .35rem;font-size:.85rem}
  .quote-table th[scope=row]{width:28%}
}

/* Print: only the checklist */
@media print{
  body.print-checklist > *:not(main){display:none}
  body.print-checklist main > *:not(#tools){display:none}
  body.print-checklist #tools > .container > *:not(#checklist){display:none}
  body.print-checklist #checklist-form,body.print-checklist .no-print{display:none}
  body.print-checklist .tool,body.print-checklist .output{border:none;padding:0;background:#fff}
}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

.fee-table{margin:0 0 1.5rem;background:#fff;border:1px solid var(--line);border-radius:var(--radius)}
.fee-table caption{text-align:left;padding:.7rem .8rem;caption-side:top}
.fee-table td:last-child{font-weight:700;color:var(--teal-dark);white-space:nowrap}

/* Privacy policy page */
.policy h2{font-size:1.35rem;margin-top:2rem}
.policy ul{padding-left:1.2rem}
.policy li{margin-bottom:.4rem}
.site-nav-static{display:flex !important;position:static !important;background:none !important;padding:0 !important;border:0 !important}
.site-footer a{color:#fff}

/* Instant vendor matches */
.match-results h3{margin-top:0}
.match-note{font-weight:600;color:var(--teal-dark)}
.match-group h4{margin:1rem 0 .4rem}
.match-list{list-style:none;padding:0;margin:0;display:grid;gap:.6rem}
.match-list li{border:1px solid var(--line);border-radius:var(--radius);padding:.7rem .85rem;overflow-wrap:anywhere}
.match-city{color:#5b6670;font-size:.92rem}
.match-price{font-size:.92rem}

/* Larger header brand */
.site-header .brand,header .brand:not(.brand-light){font-size:2.1rem;gap:.4rem}
header .brand:not(.brand-light) img{width:56px;height:56px}
@media (max-width:640px){header .brand:not(.brand-light){font-size:1.55rem}header .brand:not(.brand-light) img{width:40px;height:40px}}

/* ============================================================
   Multi-page redesign (Oct 2026). Appended so vendors-admin, which
   also loads this file, keeps its existing look.
   ============================================================ */
:root{--shadow-lg:0 18px 50px rgba(22,58,71,.16)}
body{-webkit-text-size-adjust:100%}
.btn-lg{padding:.9rem 1.6rem;font-size:1.05rem}
.btn-gold{background:var(--gold);border-color:var(--gold);color:var(--teal-dark) !important}
.btn-gold:hover{background:#d0922a;border-color:#d0922a}
.btn-light{background:rgba(255,255,255,.12);border-color:#fff;color:#fff !important}
.btn-light:hover{background:rgba(255,255,255,.25)}
.center-row{justify-content:center}

/* Header: larger logo + name, sticky, shadow on scroll */
.site-header{transition:box-shadow .2s}
.site-header.scrolled{box-shadow:0 4px 18px rgba(22,58,71,.10)}
.nav-wrap{padding:.6rem 0;gap:1rem}
.brand{font-size:1.6rem;gap:.7rem}
.brand img{flex:none}
.site-nav{gap:.25rem}
.site-nav a{padding:.5rem .65rem;border-radius:8px}
.site-nav a:not(.btn):hover{background:var(--gold-soft);color:var(--teal-dark)}
.site-nav a[aria-current="page"]{color:var(--teal-dark);font-weight:700;box-shadow:inset 0 -3px 0 var(--gold)}
.site-nav .btn{margin-left:.5rem;padding:.55rem 1.1rem}
.nav-toggle{align-items:center;gap:.5rem;min-height:44px;padding:.45rem .85rem;cursor:pointer;font-weight:600}
.bars,.bars::before,.bars::after{display:block;width:20px;height:2px;background:var(--teal-dark);border-radius:2px;position:relative;transition:transform .2s}
.bars::before,.bars::after{content:"";position:absolute;left:0}
.bars::before{top:-6px}.bars::after{top:6px}
.nav-toggle[aria-expanded="true"]{background:var(--gold-soft)}
@media (max-width:1100px){
  .nav-toggle{display:flex}
  .site-nav{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;align-items:stretch;gap:.1rem;background:var(--cream);padding:.75rem 4% 1.25rem;border-bottom:1px solid var(--line);box-shadow:0 12px 24px rgba(22,58,71,.12);max-height:calc(100vh - 80px);overflow-y:auto}
  .site-nav.open{display:flex}
  .site-nav a{font-size:1.1rem;padding:.8rem .75rem}
  .site-nav a[aria-current="page"]{box-shadow:inset 4px 0 0 var(--gold);background:#fff}
  .site-nav .btn{margin:.5rem 0 0;text-align:center}
}
@media (max-width:640px){.brand{font-size:1.4rem}.nav-toggle-text{display:none}}

/* Home hero with photo */
.home-hero{position:relative;min-height:min(78vh,640px);display:flex;align-items:center;color:#fff;overflow:hidden;background:var(--teal-dark)}
.home-hero-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.home-hero-overlay{position:absolute;inset:0;background:linear-gradient(100deg,rgba(22,58,71,.82) 0%,rgba(22,58,71,.5) 45%,rgba(22,58,71,.1) 100%)}
.home-hero-content{position:relative;padding:4.5rem 0;max-width:1120px}
.home-hero h1{color:#fff;max-width:14em;text-shadow:0 2px 18px rgba(0,0,0,.25)}
.home-hero .lead{color:#eef3f4;max-width:34em}
.home-hero .eyebrow{color:var(--gold-soft)}
.home-hero .trust-row{color:#fff}
.home-hero .trust-row li::before{color:var(--gold)}

/* Inner-page banner */
.page-hero{position:relative;color:#fff;padding:4.5rem 0 3.5rem;background:linear-gradient(100deg,rgba(22,58,71,.78),rgba(22,58,71,.32)),var(--hero-img) center/cover no-repeat,var(--teal-dark)}
.page-hero h1{color:#fff;font-size:clamp(2rem,4.5vw,3rem)}
.page-hero .lead{color:#eef3f4;max-width:38em;margin:0}
.page-hero .eyebrow{color:var(--gold-soft)}

/* Photo service cards */
.photo-cards{display:grid;grid-template-columns:repeat(6,1fr);gap:1.4rem}
.photo-card{padding:0;overflow:hidden;grid-column:span 2;transition:transform .2s,box-shadow .2s}
.photo-card:nth-child(4),.photo-card:nth-child(5){grid-column:span 3}
.photo-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg)}
.photo-card-img{display:block;aspect-ratio:3/2;overflow:hidden;background:var(--gold-soft)}
.photo-card-img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .4s}
.photo-card:hover .photo-card-img img{transform:scale(1.04)}
.photo-card-body{position:relative;padding:2.2rem 1.4rem 1.4rem;display:flex;flex-direction:column;flex:1}
.card-badge{position:absolute;top:-28px;left:1.2rem;border-radius:16px;box-shadow:0 6px 16px rgba(22,58,71,.18);background:#fff}
.card-link{margin-top:.5rem}
@media (max-width:900px){.photo-cards{grid-template-columns:1fr 1fr}.photo-card,.photo-card:nth-child(4),.photo-card:nth-child(5){grid-column:auto}.photo-card:nth-child(5){grid-column:1/-1}}
@media (max-width:600px){.photo-cards{grid-template-columns:1fr}.photo-card:nth-child(5){grid-column:auto}}

/* Steps */
.steps-3{grid-template-columns:repeat(3,1fr)}
.steps-3 li{text-align:center;background:var(--cream);padding:2rem 1.5rem}
.steps-3 li img{display:block;margin:0 auto .8rem}
.steps-3 .step-num{width:32px;height:32px;font-size:.9rem}
@media (max-width:900px){.steps-3{grid-template-columns:1fr}}

/* CTA band */
.cta-inner{display:grid;grid-template-columns:1fr 1.3fr;gap:3rem;align-items:center;background:#fff;border:1px solid var(--line);border-radius:22px;overflow:hidden;box-shadow:var(--shadow)}
.cta-inner img{width:100%;height:100%;max-height:420px;object-fit:cover;display:block}
.cta-inner > div{padding:2rem 2rem 2rem 0}
@media (max-width:760px){.cta-inner{grid-template-columns:1fr;gap:0}.cta-inner img{max-height:240px}.cta-inner > div{padding:1.6rem}}

/* Tools on their own pages */
.tool-head{display:flex;gap:1rem;align-items:center;margin-bottom:1rem}
.tool-head h2{margin:0}
.tool-head .small{margin:.2rem 0 0}
.tool-head img{flex:none}
h3.subhead{margin-top:2.5rem;font-size:1.4rem}

/* Category guide */
.cat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.1rem}
.cat-card{display:flex;gap:1rem;align-items:flex-start;background:var(--cream);border:1px solid var(--line);border-radius:var(--radius);padding:1.2rem}
.cat-card img{flex:none}
.cat-card h3{margin:0 0 .25rem;font-size:1.12rem}
.cat-card p{margin:0;color:var(--muted);font-size:.97rem}

/* Day-of checklist */
.dayof-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1.2rem}
.dayof-col{background:var(--cream);border:1px solid var(--line);border-radius:var(--radius);padding:1.3rem}
.dayof-col h3{border-bottom:3px solid var(--gold);padding-bottom:.4rem;display:inline-block}
.dayof-list{list-style:none;padding:0;margin:0}
.dayof-list li{padding:.35rem 0}
.dayof-list label{display:flex;gap:.6rem;align-items:flex-start;font-weight:400;cursor:pointer}
.dayof-list input{width:22px;height:22px;flex:none;margin-top:.15rem;accent-color:var(--teal)}
/* t1699 (Brian Oct 29 2026): no strikethrough or fading on ticked day-of items (hard to read with poor eyesight); full-contrast text on a
   light green tint with a bold green "Done" marker. Day-of checklist only (.dayof-list is used only on rescue.html). */
.dayof-list input:checked + span{text-decoration:none;color:var(--ink);opacity:1;background:#EAF4EE;border-left:4px solid var(--ok);border-radius:6px;padding:.1rem .45rem;margin-left:-.1rem}
.dayof-list input:checked + span::after{content:"\00a0\2713\00a0Done";color:var(--ok);font-weight:700;white-space:nowrap}
@media print{.dayof-list input:checked + span{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* Next step band */
.next-step{background:linear-gradient(90deg,var(--gold-soft),#fbefd6);border-top:1px solid var(--line);padding:2.4rem 0}
.next-inner{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;flex-wrap:wrap}
.next-step .eyebrow{color:var(--teal);margin-bottom:.2rem}
.next-blurb{margin:0;font-size:1.15rem;color:var(--teal-dark);font-weight:500;max-width:36em}
@media (max-width:600px){.next-inner .btn{width:100%;text-align:center}}

/* Footer */
.footer-grid{grid-template-columns:1.1fr .9fr .9fr 1.5fr}
.footer-links{list-style:none;padding:0;margin:0}
.footer-links li{margin:.35rem 0}
.footer-links a{text-decoration:none;color:#dfe8ea}
.footer-links a:hover{color:#fff;text-decoration:underline}
@media (max-width:900px){.footer-grid{grid-template-columns:1fr 1fr}}
@media (max-width:560px){.footer-grid{grid-template-columns:1fr}}

/* Comfortable tap targets on iPad / phones */
input,select,textarea{font-size:16px}
@media (pointer:coarse){.checks label{min-height:40px;align-items:center}}

@media print{
  .site-header,.site-footer,.next-step,.page-hero,.no-print{display:none !important}
  body.print-checklist main > *:not(:has(#checklist)){display:none}
  body.print-checklist #checklist .tool-head{display:none}
}
@media (prefers-reduced-motion:reduce){*{transition:none !important;scroll-behavior:auto !important}}
.section-intro.center{margin-left:auto;margin-right:auto}
.photo-card:nth-child(4) .photo-card-img,.photo-card:nth-child(5) .photo-card-img{aspect-ratio:21/9}
@media (max-width:900px){.photo-card:nth-child(4) .photo-card-img{aspect-ratio:3/2}}
@media (max-width:700px){.home-hero-overlay{background:linear-gradient(180deg,rgba(22,58,71,.72),rgba(22,58,71,.58))}.page-hero{background:linear-gradient(180deg,rgba(22,58,71,.72),rgba(22,58,71,.58)),var(--hero-img) center/cover no-repeat,var(--teal-dark)}}

/* Header brand: large but fully clears Home with visible gap */
.site-header .nav-wrap{justify-content:flex-start;align-items:center;gap:1.25rem;flex-wrap:nowrap}
.site-header .brand{font-size:2.1rem !important;gap:.4rem;margin-left:-0.75rem;margin-right:1.25rem;letter-spacing:-0.04em;flex:0 0 auto;max-width:none;white-space:nowrap}
.site-header .brand img{width:56px;height:56px}
.site-header .site-nav{flex:1 1 auto;justify-content:flex-end;min-width:0;margin-left:0}
.site-header .site-nav a{padding:.4rem .45rem;font-size:.9rem}
@media (max-width:1100px){.site-header .brand{font-size:1.85rem !important}.site-header .brand img{width:50px;height:50px}.site-header .site-nav a{padding:.35rem .4rem;font-size:.85rem}}
@media (max-width:640px){.site-header .brand{font-size:1.55rem !important;margin-left:-0.25rem;margin-right:.5rem}.site-header .brand img{width:40px;height:40px}}

/* Logo 3.5x figure/text update (Oct 15 2026): show logo larger */
header .brand:not(.brand-light) img,.site-header .brand img{width:140px;height:140px}
.site-header .nav-wrap{min-height:150px}
.brand-light img{width:96px;height:96px}
@media (max-width:1100px){.site-header .brand img{width:120px;height:120px}.site-header .nav-wrap{min-height:130px}}
@media (max-width:640px){header .brand:not(.brand-light) img,.site-header .brand img{width:80px;height:80px}.site-header .nav-wrap{min-height:88px}.brand-light img{width:72px;height:72px}}

/* full plan summary print view */
#ef-print{display:none}
#ef-print.open{display:block;position:fixed;inset:0;z-index:9999;background:#fff;overflow:auto;padding:1rem 4%}
.ef-print-bar{position:sticky;top:0;background:#fff;padding:.5rem 0;display:flex;gap:.5rem;border-bottom:1px solid var(--line);margin-bottom:1rem}
#ef-print pre{white-space:pre-wrap;font:1rem/1.45 Georgia,serif}
@media print{body.print-summary > *:not(#ef-print){display:none !important}body.print-summary #ef-print{display:block;position:static;padding:0}#ef-print .no-print{display:none !important}#ef-print pre{white-space:pre-wrap;font:11pt/1.4 Georgia,serif;margin:0}}
.ef-planbar .btn-row{flex-wrap:wrap;gap:.4rem}


/* Main menu text 1.5x (Brian, Oct 19 2026): .9rem -> 1.35rem on the desktop bar, .85rem -> 1.275rem in the Menu dropdown.
   Links never break inside ("Plan your event" stays on one line); slightly tighter padding keeps one row at 1240px+;
   if a desktop window is narrower, the menu wraps to a second row under the logo instead of squeezing. */
.site-header .nav-wrap{gap:.75rem;flex-wrap:wrap}
.site-header .site-nav{min-width:max-content}
.site-header .site-nav a{font-size:1.35rem;white-space:nowrap;padding:.4rem .3rem}
@media (max-width:1100px){.site-header .site-nav{min-width:0}.site-header .site-nav a{font-size:1.275rem;padding:.35rem .4rem}}

/* Header (Brian, Oct 19 2026): logo flush left, compact single row at desktop, boxed menu items, full-width rule under the header.
   Title "Event-Forger" on one line: 50.4px (>1100px) / 44.4px (641-1100px); phones 37.2px on two lines ("Event-" / "Forger").
   Logo 180px above 640px (was 210px; keeps the header ~195px, target ~180-200px) / 120px on phones. */
header.site-header{border-bottom:3px solid var(--teal-dark)}
header.site-header .nav-wrap{width:auto;max-width:none;margin:0;padding:6px 20px 6px 8px;min-height:0;gap:1rem;flex-wrap:nowrap;justify-content:flex-start}
header.site-header .brand:not(.brand-light){font-size:3.15rem !important;flex:0 0 auto;min-width:0;margin:0;gap:.5rem}
header.site-header .brand:not(.brand-light) span{white-space:nowrap;line-height:1.02}
header.site-header .brand:not(.brand-light) img{width:180px;height:180px;flex:none}
header.site-header .site-nav{margin-left:auto;gap:.4rem;min-width:0;flex:0 1 auto}
header.site-header .site-nav a{border:2px solid var(--teal-dark);border-radius:10px;padding:.3rem .6rem;line-height:1.2;color:var(--teal-dark);box-shadow:none}
header.site-header .site-nav a:hover,header.site-header .site-nav a:focus-visible{background:var(--gold-soft);color:var(--teal-dark)}
header.site-header .site-nav a[aria-current="page"]{background:var(--teal-dark);color:#fff;font-weight:700;box-shadow:inset 0 -4px 0 var(--gold)}
header.site-header .nav-toggle{margin-left:auto;border:2px solid var(--teal-dark);border-radius:10px}
/* Desktop: brand + 1.5x boxed menu need ~1410px on one row, so the menu sits directly under the title, beside the logo
   (logo | "Event-Forger" / menu). Header height = logo + 12px. */
@media (min-width:1101px){
  header.site-header .nav-wrap{position:relative;align-items:flex-start}
  header.site-header .brand:not(.brand-light){align-items:flex-start}
  header.site-header .brand:not(.brand-light) span{padding-top:26px}
  header.site-header .site-nav{position:absolute;left:calc(8px + 180px + .5rem);bottom:16px;margin:0;flex-wrap:nowrap}}
@media (max-width:1100px){
  header.site-header .brand:not(.brand-light){font-size:2.775rem !important}
  header.site-header .site-nav{margin-left:0;gap:.45rem;padding:.75rem 4% 1rem}
  header.site-header .site-nav a{padding:.55rem .8rem}
  header.site-header .site-nav a[aria-current="page"]{box-shadow:inset 6px 0 0 var(--gold)}}
@media (max-width:640px){
  header.site-header .nav-wrap{padding:6px 12px 6px 6px;gap:.5rem}
  header.site-header .brand:not(.brand-light){font-size:2.325rem !important;gap:.35rem}
  header.site-header .brand:not(.brand-light) span{white-space:normal;max-width:3.9em}
  header.site-header .brand:not(.brand-light) img{width:120px;height:120px}}
/* Header fixes from the 12-viewport audit (Brian, Oct 19 2026 8:57 AM) */
/* (3) desktop menu-bar boxes are at least 44px tall (touch iPads at 1180/1366 use this bar) */
@media (min-width:1101px){header.site-header .site-nav a{min-height:44px;display:inline-flex;align-items:center}}
/* (2) the dropdown fits under the real header height and scrolls inside itself, so every item can be reached */
@media (max-width:1100px){
  header.site-header .site-nav{max-height:calc(100vh - 195px);max-height:calc(100dvh - 195px);overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;justify-content:flex-start}
  header.site-header .site-nav a{flex:none}}
@media (max-width:640px){header.site-header .site-nav{max-height:calc(100vh - 135px);max-height:calc(100dvh - 135px)}}
/* (1) short landscape phones: compact header (~110px, about 25-30% of the screen height) */
@media (max-height:500px) and (orientation:landscape) and (max-width:1100px){
  header.site-header .nav-wrap{padding:3px 16px 3px 8px}
  header.site-header .brand:not(.brand-light){font-size:2.1rem !important}
  header.site-header .brand:not(.brand-light) img{width:100px;height:100px}
  header.site-header .site-nav{max-height:calc(100vh - 110px);max-height:calc(100dvh - 110px)}}

/* Header scrolls away with the page (not sticky) - Oct 19 2026 */
header.site-header{position:relative;top:auto}

/* Homepage only (index.html nav has .nav-spread), Oct 20 2026: wider, even spacing between the boxed menu buttons under
   the "Event-Forger" title. Was gap:.4rem (6.4px); now grows with the window up to 1.5rem (24px) and never overflows. */
@media (min-width:1101px){header.site-header .site-nav.nav-spread{gap:clamp(.4rem,calc((100vw - 1050px) / 6),1.5rem)}}

/* Header logo tile (Brian, Oct 20 2026; t881 new logo): beige tile matching the new portrait logo's background; object-fit keeps it undistorted in the square box.
   Header logo only (footer .brand-light is excluded). border-box keeps the logo box the same size as before. */
header.site-header .brand:not(.brand-light) img{background:#ded6cb;padding:6px;border-radius:12px;box-sizing:border-box;object-fit:contain}
/* Plan step 3 (#vendors): darker, easier-to-see checkboxes (scoped to the needs form only) */
#needs-form .checks input[type=checkbox]{-webkit-appearance:none;appearance:none;width:20px;height:20px;flex:none;margin:0 .45rem 0 0;vertical-align:-4px;border:2px solid var(--teal-dark);border-radius:4px;background:#fff;cursor:pointer;accent-color:var(--teal-dark);display:inline-grid;place-content:center}
#needs-form .checks input[type=checkbox]:checked{background:var(--teal-dark) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/14px no-repeat}
#needs-form .checks input[type=checkbox]:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
/* vendor match cards: address + straight-line distance (Oct 2026) */
.match-addr{color:#5b6670;font-size:.92rem}
.match-dist{color:var(--teal-dark);font-size:.92rem;font-weight:600}

/* Plan step 3: officiant / day-of coordinator follow-up questions (Oct 2026) */
/* Plan "Vendors needed" (Oct 21 2026): 5 columns, left to right then down; fewer on tablets and phones */
#needs-form .checks.checks-5{grid-template-columns:repeat(5,minmax(0,1fr));gap:.35rem .9rem}
#needs-form .checks.checks-5 > label{align-items:flex-start;line-height:1.3}
#needs-form .checks.checks-5 > label input[type=checkbox]{margin-top:.1rem}
@media (max-width:1000px){#needs-form .checks.checks-5{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:600px){#needs-form .checks.checks-5{grid-template-columns:repeat(2,minmax(0,1fr))}}
.checks .cat-sub{grid-column:1/-1;margin:0 0 .5rem 1.6rem;padding:.55rem .8rem;border-left:3px solid var(--teal-dark);background:var(--cream);border-radius:0 8px 8px 0}
.checks .cat-sub[hidden],.cat-sub [hidden]{display:none!important}
.cat-sub .cat-q{border:0;padding:0;margin:0 0 .4rem}
.cat-sub .cat-q:last-child{margin-bottom:0}
.cat-sub legend{padding:0;font-size:.92rem}
.cat-sub .cat-opts{display:flex;flex-wrap:wrap;gap:0 1.1rem}
.checks .cat-sub label{padding:.15rem 0}
.cat-sub input[type=radio]{width:18px;height:18px;margin:0 .4rem 0 0;flex:none;accent-color:var(--teal-dark)}
.cat-sub input[type=radio]:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
.cat-sub .cat-tip{margin:.1rem 0 .4rem;color:var(--muted)}

.cat-card p.cat-what{color:var(--ink,inherit);margin:0 0 .35rem}

/* Make your reservations (proposed Oct 2026) */
.res-link{margin:1rem 0 0;display:flex;flex-wrap:wrap;gap:.5rem 1rem;align-items:center}
.res-top{margin:0 0 1rem}
.res-progress{margin:0 0 .35rem;font-weight:600;color:var(--teal-dark)}
.res-step-row{display:flex;align-items:center;gap:.6rem;margin:0 0 .35rem}
.res-step-row .res-progress{margin:0;flex:1 1 auto;text-align:center}
.res-arrow.btn{min-width:44px;min-height:44px;padding:0 .7rem;font-size:1.2rem;line-height:1;display:inline-flex;align-items:center;justify-content:center}
.res-arrow.btn[disabled]{opacity:.4;cursor:not-allowed}
.res-bar{height:8px;background:var(--line);border-radius:99px;overflow:hidden}
.res-bar span{display:block;height:100%;background:var(--teal-dark);border-radius:99px}
.res-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:1.2rem 1.3rem;margin:0 0 1rem}
.res-head{display:flex;gap:.8rem;align-items:center;margin:0 0 .6rem}
.res-head img{flex:none}
.res-head h2{margin:0;font-size:1.5rem}
.res-head h2:focus{outline:3px solid var(--gold);outline-offset:3px}
.res-guide p{margin:0 0 .4rem;color:var(--muted)}
.res-guide p:first-child{color:var(--ink)}
/* t809u: the category guide rides with the vendor you pick */
.res-v-guide{margin:.55rem 0 0;padding:.55rem .7rem;background:var(--cream);border-left:3px solid var(--teal-dark);border-radius:6px}
.res-v-guide p{margin:0 0 .3rem;color:var(--muted);font-size:.93rem}
.res-v-guide p:last-child{margin:0}
.res-v-guide .res-v-guide-h{color:var(--ink);font-weight:600}
.res-card h3{font-size:1.1rem;margin:1rem 0 .4rem}
.res-list{list-style:none;padding:0;margin:.4rem 0}
.res-list li{border:1px solid var(--line);border-radius:10px;padding:.7rem .9rem;margin:0 0 .5rem;overflow-wrap:anywhere}
.res-list li.is-booked{border-color:var(--teal-dark);background:var(--cream)}
.res-pick{display:flex;align-items:center;gap:.4rem;font-weight:500;margin:0 0 .25rem}
.res-pick input,.res-done input{width:20px;height:20px;flex:none;margin:0;accent-color:var(--teal-dark)}
.res-badge{display:inline-block;background:var(--teal-dark);color:#fff;border-radius:99px;padding:.1rem .6rem;font-size:.8rem;font-weight:600;margin-right:.3rem}
.res-done{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;font-weight:600;margin:1rem 0;padding:.7rem .9rem;background:var(--cream);border-radius:10px}
.res-box{border-top:1px solid var(--line);margin-top:1rem;padding-top:.4rem}
.res-box .form{margin-top:.5rem}
.res-box textarea{width:100%}
.res-sent{margin:.4rem 0}
.res-nav{display:flex;justify-content:space-between;gap:.8rem;flex-wrap:wrap}
.res-nav .btn[disabled]{opacity:.45;cursor:not-allowed}
.res-send-form button[disabled]{opacity:.6;cursor:not-allowed}
.res-contact{margin:.5rem 0 1rem}
.res-count{font-size:1.05rem}
.res-table td,.res-table th{vertical-align:top}
.res-empty h2{margin-top:0;font-size:1.3rem}
@media (max-width:600px){.res-card{padding:1rem}.res-head h2{font-size:1.25rem}.res-nav .btn{flex:1 1 auto;text-align:center}}

/* Reservations draft (Oct 20 2026): 9th main-menu item "Make your reservations". The one-row desktop bar needed ~1322px,
   so between 1101px and 1499px that label wraps to two lines inside its box ("Make your" / "reservations"), the menu text
   steps down to 1.2rem below 1280px, and the homepage spread gap starts growing later. 1500px+ and the Menu dropdown are unchanged. */
@media (min-width:1101px) and (max-width:1499px){
  header.site-header .site-nav a[href*="reservations"]{white-space:normal;text-align:center;justify-content:center;line-height:1.02;max-width:7.4em}
  header.site-header .site-nav.nav-spread{gap:clamp(.35rem,calc((100vw - 1240px) / 8),1.5rem)}}
@media (min-width:1101px) and (max-width:1279px){header.site-header .site-nav a{font-size:1.2rem;padding:.3rem .4rem}}

/* Reservations draft round 3 (Oct 20 2026): "Visit website" button + back-button note, "Show more vendors" */
.res-vendor .res-site{margin:.5rem 0 0;display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .6rem}
.res-vendor .res-site-note{color:var(--muted,#555)}
.res-more-wrap{margin:.75rem 0;display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .75rem}

/* Reservations draft batch 4 (Oct 20 2026): vendor Services / Products / Rating lines, "Next category" under the booked vendor */
.res-facts{margin:.3rem 0 .2rem;font-size:.92rem;line-height:1.45;overflow-wrap:anywhere}
.res-facts .res-fact{margin:.1rem 0}
.res-fact-k{font-weight:700;color:var(--teal-dark)}
.res-vendor .res-next-wrap{margin:.15rem 0 .5rem}
.res-vendor .res-next-cat{white-space:normal;text-align:left}
.res-facts + br{display:none} /* the phone/contact line already starts on a new line after the facts block */
/* batch 4: "Visit website" greyed out when the build-time check found the site unavailable (not a link) */
.res-vendor .btn.res-site-off,.res-vendor .btn.res-site-off:hover{color:#555 !important;border:2px dashed #aaa;background:#f1f1f1;cursor:not-allowed;box-shadow:none;transform:none}
.res-vendor .res-site-down{font-weight:600}

/* Reservations draft batch 5 (Oct 20 2026): booking + "Scheduled and confirmed" checkboxes with a dark 2px outline and a
   clearly visible check (reservations page only), and the $-$$$$ price guide (reservations page + Plan instant matches). */
.res-pick input[type=checkbox],.res-done input[type=checkbox]{-webkit-appearance:none;appearance:none;width:22px;height:22px;flex:none;margin:0;padding:0;border:2px solid #2a2a2e;border-radius:4px;background:#fff;cursor:pointer;display:inline-grid;place-content:center}
.res-pick input[type=checkbox]:hover,.res-done input[type=checkbox]:hover{box-shadow:0 0 0 3px rgba(42,42,46,.15)}
.res-pick input[type=checkbox]:checked,.res-done input[type=checkbox]:checked{background:#2a2a2e url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.2 8.4l3.1 3.1 6.5-7.2' fill='none' stroke='%23fff' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/18px 18px no-repeat}
.res-pick input[type=checkbox]:focus-visible,.res-done input[type=checkbox]:focus-visible{outline:3px solid var(--gold);outline-offset:2px;box-shadow:0 0 0 2px #fff inset}
.res-pick{cursor:pointer}
.res-vendor.is-booked .res-pick-txt{font-weight:700;color:var(--teal-dark)}
@media (forced-colors:active){.res-pick input[type=checkbox],.res-done input[type=checkbox]{-webkit-appearance:auto;appearance:auto;border:0;background:none}}
.price-legend{margin:.35rem 0 .75rem;color:var(--muted,#555);line-height:1.5}
.price-legend strong{color:var(--ink)}
.price-legend-item{white-space:nowrap;margin-right:.55rem}
.price-legend-sym{font-weight:700;color:var(--teal-dark)}
.price-legend-note{display:block;margin-top:.15rem}

/* ===== Oct 20 2026 (proposed): Plan step 2 email panel, Save my plan, welcome back; Plan-page controls; reservations Booked group ===== */
.cl-welcome p{margin:0 0 .3rem}
.cl-welcome .btn-row{margin-top:.3rem}
.cl-savebar{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem 1rem;margin:1rem 0 .5rem;padding:.8rem 1rem;border:1px solid var(--line);border-radius:10px;background:#fff}
.cl-savebar p{flex:1 1 100%;margin:0}
.cl-saved{font-weight:600;color:var(--teal-dark)}
.cl-mail{margin-top:1rem;padding:1rem 1.1rem;border:2px solid var(--teal);border-radius:12px;background:#fff}
.cl-mail h3{margin-bottom:.3rem}
.cl-mail fieldset.pe-others{border:1px solid var(--line);border-radius:10px;padding:.6rem .8rem;margin:.6rem 0}
.cl-mail fieldset.pe-others legend{font-weight:600;padding:0 .3rem}
.pe-rows{list-style:none;margin:0;padding:0}
.pe-row{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) auto;gap:.3rem .8rem;align-items:end;padding:.5rem 0;border-bottom:1px dashed var(--line)}
.pe-row label{margin:0}
.pe-row .pe-remove{margin-bottom:.15rem;min-height:44px}
.pe-err{grid-column:1/-1;margin:.15rem 0 0;color:var(--danger);font-size:.9rem;font-weight:600}
.pe-err:empty{display:none}
.cl-mail [aria-invalid="true"]{border:2px solid var(--danger)}
.pe-link-l{display:flex !important;align-items:flex-start;gap:.3rem;font-weight:400;font-size:.92rem;margin:.6rem 0}
.pe-long p{margin:0 0 .4rem}
.pe-actions .btn{min-height:44px}
.pe-status.pe-ok{color:var(--ok);font-weight:600}
.pe-status.pe-err{color:var(--danger);font-weight:600}
@media (max-width:700px){
  .pe-row{grid-template-columns:1fr}
  .pe-row .pe-remove{justify-self:start}
  .pe-actions .btn,.cl-savebar .btn{width:100%;text-align:center}
}
.cl-mail .btn,.cl-savebar .btn,.cl-welcome .btn{min-height:44px;display:inline-flex;align-items:center;justify-content:center}
/* print: older rule "main > *:not(#tools)" (from before the Plan page merge) hid step 2 too; keep the checklist section */
@media print{body.print-checklist main > section#checklist{display:block !important}}
@media print{body.print-checklist #checklist .tool > .btn,body.print-checklist .cl-mail,body.print-checklist .cl-savebar,body.print-checklist .cl-welcome{display:none !important}}

/* Plan page only (body.page-plan): every checkbox and radio darker, thicker and at least 22px (batch-5 booking style) */
body.page-plan input[type=checkbox],body.page-plan input[type=radio],
body.page-plan #needs-form .checks input[type=checkbox],body.page-plan .cat-sub input[type=radio]{
  -webkit-appearance:none;appearance:none;width:22px;height:22px;min-width:22px;flex:none;margin:.1rem .5rem 0 0;padding:0;
  border:2px solid #2a2a2e;border-radius:4px;background:#fff;cursor:pointer;display:inline-grid;place-content:center;vertical-align:-5px;box-shadow:none}
body.page-plan input[type=radio],body.page-plan .cat-sub input[type=radio]{border-radius:50%}
body.page-plan input[type=checkbox]:checked,body.page-plan #needs-form .checks input[type=checkbox]:checked{border-color:#2a2a2e;background:#2a2a2e url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/15px no-repeat}
body.page-plan input[type=radio]:checked,body.page-plan .cat-sub input[type=radio]:checked{border-color:#2a2a2e;background:radial-gradient(circle,#fff 0 4px,#2a2a2e 4.6px)}
body.page-plan input[type=checkbox]:focus-visible,body.page-plan input[type=radio]:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
body.page-plan .tl-phase li input{margin-top:.1rem}
body.page-plan .consent input{margin-top:.05rem}
@media print{body.page-plan input[type=checkbox],body.page-plan input[type=radio]{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* reservations: booked vendor(s) pinned in a "Booked" group above "Other vendors" */
.res-group{margin:.6rem 0}
.res-group-h{font:700 1rem var(--font-body);color:var(--teal-dark);margin:.2rem 0 .4rem;text-transform:none}
.res-group-booked{background:#eef6f0;border:2px solid var(--ok);border-radius:12px;padding:.6rem .8rem}
.res-group-booked .res-list{margin:0}
.res-group-others{margin-top:1rem}

/* batch 6 (draft): reservations consent checkbox gets the Plan-page treatment (22px, 2px #2a2a2e, dark fill + white mark, gold focus ring) */
body.page-res .consent input[type=checkbox]{
  -webkit-appearance:none;appearance:none;width:22px;height:22px;min-width:22px;flex:none;margin:.05rem .5rem 0 0;padding:0;
  border:2px solid #2a2a2e;border-radius:4px;background:#fff;cursor:pointer;display:inline-grid;place-content:center;vertical-align:-5px;box-shadow:none}
body.page-res .consent input[type=checkbox]:checked{border-color:#2a2a2e;background:#2a2a2e url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/15px no-repeat}
body.page-res .consent input[type=checkbox]:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
@media print{body.page-res .consent input[type=checkbox]{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
/* batch 6: per booked vendor date + confirmation; send-to picker; Next under the Booked group */
.res-booking{display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;align-items:flex-end;margin:.5rem 0 .2rem;padding-top:.45rem;border-top:1px dashed var(--line)}
.res-booking .res-date-l{margin:0;font-weight:600;font-size:.92rem}
.res-booking .res-date{display:block;min-height:40px;max-width:12rem}
.res-booking .res-conf{margin:0}
.res-booking .res-v-sent{flex-basis:100%;margin:0;color:var(--ok);font-weight:600}
.res-group-booked > .res-next-wrap{margin:.5rem 0 .1rem}
.res-send-to-l{display:block;margin:.3rem 0 .6rem;font-weight:600}
.res-send-to-l select{display:block;max-width:100%}
/* batch 6: Plan checklist status badges (Book vendor -> Request sent -> Scheduled -> Confirmed) */
.cl-status{display:inline-block;margin:.15rem 0 0 1.9rem;padding:.05rem .55rem;border-radius:999px;font-size:.78rem;font-weight:700;line-height:1.5;text-decoration:none;border:1px solid #9aa3a8;color:#3b4449;background:#f1f3f4;white-space:nowrap}
.cl-status:hover,.cl-status:focus-visible{text-decoration:underline}
.cl-status.cl-st-1{background:#fff4d6;border-color:#c99a16;color:#6b4f00}
.cl-status.cl-st-2{background:#e3f0f7;border-color:#2f6f91;color:#1d4f69}
.cl-status.cl-st-3{background:#e4f3e8;border-color:#2e7d4f;color:#1d5a36}
.ef-venue-booked{display:block;margin-top:.2rem;color:var(--ok);font-weight:600}

/* consent fix (draft, Oct 20 2026): the "I understand Event-Forger may share..." consent checkbox on Plan step 4 and on
   Reservations (both forms) is 26px with a 3px #1f1f23 border, white when unchecked, #1f1f23 fill + bold white check when
   checked, 3px gold focus ring, full opacity, centred on the first text line; the whole label is a >=44px tap target and
   the label text is full-contrast dark. Scoped to .consent so the other Plan/Reservations checkboxes keep their style. */
body.page-plan .consent,body.page-res .consent{align-items:flex-start;gap:.6rem;min-height:44px;padding:.5rem 0;box-sizing:border-box;line-height:1.6;color:#1f1f23 !important;opacity:1;cursor:pointer}
body.page-plan .consent span,body.page-res .consent span{color:#1f1f23;opacity:1}
body.page-plan .consent input[type=checkbox],body.page-res .consent input[type=checkbox],
body.page-plan .consent input[type=checkbox]:disabled,body.page-res .consent input[type=checkbox]:disabled{
  -webkit-appearance:none;appearance:none;box-sizing:border-box;width:26px;height:26px;min-width:26px;min-height:26px;flex:0 0 26px;
  margin:calc((1.6 * .9rem - 26px) / 2) 0 0 0;padding:0;border:3px solid #1f1f23;border-radius:5px;background:#fff none;
  opacity:1;filter:none;visibility:visible;cursor:pointer;display:inline-block;vertical-align:top;box-shadow:none;accent-color:#1f1f23}
body.page-plan .consent input[type=checkbox]:checked,body.page-res .consent input[type=checkbox]:checked{border-color:#1f1f23;background:#1f1f23 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 8.4l3.3 3.3L13 4.6' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/18px 18px no-repeat}
body.page-plan .consent input[type=checkbox]:focus-visible,body.page-res .consent input[type=checkbox]:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
@media (forced-colors:active){body.page-plan .consent input[type=checkbox],body.page-res .consent input[type=checkbox]{-webkit-appearance:auto;appearance:auto;border:0;background:none}}
@media print{body.page-plan .consent input[type=checkbox],body.page-res .consent input[type=checkbox]{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* Availability calendar editor (assets/avail-cal.js) */
.av{position:relative}
.av.busy{opacity:.7;pointer-events:none}
.av-msg{min-height:1.2em;font-weight:600;margin:.3rem 0}.av-msg.err{color:var(--danger)}
.av-meta{display:flex;flex-wrap:wrap;gap:.4rem .8rem;align-items:center;font-size:.9rem;color:var(--muted);margin-bottom:.4rem}
.av-stale{color:var(--danger);font-weight:600}.av-demo{color:#8a5a00}
.av-help{margin:.2rem 0 .7rem}
.av-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.4rem}
.av-month{flex:1;background:none;border:1px dashed transparent;border-radius:10px;font:700 1.25rem var(--font-head);color:var(--teal-dark);padding:.35rem;cursor:pointer}
.av-month:hover{border-color:var(--gold);background:var(--gold-soft)}
.av-nav{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:#fff;font-size:1.5rem;line-height:1;color:var(--teal);cursor:pointer}
.av-nav[disabled]{opacity:.35;cursor:default}
.av-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;touch-action:none;user-select:none;-webkit-user-select:none}
.av-wd{background:none;border:0;border-radius:8px;font:600 .8rem var(--font-body);color:var(--muted);padding:.35rem 0;cursor:pointer;text-transform:uppercase;letter-spacing:.05em}
.av-wd:hover{background:var(--gold-soft);color:var(--teal-dark)}
.av-day{min-height:58px;border:1px solid var(--line);border-radius:10px;background:#fff;padding:.25rem .2rem;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;cursor:pointer;font:inherit;color:var(--ink)}
.av-day b{font-size:1rem}.av-day small{font-size:.66rem;line-height:1.15;color:inherit;text-align:center;word-break:break-word}
.av-day.A{background:#dff0e4;border-color:#9cc9aa;color:#1e5c37}
.av-day.P{background:repeating-linear-gradient(135deg,#dff0e4 0 6px,#fbeccb 6px 12px);border-color:#d9b46a;color:#6b4a00}
.av-day.B{background:#f3d9d5;border-color:#d9a39b;color:#8e2f25}
.av-day.w{border-style:dashed}
.av-day.past{opacity:.5}
.av-day.today b{text-decoration:underline;text-decoration-color:var(--gold);text-decoration-thickness:3px}
.av-day.sel{outline:3px solid var(--teal);outline-offset:-1px;box-shadow:0 0 0 2px #fff inset}
.av-legend{display:flex;flex-wrap:wrap;gap:.4rem .9rem;font-size:.8rem;color:var(--muted);margin:.6rem 0}
.av-legend .k::before{content:"";display:inline-block;width:14px;height:14px;border-radius:4px;border:1px solid var(--line);vertical-align:-2px;margin-right:.3rem;background:#fff}
.av-legend .A::before{background:#dff0e4}.av-legend .P::before{background:repeating-linear-gradient(135deg,#dff0e4 0 3px,#fbeccb 3px 6px)}.av-legend .B::before{background:#f3d9d5}.av-legend .w::before{border-style:dashed;border-color:var(--muted)}
.av-actions,.av-hours{background:var(--cream);border:1px solid var(--line);border-radius:12px;padding:.8rem 1rem;margin:.6rem 0}
.av-seltext{margin:0 0 .3rem}
.av-b-booked{background:var(--danger);border-color:var(--danger)}.av-b-booked:hover{background:#8e2f25}
.av-b-free{background:var(--ok);border-color:var(--ok)}.av-b-free:hover{background:#225e3b}
.av-tl{display:flex;height:46px;border:1px solid #c9c2b6;border-radius:10px;overflow:hidden;touch-action:none;background:#e6e2db;margin:.5rem 0 0}
.av-slot{flex:1;border:0;margin:0;padding:0;background:#ddd7cc;cursor:pointer;min-width:0}
.av-slot.av-hr{border-left:1px solid rgba(0,0,0,.08)}
.av-slot.free{background:#7cc493}
.av-tl-lab{display:flex;justify-content:space-between;font-size:.72rem;color:var(--muted);margin-bottom:.4rem}
.av-presets{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center;margin:.3rem 0}
.av-hrtext{font-weight:600;margin:.4rem 0}
.av-typed{display:flex;flex-wrap:wrap;gap:.6rem;align-items:flex-end;margin:.6rem 0}
.av-typed label{font-size:.85rem;font-weight:600;margin:0}.av-typed input{width:auto;min-width:150px}
.av-weekly{border:1px solid var(--line);border-radius:12px;padding:.6rem 1rem;margin:.8rem 0;background:#fff}
.av-weekly summary{cursor:pointer}
.av-wkrow{display:grid;grid-template-columns:7.5rem 12rem 1fr;gap:.3rem .8rem;align-items:center;padding:.35rem 0;border-bottom:1px dashed var(--line)}
.av-wkrow select{margin:0}.av-wkrow .av-tl{margin:0;height:38px}
.av-toast{position:sticky;bottom:12px;display:flex;gap:.8rem;align-items:center;justify-content:space-between;background:var(--teal-dark);color:#fff;border-radius:12px;padding:.6rem 1rem;margin-top:.8rem;box-shadow:var(--shadow);font-weight:600}
.av-toast .btn{color:#fff !important;border-color:#fff}
@media (max-width:700px){.av-wkrow{grid-template-columns:1fr 1fr}.av-wkrow .av-tlw{grid-column:1/-1}.av-day{min-height:50px}.av-day small{font-size:.58rem}}
/* plan/reservations availability */
.av-counts{margin:.8rem 0;padding:.8rem 1rem;background:#fff;border:1px solid var(--line);border-radius:12px}
.av-counts-h{font-size:1.05rem;margin:0 0 .3rem}
.av-count-list{list-style:none;padding:0;margin:.4rem 0 .5rem;display:grid;gap:.45rem}
.av-count{font-size:.93rem;padding:.35rem 0;border-bottom:1px solid var(--line)}.av-count:last-child{border-bottom:0}
.av-count-k{font-weight:600}.av-count .av-n{color:var(--ok)}.av-count.is-empty .av-n{color:var(--danger)}
.av-near{list-style:none;padding:0;margin:.3rem 0;display:flex;flex-wrap:wrap;gap:.4rem .8rem}.av-near li{display:flex;align-items:center;gap:.3rem}
.av-day{display:inline-flex;align-items:center;gap:.4rem;margin:0 0 .6rem}.av-day select{width:auto;min-height:40px}
.av-date-note{margin:.4rem 0}
.av-dates-nav{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}
.av-date-list{list-style:none;padding:0;margin:.5rem 0 1rem;display:grid;gap:.4rem}
.av-date-list li{background:#fff;border:1px solid var(--line);border-radius:10px;padding:.55rem .8rem}
.av-date-ok{border-left:4px solid var(--ok)!important}.av-date-one{border-left:4px solid #d9b46a!important}
.av-dates-h{font-size:1.3rem;margin:1rem 0 .2rem}
.av-note{font-size:.88rem;color:var(--teal-dark);background:#e8f1ee;border-radius:8px;padding:.45rem .7rem;margin:.3rem 0 .6rem}
.av-empty{background:var(--cream);border:1px dashed #d9b46a;border-radius:10px;padding:.8rem 1rem;margin:.4rem 0}
.av-empty .btn-row{margin-top:.4rem}
.av-tag{display:inline-block;font-size:.74rem;font-weight:700;letter-spacing:.02em;border-radius:999px;padding:.08rem .5rem;vertical-align:middle}.av-tag-ok{background:#e3f2e8;color:var(--ok);margin-left:.3rem}.av-tag-n{background:#fbeed2;color:#7a5410;margin-right:.25rem}
.av-confirm-note{margin:.25rem 0 .2rem;color:#5d4a2a}
.av-tag-p{background:#e6eefb;color:#1f4b8f;margin-right:.25rem;white-space:normal}.av-partly-note{margin:.25rem 0 .2rem}.av-date-partly{margin-bottom:.4rem}
.av-badge{display:inline-block;font-size:.75rem;font-weight:700;border-radius:999px;padding:.1rem .5rem;background:#dff0e4;color:#1e5c37;margin-left:.3rem}
.av-badge.P{background:#fbeccb;color:#6b4a00}

.av-legend .N::before{background:#eceae6}

/* Compact per-vendor calendar under a reservation row (Brian Oct 23 t786u) */
.res-vcal-btn-wrap{margin:.35rem 0 .15rem}
.res-vc-cal{margin:.35rem 0 .55rem;padding:.45rem .55rem;background:var(--cream);border:1px solid var(--line);border-radius:10px;max-width:22rem;width:100%}
.res-vc-top{display:flex;align-items:center;justify-content:space-between;gap:.4rem;margin:0 0 .2rem}
.res-vc-name{font-size:.9rem;color:var(--teal-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.res-vc-head{display:flex;align-items:center;justify-content:space-between;gap:.25rem;margin:.15rem 0}
.res-vc-month{flex:1;text-align:center;font:700 .95rem var(--font-head);color:var(--teal-dark);margin:0}
.res-vc-cal .av-nav{width:32px;height:32px;font-size:1.15rem}
.res-vc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.res-vc-wd{text-align:center;font:600 .65rem var(--font-body);color:var(--muted);padding:.15rem 0;text-transform:uppercase}
.res-vc-pad{min-height:26px}
.res-vc-day{min-height:26px;border:1px solid var(--line);border-radius:6px;background:#eceae6;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;font:inherit;color:var(--ink)}
.res-vc-day b{font-size:.72rem}
.res-vc-day.A{background:#dff0e4;border-color:#9cc9aa;color:#1e5c37}
.res-vc-day.P{background:#fbeccb;border-color:#d9b46a;color:#6b4a00}
.res-vc-day.B{background:#f3d9d5;border-color:#d9a39b;color:#8e2f25}
.res-vc-day.N{background:#eceae6;border-color:var(--line);color:var(--muted)}
.res-vc-day.past{opacity:.55}
.res-vc-day.today b{text-decoration:underline;text-decoration-color:var(--gold);text-decoration-thickness:2px}
.res-vc-day.sel{outline:2px solid var(--teal);outline-offset:-1px}
.res-vc-day.in-event:not(.sel){box-shadow:inset 0 -2px 0 var(--gold)}
.res-vc-legend{display:flex;flex-wrap:wrap;gap:.25rem .55rem;font-size:.68rem;color:var(--muted);margin:.35rem 0 .1rem}
.res-vc-legend .k::before{content:"";display:inline-block;width:10px;height:10px;border-radius:3px;border:1px solid var(--line);vertical-align:-1px;margin-right:.2rem;background:#fff}
.res-vc-legend .A::before{background:#dff0e4}.res-vc-legend .P::before{background:#fbeccb}.res-vc-legend .B::before{background:#f3d9d5}.res-vc-legend .N::before{background:#eceae6}
.res-vc-focus,.res-vc-hint{margin:.25rem 0 0;font-size:.75rem}
@media (max-width:700px){.res-vc-cal{max-width:100%}.res-vc-day{min-height:28px}}
/* t818u: plan summary print view - grouped event details + one card per vendor */
#ef-print .ps{max-width:760px;margin:0 auto;font:1rem/1.45 Georgia,serif;color:#222}
#ef-print .ps-title{margin:.25rem 0 0;font-size:1.5rem;text-transform:uppercase;letter-spacing:.02em}
#ef-print .ps-made{margin:.1rem 0 1rem;color:#666}
#ef-print .ps-h{margin:1.5rem 0 .6rem;padding-bottom:.25rem;border-bottom:2px solid var(--teal,#0f5f64);color:var(--teal,#0f5f64);text-transform:uppercase;font-size:1.05rem;letter-spacing:.03em}
#ef-print .ps-group,#ef-print .ps-vendor{margin:0 0 .9rem;break-inside:avoid;page-break-inside:avoid}
#ef-print .ps-group h4{margin:0 0 .25rem;padding-bottom:.15rem;border-bottom:1px solid #ccc;font-size:1rem}
#ef-print .ps-vendor{border:1px solid #ccc;border-left:4px solid #bbb;border-radius:6px;padding:.55rem .8rem}
#ef-print .ps-vendor.is-booked{border-left-color:var(--teal,#0f5f64)}
#ef-print .ps-vendor h4{margin:0 0 .3rem;text-transform:uppercase;font-size:.95rem;letter-spacing:.03em}
#ef-print .ps-table{border-collapse:collapse;width:100%}
#ef-print .ps-table th{text-align:left;vertical-align:top;width:9.5rem;padding:.12rem .8rem .12rem 0;color:#555;font-weight:600}
#ef-print .ps-table td{vertical-align:top;padding:.12rem 0}
#ef-print .ps-pre{white-space:pre-wrap;font:inherit;margin:0}
#ef-print .ps-foot{margin-top:1.5rem;padding-top:.4rem;border-top:1px solid #ccc;color:#666;font-size:.9rem}
@media print{#ef-print .ps{font:10.5pt/1.4 Georgia,serif;max-width:none}#ef-print .ps-h{color:#000;border-color:#000}}

/* t838 (Oct 24 2026): vendors mark only occupied dates; unmarked = available.
   Vendor editor: unmarked (N) days look available. Client per-vendor calendar: 4 colors
   (green available incl. unmarked, amber partly, red booked, blue+outline = the client's event date, overrides). */
.av-day.N{background:#eef7f0;border-color:#bfdcc8;color:var(--ink)}
.av-legend .A::before{background:#dff0e4}
.av-b-part{background:#b7791f;border-color:#b7791f}.av-b-part:hover{background:#8a5a12}
.res-vc-day{background:#cfeeda}
.res-vc-day.A,.res-vc-day.N{background:#cfeeda;border-color:#6fb487;color:#14532d}
.res-vc-day.P{background:#fde4a8;border-color:#d39a1c;color:#6b4a00}
.res-vc-day.B{background:#f6c9c2;border-color:#cf6b5c;color:#8e2f25}
.res-vc-day:disabled{cursor:not-allowed}
.res-vc-day.in-event,.res-vc-day.in-event.A,.res-vc-day.in-event.P,.res-vc-day.in-event.B{background:#cfe0ff;border-color:#1d4ed8;color:#0b2a75;outline:2px solid #1d4ed8;outline-offset:-1px;box-shadow:none;font-weight:700}
.res-vc-day.in-event.sel{outline:3px solid #0b2a75}
.res-vc-legend .A::before{background:#cfeeda;border-color:#6fb487}.res-vc-legend .P::before{background:#fde4a8;border-color:#d39a1c}.res-vc-legend .B::before{background:#f6c9c2;border-color:#cf6b5c}
.res-vc-legend .E::before{background:#cfe0ff;border:2px solid #1d4ed8}
.res-vc-legend .N{display:none}

/* t843u: per-vendor calendars always open on vendor cards; compact so ~30 cards stay tidy */
.res-vendor .res-vc-cal{max-width:19rem;margin:.45rem 0 .35rem;padding:.35rem .45rem}
.res-vc-cal .res-vc-head{margin:0 0 .15rem}
.res-vc-cal .av-nav{width:28px;height:28px;font-size:1.05rem}
.res-vc-day{min-height:24px}.res-vc-pad{min-height:24px}
.res-vc-legend{font-size:.66rem;margin:.3rem 0 0}
.res-vc-hint,.res-vc-focus{font-size:.7rem;margin:.2rem 0 0}
@media (max-width:700px){.res-vendor .res-vc-cal{max-width:100%}.res-vc-day{min-height:30px}}

/* ---------- t849 (Oct 24 2026): darker primary calendar colours (vendor availability calendar .av-* and client
   reservations vendor calendars .res-vc-*). Contrast (WCAG): white on #1b7a1b 5.5:1, white on #b00020 7.3:1,
   #111 on #c9a000 7.7:1, white on #0b3d91 10.0:1 (all AA). Legends use the same colours. ---------- */
:root{--cal-a:#1b7a1b;--cal-a-bd:#0f5a0f;--cal-p:#c9a000;--cal-p-bd:#8a6d00;--cal-b:#b00020;--cal-b-bd:#7a0016;--cal-e:#0b3d91;--cal-e-ring:#04214f}
/* vendor availability calendar (vendor-availability.html, vendors-admin availability dialog) */
.av-day.A,.av-day.N{background:var(--cal-a);border-color:var(--cal-a-bd);color:#fff}
.av-day.P{background:var(--cal-p);border-color:var(--cal-p-bd);color:#111}
.av-day.B{background:var(--cal-b);border-color:var(--cal-b-bd);color:#fff}
.av-day.w{border-style:dashed;border-width:2px}.av-day.w.A,.av-day.w.N,.av-day.w.B{border-color:rgba(255,255,255,.85)}.av-day.w.P{border-color:#111}
.av-day.past{opacity:.45;filter:saturate(.35)}
.av-day.today b{text-decoration-color:#ffd84d}.av-day.P.today b{text-decoration-color:#111}
.av-day.sel{outline:3px solid var(--cal-e);outline-offset:1px;box-shadow:0 0 0 2px #fff inset;position:relative;z-index:1}
.av-legend .A::before{background:var(--cal-a);border-color:var(--cal-a-bd)}.av-legend .P::before{background:var(--cal-p);border-color:var(--cal-p-bd)}.av-legend .B::before{background:var(--cal-b);border-color:var(--cal-b-bd)}
.av-legend .w::before{background:var(--cal-a);border:2px dashed #fff;outline:1px solid var(--cal-a-bd)}
.av-slot.free{background:var(--cal-a)}
.av-tl{background:#d9d4cb}.av-slot{background:#d9d4cb}
/* client reservations vendor calendars (reservations.html via script.js) */
.res-vc-day,.res-vc-day.A,.res-vc-day.N{background:var(--cal-a);border-color:var(--cal-a-bd);color:#fff}
.res-vc-day.P{background:var(--cal-p);border-color:var(--cal-p-bd);color:#111}
.res-vc-day.B{background:var(--cal-b);border-color:var(--cal-b-bd);color:#fff}
.res-vc-day b{font-weight:700}
.res-vc-day.past{opacity:.4;filter:saturate(.3)}
.res-vc-day.today b{text-decoration-color:#ffd84d}.res-vc-day.P.today b{text-decoration-color:#111}
/* the client's event date: dark blue with an outline + white numerals. If that day is partly available or booked for this
   vendor the status colour stays (so a clash is visible) and only the blue outline marks the event date. */
.res-vc-day.in-event,.res-vc-day.in-event.A,.res-vc-day.in-event.N{background:var(--cal-e);border-color:#fff;color:#fff;outline:2px solid var(--cal-e-ring);outline-offset:0;box-shadow:inset 0 0 0 1px #fff;font-weight:700;position:relative;z-index:1}
.res-vc-day.in-event.P{background:var(--cal-p);color:#111;border-color:#fff;outline:3px solid var(--cal-e);outline-offset:0;box-shadow:inset 0 0 0 1px #fff;position:relative;z-index:1}
.res-vc-day.in-event.B{background:var(--cal-b);color:#fff;border-color:#fff;outline:3px solid var(--cal-e);outline-offset:0;box-shadow:inset 0 0 0 1px #fff;position:relative;z-index:1}
.res-vc-day.sel:not(.in-event){outline:3px solid var(--cal-e);outline-offset:0;position:relative;z-index:1}
.res-vc-day.in-event.sel{outline:3px solid #000}
.res-vc-legend .A::before{background:var(--cal-a);border-color:var(--cal-a-bd)}.res-vc-legend .P::before{background:var(--cal-p);border-color:var(--cal-p-bd)}.res-vc-legend .B::before{background:var(--cal-b);border-color:var(--cal-b-bd)}
.res-vc-legend .E::before{background:var(--cal-e);border:1px solid #fff;outline:2px solid var(--cal-e-ring)}

/* t870u (Oct 24 2026): whole-plan "Send vendor request" at the bottom of the reservation checklist */
.res-plan-send{margin-top:1.4rem}
.res-plan-send h3{margin:.4rem 0 .3rem}
.res-plan-send .consent{margin:.6rem 0}
.res-plan-send .form-status a{text-decoration:underline}

/* t881 (Brian, Oct 24 2026): new Event-Forger logo (2:3 portrait) on every page. Fits each page's existing square logo box
   without distortion; the beige matches the logo's own background so there are no bars. The header tile rule above wins in the header. */
img.ef-logo{object-fit:contain;background:#ded6cb;border-radius:8px}

/* t907u (Oct 26 2026): "Webmaster login" group in the main menu, with Vendor list (vendors-admin) and For vendors (join.html) buttons */
header.site-header .nav-group{position:relative}
header.site-header .nav-group>summary{list-style:none;cursor:pointer;border:2px solid var(--teal-dark);border-radius:10px;padding:.3rem .6rem;line-height:1.2;color:var(--teal-dark);font-weight:500;white-space:nowrap;display:inline-flex;align-items:center;gap:.35rem}
header.site-header .nav-group>summary::-webkit-details-marker{display:none}
header.site-header .nav-group>summary::after{content:"\25BE";font-size:.8em}
header.site-header .nav-group>summary:hover,header.site-header .nav-group>summary:focus-visible,header.site-header .nav-group[open]>summary{background:var(--gold-soft)}
header.site-header .nav-group-menu{display:flex;flex-direction:column;gap:.5rem;padding:.6rem;background:var(--cream);border:2px solid var(--teal-dark);border-radius:10px;box-shadow:0 12px 24px rgba(22,58,71,.15)}
header.site-header .site-nav .nav-group-menu a.btn{margin:0;border:0;background:var(--teal-dark);color:#fff;justify-content:center;text-align:center;white-space:nowrap}
header.site-header .site-nav .nav-group-menu a.btn:hover{background:var(--teal);color:#fff}
@media (min-width:1101px){
  header.site-header .nav-group>summary{min-height:44px;font-size:1.35rem}
  header.site-header .nav-group-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:50;min-width:12rem}}
@media (min-width:1101px) and (max-width:1279px){header.site-header .nav-group>summary{font-size:1.2rem}}
@media (max-width:1100px){
  header.site-header .nav-group>summary{font-size:1.1rem;padding:.55rem .8rem}
  header.site-header .nav-group-menu{margin-top:.4rem}}
/* t907u: on desktop the menu row is full, so the Webmaster login group sits just above the right end of the menu (title row) */
@media (min-width:1101px){
  header.site-header .site-nav>.nav-group{position:absolute;right:0;bottom:calc(100% + 10px)}
  header.site-header .nav-group>summary{min-height:40px;font-size:1.1rem}}
@media (min-width:1101px) and (max-width:1279px){header.site-header .nav-group>summary{font-size:1rem}}
header.site-header details.nav-group{border:0;background:none;padding:0;margin:0;box-shadow:none;border-radius:0}
@media (max-width:1100px){header.site-header .nav-group>summary{display:flex;justify-content:space-between}}
/* t910u: vendor page per-item price list (join.html #vendor-items) */
.vendor-items .vi-remove{min-height:40px;border:2px solid var(--teal-dark);border-radius:8px;background:#fff;color:var(--teal-dark);font:inherit;font-weight:600;cursor:pointer}
.vendor-items .vi-remove:hover{background:var(--gold-soft)}
.vendor-items .vi-remove:disabled{opacity:.4;cursor:not-allowed}
.vendor-items .vi-add{margin-top:.3rem}
.vendor-area .checks{margin-bottom:.8rem}
/* t909u: the extra "Vendors" menu button needs ~125px; tighten the desktop menu only where it would run off the right edge */
@media (min-width:1101px){header.site-header .site-nav.nav-spread{gap:clamp(.3rem,calc((100vw - 1420px) / 8),1.5rem)}}
@media (min-width:1101px) and (max-width:1439px){header.site-header .site-nav{gap:.3rem}header.site-header .site-nav a{font-size:1.1rem;padding:.3rem .4rem}}
@media (min-width:1101px) and (max-width:1279px){header.site-header .site-nav a{font-size:.98rem;padding:.25rem .35rem}}
/* t915u: spreadsheet-style vendor price list (table; cards on small screens) */
/* t1012b: fieldsets default to min-width:min-content, so the 940px price sheet pushed past the form card; let the wrap scroll instead */
fieldset.vendor-items{min-width:0;max-width:100%}
.vendor-items .vi-sheet-wrap{max-width:100%;-webkit-overflow-scrolling:touch}
.vendor-items .vi-sheet-wrap{overflow-x:auto;margin:.5rem 0 .75rem;border:1px solid #d9d2c3;border-radius:10px;background:#fff}
.vendor-items .vi-sheet{width:100%;min-width:940px;table-layout:fixed;border-collapse:collapse;font-size:.95rem}
.vendor-items .vi-sheet th{background:#f5f0e6;text-align:left;font-weight:600;font-size:.85rem;padding:.55rem .5rem;border-bottom:1px solid #d9d2c3;color:var(--teal-dark);vertical-align:bottom;line-height:1.2}
.vendor-items .vi-sheet td{padding:.4rem .35rem;border-bottom:1px solid #ece6d9;vertical-align:middle}
.vendor-items .vi-sheet tr.vi-row:last-child td{border-bottom:0}
.vendor-items .vi-sheet td input,.vendor-items .vi-sheet td select{width:100%;min-width:0;box-sizing:border-box;margin:0}
.vendor-items .vi-sheet .vi-c-name{width:17%}.vendor-items .vi-sheet .vi-c-kind{width:11%}.vendor-items .vi-sheet .vi-c-desc{width:20%}.vendor-items .vi-sheet .vi-c-basis{width:13%}
.vendor-items .vi-sheet .vi-c-min,.vendor-items .vi-sheet .vi-c-max{width:8%}.vendor-items .vi-sheet .vi-c-avg{width:18%}.vendor-items .vi-sheet .vi-c-rm{width:3.2rem;text-align:center}
.vendor-items .vi-sheet .vi-avg{background:#f8f5ee;border-style:dashed;font-weight:600;color:var(--teal-dark)}
.vendor-items .vi-sheet td input,.vendor-items .vi-sheet td select{padding-left:.5rem;padding-right:.4rem}
.vendor-items .vi-sheet .vi-remove .vi-remove-text{display:none}
.vendor-items .vi-sheet .vi-remove{min-width:2.2rem}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media (max-width:700px){
.vendor-items .vi-sheet-wrap{border:0;background:none;overflow:visible}
.vendor-items .vi-sheet{min-width:0}
.vendor-items .vi-sheet thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
.vendor-items .vi-sheet,.vendor-items .vi-sheet tbody,.vendor-items .vi-sheet tr.vi-row{display:block}
.vendor-items .vi-sheet tr.vi-row{display:grid;grid-template-columns:1fr 1fr;gap:.4rem .6rem;border:1px solid #d9d2c3;border-radius:10px;background:#fff;padding:.75rem;margin-bottom:.75rem}
.vendor-items .vi-sheet td{display:block;width:auto!important;border:0;padding:0}
.vendor-items .vi-sheet td::before{content:attr(data-label);display:block;font-size:.85rem;font-weight:600;margin-bottom:.2rem}
.vendor-items .vi-sheet .vi-c-name,.vendor-items .vi-sheet .vi-c-desc,.vendor-items .vi-sheet .vi-c-basis,.vendor-items .vi-sheet .vi-c-avg{grid-column:1/-1}
.vendor-items .vi-sheet .vi-c-rm{grid-column:1/-1;text-align:right}.vendor-items .vi-sheet .vi-c-rm::before{display:none}
.vendor-items .vi-sheet .vi-remove .vi-remove-text{display:inline}}
.vendor-items .vi-sheet th:nth-child(1){width:17%}.vendor-items .vi-sheet th:nth-child(2){width:11%}.vendor-items .vi-sheet th:nth-child(3){width:20%}.vendor-items .vi-sheet th:nth-child(4){width:12%}
.vendor-items .vi-sheet th:nth-child(5),.vendor-items .vi-sheet th:nth-child(6){width:9.5%}.vendor-items .vi-sheet th:nth-child(7){width:16%}.vendor-items .vi-sheet th:nth-child(8){width:5%}

/* t1007: Next step band with two buttons + small notes (vendor-intake.html) */
.next-actions{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;justify-content:flex-end;max-width:34em}
.next-actions .next-note{flex-basis:100%;text-align:right;margin:0}
.next-note{margin:.45rem 0 0;color:var(--teal-dark)}
@media (max-width:600px){.next-actions{justify-content:stretch;max-width:none;width:100%}.next-actions .next-note{text-align:left}}
.next-why{margin:.55rem 0 0;color:var(--teal-dark);max-width:36em}

/* t1047 (until t1610): wider price sheet. From 1100px wide the price-sheet box broke out of the narrow form column (centered on it) so all
   columns showed without sideways scrolling. Removed in t1610 (see below). */
/* t1610 (Oct 28 2026, Brian): the 1100px+ break-out above is removed. "Your prices: every item and service you offer" sat wider than,
   and to the left of, the other form sections; it now uses the same centered form column and width as its neighbours at every width,
   and the price sheet scrolls sideways inside its box (as under 1100px). The wrap is position:relative so the sheet's visually-hidden
   header labels (.sr-only, position:absolute) stay inside the scroll box instead of widening the page (sideways page scroll at 701-1099px). */
.vendor-items .vi-sheet-wrap{position:relative}
/* t1047: price-row problems in words (vendor-items.js) */
.vendor-items .vi-sheet tr.vi-err-row td{padding:.1rem .5rem .55rem;border-bottom:1px solid #ece6d9}
.vendor-items .vi-err{margin:0;color:#a3261b;font-weight:600;font-size:.9rem}
.vendor-items .vi-bad{border-color:#a3261b!important;box-shadow:0 0 0 2px rgba(163,38,27,.18)}
.vi-err-summary{border:2px solid #a3261b;background:#fff4f2;color:#7d1d14;border-radius:10px;padding:.65rem .9rem;margin:.75rem 0}
.vi-err-summary ul{margin:.35rem 0 0 1.1rem;padding:0}
@media (max-width:700px){.vendor-items .vi-sheet tr.vi-err-row{display:block;margin:-.5rem 0 .75rem}.vendor-items .vi-sheet tr.vi-err-row td{display:block;border:0}.vendor-items .vi-sheet tr.vi-err-row td::before{display:none}}
/* t1047: post-submit Mark your calendar step + All of the above */
.signup-cal{margin-top:1.25rem}
.signup-cal .avail-cal{margin-top:.5rem}
.signup-cal .av-toast{position:static} /* t1047: on the sign-up step the sticky Undo bar covered the Partially booked button */
.all-above{font-weight:600}
/* t1047: credentials / license line on vendor listings */
.vendor-cred{display:block;font-size:.88rem;color:var(--teal-dark);margin:.15rem 0}
/* t1072: "Partly booked" panel paints BUSY hours (red); unpainted hours stay free (green) */
.av-tl-busy .av-slot.free{background:var(--cal-a)}
.av-tl-busy .av-slot.busy{background:var(--cal-b)}
/* t1072: homepage hero without the checklist button: keep the trust lines spaced below the lead */
.home-hero .lead + .trust-row{margin-top:1.5rem}

/* t1214: per-task due date, status and note on the checklist (phone first: 44px targets, wraps, no sideways scroll) */
#checklist-output .tl-phase li{padding:.55rem 0;border-bottom:1px solid var(--line);min-width:0}
#checklist-output .tl-phase li:last-child{border-bottom:0}
#checklist-output .tl-phase li > label{min-height:44px;align-items:center;cursor:pointer;overflow-wrap:anywhere}
#checklist-output .tl-phase li > label input{margin-top:0}
#checklist-output .tl-phase li.cl-done > label span{text-decoration:line-through;color:var(--muted)}
#checklist-output .tl-phase li.cl-doing > label span{font-weight:600}
.cl-edit{display:flex;flex-wrap:wrap;gap:.4rem .9rem;align-items:flex-end;margin:.25rem 0 0 1.9rem;min-width:0}
.cl-edit .cl-f{display:flex;flex-direction:column;font-size:.8rem;font-weight:600;color:var(--muted);margin:0;min-width:0}
.cl-edit .cl-due,.cl-edit .cl-tstat{width:auto;min-width:9.5rem;max-width:100%;min-height:44px;margin:.15rem 0 0;padding:.35rem .6rem;font-size:16px}
.tl-phase li .cl-edit input{margin-top:.15rem}
.cl-edit details.cl-notes{flex:1 1 100%;min-width:0;background:none;border:0;border-radius:0;padding:0;margin:0}
.cl-notes summary{display:inline-flex;align-items:center;min-height:44px;cursor:pointer;font-weight:600;color:var(--teal);font-size:.9rem}
.cl-notes textarea{width:100%;max-width:100%;min-height:4.5em;margin-top:0;font-size:16px;resize:vertical}
li.cl-doing .cl-tstat{border-color:var(--gold);background:var(--gold-soft)}
li.cl-done .cl-tstat{border-color:var(--ok)}
.cl-meta{display:none}
.cl-savebar #cl-save-list{margin-left:.4rem}
@media (max-width:560px){
  .cl-edit{margin-left:0;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:.4rem .5rem;align-items:end}
  .cl-edit details.cl-notes{grid-column:1 / -1}
  .cl-edit .cl-due,.cl-edit .cl-tstat{width:100%;min-width:0;padding:.35rem .45rem}
  .cl-savebar #cl-save-list{margin:.5rem 0 0}
}
@media print{
  .cl-meta:not([hidden]){display:block;margin:.1rem 0 0 1.9rem;font-size:.85rem;color:#444;font-style:italic}
  #checklist-output .tl-phase li{border-bottom:0;padding:.15rem 0}
  #checklist-output .tl-phase li > label{min-height:0}
}
/* t1215: "Send it to my email" (the site sends the checklist to the typed address) + rescue day-of email box */
.pe-site{border:1px solid var(--line, #d9d3c7);border-radius:10px;padding:.8rem 1rem;margin:.4rem 0 1rem;background:#fbf8f2}
.pe-site .btn{margin:0 0 .35rem}
.pe-site-note{margin:.2rem 0 0;color:#555}
.pe-site-status{margin:.4rem 0 0;min-height:1em}
.pe-site-status.pe-ok{color:#1d6b33;font-weight:600}
.pe-site-status.pe-err{color:#a12a1f;font-weight:600}
.pe-site-fb{margin:.4rem 0 0}
/* t1702: plan bar "Email" (sends from the site; inline address box only when the plan has no email) */
.ef-mail-box{margin:.4rem 0 0}
.ef-mail-box input[type=email]{min-width:16rem;max-width:100%}
.ef-mail-status:empty{display:none}
.dayof-mail{max-width:560px;margin:1.2rem auto 0;text-align:left}
.dayof-mail h3{margin:0 0 .3rem;font-size:1.05rem}
.dayof-mail-row{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}
.dayof-mail-row input[type=email]{flex:1 1 220px;min-width:0}
.dayof-mail-row .btn{margin:0}

/* t1271 (BACK-BURNER t1096/t1097): "Find a vendor by name" at the top of each Make your reservations category.
   16px text so phones don't zoom in; 44px touch targets; results scroll inside the box. */
.res-search{margin:.25rem 0 1rem;padding:.75rem .85rem;border:1px solid #cfdcda;border-radius:10px;background:#f6faf9}
.res-search-l{display:block;font-weight:700;margin:0 0 .2rem}
.res-search-hint{margin:0 0 .45rem;color:var(--muted,#555)}
.res-search .res-search-in{display:block;width:100%;max-width:34rem;box-sizing:border-box;font-size:16px;min-height:44px;padding:.5rem .7rem;border:2px solid #8fb3ae;border-radius:8px;background:#fff}
.res-search .res-search-in:focus{outline:3px solid var(--teal,#0b7a75);outline-offset:2px}
.res-search-n{margin:.45rem 0 0}
.res-search-n:empty{display:none}
.res-search-list{list-style:none;margin:.35rem 0 0;padding:0;max-height:24rem;overflow-y:auto;-webkit-overflow-scrolling:touch}
.res-search-list:empty{display:none}
.res-search-hit{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.35rem .75rem;padding:.5rem 0;border-top:1px solid #e1e9e8}
.res-search-name{flex:1 1 14rem;min-width:0;overflow-wrap:anywhere}
.res-search-hit .btn{min-height:44px}
.res-search-booked{font-weight:700;color:var(--teal-dark,#075e5a)}

/* t1274: a booked vendor that is booked on the (new) event date */
.res-conflict{margin:.5rem 0;color:#5c1410}
.res-conflict p{margin:.2rem 0}
.res-conflict a{color:inherit;font-weight:700}
.res-conflict-s{flex:1 1 100%;font-size:.9rem;padding:.45rem .7rem;margin:.15rem 0 0}
.res-conflict-sum{margin:.75rem 0;color:#5c1410}
.res-conflict-sum p{margin:.2rem 0}
.res-conflict-sum ul{margin:.3rem 0 .3rem 1.1rem;padding:0}
.res-conflict-sum li{margin:.2rem 0}
.res-conflict-sum .btn{min-height:44px}
.res-conf-old,.res-conflict-tag{display:inline-block;margin-left:.35rem;padding:.05rem .45rem;border-radius:6px;background:#f7e3e0;border:1px solid var(--danger,#b3261e);color:#5c1410;font-size:.85rem;font-weight:700}
.res-conf-blocked{margin-top:.4rem !important;padding-top:.35rem;border-top:1px solid rgba(179,38,30,.35)}
/* t1278: backups (t1099), confirm-now (t1101), whole-plan send off until the plan changes (t1106) */
.res-role{margin:.45rem 0 0;display:flex;flex-wrap:wrap;gap:.4rem;align-items:center}
.res-role .btn{min-height:44px}
.res-role-tag,.res-backup-tag{display:inline-block;padding:.05rem .5rem;border-radius:999px;font-size:.8rem;font-weight:700;letter-spacing:.02em}
.res-role-primary{background:#e3f2e8;color:#14532d;border:1px solid #2e7d4f}
.res-role-backup,.res-backup-tag{background:#eef0f6;color:#2b3350;border:1px solid #5a6488}
.res-backup-h{margin:1rem 0 .3rem;font-size:1rem}
.res-backup-sug{margin:.6rem 0;padding:.5rem .7rem;border:1px dashed #9aa3bf;border-radius:8px}
.res-backup-sug ul{margin:.2rem 0 0;padding:0;list-style:none}
.res-backup-sug li{margin:.3rem 0;display:flex;flex-wrap:wrap;gap:.4rem;align-items:center}
.res-backup-sug .btn,.res-cf-backup .btn{min-height:44px}
.res-role-msg{margin:.3rem 0;font-weight:600}
.res-conf-now-p{margin:.5rem 0 0 !important;display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.res-conf-now-p .btn{min-height:44px}
.btn.res-plan-go.is-disabled,.btn.res-plan-go.is-disabled:hover{color:#555 !important;background:#e6e6e6;border:2px dashed #aaa;cursor:not-allowed;box-shadow:none;transform:none}
.res-plan-send-form [type="submit"]:disabled,#res-plan-form [type="submit"]:disabled{opacity:.55;cursor:not-allowed;filter:grayscale(1)}
.res-plan-why{margin:.4rem 0 0}
/* t1299: smaller WebP photos. <picture> wrappers add no box; page-hero backgrounds use the WebP via image-set() where supported, else the JPEG in --hero-img */
picture.ef-pic{display:contents}picture.ef-pic>source{display:none}
@supports (background-image:image-set(url("x.webp") type("image/webp"))){.page-hero[style*="--hero-webp"]{background:linear-gradient(100deg,rgba(22,58,71,.78),rgba(22,58,71,.32)),var(--hero-webp) center/cover no-repeat,var(--teal-dark)}@media (max-width:700px){.page-hero[style*="--hero-webp"]{background:linear-gradient(180deg,rgba(22,58,71,.72),rgba(22,58,71,.58)),var(--hero-webp) center/cover no-repeat,var(--teal-dark)}}}
/* t1300 (t1136 Phase 1): per booked vendor arrival / setup / leave times, and the checklist "Vendor arrivals" list */
.res-booking .res-time-l{margin:0;font-weight:600;font-size:.92rem}
.res-booking .res-time{display:block;min-height:40px;max-width:9.5rem;font-size:1rem}
/* t1683: payment marker per chosen vendor; t1680: per-vendor status line */
.res-booking .res-pay-l{margin:0;font-weight:600;font-size:.92rem}
.res-booking .res-pay{display:block;min-height:40px;max-width:14rem;font-size:1rem}
.res-booking .res-v-status{margin:0 0 .4rem}
.cl-arr{margin:.35rem 0 .2rem 1.6rem;padding:.4rem .7rem;border-left:3px solid var(--gold-soft);background:rgba(0,0,0,.02)}
.cl-arr .cl-arr-h{margin:0 0 .2rem;font-weight:700;font-size:.9rem}
.cl-arr ul{list-style:disc;padding-left:1.1rem;margin:0}
#checklist-output .tl-phase .cl-arr li{padding:.1rem 0;border:0;font-size:.92rem}
/* t1320: "Booked a vendor yourself?" on Make your reservations */
.res-own-form label{display:block;margin:.4rem 0 .6rem;font-weight:600}
.res-own-confirm .res-own-inv{display:flex;align-items:flex-start;margin:.5rem 0;font-weight:400}
.res-own-tag{display:inline-block;font-size:.8rem;padding:.05rem .5rem;border-radius:999px;background:#E6F1EF;color:var(--teal-dark);margin-left:.3rem;vertical-align:1px}
.res-own-inv-st{margin:.4rem 0 .2rem}
.res-own-acts .btn{margin:.15rem .3rem .15rem 0}
.res-own-list{margin-bottom:.6rem}
/* t1372: quote comparison "Your pick" + Budget "Your picked vendors" (budget-picks.js) */
.qpick{display:flex;flex-wrap:wrap;gap:.35rem 1rem;align-items:center;margin:.2rem 0 1.2rem;padding:.55rem .8rem;background:var(--gold-soft);border-radius:8px;font-size:.92rem}
.qpick label{display:inline-flex;gap:.35rem;align-items:center;font-weight:400;margin:0;cursor:pointer}
.qpick-go{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;margin-top:1rem}
.picks-alt{margin-top:1rem}
.picks-alt h5{font:700 .95rem var(--font-body);color:var(--teal);margin:0 0 .3rem}
/* t1376: make the chosen "Your pick" vendor obvious; "No pick yet" stays plain. Separate :has() rules so older browsers keep the class rules. */
.qpick label.qpick-opt,.qpick label.qpick-none{padding:.2rem .6rem;border:2px solid transparent;border-radius:999px}
.qpick-badge{display:none;margin-left:.4rem;padding:.05rem .5rem;border-radius:999px;background:var(--teal);color:#fff;font-size:.8rem;font-weight:700;white-space:nowrap}
.qpick label.qpick-opt.is-picked{background:#fff;border-color:var(--teal);font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.15)}
.qpick label.qpick-opt.is-picked .qpick-badge{display:inline-block}
.qpick label.qpick-opt:has(input:checked){background:#fff;border-color:var(--teal);font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.15)}
.qpick label.qpick-opt:has(input:checked) .qpick-badge{display:inline-block}
.qpick label.qpick-opt:has(input:not(:checked)){background:transparent;border-color:transparent;font-weight:400;box-shadow:none}
.qpick label.qpick-opt:has(input:not(:checked)) .qpick-badge{display:none}
.qpick label input:focus-visible{outline:2px solid var(--teal);outline-offset:2px}

/* Redesigned (Oct 28 2026): the 12-step menu in flow order with Pricing / Contact / Vendors to the side (tools/flow.mjs),
   Back / Next step bars, and the Plan your event intake groups. */
.nav-flow .nav-steps{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.3rem}
.nav-flow .nav-steps li{margin:0}
.nav-flow .nav-n{display:inline-flex;align-items:center;justify-content:center;min-width:1.45em;height:1.45em;border-radius:50%;background:var(--gold-soft);color:var(--teal-dark);font-size:.8em;font-weight:700;margin-right:.3em}
.nav-flow a[aria-current="page"] .nav-n{background:var(--gold)}
.nav-flow .nav-side{display:flex;gap:.3rem;padding-left:.7rem;border-left:2px solid var(--line)}
@media (min-width:1101px){
  header.site-header .nav-wrap{flex-wrap:wrap}
  header.site-header .site-nav.nav-flow{position:static;flex:1 1 100%;flex-wrap:wrap;justify-content:space-between;align-items:center;margin:0;padding:0 0 .5rem;gap:.5rem}
  header.site-header .site-nav.nav-flow a{font-size:.95rem;padding:.25rem .5rem;min-height:40px;white-space:nowrap;max-width:none;text-align:left;line-height:1.2}}
@media (max-width:1100px){
  header.site-header .site-nav.nav-flow{flex-direction:column;align-items:stretch}
  .nav-flow .nav-steps{flex-direction:column;gap:.45rem;width:100%}
  .nav-flow .nav-side{flex-direction:column;border-left:0;border-top:2px solid var(--line);padding:.7rem 0 0;width:100%}}
.flow-bar{background:linear-gradient(90deg,var(--gold-soft),#fbefd6);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:1.2rem 0}
.flow-inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.flow-where{margin:0;font-weight:600;text-align:center;flex:1 1 12rem}
.flow-where .eyebrow{display:block;color:var(--teal);margin-bottom:.1rem}
.flow-back:empty{min-width:1px}
@media (max-width:600px){.flow-inner .btn{width:100%;text-align:center}.flow-where{order:-1}}
.intake-group{border:1px solid var(--line);border-radius:12px;padding:.8rem 1rem 1rem;margin:0 0 1rem;min-width:0}
.intake-group legend{font-weight:700;color:var(--teal-dark);padding:0 .4rem}
.intake-group > label{display:block}
.footer-steps{list-style:none;padding:0;margin:0}
.after-thanks{white-space:pre-wrap;background:#fff;border:1px solid var(--line);border-radius:10px;padding:1rem;font-family:inherit}

/* t1609 (Oct 28 2026, Brian): animated header logo. header.site-header .brand now holds <video class="ef-logo"> (tools/flow.mjs);
   same box, beige frame and sizes as the old header img (180px, 120px at 640px and below, 100px phone landscape, 88px at 360px and below).
   The footer logo (.brand-light img) is unchanged. */
header.site-header .brand:not(.brand-light) video.ef-logo{width:180px;height:180px;max-width:100%;flex:0 0 auto;background:#ded6cb;padding:6px;border-radius:12px;box-sizing:border-box;object-fit:contain;display:block}
@media (max-width:640px){header.site-header .brand:not(.brand-light) video.ef-logo{width:120px;height:120px}}
@media (max-height:500px) and (orientation:landscape) and (max-width:1100px){header.site-header .brand:not(.brand-light) video.ef-logo{width:100px;height:100px}}
@media (max-width:360px){header.site-header .brand:not(.brand-light) video.ef-logo{width:88px;height:88px}}

/* t1498 (Oct 28 2026): small-screen header. At 1100px and narrower the 12 steps sit behind the Menu button (unchanged);
   inside the opened menu each step link is now a full block (it was inline, so its padded boxes overlapped the next row).
   Very narrow phones: smaller logo so the Menu button stays on screen. */
@media (max-width:1100px){
  header.site-header .nav-toggle{flex:none}
  header.site-header .site-nav.nav-flow .nav-steps li{display:block}
  header.site-header .site-nav.nav-flow .nav-steps a,header.site-header .site-nav.nav-flow .nav-side a{display:flex;align-items:center;min-height:44px;box-sizing:border-box;line-height:1.2}}
@media (max-width:360px){
  header.site-header .brand:not(.brand-light){font-size:1.85rem !important}
  header.site-header .brand:not(.brand-light) img{width:88px;height:88px}}

/* t1499 (Oct 28 2026): wide-screen header hardening (1101px and up). The 12 step links + Pricing/Contact/Vendors
   always sit in normal flow (never the old absolutely-positioned one-line bar), wrap onto as many lines as needed,
   and push the header taller instead of stacking. Spacing uses margins, not flex `gap`, so older Safari (no flex gap
   before 14.1) spaces them the same. No fixed heights anywhere in the header; badges are static inline-flex. */
@media (min-width:1101px){
  header.site-header{height:auto;min-height:0}
  header.site-header .nav-wrap{height:auto;min-height:0;flex-wrap:wrap;align-items:center}
  header.site-header .site-nav.nav-flow{position:static !important;top:auto;right:auto;bottom:auto;left:auto;transform:none;height:auto;max-height:none;overflow:visible;display:flex;flex:1 1 100%;min-width:0;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0;margin:0;padding:0 0 .35rem}
  header.site-header .site-nav.nav-flow .nav-steps{display:flex;flex:0 1 auto;min-width:0;height:auto;flex-wrap:wrap;align-items:center;gap:0;margin:0;padding:0}
  header.site-header .site-nav.nav-flow .nav-steps li{display:flex;position:static;min-width:0;margin:0 .4rem .4rem 0;padding:0}
  header.site-header .site-nav.nav-flow a{display:inline-flex;align-items:center;position:static;height:auto;min-height:40px;line-height:1.2;white-space:nowrap;margin:0;box-sizing:border-box;max-width:none}
  header.site-header .site-nav.nav-flow .nav-n{position:static;flex:none;line-height:1;margin:0 .3em 0 0}
  header.site-header .site-nav.nav-flow .nav-side{display:flex;flex-wrap:wrap;align-items:center;gap:0;margin:0 0 .4rem}
  header.site-header .site-nav.nav-flow .nav-side a{margin:0 .4rem 0 0}
  header.site-header .site-nav.nav-flow .nav-side a:last-child{margin-right:0}}
/* t1500 (Oct 28 2026): wide screens (1101px+): Pricing & FAQ / Contact / Vendors sit at the header's top right; the 11 steps wrap in normal flow under them, beside the logo (the nav drops to its own full row when there is not 28rem left). Phones: unchanged, all inside the menu. */
@media (min-width:1101px){
  header.site-header .nav-wrap{flex-wrap:wrap;align-items:flex-start}
  header.site-header .site-nav.nav-flow{flex:1 1 28rem;min-width:0;max-width:100%;flex-direction:column;flex-wrap:nowrap;align-items:stretch;justify-content:flex-start;padding:.3rem 0 .35rem}
  header.site-header .site-nav.nav-flow .nav-side{order:-1;align-self:flex-end;justify-content:flex-end;border-left:0;padding-left:0;margin:0 0 .6rem}
  header.site-header .site-nav.nav-flow .nav-steps{flex:0 0 auto;width:100%}
}
/* t1520 (Oct 28 2026, Brian): wide screens (1101px+) only. The 10 step links get their own full-width row at the BOTTOM
   of the header, under the logo + "Event-Forger" row. Vendors / Pricing & FAQ / Contact stay at the top right.
   #site-nav becomes display:contents here, so .nav-side and .nav-steps are direct flex items of .nav-wrap (normal flow,
   flex-wrap; if the side links cannot fit beside the title they wrap under it instead of overlapping). Phones unchanged. */
@media (min-width:1101px){
  header.site-header .nav-wrap{flex-wrap:wrap;align-items:flex-start;padding-bottom:0}
  header.site-header .brand:not(.brand-light){order:0;flex:0 1 auto}
  header.site-header .site-nav.nav-flow{display:contents !important}
  header.site-header .site-nav.nav-flow .nav-side{order:1;flex:0 1 auto;min-width:0;align-self:flex-start;margin:6px 0 0 auto;padding:0;border:0;display:flex;flex-wrap:wrap;justify-content:flex-end}
  header.site-header .site-nav.nav-flow .nav-side a{margin:0 0 .4rem .4rem}
  header.site-header .site-nav.nav-flow .nav-side a:last-child{margin-right:0}
  header.site-header .site-nav.nav-flow .nav-steps{order:2;flex:1 1 100%;width:100%;min-width:0;display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;margin:0;padding:0 0 .35rem;border-top:0}
}

/* t1531 (Oct 28 2026): the link row under the intro text in the page-hero photo (plan.html, reservations.html) was dark teal / grey on a dark photo.
   Light cream-gold links (#FBEFD6, palette: flow-bar gold) and light text (#EEF3F4, same as the hero lead), with a subtle shadow for bright spots in the photo. Scoped to the hero row only. */
.page-hero p.small{color:#EEF3F4;text-shadow:0 1px 3px rgba(0,0,0,.65)}
.page-hero p.small a:not(.btn){color:#FBEFD6;text-decoration-color:rgba(251,239,214,.7);text-underline-offset:.18em}
.page-hero p.small a:not(.btn):hover{color:#FFFFFF;text-decoration-color:#FFFFFF;text-decoration-thickness:2px}
.page-hero p.small a:not(.btn):focus-visible{color:#FFFFFF;outline:2px solid #F6E3BC;outline-offset:2px;border-radius:2px}

/* t1548 (Oct 28 2026, Brian): home "Five ways" cards are display-only (no links, no card buttons); no hover lift or zoom so nothing looks clickable */
#services .photo-card{transition:none}
#services .photo-card:hover{transform:none;box-shadow:var(--shadow)}
#services .photo-card:hover .photo-card-img img{transform:none}

/* t1549 (Oct 28 2026, Brian): "Choose Vendors" left the step flow (8 steps). Wide screens (1101px+) only: the step links
   no longer get their own row under the logo. They sit immediately to the right of the logo, along the logo's bottom edge
   (step 1 "Plan your event" first, lined up under the "Event-Forger" title), so the header is about the logo's height.
   A 3-column grid: logo | title (max-content) | rest. The brand link spans rows 1-2 of columns 1-2; Vendors / Pricing & FAQ /
   Contact sit top right (row 1, column 3, wrapping inside it); the steps fill row 2 under the title (columns 2-3, normal
   flow, wrapping). Row 1 is never shorter than the title, so wrapped steps push the header taller instead of overlapping
   it. #site-nav stays display:contents (t1520). Phones / 1100px and narrower: unchanged (all inside the Menu). */
@media (min-width:1101px){
  header.site-header .nav-wrap{display:grid;grid-template-columns:180px fit-content(60%) minmax(min-content,1fr);grid-template-rows:minmax(calc(14px + 3.25rem),1fr) auto;align-items:start;gap:0;padding:6px 20px 6px 8px;height:auto}
  header.site-header .brand:not(.brand-light){grid-column:1 / 3;grid-row:1 / 3;align-self:stretch;display:grid;grid-template-columns:subgrid;grid-template-rows:subgrid;gap:0;align-items:start;margin:0}
  header.site-header .brand:not(.brand-light) .ef-logo{grid-column:1;grid-row:1 / 3}
  header.site-header .brand:not(.brand-light) span{grid-column:2;grid-row:1;padding-top:14px;white-space:normal}
  header.site-header .site-nav.nav-flow .nav-side{grid-column:3;grid-row:1;justify-self:end;align-self:start;min-width:0;max-width:100%;margin:6px 0 .3rem 1rem}
  header.site-header .site-nav.nav-flow .nav-steps{grid-column:2 / 4;grid-row:2;align-self:end;justify-self:stretch;width:auto;min-width:0;flex:none;margin:0 0 -.4rem .5rem;padding:0;position:relative;z-index:1}
}


/* t1705: Venue address split into Street / City / State / Zip: one row on desktop, stacked on narrow screens */
.ef-addr{grid-column:1/-1;margin:0 0 .6rem}
.ef-addr-lbl{display:block;font-weight:600;margin:0 0 .2rem}
.ef-addr-row{display:grid;grid-template-columns:minmax(0,2.2fr) minmax(0,1.4fr) minmax(0,.7fr) minmax(0,.9fr);gap:0 .75rem}
.ef-addr-row label{margin:0}
.ef-addr input[readonly]{background:#f4f4f4;cursor:default}
@media (max-width:640px){.ef-addr-row{grid-template-columns:1fr}}
/* t1706: driving distances panel (Plan page) */
.ef-dist{grid-column:1/-1;margin:.2rem 0 .8rem;padding:.7rem .9rem;border:1px solid #d9e6e6;border-radius:10px;background:#f7fbfb}
.ef-dist-h{margin:0 0 .3rem;font-size:1.05rem}
.ef-dist-approx{font-weight:400;color:#6a5200}
.ef-dist-list{margin:.5rem 0 0;padding-left:1.1rem}.ef-dist-list:empty{display:none}
.ef-dist-status:empty,.ef-dist-from:empty{display:none}

/* t1709: first-time friend/family day-of coordinator: name + email + "Send the guide" */
.ef-cg{border-left:3px solid #0f5f64;padding:.25rem 0 .25rem .85rem;margin-top:.5rem}
.ef-cg-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:0 .75rem}
.ef-cg-row label{display:block}
.ef-cg-row input{width:100%;box-sizing:border-box}
.ef-cg-actions{margin:.5rem 0 .25rem}
.ef-cg-status:empty{display:none}
.ef-cg-status.cg-ok{color:#1e6b3a;font-weight:600}
.ef-cg-status.cg-err{color:#a30000}
.res-cg-note{margin:.4rem 0 0}
@media (max-width:640px){.ef-cg-row{grid-template-columns:1fr}}

/* t1710: day-of items due by the event date (rescue.html banner, plan.html one-line notice) */
.dayof-due{background:#fff4d6;border:2px solid var(--gold);border-left-width:8px;border-radius:var(--radius);padding:1rem 1.25rem;margin:0 auto 1.5rem;max-width:860px;color:var(--ink);font-size:1.05rem}
.dayof-due-head{display:flex;gap:.75rem;align-items:flex-start;justify-content:space-between}
.dayof-due-head h3{margin:0;font-size:1.2rem}
.dayof-due-x{flex:none;margin:0}
.dayof-due-g{margin:.8rem 0 .2rem;font-weight:700}
.dayof-due-list{margin:0;padding-left:1.3rem}
.dayof-due-list li{margin:.15rem 0}
.dayof-due-foot{margin:.8rem 0 0}
.plan-dayof-due{margin:0 0 1.2rem}
@media (max-width:560px){.dayof-due-head{flex-direction:column}}
