:root{--ground: #f6f5f1;--surface: #ffffff;--raised: #f0efe9;--border: #e4e3db;--control: #cfcec5;--text: #17211d;--muted: #5d6863;--faint: #8b948f;--accent: #0d5c4a;--accent-strong: #0a4739;--accent-soft: #e9f1ee;--accent-track: #cfe0d9;--accent-ink: #0a4739;--positive: #247b50;--negative: #b3452f;--warning: #92400e;--pill-positive-bg: #dcf3e6;--pill-positive-ink: #14532d;--pill-negative-bg: #fdeae7;--pill-negative-ink: #7c2d1e;--pill-neutral-bg: #efefeb;--pill-neutral-ink: #374151;--pill-accent-bg: #e9f1ee;--pill-accent-ink: #0a4739;--pill-warning-bg: #fdf3e3;--pill-warning-ink: #92400e;--radius-card: 14px;--radius-control: 10px;--shadow-card: 0 1px 2px rgba(23, 33, 29, .05), 0 8px 28px -16px rgba(23, 33, 29, .18);--shadow-pop: 0 2px 6px rgba(23, 33, 29, .08), 0 16px 40px -16px rgba(23, 33, 29, .28);--gap: 18px;--fs-title: 30px;--fs-section: 17px;--fs-kpi: 28px;--fs-body: 15px;--fs-small: 13px;--font-display: "Poppins", "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", system-ui, sans-serif;--font-body: "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:radial-gradient(1200px 500px at 80% -10%,rgba(13,92,74,.06),transparent 60%),var(--ground);background-attachment:fixed;color:var(--text);font-family:var(--font-body);font-size:var(--fs-body);line-height:1.6;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.2;letter-spacing:-.015em}.icon{flex:none;vertical-align:-3px}.h-title{display:inline-flex;align-items:center;gap:8px}.h-title .icon{color:var(--accent)}h1{font-family:var(--font-display);font-size:var(--fs-title);font-weight:600}h2{font-family:var(--font-display);font-size:var(--fs-section);font-weight:600;letter-spacing:-.01em}p{margin:0}button{font-family:inherit}::selection{background:var(--accent-track)}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background:color-mix(in srgb,var(--ground) 82%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}.topbar .brand{font-family:var(--font-display);font-weight:600;letter-spacing:-.01em;font-size:16.5px;display:inline-flex;align-items:center;gap:8px;color:var(--text)}.topbar .brand .icon{color:var(--accent)}.topbar nav{display:flex;gap:8px;align-items:center}.lang-toggle{border:1px solid var(--control);background:var(--surface);border-radius:999px;padding:6px 13px;font-size:var(--fs-small);font-weight:500;color:var(--muted);cursor:pointer;transition:border-color .15s,color .15s,background .15s}.lang-toggle:hover{border-color:var(--accent);color:var(--accent-ink);background:var(--accent-soft)}.page{width:100%;max-width:780px;margin:0 auto;padding:26px 18px 72px;display:flex;flex-direction:column;gap:var(--gap)}.page.wide{max-width:1080px}.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.page-head .lede{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.lede{color:var(--muted);font-size:var(--fs-body);max-width:36em}.steps{color:var(--faint);font-size:12.5px;margin-top:8px;letter-spacing:.01em}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:22px;display:flex;flex-direction:column;gap:14px}.card>h2{display:flex;align-items:center;justify-content:space-between;gap:8px}.field{display:grid;grid-template-columns:112px 1fr;gap:2px 14px;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:38px;width:100%}.field input::placeholder,.field textarea::placeholder{color:var(--faint)}.field input:focus,.field textarea:focus,.field select:focus{background:linear-gradient(var(--accent-soft),var(--accent-soft)) bottom / 100% 38% no-repeat}.field textarea{min-height:76px;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:2px;border-radius:4px}.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:46px;padding:11px 22px;border-radius:var(--radius-control);border:1px solid transparent;font-size:var(--fs-body);font-weight:600;cursor:pointer;font-family:var(--font-display);background:var(--accent);color:#fff;text-decoration:none;letter-spacing:.01em;transition:background .15s,border-color .15s,color .15s,transform .1s,box-shadow .15s}.button:hover{background:var(--accent-strong);box-shadow:0 4px 14px -6px #0d5c4a80}.button:active{transform:translateY(1px)}.button:disabled{background:var(--raised);color:var(--faint);cursor:not-allowed;box-shadow:none}.button.secondary{background:var(--surface);color:var(--text);border-color:var(--control)}.button.secondary:hover{border-color:var(--accent);color:var(--accent-ink);background:var(--accent-soft);box-shadow:none}.button.danger{background:var(--surface);color:var(--negative);border-color:color-mix(in srgb,var(--negative) 45%,var(--surface))}.button.danger:hover{background:var(--pill-negative-bg);border-color:var(--negative);box-shadow:none}.button.text{background:none;color:var(--muted);border:none;min-height:34px;padding:4px 10px;font-weight:500;box-shadow:none}.button.text:hover{color:var(--text);background:var(--raised)}.button.text.danger-text{color:var(--negative)}.button.text.danger-text:hover{background:var(--pill-negative-bg);color:var(--negative)}.actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.board{display:flex;flex-direction:column}.day-block{padding:4px 0 14px}.day-block+.day-block{border-top:1px solid var(--border)}.day-head{display:flex;align-items:baseline;gap:10px;padding:10px 2px}.day-head b{font-family:var(--font-display);font-size:15.5px;font-weight:600;letter-spacing:-.01em}.day-head span{font-size:12.5px;color:var(--muted)}.day-head .today-tag{font-size:10.5px;line-height:1;font-weight:600;background:var(--accent);color:#fff;border-radius:999px;padding:4px 9px;letter-spacing:.06em;align-self:center}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{appearance:none;border:1px solid var(--border);background:var(--surface);border-radius:10px;font:inherit;cursor:pointer;padding:8px 16px;min-width:96px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;transition:background .12s,border-color .12s,color .12s,transform .1s,box-shadow .12s}.chip-top{display:inline-flex;align-items:center;gap:5px}.chip-top .icon{color:currentColor}.chip time{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}.chip .seats{font-size:11.5px;font-weight:500;color:var(--accent)}.chip:not(:disabled):hover{background:var(--accent-soft);border-color:var(--accent-track)}.chip:not(:disabled):active{transform:scale(.97)}.chip[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 3px 10px -4px #0d5c4a8c}.chip[aria-pressed=true] .seats{color:#fff;opacity:.85}.chip[aria-pressed=true]:hover{background:var(--accent-strong);border-color:var(--accent-strong)}.chip:disabled{background:var(--raised);color:var(--muted);cursor:not-allowed;border-color:transparent}.chip:disabled time{text-decoration:line-through;text-decoration-thickness:1px;text-decoration-color:var(--faint)}.chip:disabled .seats{color:var(--negative)}.chip.closed{flex:1 1 100%;color:var(--faint);font-size:12px;letter-spacing:.14em;cursor:default;min-height:44px;background:transparent;border-style:dashed}.consult-title{font-family:var(--font-display);font-size:18px;font-weight:600;letter-spacing:-.01em;color:var(--accent-ink);margin-top:6px}.consult-title:before{content:"";display:inline-block;width:8px;height:8px;border-radius:2px;background:var(--accent);margin-right:9px;vertical-align:2px}.meta-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.meta-chip{display:inline-flex;align-items:center;font-size:12.5px;font-weight:500;color:var(--accent-ink);background:var(--accent-soft);border:1px solid var(--accent-track);border-radius:999px;padding:5px 12px}.board-mobile{display:none;flex-direction:column;gap:14px}.day-scroll{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 8px;scrollbar-width:none}.day-scroll::-webkit-scrollbar{display:none}.day-chip{appearance:none;flex:0 0 auto;min-width:74px;border:1px solid var(--border);border-radius:12px;background:var(--surface);font:inherit;cursor:pointer;padding:8px 10px;display:flex;flex-direction:column;align-items:center;gap:1px;transition:background .12s,border-color .12s,color .12s,transform .1s}.day-chip .dc-dow{font-size:11px;color:var(--muted)}.day-chip b{font-family:var(--font-display);font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}.day-chip .dc-free{font-size:10.5px;font-weight:500;color:var(--accent)}.day-chip:not(:disabled):hover{background:var(--accent-soft);border-color:var(--accent-track)}.day-chip:not(:disabled):active{transform:scale(.96)}.day-chip[aria-selected=true]{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 3px 10px -4px #0d5c4a8c}.day-chip[aria-selected=true] .dc-dow,.day-chip[aria-selected=true] .dc-free{color:#fff;opacity:.85}.day-chip:disabled{background:var(--raised);color:var(--faint);cursor:not-allowed;border-color:transparent}.day-chip:disabled .dc-dow,.day-chip:disabled .dc-free{color:var(--faint)}.page.home{gap:34px;padding-top:40px}.hero{position:relative;background:linear-gradient(150deg,var(--surface) 0%,var(--accent-soft) 130%);border:1px solid var(--border);border-radius:20px;box-shadow:var(--shadow-card);padding:clamp(28px,6vw,56px);display:flex;flex-direction:column;gap:14px;overflow:hidden}.hero:after{content:"";position:absolute;right:-70px;top:-70px;width:240px;height:240px;border-radius:50%;background:radial-gradient(circle,rgba(13,92,74,.14),transparent 65%);pointer-events:none}.hero-eyebrow{font-size:12.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);display:inline-flex;align-items:center;gap:7px}.hero-title{font-family:var(--font-display);font-size:clamp(30px,5.4vw,46px);font-weight:700;letter-spacing:-.025em;line-height:1.12;max-width:15em}.hero-subtitle{font-size:clamp(16px,2.4vw,19px);font-weight:600;color:var(--accent-ink)}.hero-lede{color:var(--muted);max-width:36em;font-size:var(--fs-body)}.hero-cta{display:flex;gap:12px;flex-wrap:wrap;margin-top:8px}.hero-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:14px;padding-top:18px;border-top:1px solid color-mix(in srgb,var(--accent-track) 60%,transparent)}.hstat{display:flex;align-items:center;gap:11px;min-width:0}.hstat .icon{color:var(--accent);flex:none}.hstat b{display:block;font-family:var(--font-display);font-size:14.5px;font-weight:600;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hstat span{font-size:11.5px;color:var(--muted)}.hero-primary{min-height:52px;padding:13px 30px;font-size:16.5px;box-shadow:0 6px 18px -6px #0d5c4a8c}.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.feature-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:22px;display:flex;flex-direction:column;gap:8px;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.feature-card:hover{transform:translateY(-3px);border-color:var(--accent-track);box-shadow:0 2px 4px #17211d0f,0 18px 40px -18px #17211d4d}.feature-mark{width:36px;height:36px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:var(--accent-soft);color:var(--accent-ink);margin-bottom:4px}.feature-card h2{font-size:16px}.feature-card p{color:var(--muted);font-size:var(--fs-small);line-height:1.6}.cta-band{background:var(--text);color:var(--ground);border-radius:20px;box-shadow:var(--shadow-card);padding:clamp(26px,5vw,44px);display:flex;flex-direction:column;align-items:flex-start;gap:12px}.cta-band h2{color:#fff;font-size:clamp(20px,3.4vw,26px)}.cta-band .lede{color:#f6f5f1bf}.cta-band .hero-primary{margin-top:6px}.home-footer{text-align:center;color:var(--faint);font-size:12px;letter-spacing:.04em}.brand-button{background:none;border:none;padding:0;cursor:pointer;font:inherit;color:inherit}@media(max-width:720px){.page.home{padding-top:22px;gap:24px}.feature-grid{grid-template-columns:1fr}.hero{border-radius:16px}.hero-cta .button{flex:1 1 auto}.hero-stats{grid-template-columns:1fr;gap:14px}.hstat b{white-space:normal}}.login-page{align-items:center}.login-card{width:100%;max-width:420px;margin-top:7vh}.login-card h1{font-size:24px;margin-bottom:6px}.login-card .button{width:100%}.theme-row{grid-template-columns:minmax(0,1fr) auto}.empty-note{color:var(--faint);font-size:var(--fs-small)}.success-band{background:linear-gradient(160deg,var(--accent-soft),#f2f7f4);border:1px solid var(--accent-track);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:22px;display:flex;flex-direction:column;gap:12px}.success-band h2{color:var(--accent-ink)}.code{font-family:var(--font-display);font-size:var(--fs-kpi);font-weight:700;letter-spacing:.02em;color:var(--accent-ink)}.kv{display:grid;grid-template-columns:88px 1fr;gap:6px 14px;font-size:var(--fs-body);margin:0}.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(--accent-track);border-radius:var(--radius-control);padding:10px 12px;background:var(--surface);color:var(--muted)}.pill{display:inline-flex;align-items:center;border-radius:999px;padding:3px 11px;font-size:12px;font-weight:600;letter-spacing:.01em}.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);color:var(--pill-warning-ink)}.pill.pill-accent{background:var(--pill-accent-bg);color:var(--pill-accent-ink)}.pill.pill-neutral{background:var(--pill-neutral-bg);color:var(--pill-neutral-ink)}.kpi-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.kpi{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:16px 16px 14px;overflow:hidden}.kpi:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--accent-track)}.kpi:first-child:before{background:var(--accent)}.kpi-icon{position:absolute;right:12px;top:12px;width:30px;height:30px;border-radius:9px;display:inline-flex;align-items:center;justify-content:center;background:var(--accent-soft);color:var(--accent-ink)}.kpi .n{font-family:var(--font-display);font-size:var(--fs-kpi);font-weight:600;line-height:1.1}.kpi .label{font-size:var(--fs-small);color:var(--muted);margin-top:2px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs button{border:none;background:none;padding:10px 16px;cursor:pointer;font-size:var(--fs-body);font-weight:500;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px;border-radius:8px 8px 0 0;white-space:nowrap;transition:color .12s,background .12s}.tabs button:hover{color:var(--text);background:var(--raised)}.tabs button[aria-selected=true]{color:var(--accent-ink);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:12px;padding:13px 6px;border-bottom:1px solid var(--border);transition:background .12s}.booking-row:hover{background:var(--raised);border-radius:8px}.booking-row:last-child{border-bottom:none}.booking-row .who{min-width:0}.booking-row .who .name{font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.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}.user-list{display:flex;flex-direction:column}.user-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 6px;border-bottom:1px solid var(--border)}.user-row:last-child{border-bottom:none}.user-row .who{min-width:0}.user-row .who .name{font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.user-row .who .meta{font-size:var(--fs-small);color:var(--muted)}.week-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}.week-day{background:var(--raised);border-radius:10px;padding:10px;min-height:92px;display:flex;flex-direction:column;gap:6px}.week-day.today{background:var(--accent-soft);box-shadow:inset 0 0 0 1.5px var(--accent-track)}.week-day .dow{font-size:12px;color:var(--muted);font-weight:600}.week-day .appt{background:var(--surface);border-radius:7px;padding:4px 7px;font-size:12px;line-height:1.35;border-left:3px solid var(--accent);box-shadow:0 1px 2px #17211d0f;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:10px;align-items:end}.toggle-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 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:46px;height:27px;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 .18s;pointer-events:none}.switch .track:after{content:"";position:absolute;top:3px;left:3px;width:21px;height:21px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #17211d4d;transition:transform .18s}.switch input:checked+.track{background:var(--accent)}.switch input:checked+.track:after{transform:translate(19px)}.switch input:focus-visible+.track{outline:2px solid var(--accent);outline-offset:2px}.banner{border-radius:var(--radius-control);padding:13px 16px;font-size:var(--fs-body);border:1px solid transparent}.banner.error{background:var(--pill-negative-bg);color:var(--pill-negative-ink);border-color:color-mix(in srgb,var(--negative) 25%,var(--surface))}.banner.note{background:var(--pill-accent-bg);color:var(--pill-accent-ink);border-color:var(--accent-track)}@media(min-width:720px){.page{padding-top:34px}.kpi-strip{gap:14px}}@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(104px + env(safe-area-inset-bottom,0px))}.board-desktop{display:none}.board-mobile{display:flex}.chip{min-height:54px;flex:1 1 calc(33.333% - 8px);padding:8px 10px}.submit-cta{position:fixed;left:12px;right:12px;bottom:calc(10px + env(safe-area-inset-bottom,0px));z-index:30;border-radius:14px;min-height:54px;box-shadow:var(--shadow-pop)}.field{grid-template-columns:96px 1fr}.card{padding:18px}}.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}
