/*
Theme Name: San Pedro Calendar
Theme URI: https://sanpedrocalendar.com/
Author: SanPedro.com
Description: Single-page event calendar for SanPedroCalendar.com. Shows the same combined calendar as SanPedro.com (all feeds and approved submissions), read from SanPedro.com every 15 minutes, with list and month views, category and venue filters, photos, add-to-calendar and subscribe links, plus a Cruise Ships page for the World Cruise Center schedule. Events are managed on SanPedro.com.
Version: 1.2.3
Requires at least: 6.4
Tested up to: 6.8
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: sanpedrocalendar
*/
:root{
  --bg:#f5f6fa; --surface:#ffffff; --ink:#0a1238; --muted:#4e5675; --line:#d6dae6;
  --harbor:#050e3d; --harbor-ink:#eef1fa; --bridge:#c42a52; --coral:#ff557e; --buoy:#05c3f9; --buoy-ink:#050e3d; --buoy-deep:#00719e;
  --chip:#e7eaf3;
  --display:"Big Shoulders Display","Arial Narrow",Impact,sans-serif;
  --body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;
  color-scheme:light;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{background:var(--bg);color:var(--ink);font:16px/1.6 var(--body)}
a{color:inherit}
:focus-visible{outline:3px solid var(--buoy-deep);outline-offset:2px}
.wrap{max-width:1180px;margin:0 auto;padding-inline:20px}
h1,h2,h3{font-family:var(--display);line-height:1;text-wrap:balance;margin:0;letter-spacing:.01em}
h2{font-size:clamp(2.2rem,5vw,3.4rem);font-weight:800;text-transform:uppercase}
.eyebrow{font:500 .75rem/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--bridge)}
.sec-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:end;gap:16px;margin-bottom:32px}
.sec-head p{margin:10px 0 0;max-width:60ch;color:var(--muted)}
.btn{display:inline-flex;align-items:center;gap:8px;padding:12px 20px;border-radius:2px;font-weight:600;text-decoration:none;border:2px solid currentColor}
.btn.solid{background:var(--buoy);color:var(--buoy-ink);border-color:var(--buoy)}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{background:var(--chip);color:var(--ink);border:0;padding:6px 10px;font:500 .85rem var(--body);border-radius:2px;cursor:pointer}
.chip[aria-pressed="true"]{background:var(--bridge);color:#fff}
body{margin:0}
.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}
.events-empty{border:1px solid var(--line);background:var(--surface);padding:28px;display:flex;flex-wrap:wrap;gap:16px;align-items:center;justify-content:space-between}
.events-empty p{margin:0;color:var(--muted)}
.stay-tags{display:flex;flex-wrap:wrap;gap:6px}
.stay-tags span{font:500 .7rem var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--bridge);background:var(--chip);padding:3px 8px;border-radius:2px}
.cal{display:grid;gap:24px}
.cal-subscribe{display:flex;flex-wrap:wrap;gap:16px;align-items:center;justify-content:space-between;background:var(--harbor);color:var(--harbor-ink);padding:20px 24px;border-radius:2px}
.cal-subscribe-links{display:flex;flex-wrap:wrap;gap:8px}
.cal-subscribe .btn{color:var(--harbor-ink);padding:9px 14px;font-size:.88rem;background:none;cursor:pointer;font-family:var(--body)}
.cal-subscribe .btn:hover{background:var(--buoy);color:var(--buoy-ink);border-color:var(--buoy)}
.cal-bar{display:flex;flex-wrap:wrap;gap:12px 24px;align-items:center;justify-content:space-between}
.cal-views,.cal-cats,.cal-venues{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.cal-venues{flex-basis:100%}
.chips-label{font:500 .74rem var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-right:6px}
.cal-month{font-size:clamp(1.6rem,3.4vw,2.2rem);margin:12px 0 0}
.cal-group{display:grid;gap:1px;background:var(--line);border:1px solid var(--line);margin-top:12px}
.cal-ev{display:grid;grid-template-columns:76px minmax(0,1fr);gap:20px;background:var(--surface);padding:18px 20px;transition:box-shadow .3s}
.cal-ev.flash{box-shadow:inset 0 0 0 3px var(--buoy)}
.cal-date{text-align:center;border-top:4px solid var(--coral);background:var(--chip);padding:8px 4px;align-self:start}
.cal-date span{display:block;font:500 .7rem var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.cal-date strong{display:block;font:800 2rem/1 var(--display)}
.cal-body h3{font:800 1.45rem/1.05 var(--display);text-transform:uppercase;margin:4px 0 6px}
.cal-when{font:500 .85rem var(--mono);color:var(--bridge)}
.cal-where{font-size:.92rem;margin-top:4px}
.cal-where a{color:var(--ink)}
.cal-src{font:500 .74rem var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted,#5b6478);margin-top:6px}
.cal-src a{color:inherit}
.cal-body details{margin-top:8px}
.cal-body summary{cursor:pointer;font-weight:600;font-size:.9rem;color:var(--bridge)}
.cal-desc{font-size:.95rem;color:var(--muted);max-width:68ch}
.cal-desc a{color:var(--bridge);overflow-wrap:anywhere}
.cal-add{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;margin-top:10px;font-size:.85rem}
.cal-add span{color:var(--muted)}
.cal-add a{font-weight:600;color:var(--bridge)}
.cal-nav{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px}
.cal-nav .btn{color:var(--ink);padding:8px 16px;background:none;cursor:pointer}
.cal-title{font-size:clamp(1.6rem,3.4vw,2.2rem);margin:0}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line)}
.cal-dow{background:var(--harbor);color:var(--harbor-ink);font:500 .7rem var(--mono);letter-spacing:.1em;text-transform:uppercase;padding:8px;text-align:center}
.cal-day{background:var(--surface);min-height:108px;padding:6px;display:flex;flex-direction:column;gap:3px;min-width:0}
.cal-day.out{background:var(--bg);opacity:.55}
.cal-day.today .n{background:var(--coral);color:#fff;border-radius:2px;padding:0 6px}
.cal-day .n{font:600 .85rem var(--mono);align-self:flex-start}
.cal-day a{display:block;font-size:.76rem;line-height:1.25;background:var(--chip);border-left:3px solid var(--buoy);padding:3px 5px;text-decoration:none;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-day a:hover{background:var(--buoy);color:var(--buoy-ink)}
.cal-day small{font-size:.72rem;color:var(--muted)}
@media (max-width:640px){.cal-ev{grid-template-columns:58px minmax(0,1fr);gap:14px;padding:14px}.cal-date strong{font-size:1.6rem}.cal-day{min-height:64px;padding:3px}.cal-day a{font-size:0;border-left-width:6px;padding:0;height:6px}.cal-day a b{display:none}.cal-dow{font-size:.6rem;padding:6px 2px}}
.cal-ev.has-img{grid-template-columns:76px minmax(0,1fr) 220px}
.cal-img{align-self:start;aspect-ratio:4/3;overflow:hidden;background:var(--chip);border-radius:2px}
.cal-img a,.cal-img img{display:block;width:100%;height:100%}
.cal-img img{object-fit:cover;transition:transform .4s}
.cal-img a:hover img{transform:scale(1.03)}
@media (max-width:820px){.cal-ev.has-img{grid-template-columns:76px minmax(0,1fr) 150px}}
@media (max-width:640px){.cal-ev.has-img{grid-template-columns:58px minmax(0,1fr)}.cal-ev.has-img .cal-img{grid-column:1/-1;order:-1;aspect-ratio:16/9}}
.cal-more{display:inline-block;margin:10px 12px 0 0;padding:8px 14px;font-size:.85rem}
.cal-body .cal-more + .cal-add{display:inline-flex}
.cal-submit-link{margin:0 0 12px;font-weight:600}
.cal-submit-link a{color:var(--bridge)}
/* ---------- site frame ---------- */
body{margin:0}
.spc-top{position:sticky;top:0;z-index:20;background:var(--harbor);color:var(--harbor-ink);border-bottom:4px solid var(--buoy)}
.spc-top .wrap{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:64px;flex-wrap:wrap}
.spc-logo{font:900 1.6rem/1 var(--display);letter-spacing:.02em;text-decoration:none;text-transform:uppercase;color:var(--harbor-ink)}
.spc-logo b{color:var(--buoy);font-weight:900}
.spc-nav{display:flex;flex-wrap:wrap;gap:6px 18px;font-weight:600;font-size:.95rem}
.spc-nav a{text-decoration:none;color:var(--harbor-ink)}
.spc-nav a:hover{color:var(--buoy)}
.spc-nav .spc-submit{background:var(--coral);color:#fff;padding:8px 14px;border-radius:2px}
.spc-nav .spc-submit:hover{color:#fff;filter:brightness(1.08)}
.spc-hero{background:var(--harbor);color:var(--harbor-ink);padding:36px 0 40px;border-bottom:4px solid var(--coral)}
.spc-hero h1{font-size:clamp(2.6rem,7vw,4.6rem);font-weight:900;text-transform:uppercase}
.spc-hero p{max-width:62ch;margin:12px 0 0;color:#c9cfe6;font-size:1.05rem}
.spc-hero .eyebrow{color:var(--buoy);margin-bottom:10px}
.spc-main{padding:32px 0 64px}
.spc-note{margin:0 0 16px;font-size:.92rem;color:var(--muted)}
.spc-note a{color:var(--bridge);font-weight:600}
.spc-foot{background:var(--harbor);color:#c9cfe6;padding:28px 0;font-size:.9rem}
.spc-foot .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px}
.spc-foot a{color:var(--harbor-ink);font-weight:600}
.spc-page{max-width:760px}
.spc-page h1{font-size:clamp(2.2rem,5vw,3.2rem);text-transform:uppercase;margin-bottom:16px}
.screen-reader-text:focus{position:fixed!important;top:8px;left:8px;width:auto;height:auto;clip:auto;clip-path:none;z-index:100;background:#fff;color:var(--ink);padding:10px 14px}
@media (max-width:640px){.spc-top{position:static}.spc-top .wrap{gap:8px;padding-block:10px;min-height:0}.spc-logo{font-size:1.35rem}.spc-nav{gap:4px 14px;font-size:.88rem;align-items:center}.spc-nav .spc-submit{padding:6px 10px}.spc-hero{padding:24px 0 28px}}
