/* LeoSax — 大字、高對比、淺色版（為 60–70 歲使用者調整） */
:root{
  --bg:#faf6ee; --card:#ffffff; --ink:#1b2430; --ink2:#434f5c;
  --navy:#16324f; --navy-d:#0f2338; --navy-soft:#e8eff6;
  --gold:#8a5a14; --gold-line:#d9b672; --gold-bright:#f1d6a7;
  --line:#ddd2bd; --field-line:#8c97a3;
  --ok:#17653a; --ok-bg:#e3f3e8; --warn-bg:#fff2cf; --warn-line:#e0a82e; --warn-ink:#5e3e00;
  --danger:#b3261e; --danger-bg:#fde8e6; --focus:#1a5fd0;
  --shadow:0 6px 24px rgba(40,30,10,.10);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:"Noto Sans TC","PingFang TC","Microsoft JhengHei",system-ui,sans-serif;font-size:19px;line-height:1.75;-webkit-font-smoothing:antialiased}
h1,h2,h3,h4,p,ol,dl,dd,fieldset{margin:0;padding:0}
h1,h2,h3{line-height:1.4;color:var(--ink)}
h1{font-size:clamp(30px,6vw,42px);font-weight:800}
h2{font-size:26px;font-weight:800}
h3{font-size:24px;font-weight:800}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
button:disabled{cursor:not-allowed;opacity:.5}
:focus-visible{outline:4px solid var(--focus);outline-offset:3px}
.muted{color:var(--ink2)} .tiny{font-size:15px} .small{font-size:16px} .gold{color:var(--gold)} .nowrap{white-space:nowrap}
.app{min-height:100vh}
.container{max-width:1100px;margin:0 auto;padding:0 20px}
.container.narrow{max-width:760px}
.main{min-height:calc(100vh - 220px);padding-bottom:48px}

