:root{--ground: #fbfbf9;--surface: #ffffff;--raised: #efefeb;--border: #d8d8d2;--control: #c9c9c2;--text: #1c1e1d;--muted: #6d716c;--accent: #1f5c4d;--accent-soft: #e3efe9;--accent-track: #c8ddd3;--accent-ink: #17463a;--positive: #247b50;--negative: #b3452f;--warning: #92400e;--pill-positive-bg: #dcfce7;--pill-positive-ink: #14532d;--pill-negative-bg: #ffe9e7;--pill-negative-ink: #7c2d1e;--pill-neutral-bg: #efefeb;--pill-neutral-ink: #374151;--pill-accent-bg: #e3efe9;--pill-accent-ink: #17463a;--radius-card: 4px;--radius-control: 3px;--gap: 16px;--fs-title: 28px;--fs-section: 18px;--fs-kpi: 24px;--fs-body: 15px;--fs-small: 13px;--font: "DM Sans", "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", system-ui, sans-serif}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}body{margin:0;background:var(--ground);color:var(--text);font-family:var(--font);font-size:var(--fs-body);line-height:1.55;font-variant-numeric:tabular-nums;overscroll-behavior-y:none}button,select{touch-action:manipulation}input,textarea,select{font-size:16px}#root{min-height:100vh;display:flex;flex-direction:column}h1,h2,h3{margin:0;line-height:1.15;letter-spacing:-.02em}h1{font-size:var(--fs-title);font-weight:700}h2{font-size:var(--fs-section);font-weight:600}p{margin:0}button{font-family:inherit}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--ground);border-bottom:1px solid var(--border)}.topbar .brand{font-weight:700;letter-spacing:-.02em;font-size:16px}.topbar nav{display:flex;gap:8px;align-items:center}.lang-toggle{border:1px solid var(--control);background:var(--surface);border-radius:var(--radius-control);padding:5px 10px;font-size:var(--fs-small);color:var(--muted);cursor:pointer}.lang-toggle:hover{border-color:var(--accent);color:var(--accent-ink)}.page{width:100%;max-width:760px;margin:0 auto;padding:20px 16px 64px;display:flex;flex-direction:column;gap:var(--gap)}.page.wide{max-width:1080px}.lede{color:var(--muted);font-size:var(--fs-body);max-width:34em}.steps{color:var(--muted);font-size:12.5px;margin-top:6px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-card);padding:18px;display:flex;flex-direction:column;gap:14px}.card h2{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.field{display:grid;grid-template-columns:108px 1fr;gap:2px 12px;align-items:baseline;border-bottom:1px solid var(--border);padding:10px 0}.field label{font-size:var(--fs-small);font-weight:500;color:var(--muted);padding:6px 0}.field input,.field textarea,.field select{font:inherit;color:var(--text);background:transparent;border:none;border-radius:0;padding:6px 0;min-height:36px;width:100%}.field textarea{min-height:72px;resize:vertical}.field input:focus-visible,.field textarea:focus-visible,.field select:focus-visible,button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.field .hint{grid-column:2;font-size:var(--fs-small);color:var(--muted)}.field .error{grid-column:2;font-size:var(--fs-small);color:var(--negative)}.button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border-radius:var(--radius-control);border:1px solid transparent;font-size:var(--fs-body);font-weight:600;cursor:pointer;background:var(--text);color:var(--ground);text-decoration:none}.button:hover{background:var(--accent-ink)}.button:disabled{background:var(--raised);color:var(--muted);cursor:not-allowed}.button.secondary{background:var(--surface);color:var(--text);border-color:var(--control)}.button.secondary:hover{border-color:var(--accent);color:var(--accent-ink)}.button.danger{background:var(--surface);color:var(--negative);border-color:var(--negative)}.button.danger:hover{background:var(--pill-negative-bg)}.button.text{background:none;color:var(--muted);border:none;min-height:32px;padding:4px 8px;font-weight:500}.button.text:hover{color:var(--text)}.actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.board{border:1px solid var(--text);border-radius:6px;overflow:hidden;background:var(--surface)}.board-row{display:grid;grid-template-columns:64px minmax(0,1fr);border-bottom:1px solid var(--border)}.board-row:last-child{border-bottom:none}.board-day{padding:10px 8px;border-right:1px solid var(--border);background:var(--raised);font-size:11.5px;line-height:1.4;color:var(--muted);display:flex;flex-direction:column;justify-content:center;gap:1px}.board-day b{font-size:14.5px;color:var(--text);font-variant-numeric:tabular-nums}.cells{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.cell{appearance:none;border:none;background:var(--surface);font:inherit;cursor:pointer;padding:10px 12px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;border-bottom:1px solid var(--border);border-right:1px solid var(--border);text-align:left;min-width:0}.cell:nth-child(2n){border-right:none}.cell:nth-last-child(-n+2){border-bottom:none}.cell time{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}.cell .seats{font-size:11.5px;color:var(--accent)}.cell:not(:disabled):hover{background:var(--accent-soft)}.cell[aria-pressed=true]{background:var(--accent);color:#fff}.cell[aria-pressed=true] .seats{color:#fff;opacity:.85}.cell[aria-pressed=true]:hover{background:var(--accent)}.board-day .today-tag{align-self:flex-start;margin-top:4px;font-size:10.5px;line-height:1;background:var(--accent);color:#fff;border-radius:3px;padding:3px 5px;letter-spacing:.08em}.cell:disabled{background:var(--surface);color:var(--muted);cursor:not-allowed}.cell:disabled time{text-decoration:line-through;text-decoration-thickness:1px}.cell:disabled .seats{color:var(--negative)}.cell.closed{grid-column:1 / -1;color:var(--muted);font-size:12px;letter-spacing:.12em;cursor:default;justify-content:center;align-items:flex-start;min-height:44px}.theme-row{grid-template-columns:minmax(0,1fr) auto}.empty-note{color:var(--muted);font-size:var(--fs-small)}.success-band{background:var(--accent-soft);border:1px solid var(--accent-track);border-radius:var(--radius-card);padding:18px;display:flex;flex-direction:column;gap:10px}.code{font-size:var(--fs-kpi);font-weight:700;letter-spacing:.02em}.kv{display:grid;grid-template-columns:84px 1fr;gap:4px 12px;font-size:var(--fs-body)}.kv dt{color:var(--muted)}.kv dd{margin:0}.link-box{display:flex;gap:8px;align-items:stretch}.link-box input{flex:1;font-size:var(--fs-small);border:1px solid var(--control);border-radius:var(--radius-control);padding:8px 10px;background:var(--surface);color:var(--muted)}.pill{display:inline-flex;align-items:center;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600}.pill.confirmed{background:var(--pill-positive-bg);color:var(--pill-positive-ink)}.pill.completed{background:var(--pill-neutral-bg);color:var(--pill-neutral-ink)}.pill.cancelled{background:var(--pill-negative-bg);color:var(--pill-negative-ink)}.pill.no_show{background:var(--pill-warning-bg, #fffbeb);color:var(--warning)}.kpi-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-card);padding:12px 14px}.kpi .n{font-size:var(--fs-kpi);font-weight:600}.kpi .label{font-size:var(--fs-small);color:var(--muted)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border)}.tabs button{border:none;background:none;padding:10px 14px;cursor:pointer;font-size:var(--fs-body);font-weight:500;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}.tabs button[aria-selected=true]{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.booking-list{display:flex;flex-direction:column}.booking-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 2px;border-bottom:1px solid var(--border)}.booking-row:last-child{border-bottom:none}.booking-row .who{min-width:0}.booking-row .who .name{font-weight:600}.booking-row .who .meta{font-size:var(--fs-small);color:var(--muted);overflow:hidden;text-overflow:ellipsis}.booking-row .when{font-size:var(--fs-small);color:var(--muted);white-space:nowrap}.week-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.week-day{background:var(--raised);border-radius:var(--radius-control);padding:8px;min-height:88px;display:flex;flex-direction:column;gap:6px}.week-day.today{background:var(--accent-track)}.week-day .dow{font-size:12px;color:var(--muted);font-weight:600}.week-day .appt{background:var(--surface);border-radius:4px;padding:3px 6px;font-size:12px;line-height:1.3;border-left:3px solid var(--accent);overflow:hidden}.week-day .appt.cancelled{border-left-color:var(--control);color:var(--muted);text-decoration:line-through}.pattern-row{display:grid;grid-template-columns:1fr 1fr 1fr .8fr .8fr auto;gap:8px;align-items:end}.toggle-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--border)}.toggle-row:last-child{border-bottom:none}.toggle-row .t-title{font-weight:500}.toggle-row .t-desc{font-size:var(--fs-small);color:var(--muted)}.switch{position:relative;width:44px;height:26px;flex:0 0 auto}.switch input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}.switch .track{position:absolute;inset:0;border-radius:999px;background:var(--control);transition:background .15s;pointer-events:none}.switch .track:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;transition:transform .15s}.switch input:checked+.track{background:var(--accent)}.switch input:checked+.track:after{transform:translate(18px)}.switch input:focus-visible+.track{outline:2px solid var(--accent);outline-offset:1px}.banner{border-radius:var(--radius-card);padding:12px 14px;font-size:var(--fs-body)}.banner.error{background:var(--pill-negative-bg);color:var(--pill-negative-ink)}.banner.note{background:var(--pill-accent-bg);color:var(--pill-accent-ink)}@media(min-width:720px){.page{padding-top:28px}.kpi-strip{gap:16px}}@media(max-width:480px){.kpi-strip{grid-template-columns:repeat(2,1fr)}.pattern-row{grid-template-columns:1fr 1fr}.theme-row{grid-template-columns:minmax(0,1fr) auto}.week-grid{grid-template-columns:repeat(7,minmax(72px,1fr));overflow-x:auto}}@media(max-width:720px){.page{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}.submit-cta{position:fixed;left:0;right:0;bottom:0;z-index:30;border-radius:0;min-height:calc(56px + env(safe-area-inset-bottom,0px));padding-bottom:env(safe-area-inset-bottom,0px);border-top:1px solid var(--border)}.field{grid-template-columns:96px 1fr}}@media(prefers-reduced-motion:no-preference){.day-chip,.time-chip,.button{transition:background .12s,border-color .12s,color .12s}}.export-bar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}.print-sheet{display:none}@media print{.topbar,.page{display:none!important}.print-sheet{display:block;color:#000;background:#fff;padding:0}body{background:#fff}}.print-sheet .print-head{margin-bottom:14px}.print-sheet .print-head h1{font-size:18pt;margin:0 0 4px}.print-sheet .print-head p{margin:0;font-size:9pt;color:#444}.print-sheet .print-hint{margin-top:6px}.print-sheet .button{margin-top:8px}.print-table{width:100%;border-collapse:collapse;font-size:10pt}.print-table th,.print-table td{border:1px solid #999;padding:6px 8px;text-align:left;vertical-align:top}.print-table th{background:#eee}.print-table .signin-cell{min-width:64px}
