:root{
  --bg:#f4f1ec; --card:#fff; --ink:#20242c; --ink-soft:#6b7280; --line:#e7e2d9;
  --accent:#1f2430; --accent-soft:#e8eaf0; --gold:#b08d57; --gold-soft:#f3ead9;
  --ok:#2e9e6b; --busy:#c9ccd3; --danger:#c0554b;
  --radius:16px; --shadow:0 6px 24px rgba(24,26,32,.08); --maxw:460px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{font-family:"PingFang TC","Noto Sans TC","Microsoft JhengHei",system-ui,-apple-system,sans-serif;
  background:var(--bg);color:var(--ink);line-height:1.6;letter-spacing:.01em;-webkit-font-smoothing:antialiased}
.app{max-width:var(--maxw);margin:0 auto;background:var(--bg);min-height:100vh;position:relative;padding-bottom:110px}
.req{color:var(--danger)}

.topbar{position:sticky;top:0;z-index:40;background:rgba(244,241,236,.86);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);padding:14px 18px 12px}
.brand{display:flex;align-items:center;gap:11px}
.logo{width:38px;height:38px;flex:0 0 auto}
.brand h1{font-size:18px;margin:0;font-weight:800;letter-spacing:.04em}
.brand .sub{font-size:11px;color:var(--ink-soft);margin-top:1px;letter-spacing:.06em}
.steps{display:flex;gap:6px;margin-top:12px}
.steps .bar{flex:1;height:4px;border-radius:99px;background:var(--line);transition:.35s}
.steps .bar.on{background:var(--gold)}
.steplabel{font-size:11px;color:var(--ink-soft);margin-top:7px;text-align:center;letter-spacing:.08em}

section{padding:22px 18px 8px;scroll-margin-top:96px}
.sec-head{display:flex;align-items:baseline;gap:8px;margin-bottom:14px}
.sec-num{font-size:12px;font-weight:800;color:#fff;background:var(--gold);width:22px;height:22px;
  border-radius:99px;display:grid;place-items:center;flex:0 0 auto}
.sec-title{font-size:17px;font-weight:800;margin:0}
.sec-hint{font-size:12px;color:var(--ink-soft);margin:0 0 14px 30px}
section[data-locked="true"]{opacity:.4;pointer-events:none;filter:grayscale(.3)}