/* header / footer */
.header{background:var(--navy);position:sticky;top:0;z-index:30;box-shadow:0 2px 12px rgba(0,0,0,.18)}
.header-inner{max-width:1100px;margin:auto;padding:10px 20px;display:flex;justify-content:space-between;align-items:center;gap:16px;min-height:72px}
.brand{display:inline-flex;align-items:center;gap:12px;min-width:0;color:#fff}
.brand-mark{height:48px;width:48px;display:grid;place-items:center;border:2px solid var(--gold-bright);border-radius:50%;font:italic 32px Georgia,serif;color:var(--gold-bright);flex-shrink:0}
.brand-name{font:italic 28px Georgia,serif;color:var(--gold-bright);line-height:1.1}
.brand-mini{font-style:normal;font-size:13px;letter-spacing:2px;color:#d6dde5;margin-left:8px}
.brand-zh{color:#e8edf2;font-size:16px;line-height:1.3}
.nav{display:flex;gap:8px;align-items:center}
.nav-item{display:inline-flex;align-items:center;min-height:48px;padding:6px 18px;border-radius:12px;color:#fff;font-size:18px;font-weight:700;border:2px solid rgba(255,255,255,.45);white-space:nowrap}
.nav-item:hover,.nav-item.active{background:rgba(255,255,255,.14)}
.footer{text-align:center;padding:28px 16px 40px;border-top:2px solid var(--line);font-size:16px;color:var(--ink2);line-height:2}
.footer b{color:var(--navy)}
.line{display:none}

/* buttons */
.button{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:60px;padding:12px 26px;border-radius:14px;font-size:21px;font-weight:800;text-align:center;border:2px solid transparent;transition:background .15s,transform .1s}
.button:active:not(:disabled){transform:scale(.98)}
.button-primary{background:var(--navy);color:#fff;border-color:var(--navy)}
.button-primary:hover:not(:disabled){background:var(--navy-d)}
.button-outline{background:#fff;color:var(--navy);border-color:var(--navy)}
.button-outline:hover:not(:disabled){background:var(--navy-soft)}
.button-soft{background:var(--navy-soft);color:var(--navy);border-color:#bfd0e0}
.button-danger{background:#fff;color:var(--danger);border-color:var(--danger)}
.button-sm{min-height:46px;padding:8px 16px;font-size:17px;border-radius:10px}
.button-block{width:100%}
.button+.button-block,.button-block+.button-block{margin-top:12px}

/* pills / notices */
.pill{display:inline-block;padding:5px 16px;border-radius:999px;font-size:17px;font-weight:800;background:var(--ok-bg);color:var(--ok);border:2px solid #9ccdb0}
.pill.ok{background:var(--ok-bg);color:var(--ok)}
.pill.dim{background:#ececec;color:#4b5560;border-color:#c4c9ce}
.notice-panel{background:var(--warn-bg);border:2px solid var(--warn-line);border-left-width:10px;border-radius:14px;padding:18px 20px;margin:24px 0}
.notice-panel strong{display:block;font-size:21px;color:var(--warn-ink)}
.notice-panel p{white-space:pre-line;font-size:20px;line-height:1.9;margin-top:8px;color:#2a2200}
.notice-strip{margin:28px 0 8px;background:#fff;border:2px solid var(--line);border-radius:14px;padding:18px 20px;display:flex;gap:14px;align-items:flex-start;font-size:18px}
.notice-strip .symbol{color:var(--gold);font-size:28px;line-height:1.2}
.notice-strip b{color:var(--navy)}
.inline-alert{border:2px solid var(--danger);background:var(--danger-bg);color:#7d1710;border-radius:12px;padding:14px 18px;font-size:18px;margin-bottom:16px}
.empty{text-align:center;padding:48px 16px;color:var(--ink2);font-size:20px}
.empty .button{margin-top:16px}

/* ===== home ===== */
.hero{display:grid;grid-template-columns:1.1fr .9fr;align-items:center;position:relative;margin-top:24px;border-radius:22px;background:linear-gradient(135deg,#16324f,#0f2338);color:#f7f0e4;overflow:hidden;padding:0 40px}
.hero-copy{padding:48px 0;position:relative;z-index:2}
.hero .kicker{color:var(--gold-bright)}
.hero h1{color:#fff;font-size:clamp(32px,5vw,50px);line-height:1.45;margin:16px 0;font-weight:700}
.hero em{font-family:inherit;color:var(--gold-bright);font-style:normal;font-weight:inherit}
.hero .gold{color:var(--gold-bright)}
.hero-desc{font-size:19px;color:#e3e9ee;line-height:1.9;max-width:480px}
.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:26px}
.hero .button-primary{background:var(--gold-bright);color:#1b2430;border-color:var(--gold-bright)}
.hero .button-primary:hover{background:#fff}
.hero .button-outline{background:transparent;color:#fff;border-color:rgba(255,255,255,.8)}
.hero .button-outline:hover{background:rgba(255,255,255,.14)}
.hero-art{height:100%;display:grid;place-items:center;min-height:300px;position:relative}
.orbit{position:absolute;width:min(300px,90%);aspect-ratio:1;border-radius:50%;border:2px solid rgba(241,214,167,.3)}
.sax-image{height:270px;width:195px;transform:rotate(-8deg);position:relative;z-index:1}
.floating-note{position:absolute;font:30px Georgia,serif;color:rgba(241,214,167,.7)}
.floating-note.n1{top:14%;left:10%} .floating-note.n2{right:6%;bottom:20%}
.hero-art-caption{display:none}
.kicker{display:flex;align-items:center;gap:10px;letter-spacing:2px;font-size:15px;font-weight:800;color:var(--gold);text-transform:uppercase}
.kicker:before{content:"";width:24px;height:2px;background:currentColor}
.section-title{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin:40px 0 20px;flex-wrap:wrap}
.section-title h2{font-size:32px;margin-top:6px}
.section-title em{font:italic 22px Georgia,serif;color:var(--gold)}
.section-sub{font-size:18px;color:var(--ink2)}
.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}
.event-card{background:var(--card);border:2px solid var(--line);border-radius:20px;overflow:hidden;box-shadow:var(--shadow);display:flex;flex-direction:column}
.card-banner{display:block;padding:20px 24px;background:linear-gradient(135deg,#2c4f73,#16324f);color:#fff;position:relative}
.card-banner.care{background:linear-gradient(135deg,#2f6a58,#173f33)}
.card-date-big{display:block;font-size:38px;font-weight:800;line-height:1.2;letter-spacing:1px}
.card-week{display:block;font-size:20px;color:#e6edf3}
.card-kind-tag{position:absolute;right:20px;top:20px;border:2px solid rgba(255,255,255,.7);border-radius:999px;padding:2px 14px;font-size:16px;font-weight:700}
.card-body{padding:22px 24px 26px;display:flex;flex-direction:column;gap:10px;flex:1}
.card-body h3{margin-top:4px}
.card-time{font-size:19px;font-weight:700;color:var(--ink)}
.card-desc{font-size:18px;color:var(--ink2);line-height:1.8}
.card-count{font-size:19px}
.card-count b{font-size:24px;color:var(--navy)}
.card-actions{display:grid;grid-template-columns:1.4fr 1fr;gap:12px;margin-top:auto;padding-top:12px}
.card-actions .button{padding:12px 10px}

/* ===== event page ===== */
.crumb{padding:20px 0 6px}
.crumb a{display:inline-flex;align-items:center;min-height:48px;font-size:19px;font-weight:700;color:var(--navy);text-decoration:underline;text-underline-offset:4px}
.ev-head{padding:8px 0 18px}
.ev-head h1{margin-top:12px}
.ev-info{background:var(--card);border:2px solid var(--line);border-radius:18px;padding:8px 20px;box-shadow:var(--shadow)}
.info-row{display:flex;align-items:center;gap:14px;padding:14px 0;font-size:21px;font-weight:600;border-bottom:1px solid #eee5d3}
.info-row:last-child{border-bottom:none}
.info-icon{font-size:26px;width:36px;text-align:center;flex-shrink:0}
.info-date{font-size:28px;font-weight:800;color:var(--navy)}
.ev-desc{font-size:20px;line-height:1.95;white-space:pre-line;margin-top:22px;color:var(--ink)}
.ev-form,.ev-roster,.share-box{background:var(--card);border:2px solid var(--line);border-radius:18px;padding:26px 22px;margin-top:28px;box-shadow:var(--shadow)}
.ev-form h2,.ev-roster h2,.share-box h2{margin-bottom:18px;padding-bottom:12px;border-bottom:3px solid var(--gold-line)}
.ev-form{border-color:var(--navy);border-width:3px}
.closed-box{background:#f3f3f3;border-radius:12px;padding:20px;font-size:20px}
.closed-box strong{display:block;font-size:24px;margin-bottom:6px}
.share-box{background:var(--navy-soft);border-color:#bfd0e0;box-shadow:none}
.share-box p{margin-bottom:16px}

/* form */
.form-field{margin-bottom:28px;border:none;min-width:0}
fieldset.form-field{padding:0}
legend.field-label{padding:0}
.field-label{display:block;font-size:22px;font-weight:800;color:var(--ink);margin-bottom:10px}
.req{font-size:16px;font-weight:700;color:var(--danger);margin-left:4px}
.field-hint{display:block;color:var(--ink2);font-size:17px;font-weight:400;margin-bottom:10px}
label .field-hint{display:inline;margin:0 0 0 4px}
.field{width:100%;min-height:62px;background:#fff;color:var(--ink);border:2px solid var(--field-line);border-radius:12px;padding:12px 16px;font-size:22px}
.field::placeholder{color:#6b7682}
.field:focus{border-color:var(--navy);outline:4px solid rgba(26,95,208,.35);outline-offset:0}
.field:disabled{opacity:.6}
select.field{appearance:auto}
.textarea{min-height:110px;resize:vertical;font-size:20px;line-height:1.6}
.form-error{color:var(--danger);font-size:19px;font-weight:700;margin:0 0 16px}
.form-error:not(:empty){background:var(--danger-bg);border:2px solid var(--danger);border-radius:12px;padding:14px 16px}
.form-footer{color:var(--ink2);font-size:16px;text-align:center;margin-top:14px}
.hidden-trap{position:absolute!important;left:-9999px;top:-9999px}
.choice{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;min-height:72px;padding:12px 16px;margin:10px 0;border:2px solid #b9ae96;border-radius:14px;background:#fff}
.choice.on{border-color:var(--navy);background:var(--navy-soft)}
.choice-main{display:flex;align-items:center;gap:14px;cursor:pointer;flex:1;min-height:48px;font-size:21px;font-weight:700}
.choice input[type=checkbox]{width:32px;height:32px;accent-color:var(--navy);flex-shrink:0}
.stepper{display:none;align-items:center;gap:8px}
.choice.on .stepper{display:flex}
.step-btn{width:52px;height:52px;border-radius:12px;border:2px solid var(--navy);background:#fff;color:var(--navy);font-size:30px;font-weight:800;line-height:1;padding:0}
.step-btn:active{background:var(--navy-soft)}
.qty{width:64px;height:52px;border:2px solid var(--field-line);border-radius:10px;background:#fff;text-align:center;font-size:24px;font-weight:800;padding:0;-moz-appearance:textfield}
.qty::-webkit-outer-spin-button,.qty::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
#other-kind-wrap .field{margin-top:4px}

/* success */
.success{text-align:center;padding:6px 0}
.success-mark{height:92px;width:92px;display:grid;place-items:center;border-radius:50%;background:var(--ok);color:#fff;font-size:54px;margin:0 auto 14px}
.success h2{border:none;padding:0;margin:0 0 14px;font-size:32px;color:var(--ok)}
.receipt{text-align:left;background:var(--ok-bg);border:2px solid #9ccdb0;border-radius:14px;padding:16px 20px;margin-bottom:18px;display:grid;grid-template-columns:auto 1fr;gap:6px 18px;font-size:22px}
.receipt dt{color:var(--ink2);font-weight:700}
.receipt dd{font-weight:800;overflow-wrap:anywhere}
.success-tip{font-size:20px;background:var(--warn-bg);border:2px solid var(--warn-line);border-radius:12px;padding:14px 16px;margin-bottom:18px;text-align:left}
.adv{margin-top:22px;text-align:left;font-size:18px}
.adv summary{cursor:pointer;min-height:48px;display:flex;align-items:center;color:var(--navy);font-weight:700;text-decoration:underline}
.adv p{margin:8px 0}
.copy-url{background:#f4efe3;border-radius:10px;padding:12px 14px;font-size:16px;overflow-wrap:anywhere;margin:10px 0 14px;color:var(--ink2);text-align:left}

/* public roster */
.roster-count{font-size:20px;font-weight:700;color:var(--ink2);margin-left:6px}
.roster-note{font-size:20px;color:var(--ink2);padding:8px 0}
.pub-roster{list-style:none}
.pub-roster li{display:grid;grid-template-columns:44px 1fr;column-gap:14px;row-gap:0;align-items:center;padding:14px 10px;border-bottom:1px solid #e9e0cd;font-size:21px}
.pub-roster li:last-child{border-bottom:none}
.pub-roster .no{grid-row:1/3;width:40px;height:40px;border-radius:50%;background:var(--navy);color:#fff;display:grid;place-items:center;font-size:18px;font-weight:800}
.pub-roster .who{font-weight:800}
.pub-roster .who em{font-style:normal;color:var(--ok);font-size:17px}
.pub-roster .what{color:var(--ink2);font-size:19px;overflow-wrap:anywhere}
.pub-roster li.me{background:var(--ok-bg);border-radius:12px;border-bottom-color:transparent}

/* manage / generic panels */
.page-heading{padding:32px 0 20px}
.page-heading h1{margin:10px 0}
.page-heading p{font-size:19px;color:var(--ink2)}
.breadcrumbs{display:flex;align-items:center;gap:10px;font-size:17px;color:var(--ink2)}
.breadcrumbs a{color:var(--navy);text-decoration:underline;font-weight:700}
.detail-grid{display:grid;grid-template-columns:1fr;gap:24px;max-width:760px}
.panel{background:var(--card);border:2px solid var(--line);border-radius:18px;padding:24px 22px;box-shadow:var(--shadow)}
.panel h2{font-size:24px}
.panel-marker{display:none}
.detail-date{font-size:30px;font-weight:800;color:var(--navy);margin:16px 0}
.detail-description{margin:12px 0 20px;font-size:20px;line-height:1.9;white-space:pre-line}
.form-heading{margin-bottom:20px}
.separator{margin:26px 0;border:none;border-top:2px solid var(--line)}
.note-warning{font-size:18px;color:var(--warn-ink);margin-bottom:12px}

/* ===== admin ===== */
.admin-main .page-heading{padding-top:28px}
.admin-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;flex-wrap:wrap}
.admin-selector{min-width:260px}
.admin-selector .field{min-width:240px}
.admin-controls{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 22px}
.stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:20px}
.stat{padding:18px;background:#fff;border:2px solid var(--line);border-radius:14px}
.stat-label{font-size:17px;color:var(--ink2);font-weight:700}
.stat-num{font-size:40px;font-weight:800;color:var(--navy);line-height:1.3}
.stat-foot{font-size:12px;color:var(--ink2);letter-spacing:0;overflow-wrap:anywhere}
.tabs{display:flex;gap:8px;border-bottom:3px solid var(--line);padding-bottom:12px;margin-bottom:24px;overflow-x:auto}
.tab{border:2px solid transparent;border-radius:10px;background:transparent;color:var(--ink2);padding:10px 20px;font-size:19px;font-weight:700;white-space:nowrap}
.tab.active{background:var(--navy);color:#fff}
.overview{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.overview-line{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid #eee5d3;font-size:18px;color:var(--ink2)}
.overview-line:last-child{border-bottom:none}
.overview-line strong{color:var(--ink);text-align:right}
.bar-wrap{height:10px;background:#e4dccb;border-radius:8px;overflow:hidden;flex:1;max-width:170px}
.bar-wrap b{display:block;height:100%;background:var(--navy);border-radius:8px}
.admin-edit-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 18px}
.toggle{border:2px solid var(--line);border-radius:12px;padding:14px 16px;background:#fff;display:flex;justify-content:space-between;gap:14px;align-items:center;font-size:19px;margin-bottom:18px}
.toggle input{accent-color:var(--navy);width:28px;height:28px}
.toggle .muted{font-size:16px}
.table-wrap{overflow-x:auto}
.table{width:100%;border-collapse:collapse;min-width:680px;text-align:left}
.table th{padding:12px 10px;background:var(--navy-soft);color:var(--navy);font-size:16px;font-weight:800;border-bottom:2px solid var(--line)}
.table td{font-size:18px;padding:12px 10px;border-bottom:1px solid #eee5d3;vertical-align:middle}
.table .index{font-weight:800;color:var(--gold)}
.table-search{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:0 0 16px}
.table-search .field{max-width:300px;min-height:50px;font-size:18px}
.status{min-height:44px;background:#fff;border:2px solid var(--field-line);border-radius:8px;padding:6px 8px;font-size:17px}
.arrow-button{border:2px solid var(--navy);background:#fff;color:var(--navy);border-radius:8px;padding:4px 12px;margin-right:6px;font-size:18px;min-height:44px}
.roster-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}
.admin-help{color:var(--ink2);font-size:16px;margin-top:14px}
.login-layout{max-width:520px;margin:0 auto;padding:40px 0 70px}
.login-heading{text-align:center;padding-bottom:22px}
.login-heading .kicker{justify-content:center}
.login-heading .kicker:before{display:none}
.login-heading h1{font-size:34px;margin:12px 0}
.login-heading p{color:var(--ink2);font-size:17px}
.login-icon{width:72px;height:72px;border:2px solid var(--navy);border-radius:50%;display:grid;place-items:center;margin:0 auto 18px;font:italic 46px Georgia,serif;color:var(--navy)}
.spaced{display:flex;justify-content:space-between;align-items:center;gap:15px;flex-wrap:wrap}

/* modal / toast / loading */
.modal-cover{position:fixed;inset:0;z-index:60;display:grid;place-items:center;background:rgba(15,35,56,.7);padding:16px}
.modal{background:#fff;border-radius:18px;width:100%;max-width:620px;max-height:92vh;overflow-y:auto;padding:24px;box-shadow:0 25px 80px rgba(0,0,0,.4)}
.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:18px}
.modal-head h2{font-size:24px}
.modal-head p{font-size:16px;color:var(--ink2);margin-top:4px}
.close{border:2px solid var(--navy);background:#fff;color:var(--navy);width:48px;height:48px;border-radius:10px;font-size:26px;flex-shrink:0}
.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px;flex-wrap:wrap}
.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:100;padding:16px 24px;background:var(--ok);color:#fff;border-radius:14px;box-shadow:0 10px 40px rgba(0,0,0,.35);font-size:20px;font-weight:700;width:calc(100% - 32px);max-width:520px;text-align:center}
.toast.error{background:var(--danger)}
.loader{min-height:45vh;display:grid;place-items:center;color:var(--navy);font:italic 28px Georgia,serif}
.loading-shell{min-height:100vh;display:grid;place-content:center;text-align:center;gap:14px;background:var(--navy);color:var(--gold-bright)}
.loading-monogram{margin:auto;border:2px solid var(--gold-bright);border-radius:50%;height:68px;width:68px;display:grid;place-items:center;font:italic 46px Georgia,serif}
.loading-shell p{letter-spacing:3px;font-size:14px}

@media(max-width:900px){
  .hero{grid-template-columns:1fr;padding:0 24px}
  .hero-art{position:absolute;right:-70px;top:0;width:240px;min-height:240px;height:240px;opacity:.22;pointer-events:none}
  .overview,.admin-edit-grid{grid-template-columns:1fr}
}
@media(max-width:660px){
  body{font-size:19px}
  .container{padding:0 16px}
  .header-inner{padding:8px 16px;min-height:66px}
  .brand-mark{width:42px;height:42px;font-size:28px}
  .brand-name{font-size:24px}
  .brand-mini{display:none}
  .brand-zh{font-size:15px}
  .nav-item{padding:6px 10px;font-size:16px}
  .nav{gap:6px}
  .cards{grid-template-columns:1fr;gap:18px}
  .hero{margin-top:16px;border-radius:18px}
  .hero-copy{padding:36px 0}
  .section-title h2{font-size:28px}
  .ev-form,.ev-roster,.share-box{padding:22px 16px}
  .info-row{font-size:20px}
  .info-date{font-size:26px}
  .stats{gap:8px}
  .stat{padding:12px 8px}
  .stat-label{font-size:14px}
  .stat-num{font-size:30px}
  .toggle{font-size:18px}
  .modal{padding:18px}
  .modal-actions>.button{flex:1}
  .card-actions{grid-template-columns:1fr 1fr}
}
@media(max-width:380px){
  .brand-zh{display:none}
}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
