:root{--page:#eef1f5;--surface:#eef1f5;--ink:#24282d;--muted:#707780;--blue:#b8d8ff;--blue-light:#cce1ff;--raised:-7px -7px 14px rgba(255,255,255,.92),7px 7px 14px rgba(164,174,188,.43);--soft:-4px -4px 10px rgba(255,255,255,.88),4px 4px 10px rgba(164,174,188,.34);--pressed:inset 5px 5px 10px rgba(111,145,185,.2),inset -5px -5px 10px rgba(255,255,255,.72),4px 6px 13px rgba(132,153,180,.22);font-family:"Noto Sans TC",sans-serif;color:var(--ink);background:var(--page)}*{box-sizing:border-box}body{margin:0;min-width:320px;background:var(--page)}button,input,a{font:inherit;color:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,a:focus-visible{outline:2px solid #6f9dcc;outline-offset:3px}.customer-header{position:sticky;top:0;z-index:10;height:64px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:0 18px;background:var(--page);box-shadow:0 6px 16px rgba(164,174,188,.24)}.customer-header>a{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:var(--surface);box-shadow:var(--soft);font-size:26px;text-decoration:none}.customer-header>strong{font:500 26px "Cormorant Garamond",serif;letter-spacing:.12em}.customer-header>span{justify-self:end;width:34px;height:34px;display:grid;place-items:center;border-radius:50%;background:linear-gradient(145deg,var(--blue-light),var(--blue));box-shadow:var(--pressed);font-size:12px;font-weight:600}.customer-header>span:empty{visibility:hidden}#customer-app{width:min(760px,100%);margin:auto;padding:38px 20px 110px}.loading{color:var(--muted);text-align:center}.account-intro{text-align:center}.account-intro .mark{width:64px;height:64px;display:grid;place-items:center;margin:auto;border-radius:50%;background:linear-gradient(145deg,var(--blue-light),var(--blue));box-shadow:var(--pressed);font:500 28px "Cormorant Garamond",serif}.account-intro h1{margin:22px 0 7px;font:500 25px "Noto Serif TC",serif}.account-intro p{max-width:460px;margin:0 auto;color:var(--muted);font-size:13px;line-height:1.7}.login-panel,.lookup-panel,.appointment-card,.history-card{margin-top:25px;padding:23px;border-radius:27px;background:var(--surface);box-shadow:var(--raised)}.login-options{display:grid;grid-template-columns:1fr 1fr;gap:12px}.login-options button,.account-form button,.lookup-panel button,.appointment-actions button,.history-card button{min-height:48px;border:0;border-radius:18px;background:var(--surface);box-shadow:var(--soft)}.login-options button:first-child{grid-column:1/-1}.login-options button.primary,.account-form button.primary,.lookup-panel button.primary,.appointment-actions button.primary{background:linear-gradient(145deg,var(--blue-light),var(--blue));box-shadow:var(--pressed)}.login-divider{display:flex;align-items:center;gap:12px;margin:20px 0;color:var(--muted);font-size:11px}.login-divider::before,.login-divider::after{content:'';height:1px;flex:1;background:rgba(112,119,128,.18)}.account-form{display:grid;gap:12px}.account-form label,.lookup-form label{display:grid;gap:7px;color:var(--muted);font-size:11px}.account-form input,.lookup-form input{width:100%;min-height:48px;padding:11px 14px;border:0;border-radius:17px;background:var(--surface);box-shadow:inset 4px 4px 9px rgba(164,174,188,.3),inset -4px -4px 9px rgba(255,255,255,.86);font-size:16px}.lookup-panel h2,.lookup-panel p{margin:0}.lookup-panel h2{font:500 17px "Noto Serif TC",serif}.lookup-panel p{margin-top:6px;color:var(--muted);font-size:12px}.lookup-form{display:grid;grid-template-columns:1fr 1fr auto;gap:12px;align-items:end;margin-top:18px}.lookup-form button{padding:0 17px}.portal-head{display:flex;align-items:flex-end;justify-content:space-between}.portal-head p,.portal-head h1{margin:0}.portal-head p{margin-bottom:5px;color:var(--muted);font-size:11px}.portal-head h1{font:500 25px "Noto Serif TC",serif}.portal-head button{min-height:40px;padding:0 14px;border:0;border-radius:16px;background:var(--surface);box-shadow:var(--soft);color:var(--muted)}.section-title{margin:32px 0 14px;font:500 17px "Noto Serif TC",serif}.appointment-card{margin-top:0}.appointment-top{display:flex;align-items:center;gap:14px}.appointment-date{width:58px;height:62px;display:grid;place-items:center;align-content:center;border-radius:19px;background:linear-gradient(145deg,var(--blue-light),var(--blue));box-shadow:var(--pressed)}.appointment-date small{font-size:10px}.appointment-date strong{font:400 22px "Libre Baskerville",serif}.appointment-title{flex:1}.appointment-title h2,.appointment-title p{margin:0}.appointment-title h2{font-size:16px}.appointment-title p{margin-top:5px;color:var(--muted);font-size:12px}.status{padding:6px 9px;border-radius:12px;background:var(--surface);box-shadow:var(--soft);font-size:10px}.appointment-info{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:22px}.appointment-info p{margin:0;padding:12px;border-radius:16px;background:var(--surface);box-shadow:var(--soft)}.appointment-info span,.appointment-info strong{display:block}.appointment-info span{color:var(--muted);font-size:10px}.appointment-info strong{margin-top:5px;font-size:12px}.appointment-info .price{font-family:"Libre Baskerville",serif}.appointment-actions{display:flex;gap:10px;margin-top:20px}.appointment-actions button,.appointment-actions a{flex:1;min-height:46px;display:grid;place-items:center;border:0;border-radius:17px;background:var(--surface);box-shadow:var(--soft);font-size:12px;text-decoration:none}.history-list{display:grid;gap:12px}.history-card{display:grid;grid-template-columns:1fr auto;gap:10px;margin:0;padding:17px 19px}.history-card h3,.history-card p{margin:0}.history-card h3{font-size:14px}.history-card p{margin-top:4px;color:var(--muted);font-size:11px}.history-card>span{align-self:center;color:var(--muted);font-size:11px}.empty-state{padding:30px;text-align:center;color:var(--muted);font-size:13px}.customer-nav{position:fixed;z-index:8;right:0;bottom:0;left:0;grid-template-columns:1fr 1fr;padding-bottom:env(safe-area-inset-bottom);background:var(--page);box-shadow:0 -7px 18px rgba(164,174,188,.28)}.customer-nav:not([hidden]){display:grid}.customer-nav a{min-height:70px;display:grid;place-items:center;align-content:center;gap:4px;color:var(--muted);text-decoration:none}.customer-nav a.active{color:var(--ink)}.customer-nav span{width:31px;height:26px;display:grid;place-items:center;border-radius:13px}.customer-nav a.active span{background:linear-gradient(145deg,var(--blue-light),var(--blue));box-shadow:var(--pressed)}.customer-nav small{font-size:11px}.customer-toast{position:fixed;z-index:30;right:20px;bottom:92px;max-width:calc(100% - 40px);padding:13px 17px;border-radius:17px;background:#30353b;color:#fff;box-shadow:8px 8px 18px rgba(127,136,149,.28);font-size:13px}
@media(max-width:560px){#customer-app{padding:27px 14px 105px}.login-options{grid-template-columns:1fr}.login-options button:first-child{grid-column:auto}.lookup-form{grid-template-columns:1fr}.appointment-info{grid-template-columns:1fr 1fr}.appointment-info p:last-child{grid-column:1/-1}.appointment-actions{flex-wrap:wrap}.login-panel,.lookup-panel,.appointment-card{padding:19px}}
.reschedule-dialog{width:min(460px,calc(100% - 28px));padding:0;border:0;border-radius:28px;background:var(--page);color:var(--ink);box-shadow:0 24px 70px rgba(73,82,94,.34)}.reschedule-dialog::backdrop{background:rgba(36,40,45,.32)}.reschedule-dialog form{display:grid;gap:16px;padding:24px}.reschedule-head{display:flex;align-items:center;justify-content:space-between}.reschedule-head p,.reschedule-head h2{margin:0}.reschedule-head p{color:var(--muted);font-size:11px}.reschedule-head h2{margin-top:4px;font:500 21px "Noto Serif TC",serif}.reschedule-head button{width:42px;height:42px;border:0;border-radius:50%;background:var(--surface);box-shadow:var(--soft);font-size:21px}.reschedule-dialog label{display:grid;gap:8px;color:var(--muted);font-size:11px}.reschedule-dialog input,.reschedule-dialog select{width:100%;min-height:49px;padding:10px 13px;border:0;border-radius:17px;background:var(--surface);box-shadow:inset 4px 4px 9px rgba(164,174,188,.3),inset -4px -4px 9px rgba(255,255,255,.86);font-size:16px}.reschedule-dialog button.primary{min-height:49px;border:0;border-radius:18px;background:linear-gradient(145deg,var(--blue-light),var(--blue));box-shadow:var(--pressed)}.reschedule-note{min-height:20px;margin:0;color:var(--muted);font-size:11px}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
.login-divider::before,.login-divider::after{display:none}