.staff{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.staff .card{background:var(--card);border:2px solid transparent;border-radius:var(--radius);padding:14px;
  text-align:center;box-shadow:var(--shadow);cursor:pointer;transition:.2s}
.staff .card:active{transform:scale(.97)}
.staff .card.sel{border-color:var(--gold);background:var(--gold-soft)}
.avatar{width:76px;height:76px;border-radius:50%;margin:0 auto 9px;display:grid;place-items:center;
  font-size:28px;font-weight:800;color:#fff;overflow:hidden}
.avatar img{width:100%;height:100%;object-fit:cover}
.avatar.e{background:linear-gradient(135deg,#caa16b,#a97e4c)}
.avatar.h{background:linear-gradient(135deg,#5b6472,#333a46)}
.staff .name{font-weight:800;font-size:16px}
.staff .role{font-size:11.5px;color:var(--ink-soft)}

.svc-group{margin-bottom:14px}
.svc-group>.gtitle{font-size:13px;font-weight:800;color:var(--gold);margin:0 0 8px 2px;letter-spacing:.05em}
.svc{background:var(--card);border:2px solid transparent;border-radius:14px;padding:13px 15px;box-shadow:var(--shadow);
  cursor:pointer;margin-bottom:9px;display:flex;justify-content:space-between;align-items:center;gap:10px;transition:.18s}
.svc:active{transform:scale(.985)}
.svc.sel{border-color:var(--gold);background:var(--gold-soft)}
.svc .l .t{font-weight:700;font-size:15px}
.svc .l .d{font-size:11.5px;color:var(--ink-soft);margin-top:2px}
.svc .r{text-align:right;flex:0 0 auto}
.svc .r .price{font-weight:800;font-size:15px}
.svc .r .dur{font-size:11px;color:var(--ink-soft)}

.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.cal-head .m{font-weight:800;font-size:15px}
.cal-nav{width:34px;height:34px;border-radius:10px;border:1px solid var(--line);background:var(--card);
  font-size:16px;display:grid;place-items:center;cursor:pointer;user-select:none}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cal .wd{text-align:center;font-size:11px;color:var(--ink-soft);padding:3px 0}
.day{aspect-ratio:1;border-radius:11px;display:grid;place-items:center;font-size:14px;background:var(--card);
  cursor:pointer;border:2px solid transparent;transition:.15s;position:relative}
.day.empty{background:transparent;cursor:default}
.day.off{color:#c3c3c3;background:transparent;cursor:not-allowed;text-decoration:line-through}
.day.today{color:var(--danger);font-weight:800}
.day.avail::after{content:"";width:5px;height:5px;border-radius:50%;background:var(--gold);position:absolute;bottom:6px}
.day.sel{background:var(--accent);color:#fff;font-weight:800}
.day.sel::after{background:#fff}

.slots-wrap{margin-top:18px}
.slots-wrap .lbl{font-size:13px;font-weight:800;margin-bottom:9px}
.slots{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.slot{padding:11px 4px;text-align:center;border-radius:11px;background:var(--card);border:2px solid transparent;
  font-size:14px;font-weight:700;cursor:pointer;transition:.15s}
.slot:active{transform:scale(.96)}
.slot.sel{background:var(--accent);color:#fff}
.slot.busy{background:transparent;color:var(--busy);border:1px dashed var(--busy);cursor:not-allowed;font-weight:500;position:relative}
.slot.busy::after{content:"已約";font-size:10px;display:block;color:var(--busy)}
.empty-tip{color:var(--ink-soft);font-size:13px;padding:10px 2px}
.inline-status{grid-column:1/-1;background:var(--accent-soft);border:1px solid var(--line);border-radius:12px;
  color:var(--ink-soft);font-size:12.5px;line-height:1.45;padding:11px 12px;text-align:left}
.status-action{margin-top:8px;background:var(--card);color:var(--accent);border:1px solid var(--line);border-radius:9px;
  padding:7px 11px;font:inherit;font-size:12.5px;font-weight:800;cursor:pointer}

.field{margin-bottom:15px}
.field label{display:block;font-size:13px;font-weight:700;margin-bottom:6px}
.field input,.field textarea{width:100%;padding:13px 14px;border:1.5px solid var(--line);border-radius:12px;
  font-size:15px;background:var(--card);font-family:inherit;color:var(--ink)}
.field input:focus,.field textarea:focus{outline:none;border-color:var(--gold)}
.field .note{font-size:11.5px;color:var(--ink-soft);margin-top:5px;display:flex;gap:5px;align-items:flex-start}
.privacy{background:var(--accent-soft);border-radius:12px;padding:12px 14px;font-size:12px;color:#4a5160;
  display:flex;gap:9px;margin-bottom:16px}
.privacy b{color:var(--accent)}
.push{display:flex;align-items:center;gap:11px;background:var(--card);border:1.5px solid var(--line);
  border-radius:12px;padding:13px 14px;margin-bottom:8px}
.push .txt{flex:1}
.push .txt .t{font-weight:700;font-size:14px}
.push .txt .d{font-size:11.5px;color:var(--ink-soft)}
.switch{width:46px;height:27px;border:0;padding:0;border-radius:99px;background:#cfd3da;position:relative;flex:0 0 auto;cursor:pointer;transition:.2s}
.switch:disabled{opacity:.5;cursor:not-allowed}
.switch.on{background:var(--ok)}
.switch::after{content:"";width:21px;height:21px;border-radius:50%;background:#fff;position:absolute;top:3px;left:3px;transition:.2s}
.switch.on::after{left:22px}

.review{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.review .row{display:flex;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--line);gap:12px}
.review .row:last-child{border-bottom:none}
.review .k{color:var(--ink-soft);font-size:13px;flex:0 0 auto}
.review .v{font-weight:700;text-align:right;font-size:14px}
.review .v.big{font-size:16px;color:var(--accent)}

.cta{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:var(--maxw);
  padding:14px 18px calc(14px + env(safe-area-inset-bottom));
  background:linear-gradient(to top,var(--bg) 72%,transparent);z-index:50}
.btn{width:100%;padding:16px;border:none;border-radius:14px;font-size:16px;font-weight:800;background:var(--accent);
  color:#fff;cursor:pointer;font-family:inherit;box-shadow:0 6px 18px rgba(31,36,48,.28);transition:.15s;
  letter-spacing:.05em;text-align:center;text-decoration:none;display:block}
.btn:active{transform:scale(.985)}
.btn:disabled{background:#c7cad1;box-shadow:none;cursor:not-allowed}
.btn.ghost{background:var(--card);color:var(--accent);border:1.5px solid var(--line);box-shadow:none}
.btn.block{display:block}
.cta .summ{font-size:12px;color:var(--ink-soft);text-align:center;margin-bottom:9px;min-height:16px}

.done-screen{display:none;padding:40px 24px;text-align:center}
.done-screen.show{display:block;animation:fade .5s}
@keyframes fade{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.check{width:88px;height:88px;border-radius:50%;background:var(--gold-soft);margin:6px auto 20px;display:grid;place-items:center;animation:pop .5s}
@keyframes pop{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.1)}100%{transform:scale(1)}}
.done-screen h2{font-size:22px;margin:0 0 6px}
.done-screen p{color:var(--ink-soft);margin:0 0 24px;font-size:14px}
.toast{position:fixed;bottom:96px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--accent);
  color:#fff;padding:11px 20px;border-radius:99px;font-size:13px;font-weight:600;opacity:0;transition:.3s;z-index:60;
  pointer-events:none;white-space:nowrap;max-width:90%}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.mini-foot{text-align:center;font-size:12px;color:var(--ink-soft);padding:8px 0 20px}
.mini-foot a{color:var(--gold);text-decoration:none}
body[data-salon-page="booking"] .mini-foot{padding-bottom:calc(180px + env(safe-area-inset-bottom))}
body[data-salon-page="booking"] .mini-foot a{display:inline-flex;align-items:center;min-height:44px;padding:0 6px}

/* 載入遮罩 */
.loading{position:fixed;inset:0;background:var(--bg);display:grid;place-items:center;z-index:200}
.loading .spin{width:36px;height:36px;border:3px solid var(--line);border-top-color:var(--gold);border-radius:50%;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

@media (min-width:900px){
  :root{--maxw:min(1180px,94vw)}
  body{background:linear-gradient(90deg,#ece7df 0,#f7f4ef 18%,#f7f4ef 82%,#ece7df 100%)}
  .app{margin:22px auto;background:var(--bg);border:1px solid var(--line);border-radius:18px;box-shadow:0 18px 60px rgba(24,26,32,.10);overflow:hidden}
  .topbar{padding:18px 26px 14px}
  .brand h1{font-size:21px}
  .brand .sub{font-size:12px}
  #flow{display:grid;grid-template-columns:minmax(300px,380px) minmax(0,1fr);gap:0 28px;padding:0 26px 28px;align-items:start}
  #flow section{padding:24px 0 8px}
  #fastTrack{grid-column:1 / -1;grid-row:1}
  #s1{grid-column:1;grid-row:2}
  #s2{grid-column:1;grid-row:3}
  #s3{grid-column:2;grid-row:2 / span 2}
  #s4{grid-column:1;grid-row:4}
  #s5{grid-column:2;grid-row:4}
  .staff{gap:14px}
  .staff .card{padding:18px 14px}
  .svc{padding:14px 16px}
  .cal{gap:8px}
  .day{min-height:54px}
  .slots{grid-template-columns:repeat(5,1fr)}
  .review .row{padding:15px 18px}
  .cta{max-width:var(--maxw);padding:14px 26px 18px;background:linear-gradient(to top,rgba(244,241,236,.98) 76%,transparent)}
  .done-screen{max-width:720px;margin:0 auto;padding:54px 24px}
  .toast{bottom:112px}
}

@media (min-width:1180px){
  .slots{grid-template-columns:repeat(6,1fr)}
}

/* --- LINE 綁定 Modal 樣式 --- */
.modal-overlay {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0,0,0,0.5);
  backdrop-filter: blur(4px);
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  box-sizing: border-box;
}
.modal-card {
  background: var(--card);
  border-radius: var(--radius);
  box-shadow: 0 12px 40px rgba(0,0,0,0.2);
  width: 100%;
  max-width: 400px;
  max-height: calc(100dvh - 32px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  animation: modalScaleUp 0.35s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
.modal-header {
  flex: 0 0 auto;
  padding: 16px 18px;
  border-bottom: 1px solid var(--line);
  display: flex;
  justify-content: space-between;
  align-items: center;
}
#lineModal .modal-body { overflow-y: auto; min-height: 0; overscroll-behavior: contain; }
.modal-header h3 {
  margin: 0;
  font-size: 16px;
  font-weight: 800;
}
.modal-header .close-modal {
  background: none;
  border: none;
  font-size: 24px;
  color: var(--ink-soft);
  cursor: pointer;
  line-height: 1;
}
.modal-body {
  padding: 20px 18px;
}
@keyframes modalScaleUp {
  from { transform: scale(0.92); opacity: 0; }
  to { transform: scale(1); opacity: 1; }
}
@keyframes pwaPulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.15); }
  100% { transform: scale(1); }
}
