:root{--primary-h: 200;--radius: 20px;--primary: oklch(.52 .066 var(--primary-h));--primary-deep: oklch(.44 .064 var(--primary-h));--primary-press: oklch(.39 .06 var(--primary-h));--primary-soft: oklch(.955 .022 var(--primary-h));--primary-tint: oklch(.92 .03 var(--primary-h));--on-primary: oklch(.99 .01 var(--primary-h));--bg: oklch(.985 .006 95);--surface: oklch(1 0 0);--surface-2: oklch(.975 .007 95);--ink: oklch(.28 .012 90);--ink-soft: oklch(.5 .012 90);--ink-faint: oklch(.62 .01 90);--line: oklch(.915 .008 95);--line-soft: oklch(.945 .007 95);--shadow-sm: 0 1px 2px oklch(.4 .02 90 / .05), 0 1px 1px oklch(.4 .02 90 / .04);--shadow-md: 0 6px 20px oklch(.4 .03 95 / .07), 0 2px 6px oklch(.4 .03 95 / .05);--shadow-lg: 0 18px 50px oklch(.4 .04 95 / .13), 0 6px 16px oklch(.4 .03 95 / .07);--font-head: "Noto Serif TC", serif;--font-body: "Noto Sans TC", system-ui, sans-serif;--maxw: 1120px}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;font-family:var(--font-body);color:var(--ink);background:var(--bg);line-height:1.65;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3{font-family:var(--font-head);font-weight:600;line-height:1.25;margin:0;letter-spacing:.01em;text-wrap:balance}p{margin:0;text-wrap:pretty}button{font-family:inherit;cursor:pointer}.topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px clamp(16px,4vw,32px);background:#fbfaf6d1;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid transparent;transition:border-color .25s ease,box-shadow .25s ease,background .25s ease}.topbar.scrolled{border-bottom-color:var(--line);box-shadow:var(--shadow-sm)}.brand{display:flex;align-items:center;gap:11px}.brand-mark{width:34px;height:34px;border-radius:11px;background:linear-gradient(150deg,var(--primary),var(--primary-deep));color:var(--on-primary);display:grid;place-items:center;font-family:var(--font-head);font-weight:600;font-size:17px;box-shadow:var(--shadow-sm)}.brand-name{font-weight:600;font-size:15.5px;letter-spacing:.01em}.brand-sub{font-size:12px;color:var(--ink-faint);margin-top:-2px;white-space:nowrap}.topbar-actions{display:flex;align-items:center;gap:8px}.user-chip{display:inline-flex;align-items:center;gap:6px}.user-chip-btn{display:inline-flex;align-items:center;gap:8px;padding:4px 10px 4px 4px;border-radius:999px;cursor:pointer;transition:background .18s ease}.user-chip-btn:hover{background:var(--surface-2)}.user-chip-name{font-size:14px;font-weight:500;color:var(--ink-soft);white-space:nowrap}.user-chip-btn:hover .user-chip-name{color:var(--ink)}@media(max-width:560px){.user-chip-name{display:none}}.user-ava{width:30px;height:30px;border-radius:50%;flex:none;background:linear-gradient(150deg,var(--primary),var(--primary-deep));color:var(--on-primary);display:grid;place-items:center;font-family:var(--font-head);font-size:14px;font-weight:600}.link-ghost{padding:9px 14px;border-radius:999px;font-size:14px;font-weight:500;white-space:nowrap;color:var(--ink-soft);transition:background .18s ease,color .18s ease}.link-ghost:hover{background:var(--surface-2);color:var(--ink)}.topbar .btn-primary{padding:9px 18px;font-size:14px}.topbar .topbar-cta{display:none}@media(min-width:860px){.topbar .topbar-cta{display:inline-flex}}.wrap{max-width:var(--maxw);margin:0 auto;padding:0 clamp(16px,4vw,32px)}.page{padding-bottom:120px}@media(min-width:860px){.page{padding-bottom:64px}}.hero{position:relative}.cover{position:relative;height:clamp(170px,34vw,300px);border-radius:0;overflow:hidden}@media(min-width:860px){.cover{height:320px;border-radius:var(--radius);margin-top:18px}}.cover:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(to top,oklch(.25 .03 var(--primary-h) / .3),transparent 55%)}.hero-card{position:relative;margin:-54px auto 0;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-md);padding:20px clamp(18px,4vw,32px) 24px}@media(min-width:860px){.hero-card{margin-top:-70px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:28px;padding:26px 32px}}.avatar-wrap{display:flex;justify-content:center}@media(min-width:860px){.avatar-wrap{display:block}}.avatar{width:104px;height:104px;border-radius:50%;border:4px solid var(--surface);box-shadow:var(--shadow-md);margin-top:-76px;overflow:hidden;background:var(--primary-soft)}@media(min-width:860px){.avatar{width:132px;height:132px;margin-top:-84px}}.hero-meta{text-align:center;margin-top:12px}@media(min-width:860px){.hero-meta{text-align:left;margin-top:0}}.hero-name{font-size:clamp(26px,6vw,34px)}.hero-name .en{font-style:italic}.hero-title{color:var(--primary-deep);font-weight:600;font-size:clamp(15px,4vw,17px);margin-top:4px}.hero-intro{color:var(--ink-soft);font-size:15px;margin-top:10px;max-width:52ch}@media(min-width:860px){.hero-intro{margin-inline:0}}.chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:14px}@media(min-width:860px){.chips{justify-content:flex-start}}.chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line);font-size:13px;color:var(--ink-soft);font-weight:500}.chip svg{width:15px;height:15px;color:var(--primary)}.hero-aside{display:none}@media(min-width:860px){.hero-aside{display:flex;flex-direction:column;align-items:flex-end;gap:10px}.hero-rating{font-size:13px;color:var(--ink-faint)}}.content{margin-top:clamp(28px,5vw,44px)}@media(min-width:860px){.content{display:grid;grid-template-columns:1fr 340px;gap:40px;align-items:start}}.section{margin-bottom:clamp(30px,5vw,44px)}.section-eyebrow{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;font-size:12.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--primary-deep);margin-bottom:12px}.section-eyebrow:before{content:"";flex:none;width:22px;height:2px;background:var(--primary);border-radius:2px}.section h2{font-size:clamp(21px,4.5vw,26px);margin-bottom:14px}.lede{color:var(--ink-soft);font-size:clamp(15px,4vw,16.5px);line-height:1.8}.lede+.lede{margin-top:14px}.course-grid{display:grid;gap:14px}@media(min-width:620px){.course-grid{grid-template-columns:1fr 1fr}}.info-card{background:var(--surface);border:1px solid var(--line);border-radius:calc(var(--radius) - 4px);padding:20px;transition:box-shadow .2s ease,transform .2s ease,border-color .2s ease}.info-card:hover{box-shadow:var(--shadow-md);border-color:var(--primary-tint);transform:translateY(-2px)}.info-card.span-2{grid-column:1 / -1}.info-ico{width:38px;height:38px;border-radius:11px;background:var(--primary-soft);color:var(--primary-deep);display:grid;place-items:center;margin-bottom:13px}.info-ico svg{width:20px;height:20px}.info-card h3{font-size:17px;margin-bottom:7px}.info-card p,.info-card li{color:var(--ink-soft);font-size:14.5px;line-height:1.72}.info-list{margin:0;padding:0;list-style:none;display:grid;gap:7px}.info-list li{display:flex;gap:9px;align-items:flex-start}.info-list li:before{content:"";flex:none;width:6px;height:6px;border-radius:50%;background:var(--primary);margin-top:9px}.note-card{background:var(--primary-soft);border:1px solid var(--primary-tint)}.note-card .info-ico{background:var(--surface)}.promo{position:relative;overflow:hidden;border-radius:var(--radius);background:linear-gradient(145deg,var(--primary),var(--primary-deep));color:var(--on-primary);padding:clamp(22px,5vw,30px);box-shadow:0 14px 36px oklch(.5 .06 var(--primary-h) / .28);margin-bottom:clamp(30px,5vw,44px)}.promo-glow{position:absolute;width:280px;height:280px;border-radius:50%;background:radial-gradient(circle,oklch(1 0 0 / .22),transparent 70%);top:-130px;right:-70px;pointer-events:none}.promo-head{position:relative}.promo-badge{display:inline-block;padding:6px 13px;border-radius:999px;background:#fff3;font-size:13px;font-weight:600;letter-spacing:.02em;margin-bottom:13px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);white-space:nowrap}.promo-title{font-size:clamp(22px,5.5vw,29px);color:var(--on-primary)}.promo-sub{font-size:clamp(14px,3.6vw,15.5px);opacity:.92;margin-top:7px}.promo-tiers{position:relative;display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:20px}.promo-tier{display:block;width:100%;font:inherit;color:var(--on-primary);cursor:pointer;background:#ffffff24;border:1px solid oklch(1 0 0 / .24);border-radius:15px;padding:15px 8px;text-align:center;transition:transform .18s ease,background .18s ease}.promo-tier:hover{transform:translateY(-3px);background:#fff3}.tier-buy{font-family:var(--font-head);font-size:clamp(17px,4.6vw,22px);font-weight:600}.tier-plus{font-size:clamp(12px,3.2vw,13.5px);opacity:.95;margin-top:5px}.tier-plus strong{font-size:1.18em;font-weight:700}.promo-note{position:relative;font-size:12.5px;opacity:.82;margin-top:15px}.promo-cta{position:relative;margin-top:18px;width:100%;background:var(--on-primary);color:var(--primary-deep)}.promo-cta:hover{background:#ffffffeb}.promo-cta svg{width:17px;height:17px}@media(min-width:560px){.promo-cta{width:auto}}.about-highlights{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}.feat{display:inline-flex;align-items:center;gap:8px;padding:9px 15px;border-radius:12px;background:var(--primary-soft);color:var(--primary-deep);font-size:14px;font-weight:600}.feat svg{width:16px;height:16px}.tablist{display:flex;gap:8px}.tab{flex:1;display:flex;align-items:center;justify-content:center;gap:7px;padding:13px 8px;border-radius:14px;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);font-size:clamp(13.5px,3.6vw,15px);font-weight:600;transition:background .18s ease,color .18s ease,border-color .18s ease,box-shadow .18s ease}.tab .tab-emoji{font-size:17px;line-height:1}.tab:hover{border-color:var(--primary-tint);color:var(--ink)}.tab.active{background:var(--primary);border-color:var(--primary);color:var(--on-primary);box-shadow:0 7px 18px oklch(.5 .06 var(--primary-h) / .28)}.tabpanel{margin-top:14px;background:var(--surface);border:1px solid var(--line);border-radius:calc(var(--radius) - 4px);padding:clamp(18px,4vw,24px)}.tabpanel h3{font-size:19px;margin-bottom:6px}.tabpanel-desc{color:var(--ink-soft);font-size:15px;margin-bottom:15px}.levels{display:grid;gap:12px}.level{display:flex;gap:14px;align-items:flex-start;padding:14px;border-radius:14px;background:var(--surface-2);border:1px solid var(--line-soft)}.level-tag{flex:none;min-width:52px;text-align:center;padding:6px 10px;border-radius:999px;background:var(--primary-soft);color:var(--primary-deep);font-size:13px;font-weight:700}.level p{color:var(--ink-soft);font-size:14.5px;line-height:1.7}@media(prefers-reduced-motion:no-preference){.tabpanel{animation:fadeUp .28s ease}@keyframes fadeUp{0%{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}}.steps{list-style:none;margin:0;padding:0;display:grid;gap:18px}@media(min-width:680px){.steps{grid-template-columns:repeat(4,1fr);gap:14px}}.step{position:relative;display:flex;gap:14px;align-items:flex-start}.step-num{flex:none;width:40px;height:40px;border-radius:50%;background:var(--primary);color:var(--on-primary);display:grid;place-items:center;font-family:var(--font-head);font-weight:600;font-size:18px;box-shadow:var(--shadow-sm);z-index:1}.step-title{font-weight:600;font-size:15.5px;color:var(--ink)}.step-text{font-size:13.5px;color:var(--ink-soft);margin-top:3px}.step:not(:last-child):after{content:"";position:absolute;background:var(--line);left:19px;top:44px;bottom:-18px;width:2px}@media(min-width:680px){.step{flex-direction:column;align-items:flex-start}.step:not(:last-child):after{left:46px;right:-14px;top:19px;bottom:auto;width:auto;height:2px}}.policy{background:linear-gradient(180deg,#fff5e8,#fffaf4);border:1px solid oklch(.9 .035 75);border-radius:var(--radius);padding:clamp(20px,4vw,26px)}.policy-head{display:flex;gap:14px;align-items:flex-start;margin-bottom:16px}.policy-ico{flex:none;width:46px;height:46px;border-radius:14px;background:#fbe0bd;display:grid;place-items:center;font-size:23px}.policy h3{font-size:19px}.policy-intro{color:var(--ink-soft);font-size:14px;margin-top:4px}.policy-list{margin:0;padding:0;list-style:none;display:grid;gap:11px}.policy-list li{display:flex;gap:11px;align-items:flex-start;font-size:14.5px;color:var(--ink);line-height:1.65}.policy-list li:before{content:"";flex:none;width:7px;height:7px;border-radius:50%;background:#ba7d3d;margin-top:8px}.booking{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-md);padding:22px}.booking-aside{display:none}@media(min-width:860px){.booking-aside{display:block;position:sticky;top:84px}}.booking h3{font-size:18px;margin-bottom:4px}.booking-sub{color:var(--ink-faint);font-size:13.5px;margin-bottom:16px}.facts{display:grid;gap:1px;background:var(--line-soft);border-radius:14px;overflow:hidden;border:1px solid var(--line)}.fact{display:flex;align-items:center;gap:12px;padding:13px 15px;background:var(--surface)}.fact-ico{width:32px;height:32px;border-radius:9px;background:var(--surface-2);color:var(--primary-deep);display:grid;place-items:center;flex:none}.fact-ico svg{width:17px;height:17px}.fact-label{font-size:12px;color:var(--ink-faint)}.fact-value{font-size:14.5px;font-weight:600;color:var(--ink);margin-top:1px}.booking .btn-primary{width:100%;margin-top:18px}.booking-fine{font-size:12px;color:var(--ink-faint);text-align:center;margin-top:12px;line-height:1.6}.booking-inline{display:block}@media(min-width:860px){.booking-inline{display:none}}.slots-page{padding:0 0 130px}@media(min-width:860px){.slots-page{padding-bottom:56px}}.back-link{display:inline-flex;align-items:center;gap:4px;margin:18px 0 6px;padding:8px 14px 8px 10px;border:1px solid var(--line);background:var(--surface);border-radius:999px;font-size:14px;font-weight:500;color:var(--ink-soft);white-space:nowrap;transition:background .18s ease,color .18s ease,border-color .18s ease}.back-link:hover{background:var(--surface-2);color:var(--ink);border-color:var(--primary-tint)}.back-link svg{width:17px;height:17px}.slots-head{padding:6px 0 8px}.slots-title{font-size:clamp(24px,6vw,32px);margin:4px 0 16px}.slots-teacher{display:flex;align-items:center;gap:13px;padding:14px;border:1px solid var(--line);border-radius:calc(var(--radius) - 4px);background:var(--surface)}.slots-avatar{width:46px;height:46px;border-radius:50%;overflow:hidden;flex:none}.slots-teacher-name{font-weight:600;font-size:15px;color:var(--ink)}.slots-teacher-meta{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-soft);margin-top:3px}.slots-teacher-meta svg{width:15px;height:15px;color:var(--primary)}.tz-note{display:inline-flex;align-items:center;gap:7px;margin-top:12px;padding:8px 13px;border-radius:999px;background:var(--primary-soft);color:var(--primary-deep);font-size:13px;font-weight:500}.tz-note svg{width:15px;height:15px}.slots-layout{margin-top:22px}@media(min-width:860px){.slots-layout{display:grid;grid-template-columns:1fr 320px;gap:36px;align-items:start}}.block-label{font-size:13.5px;font-weight:600;color:var(--ink-soft);margin:22px 0 11px}.slots-main>.block-label:first-child{margin-top:4px}.course-strip{display:flex;gap:10px;flex-wrap:wrap;padding:2px 0 4px}.course-chip{flex:0 1 auto;min-width:120px;padding:11px 16px;border-radius:14px;border:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column;align-items:flex-start;gap:3px;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}.course-chip:hover{border-color:var(--brand, #c8862e)}.course-chip.active{border-color:var(--brand, #c8862e);background:var(--brand-tint, #fbf1e0);box-shadow:0 0 0 2px var(--brand, #c8862e) inset}.course-chip .cc-name{font-size:15px;font-weight:700;color:var(--ink, #1c1714)}.course-chip .cc-min{font-size:12.5px;color:var(--ink-soft, #6b6259)}.date-strip{display:flex;gap:9px;overflow-x:auto;padding:4px 2px 12px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}.date-strip::-webkit-scrollbar{height:6px}.date-strip::-webkit-scrollbar-thumb{background:var(--line);border-radius:999px}.date-chip{flex:none;scroll-snap-align:start;width:62px;padding:11px 6px 9px;border-radius:16px;border:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--ink);transition:all .16s ease;position:relative}.date-chip:hover:not(.disabled):not(.active){border-color:var(--primary-tint);transform:translateY(-2px)}.dc-week{font-size:12px;color:var(--ink-soft)}.dc-day{font-family:var(--font-head);font-size:21px;font-weight:600;line-height:1.1}.dc-month{font-size:11px;color:var(--ink-faint)}.dc-dot{width:5px;height:5px;border-radius:50%;margin-top:3px}.dc-dot.on{background:var(--primary)}.dc-dot.off{background:var(--line)}.dc-today{font-size:10px;font-weight:700;color:var(--primary-deep);margin-top:2px}.date-chip.active{background:var(--primary);border-color:var(--primary);color:var(--on-primary);box-shadow:0 7px 18px oklch(.5 .06 var(--primary-h) / .3)}.date-chip.active .dc-week,.date-chip.active .dc-month,.date-chip.active .dc-today{color:#ffffffd9}.date-chip.active .dc-dot.on{background:var(--on-primary)}.date-chip.disabled{opacity:.45;cursor:not-allowed}.date-chip.disabled .dc-day{color:var(--ink-faint)}.legend{display:flex;flex-wrap:wrap;gap:16px;margin:4px 0}.lg{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-soft)}.sw{width:13px;height:13px;border-radius:5px;flex:none}.sw.av{background:var(--surface);border:1.5px solid var(--primary)}.sw.bk{background:var(--surface-2);border:1.5px solid var(--line)}.sw.un{background:repeating-linear-gradient(135deg,var(--line-soft) 0 4px,transparent 4px 7px);border:1.5px solid var(--line)}.slot-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}@media(min-width:520px){.slot-grid{grid-template-columns:repeat(3,1fr)}}@media(min-width:860px){.slot-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:1000px){.slot-grid{grid-template-columns:repeat(3,1fr)}}.slot{position:relative;text-align:left;padding:13px 14px;border-radius:14px;border:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column;gap:3px;transition:all .15s ease}.slot-time{font-size:16px;font-weight:600;color:var(--ink);letter-spacing:.01em}.slot-dash{margin:0 3px;color:var(--ink-faint);font-weight:400}.slot-state{font-size:12px;color:var(--ink-faint)}.slot.available{cursor:pointer}.slot.available:hover{border-color:var(--primary);transform:translateY(-2px);box-shadow:var(--shadow-sm)}.slot.available .slot-state{color:var(--primary-deep)}.slot.selected{background:var(--primary);border-color:var(--primary);box-shadow:0 8px 20px oklch(.5 .06 var(--primary-h) / .32)}.slot.selected .slot-time,.slot.selected .slot-state,.slot.selected .slot-dash{color:var(--on-primary)}.slot.booked,.slot.unavailable{cursor:not-allowed}.slot.booked{background:var(--surface-2)}.slot.booked .slot-time{color:var(--ink-faint);text-decoration:line-through;text-decoration-color:var(--line)}.slot.unavailable{background:repeating-linear-gradient(135deg,var(--line-soft) 0 6px,transparent 6px 12px);border-style:dashed}.slot.unavailable .slot-time{color:var(--ink-faint)}.slot-check{position:absolute;top:9px;right:9px;width:20px;height:20px;border-radius:50%;background:#ffffff38;display:grid;place-items:center}.slot-check svg{width:14px;height:14px;color:var(--on-primary)}.empty-slots{display:flex;flex-direction:column;align-items:center;gap:10px;padding:40px 20px;text-align:center;color:var(--ink-faint);border:1px dashed var(--line);border-radius:var(--radius);background:var(--surface)}.empty-slots svg{width:30px;height:30px;color:var(--ink-faint)}.empty-slots p{font-size:14.5px;line-height:1.6}@media(min-width:860px){.slots-aside{position:sticky;top:84px;display:block}}.slots-aside{display:none}.slots-summary .summary-when{background:var(--primary-soft);border:1px solid var(--primary-tint);border-radius:14px;padding:15px;margin-bottom:4px}.sw-date{font-family:var(--font-head);font-size:18px;font-weight:600;color:var(--ink)}.sw-week{font-family:var(--font-body);font-size:14px;color:var(--ink-soft);font-weight:400}.sw-time{display:flex;align-items:center;gap:7px;margin-top:6px;font-size:15px;font-weight:600;color:var(--primary-deep)}.sw-time svg{width:16px;height:16px}.summary-empty{color:var(--ink-faint);font-size:14px;line-height:1.7;padding:6px 0 2px}.slots-summary .btn-primary{width:100%;margin-top:16px}.select-bar{position:fixed;left:0;right:0;bottom:0;z-index:50;padding:11px clamp(14px,4vw,20px) calc(11px + env(safe-area-inset-bottom));background:#fbfaf6eb;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-top:1px solid var(--line);display:grid;grid-template-columns:1fr auto;align-items:center;gap:14px}@media(min-width:860px){.select-bar{display:none}}.sel-when{font-size:14.5px;font-weight:700;color:var(--ink)}.sel-sub{font-size:12.5px;color:var(--ink-faint);margin-top:1px}.sel-empty{font-size:13.5px}.select-bar .btn-primary{padding:14px 22px}.btn-primary:disabled{filter:none;opacity:1;cursor:not-allowed;background:var(--line);color:var(--ink-faint);box-shadow:none}.btn-primary:disabled:hover{filter:none;box-shadow:none;transform:none}.form-page{padding:0 0 120px}@media(min-width:860px){.form-page{padding-bottom:56px}}.form-head{padding:6px 0 4px}.form-sub{color:var(--ink-soft);font-size:14.5px;margin-top:8px}.form-layout{margin-top:22px}@media(min-width:860px){.form-layout{display:grid;grid-template-columns:1fr 320px;gap:36px;align-items:start}}.field{margin-bottom:18px}.field label{display:block;font-size:14px;font-weight:600;color:var(--ink);margin-bottom:7px}.field .req{color:#cb4644}.field .opt{font-size:11.5px;font-weight:500;color:var(--ink-faint);margin-left:7px;padding:2px 7px;border-radius:6px;background:var(--surface-2)}.field input,.field textarea{width:100%;padding:13px 15px;border-radius:13px;border:1px solid var(--line);background:var(--surface);font-family:inherit;font-size:15.5px;color:var(--ink);transition:border-color .16s ease,box-shadow .16s ease}.field textarea{min-height:100px;resize:vertical;line-height:1.65}.field input::placeholder,.field textarea::placeholder{color:var(--ink-faint)}.field input:focus,.field textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.field input.invalid,.field textarea.invalid{border-color:#d55753;background:snow;background:oklch(.99 .012 25)}.field input.invalid:focus,.field textarea.invalid:focus{box-shadow:0 0 0 3px #ffdedb;box-shadow:0 0 0 3px oklch(.93 .045 25)}.field .err{display:inline-flex;align-items:center;gap:5px;margin-top:7px;font-size:12.5px;color:#b63132}.field .err svg{width:14px;height:14px}.form-actions{display:none}@media(min-width:860px){.form-actions{display:block;margin-top:8px}.form-actions .btn-primary{width:100%}}.submit-bar{position:fixed;left:0;right:0;bottom:0;z-index:50;padding:11px clamp(14px,4vw,20px) calc(11px + env(safe-area-inset-bottom));background:#fbfaf6eb;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-top:1px solid var(--line)}@media(min-width:860px){.submit-bar{display:none}}.submit-bar .btn-primary{width:100%;padding:15px}.picked-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:20px}.mobile-picked{margin-bottom:22px}@media(min-width:860px){.mobile-picked{display:none}}.form-aside{display:none}@media(min-width:860px){.form-aside{display:block;position:sticky;top:84px}}.picked-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.picked-eyebrow{font-size:12px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--primary-deep)}.change-link{background:none;border:none;color:var(--primary-deep);font-size:13px;font-weight:600;padding:5px 10px;border-radius:8px;transition:background .15s ease}.change-link:hover{background:var(--primary-soft)}.picked-when{background:var(--primary-soft);border:1px solid var(--primary-tint);border-radius:14px;padding:14px}.spinner{width:18px;height:18px;border-radius:50%;border:2px solid oklch(1 0 0 / .4);border-top-color:var(--on-primary);animation:spin .7s linear infinite}.success-page{padding:26px 0 90px}.success-wrap{display:flex;justify-content:center}.success-card{max-width:560px;width:100%;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-md);padding:clamp(26px,5vw,40px);text-align:center}.success-ico{width:74px;height:74px;border-radius:50%;margin:0 auto 18px;background:linear-gradient(150deg,var(--primary),var(--primary-deep));color:var(--on-primary);display:grid;place-items:center;box-shadow:0 12px 28px oklch(.5 .06 var(--primary-h) / .34)}.success-ico svg{width:38px;height:38px;stroke-width:2.4}@media(prefers-reduced-motion:no-preference){.success-ico{animation:pop .5s cubic-bezier(.2,.8,.3,1.3) both}@keyframes pop{0%{transform:scale(.55)}60%{transform:scale(1.1)}to{transform:scale(1)}}}.status-badge{display:inline-flex;align-items:center;gap:7px;padding:6px 14px;border-radius:999px;font-size:13px;font-weight:600;white-space:nowrap}.status-badge.pending{background:#ffebd1;background:oklch(.95 .045 75);color:#7c4a1c}.sb-dot{width:7px;height:7px;border-radius:50%;background:currentColor}.success-title{font-size:clamp(24px,5.5vw,30px);margin:14px 0 10px}.success-lede{color:var(--ink-soft);font-size:15px;line-height:1.75;max-width:42ch;margin:0 auto}.detail-list{text-align:left;margin:24px 0 22px;border:1px solid var(--line);border-radius:16px;overflow:hidden}.detail-row{display:flex;gap:14px;padding:13px 16px;border-bottom:1px solid var(--line-soft)}.detail-row:last-child{border-bottom:none}.detail-label{flex:none;width:76px;font-size:13.5px;color:var(--ink-faint)}.detail-value{font-size:14.5px;color:var(--ink);font-weight:500;word-break:break-word}.success-actions{display:flex;flex-direction:column;gap:10px}@media(min-width:520px){.success-actions{flex-direction:row;justify-content:center}}.success-actions .btn-primary,.success-actions .btn-ghost{flex:1}.btn-ghost{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:13px 22px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-size:15px;font-weight:600;transition:background .18s ease,border-color .18s ease}.mine-page{padding:0 0 70px}.mine-head{padding:6px 0 4px}.seg{display:inline-flex;gap:4px;margin:22px 0 20px;padding:4px;background:var(--surface-2);border:1px solid var(--line);border-radius:14px}.seg-btn{display:inline-flex;align-items:center;gap:7px;padding:9px 18px;border:none;background:transparent;border-radius:10px;font-size:14.5px;font-weight:600;color:var(--ink-soft);white-space:nowrap;transition:background .16s ease,color .16s ease,box-shadow .16s ease}.seg-btn.active{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm)}.seg-count{min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:var(--primary);color:var(--on-primary);font-size:12px;font-weight:700;display:inline-grid;place-items:center}.seg-btn:not(.active) .seg-count{background:var(--line);color:var(--ink-soft)}.bk-list{display:grid;gap:14px}@media(min-width:720px){.bk-list{grid-template-columns:1fr 1fr}}.bk-card{display:flex;gap:16px;align-items:stretch;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:18px;transition:box-shadow .2s ease,border-color .2s ease}.bk-card.is-cancelled{opacity:.66}.bk-card.is-cancelled .bk-date{background:var(--surface-2);color:var(--ink-faint)}.bk-date{flex:none;width:64px;border-radius:14px;background:var(--primary-soft);color:var(--primary-deep);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:10px 0}.bk-month{font-size:12px;font-weight:600}.bk-day{font-family:var(--font-head);font-size:26px;font-weight:700;line-height:1}.bk-week{font-size:11.5px;color:var(--ink-faint)}.bk-card.is-cancelled .bk-week{color:var(--ink-faint)}.bk-body{flex:1;min-width:0}.bk-top{display:flex;align-items:center;gap:8px;margin-bottom:9px;flex-wrap:wrap}.bk-tag{font-size:11.5px;font-weight:600;color:var(--ink-faint);padding:3px 9px;border-radius:999px;background:var(--surface-2)}.status-badge.confirmed{background:var(--primary-soft);color:var(--primary-deep)}.status-badge.cancelled{background:#f7ecea;color:#926460}.bk-time{display:flex;align-items:center;gap:7px;font-size:16px;font-weight:600;color:var(--ink)}.bk-time svg{width:16px;height:16px;color:var(--primary)}.bk-tz{font-size:12.5px;font-weight:400;color:var(--ink-faint)}.bk-meta{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:8px}.bk-meta span{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-soft)}.bk-meta svg{width:15px;height:15px;color:var(--ink-faint)}.bk-note{margin-top:9px;font-size:13.5px;color:var(--ink-soft);font-style:italic}.bk-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:14px}.bk-hint{font-size:12.5px;color:var(--ink-faint)}.btn-sm{padding:9px 16px;font-size:13.5px;white-space:nowrap}a.btn-sm{text-decoration:none}.btn-ghost.danger{color:#b94642;border-color:#f8d4d1}.btn-ghost.danger:hover{background:#fff1f0;background:oklch(.97 .02 25);border-color:#f4b0aa}.mine-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;padding:50px 24px;border:1px dashed var(--line);border-radius:var(--radius);background:var(--surface)}.mine-empty-ico{width:56px;height:56px;border-radius:16px;margin-bottom:6px;background:var(--primary-soft);color:var(--primary-deep);display:grid;place-items:center}.mine-empty-ico svg{width:27px;height:27px}.mine-empty h3{font-size:18px}.mine-empty p{color:var(--ink-soft);font-size:14.5px;max-width:34ch}.mine-empty .btn-primary{margin-top:12px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;background:#2521176b;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:grid;place-items:center;padding:24px}@media(prefers-reduced-motion:no-preference){.modal-backdrop{animation:fadeIn .2s ease both}@keyframes fadeIn{0%{opacity:0}}}.modal{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:clamp(22px,5vw,28px);max-width:400px;width:100%}@media(prefers-reduced-motion:no-preference){.modal{animation:rise .25s cubic-bezier(.2,.7,.3,1) both}}.modal h3{font-size:19px;margin-bottom:10px}.modal p{font-size:14.5px;color:var(--ink-soft);line-height:1.7}.modal-actions .btn-ghost,.modal-actions .btn-danger,.modal-actions .btn-primary{flex:1}.btn-danger{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:13px 22px;border-radius:999px;border:none;background:#c13c3b;color:snow;color:oklch(.99 .01 25);font-size:15px;font-weight:600;transition:filter .16s ease}.btn-danger:hover{filter:brightness(1.05)}.slot-confirm{text-align:center;max-width:380px}.sc-ico{width:56px;height:56px;border-radius:16px;margin:0 auto 14px;background:var(--primary-soft);color:var(--primary-deep);display:grid;place-items:center}.sc-ico svg{width:27px;height:27px}.slot-confirm h3{font-size:20px;margin-bottom:14px}.sc-when{background:var(--primary-soft);border:1px solid var(--primary-tint);border-radius:14px;padding:15px}.slot-confirm .sw-date{font-family:var(--font-head);font-size:19px;font-weight:600;color:var(--ink)}.slot-confirm .sw-time{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:6px;font-size:16px;font-weight:600;color:var(--primary-deep)}.slot-confirm .sw-time svg{width:17px;height:17px}.sc-mini{display:flex;flex-direction:column;gap:7px;margin-top:14px}.sc-mini span{display:inline-flex;align-items:center;justify-content:center;gap:7px;font-size:13.5px;color:var(--ink-soft);white-space:nowrap}.sc-mini svg{width:16px;height:16px;color:var(--primary)}.slot-confirm .modal-actions .btn-primary{white-space:nowrap}.sc-choose{margin:18px 0 12px;font-size:13px;font-weight:700;letter-spacing:.06em;color:var(--ink-faint)}.sc-options{display:grid;gap:10px}.sc-options .btn-primary,.sc-options .btn-ghost{width:100%;white-space:nowrap;padding:14px 24px;font-size:16px;border:1px solid transparent}.sc-options .btn-primary svg,.sc-options .btn-ghost svg{width:18px;height:18px}.sc-cancel{margin-top:14px;background:none;border:none;color:var(--ink-soft);font-size:13.5px;font-weight:600;padding:6px 10px;border-radius:8px;cursor:pointer;white-space:nowrap}.sc-cancel:hover{color:var(--ink);text-decoration:underline}.sc-note{margin-top:10px;font-size:12px;color:var(--ink-faint);line-height:1.6}.reviews-band{margin-top:clamp(36px,6vw,60px);background:var(--surface-2);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.reviews-section{max-width:960px;margin:0 auto;padding:clamp(28px,6vw,56px) clamp(16px,4vw,32px) clamp(48px,8vw,80px)}.reviews-head{margin-bottom:22px}.reviews-head h2{font-size:clamp(24px,6vw,34px);margin-bottom:8px}.reviews-sub{color:var(--ink-soft);font-size:clamp(15px,4vw,16.5px)}.stat-bar{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(min-width:760px){.stat-bar{grid-template-columns:repeat(4,1fr)}}.stat{background:var(--surface);border:1px solid var(--line);border-radius:calc(var(--radius) - 4px);padding:clamp(16px,3.5vw,22px) 16px;text-align:center;transition:box-shadow .2s ease,transform .2s ease,border-color .2s ease}.stat:hover{box-shadow:var(--shadow-md);border-color:var(--primary-tint);transform:translateY(-2px)}.stat-num{font-family:var(--font-head);font-size:clamp(26px,6vw,34px);font-weight:700;color:var(--primary-deep);line-height:1.1}.stat-label{font-size:clamp(13px,3.4vw,14px);color:var(--ink-soft);margin-top:6px}.filter-row{display:flex;flex-wrap:wrap;gap:9px;margin:24px 0 18px}.fpill{display:inline-flex;align-items:center;gap:9px;padding:10px 17px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);font-size:14.5px;font-weight:600;white-space:nowrap;transition:background .16s ease,color .16s ease,border-color .16s ease,box-shadow .16s ease}.fpill:hover{border-color:var(--primary-tint);color:var(--ink)}.fpill.active{background:var(--primary);border-color:var(--primary);color:var(--on-primary);box-shadow:0 7px 18px oklch(.5 .06 var(--primary-h) / .26)}.fcount{min-width:22px;height:22px;padding:0 7px;border-radius:999px;background:var(--surface-2);color:var(--ink-soft);font-size:12.5px;font-weight:700;display:inline-grid;place-items:center}.fpill.active .fcount{background:#ffffff38;color:var(--on-primary)}.review-grid{display:grid;gap:14px}@media(min-width:760px){.review-grid{grid-template-columns:1fr 1fr;align-items:start}}.review-card{--card-bg: var(--surface);display:flex;flex-direction:column;gap:14px;background:var(--card-bg);border:1px solid var(--line);border-radius:var(--radius);padding:clamp(18px,4vw,24px);transition:box-shadow .2s ease,transform .2s ease,border-color .2s ease}.review-card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px)}.review-card.long{grid-column:1 / -1}.review-card.bad{--card-bg: oklch(.985 .018 65);border-color:#f4d9c0}.review-card.bad:hover{border-color:#edc09d}.r-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.r-tag{padding:6px 13px;border-radius:999px;font-size:13.5px;font-weight:700;white-space:nowrap}.r-tag.good{background:var(--primary-soft);color:var(--primary-deep)}.r-tag.bad{background:#ffe2cb;background:oklch(.93 .07 60);color:#8b3f00;color:oklch(.46 .13 50)}.r-topic{padding:5px 11px;border-radius:999px;font-size:12.5px;font-weight:600;white-space:nowrap;background:var(--surface-2);color:var(--ink-faint);border:1px solid var(--line-soft)}.review-card.bad .r-topic{background:#fcefe4}.r-text-wrap{display:flex;flex-direction:column;gap:8px}.r-text{font-size:clamp(15px,3.9vw,16px);line-height:1.85;color:var(--ink)}.r-text p{margin:0}.r-text p+p{margin-top:.95em}.r-text.collapsed{max-height:9.2em;overflow:hidden;position:relative}.r-text.collapsed:after{content:"";position:absolute;left:0;right:0;bottom:0;height:3.4em;background:linear-gradient(to bottom,transparent,var(--card-bg) 92%);pointer-events:none}.r-toggle{align-self:flex-start;background:none;border:none;padding:2px 0;white-space:nowrap;color:var(--primary-deep);font-size:14px;font-weight:700;cursor:pointer}.r-toggle:hover{text-decoration:underline}.r-reply{background:var(--primary-soft);border:1px solid var(--primary-tint);border-radius:16px;padding:14px 16px}.r-reply-head{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;color:var(--primary-deep);margin-bottom:7px;white-space:nowrap}.r-reply-ava{width:24px;height:24px;border-radius:50%;flex:none;background:linear-gradient(150deg,var(--primary),var(--primary-deep));color:var(--on-primary);display:grid;place-items:center;font-family:var(--font-head);font-size:12px;font-weight:600}.r-reply p{margin:0;font-size:14.5px;line-height:1.7;color:var(--ink-soft)}.r-foot{display:flex;align-items:center;gap:12px;margin-top:auto;padding-top:4px}.r-avatar{width:42px;height:42px;border-radius:50%;flex:none;background:linear-gradient(150deg,oklch(.6 .06 var(--primary-h)),oklch(.45 .07 var(--primary-h)));color:oklch(.99 .01 var(--primary-h));display:grid;place-items:center;font-family:var(--font-head);font-size:17px;font-weight:600}.r-avatar.anon{background:linear-gradient(150deg,#a19e98,#77746d)}.r-name{font-size:14.5px;font-weight:600;color:var(--ink)}.r-date{font-size:12.5px;color:var(--ink-faint);margin-top:1px;white-space:nowrap}.confirm-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:clamp(20px,4vw,28px);max-width:620px;margin-top:22px}.cf-section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.cf-section-title{font-size:12.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--primary-deep)}.cf-edit{background:none;border:none;color:var(--primary-deep);font-size:13px;font-weight:600;padding:5px 10px;border-radius:8px;cursor:pointer;transition:background .15s ease;white-space:nowrap}.cf-edit:hover{background:var(--primary-soft)}.cf-when{background:var(--primary-soft);border:1px solid var(--primary-tint);border-radius:14px;padding:15px}.cf-mini{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:12px}.cf-mini span{display:inline-flex;align-items:center;gap:7px;font-size:13.5px;color:var(--ink-soft);white-space:nowrap}.cf-mini svg{width:16px;height:16px;color:var(--primary)}.cf-divider{height:1px;background:var(--line);margin:22px 0}.cf-rows{display:grid;gap:1px;background:var(--line-soft);border:1px solid var(--line);border-radius:14px;overflow:hidden}.cf-row{display:flex;align-items:baseline;gap:12px;padding:13px 15px;background:var(--surface)}.cf-label{flex:none;width:70px;font-size:13px;color:var(--ink-faint)}.cf-value{flex:1;font-size:14.5px;color:var(--ink);font-weight:500;word-break:break-word}.cf-fineprint{display:flex;gap:9px;align-items:flex-start;margin:20px 0 8px;padding:13px 15px;background:var(--surface-2);border-radius:13px}.cf-fineprint svg{width:17px;height:17px;color:var(--primary);flex:none;margin-top:1px}.cf-fineprint span{font-size:13px;color:var(--ink-soft);line-height:1.6}.cf-credits{display:flex;gap:12px;align-items:flex-start;margin:18px 0 4px;padding:15px 16px;border-radius:14px;border:1px solid var(--line)}.cf-credits.ok{background:var(--primary-soft);border-color:color-mix(in oklab,var(--primary) 30%,var(--line))}.cf-credits.none{background:#fff3e9;background:oklch(.97 .03 60);border-color:#f1c4a0}.cf-credits-ico{width:34px;height:34px;flex:none;display:grid;place-items:center;border-radius:9px}.cf-credits.ok .cf-credits-ico{background:var(--primary);color:var(--on-primary)}.cf-credits.none .cf-credits-ico{background:#f4a25c;color:#fff}.cf-credits-ico svg{width:18px;height:18px}.cf-credits-text{display:flex;flex-direction:column;gap:3px}.cf-credits-text strong{font-size:15px;color:var(--ink)}.cf-credits-text span{font-size:13px;color:var(--ink-soft);line-height:1.5}.cf-agree{display:flex;gap:12px;align-items:flex-start;margin:20px 0 12px;padding:15px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2);cursor:pointer;transition:border-color .18s ease,background .18s ease}.cf-agree input{position:absolute;opacity:0;width:0;height:0}.cf-agree-box{flex:none;width:24px;height:24px;border-radius:8px;border:2px solid var(--line);background:var(--surface);display:grid;place-items:center;margin-top:1px;transition:background .16s ease,border-color .16s ease}.cf-agree-box svg{width:15px;height:15px;color:var(--on-primary);opacity:0;transform:scale(.5);transition:opacity .16s ease,transform .16s ease;stroke-width:2.6}.cf-agree input:checked~.cf-agree-box,.cf-agree-box.on{background:var(--primary);border-color:var(--primary)}.cf-agree input:checked~.cf-agree-box svg,.cf-agree-box.on svg{opacity:1;transform:none}.cf-agree:hover{border-color:var(--primary-tint)}.cf-agree:has(input:checked),.cf-agree.on{border-color:var(--primary-tint);background:var(--primary-soft)}.cf-agree input:focus-visible~.cf-agree-box{box-shadow:0 0 0 3px var(--primary-soft);border-color:var(--primary)}.cf-agree-text{font-size:13.5px;color:var(--ink-soft);line-height:1.7}.cf-agree-text strong{color:var(--ink);font-weight:700}.cf-agree.shake{border-color:#dc8748;background:#fff3e8;background:oklch(.97 .03 65);animation:shakeX .45s cubic-bezier(.36,.07,.19,.97)}@keyframes shakeX{10%,90%{transform:translate(-2px)}20%,80%{transform:translate(4px)}30%,50%,70%{transform:translate(-6px)}40%,60%{transform:translate(6px)}}@media(prefers-reduced-motion:reduce){.cf-agree.shake{animation:none}}.confirm-card .form-actions{display:none;margin-top:4px}.confirm-card .form-actions .btn-primary{width:100%}@media(min-width:860px){.confirm-card .form-actions{display:block}}.guest-banner{display:flex;align-items:center;gap:13px;padding:14px 16px;margin-bottom:18px;background:var(--primary-soft);border:1px solid var(--primary-tint);border-radius:14px}.gb-ico{flex:none;width:32px;height:32px;border-radius:9px;background:var(--surface);color:var(--primary-deep);display:grid;place-items:center}.gb-ico svg{width:18px;height:18px}.gb-text{flex:1;min-width:0}.gb-text strong{display:block;font-size:14.5px;font-weight:600;color:var(--ink)}.gb-text span{display:block;font-size:13px;color:var(--ink-soft);margin-top:2px;line-height:1.55;word-break:break-word}.gb-btn{flex:none;white-space:nowrap}@media(max-width:560px){.guest-banner{flex-wrap:wrap}.gb-btn{width:100%}}.login-screen{min-height:100vh;display:grid;grid-template-columns:1fr}@media(min-width:900px){.login-screen{grid-template-columns:1.05fr 1fr}}.login-brand{display:none}@media(min-width:900px){.login-brand{display:block;position:relative;overflow:hidden;background:linear-gradient(155deg,var(--primary-soft),oklch(.94 .035 var(--primary-h)));border-right:1px solid var(--line)}}.login-brand-inner{position:relative;height:100%;display:flex;flex-direction:column;padding:clamp(36px,4vw,56px)}.lb-logo{display:inline-flex;align-items:center;gap:12px}.lb-mark{width:46px;height:46px;border-radius:14px;flex:none;background:linear-gradient(150deg,var(--primary),var(--primary-deep));display:grid;place-items:center;font-size:24px;box-shadow:var(--shadow-md)}.lb-mark.sm{width:38px;height:38px;border-radius:11px;font-size:20px}.lb-name{font-family:var(--font-head);font-size:21px;font-weight:600;color:var(--ink);display:flex;flex-direction:column;line-height:1.15}.lb-name.sm{font-size:18px}.lb-sub{font-family:var(--font-body);font-size:12.5px;font-weight:500;color:var(--ink-faint);white-space:nowrap}.lb-welcome{margin-top:clamp(28px,4vw,48px)}.lb-welcome h1{font-size:clamp(28px,3.2vw,40px);line-height:1.25;color:var(--ink)}.lb-welcome p{margin-top:14px;font-size:16px;color:var(--ink-soft);max-width:40ch;line-height:1.75}.lb-points{list-style:none;margin:clamp(26px,3.5vw,40px) 0 0;padding:0;display:grid;gap:16px}.lb-points li{display:flex;gap:14px;align-items:flex-start}.lb-points li>span:last-child{flex:1;min-width:0}.lb-ico{flex:none;width:42px;height:42px;border-radius:12px;background:var(--surface);color:var(--primary-deep);display:grid;place-items:center;box-shadow:var(--shadow-sm)}.lb-ico svg{width:21px;height:21px}.lb-points strong{display:block;font-size:15.5px;font-weight:600;color:var(--ink);white-space:nowrap}.lb-points em{display:block;font-style:normal;font-size:13.5px;color:var(--ink-soft);margin-top:2px}.lb-cover{margin-top:auto;padding-top:clamp(24px,3vw,40px)}.lb-cover .ph{height:clamp(160px,20vw,230px);border-radius:var(--radius);border:1px solid var(--line)}.login-main{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:clamp(24px,5vw,48px) clamp(16px,4vw,40px) clamp(40px,6vw,64px);background:var(--bg)}.guest-link{position:absolute;top:clamp(16px,3vw,28px);right:clamp(16px,4vw,36px);font-size:13.5px;font-weight:600;color:var(--ink-soft);white-space:nowrap;padding:8px 14px;border-radius:999px;transition:background .16s ease,color .16s ease}.guest-link:hover{background:var(--surface-2);color:var(--ink)}.login-card{width:100%;max-width:420px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-md);padding:clamp(24px,4vw,36px)}.login-topbrand{display:flex;align-items:center;gap:11px;justify-content:center;margin-bottom:22px}@media(min-width:900px){.login-topbrand{display:none}}.login-card-head{margin-bottom:22px}.login-card-head h2{font-size:clamp(24px,6vw,28px)}.login-card-head p{font-size:14.5px;color:var(--ink-soft);margin-top:6px}.input-wrap{position:relative;display:flex;align-items:center}.input-ico{position:absolute;left:14px;display:grid;place-items:center;color:var(--ink-faint);pointer-events:none}.input-ico svg{width:18px;height:18px}.field input.has-lead{padding-left:42px}.field input.has-trail{padding-right:46px}.input-trail{position:absolute;right:8px;width:34px;height:34px;border:none;background:transparent;border-radius:9px;display:grid;place-items:center;color:var(--ink-faint);cursor:pointer;transition:background .15s ease,color .15s ease}.input-trail:hover{background:var(--surface-2);color:var(--ink)}.input-trail svg{width:19px;height:19px}.input-wrap:focus-within .input-ico{color:var(--primary)}.login-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:4px 0 20px}.checkline{display:inline-flex;align-items:center;gap:9px;font-size:14px;color:var(--ink-soft);cursor:pointer;white-space:nowrap}.checkline input{position:absolute;opacity:0;width:0;height:0}.cbox{width:20px;height:20px;border-radius:6px;flex:none;border:2px solid var(--line);background:var(--surface);display:grid;place-items:center;transition:background .15s ease,border-color .15s ease}.cbox svg{width:13px;height:13px;color:var(--on-primary);opacity:0;transform:scale(.5);transition:opacity .15s ease,transform .15s ease;stroke-width:2.6}.cbox.on{background:var(--primary);border-color:var(--primary)}.cbox.on svg{opacity:1;transform:none}.checkline input:focus-visible~.cbox{box-shadow:0 0 0 3px var(--primary-soft);border-color:var(--primary)}.link-accent{font-size:14px;font-weight:600;color:var(--primary-deep);white-space:nowrap}.link-accent:hover{text-decoration:underline}.login-submit{width:100%}.or-divider{display:flex;align-items:center;gap:14px;margin:22px 0;color:var(--ink-faint);font-size:13px}.or-divider:before,.or-divider:after{content:"";flex:1;height:1px;background:var(--line)}.social-row{display:grid;gap:10px}.btn-social{display:inline-flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px 18px;border-radius:999px;border:1px solid var(--line);background:var(--surface);font-size:14.5px;font-weight:600;color:var(--ink);white-space:nowrap;transition:background .16s ease,border-color .16s ease,box-shadow .16s ease}.btn-social:hover{background:var(--surface-2);border-color:var(--primary-tint);box-shadow:var(--shadow-sm)}.login-foot{text-align:center;font-size:14px;color:var(--ink-soft);margin-top:22px}.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:14px 24px;border:none;border-radius:999px;background:linear-gradient(160deg,var(--primary),var(--primary-deep));color:var(--on-primary);font-size:16px;font-weight:600;letter-spacing:.01em;box-shadow:0 6px 18px oklch(.5 .06 var(--primary-h) / .3);transition:transform .14s ease,box-shadow .18s ease,filter .18s ease}.btn-primary:hover{filter:brightness(1.04);box-shadow:0 10px 26px oklch(.5 .06 var(--primary-h) / .38)}.btn-primary:active{transform:translateY(1px) scale(.99);background:var(--primary-press)}.btn-primary svg{width:19px;height:19px}.cta-bar{position:fixed;left:0;right:0;bottom:0;z-index:50;padding:12px clamp(14px,4vw,20px) calc(12px + env(safe-area-inset-bottom));background:#fbfaf6e6;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-top:1px solid var(--line);display:grid;grid-template-columns:auto 1fr;align-items:center;gap:14px;transform:translateY(0);transition:transform .3s ease}.cta-bar.hidden{transform:translateY(120%)}@media(min-width:860px){.cta-bar{display:none}}.cta-info .cta-price{font-size:15px;font-weight:700;color:var(--ink)}.cta-info .cta-meta{font-size:12px;color:var(--ink-faint)}.cta-bar .btn-primary{width:100%;padding:15px 20px}.footer{border-top:1px solid var(--line);margin-top:40px}.footer-in{display:flex;flex-wrap:wrap;gap:8px 20px;align-items:center;justify-content:space-between;padding:24px 0;color:var(--ink-faint);font-size:13px}.footer-links{display:flex;gap:18px}.footer-links a:hover{color:var(--ink-soft)}.footer-contact{display:flex;flex-direction:column;gap:6px}.footer-contact strong{color:var(--ink-soft);font-size:14px;margin-bottom:2px}.footer-contact-line{display:inline-flex;align-items:center;gap:7px;color:var(--ink-faint)}.footer-contact-line svg{width:15px;height:15px}.footer-contact-line:hover{color:var(--primary)}.footer-meta{display:flex;flex-direction:column;gap:8px;align-items:flex-end}@media(max-width:560px){.footer-meta{align-items:flex-start}}.ph{position:relative;width:100%;height:100%;display:grid;place-items:center;background-color:var(--primary-soft);background-image:repeating-linear-gradient(135deg,oklch(.9 .03 var(--primary-h) / .6) 0 10px,transparent 10px 20px);color:var(--primary-deep)}.ph span{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11.5px;letter-spacing:.04em;background:#ffffffb8;padding:4px 10px;border-radius:7px}.toast{position:fixed;left:50%;bottom:96px;transform:translate(-50%) translateY(12px);z-index:60;background:var(--ink);color:var(--bg);padding:13px 18px;border-radius:14px;box-shadow:var(--shadow-lg);font-size:14px;font-weight:500;display:flex;align-items:center;gap:10px;opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease;max-width:calc(100vw - 32px)}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}.toast svg{width:18px;height:18px;color:var(--primary-tint);flex:none}@media(min-width:860px){.toast{bottom:28px}}@media(prefers-reduced-motion:no-preference){.reveal{animation:rise .55s cubic-bezier(.2,.7,.3,1) both}@keyframes rise{0%{transform:translateY(16px)}to{transform:none}}}.pay-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:clamp(20px,4vw,28px);max-width:620px;margin-top:22px}.pay-section{margin-bottom:22px}.pay-section-title{font-size:12.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--primary-deep);margin-bottom:12px}.pay-order{background:var(--surface-2);border:1px solid var(--line);border-radius:14px;padding:16px}.pay-order-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-bottom:13px;margin-bottom:13px;border-bottom:1px dashed var(--line)}.pay-course{font-weight:600;font-size:15px;color:var(--ink)}.pay-course-qty{color:var(--ink-faint);font-weight:500;margin-left:6px}.pay-course-amt{font-family:var(--font-head);font-weight:600;font-size:18px;color:var(--primary-deep);white-space:nowrap}.pay-order-rows{display:flex;flex-direction:column;gap:9px}.pay-orow{display:flex;align-items:center;justify-content:space-between;gap:14px;font-size:13.5px}.pay-orow>span:first-child{color:var(--ink-faint)}.pay-orow>span:last-child{color:var(--ink);font-weight:500;text-align:right}.pay-orow-save>span{color:#348f4f!important;font-weight:600}.pay-order-note{display:flex;gap:7px;align-items:flex-start;margin-top:13px;padding-top:13px;border-top:1px dashed var(--line);font-size:12.5px;color:var(--ink-soft);line-height:1.55}.pay-order-note svg{width:15px;height:15px;color:var(--primary);flex:none;margin-top:1px}.pay-packages{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}@media(min-width:560px){.pay-packages{grid-template-columns:repeat(4,1fr)}}.pay-pkg{position:relative;display:flex;flex-direction:column;align-items:center;gap:3px;background:var(--surface);border:1.5px solid var(--line);border-radius:14px;padding:16px 10px 13px;cursor:pointer;text-align:center;transition:border-color .16s ease,background .16s ease,box-shadow .16s ease}.pay-pkg:hover:not(:disabled){border-color:var(--primary-tint)}.pay-pkg.on{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 3px var(--primary-soft)}.pay-pkg:disabled{cursor:default}.pay-pkg-lessons{font-family:var(--font-head);font-weight:600;font-size:16px;color:var(--ink)}.pay-pkg-total{font-weight:600;font-size:15px;color:var(--primary-deep)}.pay-pkg-per{font-size:11.5px;color:var(--ink-faint)}.pay-pkg-save{position:absolute;top:-9px;left:50%;transform:translate(-50%);background:#3b9555;color:#fff;font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;white-space:nowrap;box-shadow:var(--shadow-sm)}.pay-methods{display:flex;flex-direction:column;gap:10px}.pay-method{display:flex;align-items:center;gap:13px;width:100%;text-align:left;background:var(--surface);border:1.5px solid var(--line);border-radius:14px;padding:14px 15px;cursor:pointer;transition:border-color .16s ease,background .16s ease,box-shadow .16s ease}.pay-method:hover:not(:disabled){border-color:var(--primary-tint)}.pay-method.on{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 3px var(--primary-soft)}.pay-method:disabled{cursor:default}.pay-method-ico{width:42px;height:42px;flex:none;display:grid;place-items:center;border-radius:11px;background:var(--primary-soft);color:var(--primary-deep)}.pay-method.on .pay-method-ico{background:var(--surface)}.pay-method-ico svg{width:22px;height:22px}.pay-method-text{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}.pay-method-title{font-weight:600;font-size:14.5px;color:var(--ink)}.pay-method-sub{font-size:12.5px;color:var(--ink-faint)}.pay-radio{width:22px;height:22px;flex:none;border-radius:50%;border:1.5px solid var(--line);display:grid;place-items:center;transition:background .16s ease,border-color .16s ease}.pay-radio svg{width:14px;height:14px;color:var(--on-primary);opacity:0;transform:scale(.5);transition:opacity .16s ease,transform .16s ease;stroke-width:2.6}.pay-radio.on{background:var(--primary);border-color:var(--primary)}.pay-radio.on svg{opacity:1;transform:none}.pay-ecpay{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;padding:12px;margin-bottom:18px;background:var(--surface-2);border:1px solid var(--line);border-radius:12px}.pay-ecpay-logo{font-family:var(--font-head);font-weight:700;letter-spacing:.02em;color:#bd4238;font-size:16px}.pay-ecpay-text{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-soft)}.pay-ecpay-text svg{width:15px;height:15px;color:#439458}.pay-total{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:16px 0;border-top:1px solid var(--line);margin-bottom:4px}.pay-total>span{font-size:14px;color:var(--ink-soft)}.pay-total>strong{font-family:var(--font-head);font-weight:600;font-size:24px;color:var(--primary-deep)}.pay-btn svg{width:17px;height:17px}.pay-card .form-actions{display:none;margin-top:4px}.pay-card .form-actions .btn-primary{width:100%}@media(min-width:860px){.pay-card .form-actions{display:block}}.pay-secure{display:flex;gap:9px;align-items:flex-start;margin-top:16px;padding:13px 15px;background:var(--surface-2);border-radius:13px}.pay-secure svg{width:17px;height:17px;color:var(--primary);flex:none;margin-top:1px}.pay-secure span{font-size:12.5px;color:var(--ink-soft);line-height:1.6}.pay-modes{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:22px}.pay-mode{display:flex;flex-direction:column;gap:3px;align-items:flex-start;background:var(--surface);border:1.5px solid var(--line);border-radius:14px;padding:13px 15px;cursor:pointer;text-align:left;transition:border-color .16s ease,background .16s ease,box-shadow .16s ease}.pay-mode:hover:not(:disabled){border-color:var(--primary-tint)}.pay-mode.on{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 3px var(--primary-soft)}.pay-mode:disabled{cursor:default}.pay-mode-title{font-weight:600;font-size:14.5px;color:var(--ink)}.pay-mode-sub{font-size:12px;color:var(--ink-faint)}.pay-redeem{background:var(--surface-2);border:1px solid var(--line);border-radius:14px;padding:16px}.pay-redeem-balance{display:flex;align-items:baseline;justify-content:center;gap:8px;padding:8px 0 16px;margin-bottom:14px;border-bottom:1px dashed var(--line)}.pay-redeem-num{font-family:var(--font-head);font-weight:700;font-size:44px;line-height:1;color:var(--primary-deep)}.pay-redeem-unit{font-size:15px;font-weight:600;color:var(--ink-soft)}.pay-redeem-rows{display:flex;flex-direction:column;gap:9px}.pay-orow-redeem>span{color:#bd4238!important;font-weight:600}.pay-orow-after{padding-top:9px;border-top:1px dashed var(--line)}.pay-orow-after>span:last-child{font-weight:700;color:var(--primary-deep)}.pay-buyer{display:flex;flex-direction:column;gap:7px}.pay-email{width:100%;padding:13px 15px;font:inherit;font-size:15px;color:var(--ink);background:var(--surface);border:1.5px solid var(--line);border-radius:13px;transition:border-color .16s ease,box-shadow .16s ease}.pay-email:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.pay-email:disabled{background:var(--surface-2);color:var(--ink-soft);cursor:default}.pay-email.err{border-color:#d74745}.pay-email-hint{font-size:12.5px;color:var(--ink-faint);line-height:1.5}.pay-email-hint.err{color:#c53637}.credit-balance{background:linear-gradient(160deg,var(--primary-soft),var(--surface));border:1px solid var(--line);border-radius:20px;padding:26px 22px;margin-bottom:26px;box-shadow:var(--shadow-sm)}.credit-balance-main{display:flex;flex-direction:column;align-items:center;gap:2px}.credit-balance-label{font-size:13.5px;color:var(--ink-soft);font-weight:500}.credit-balance-num{font-family:var(--font-head);font-weight:700;font-size:64px;line-height:1;color:var(--primary-deep)}.credit-balance-unit{font-size:14px;color:var(--ink-soft);font-weight:600}.credit-balance-stats{display:flex;align-items:stretch;justify-content:center;gap:0;margin:20px auto 4px;max-width:260px}.credit-stat{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px}.credit-stat-num{font-family:var(--font-head);font-weight:600;font-size:22px;color:var(--ink)}.credit-stat-label{font-size:12px;color:var(--ink-faint)}.credit-stat-div{width:1px;background:var(--line);margin:4px 0;flex:none}.credit-balance-note{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:16px;font-size:13px;color:var(--ink-soft);line-height:1.5;text-align:center}.credit-balance-note svg{width:16px;height:16px;flex:none;color:var(--primary)}.credit-balance-note.ok{color:#21763c}.credit-balance-note.ok svg{color:#3b9555}.credit-book-btn{width:100%;margin-top:18px}.credit-book-btn svg{width:17px;height:17px}.credit-buy-link{width:100%;margin-top:10px;display:inline-flex;align-items:center;justify-content:center;gap:7px}.credit-buy-link svg{width:16px;height:16px}.credit-history-title{font-family:var(--font-head);font-weight:600;font-size:17px;color:var(--ink);margin-bottom:14px}.credit-history-empty{margin:0}.credit-hist-list{display:flex;flex-direction:column;gap:12px}.credit-hist-card{display:flex;align-items:flex-start;gap:14px;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:16px}.credit-hist-icon{width:42px;height:42px;flex:none;display:grid;place-items:center;border-radius:11px;background:var(--primary-soft);color:var(--primary-deep)}.credit-hist-icon svg{width:21px;height:21px}.credit-hist-body{flex:1;min-width:0}.credit-hist-top{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.credit-hist-name{font-weight:600;font-size:15px;color:var(--ink)}.credit-hist-amt{font-family:var(--font-head);font-weight:600;font-size:15px;color:var(--ink);white-space:nowrap}.credit-hist-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin-top:6px;font-size:12.5px;color:var(--ink-faint)}.credit-hist-meta span{display:inline-flex;align-items:center;gap:5px}.credit-hist-meta svg{width:14px;height:14px}.credit-hist-disc{color:#348f4f!important;font-weight:600}.credit-hist-trade{margin-top:7px;font-size:11.5px;color:var(--ink-faint);font-variant-numeric:tabular-nums}.credit-hist-qty{display:flex;flex-direction:column;align-items:center;flex:none;padding-left:4px}.credit-hist-qty-num{font-family:var(--font-head);font-weight:700;font-size:19px;color:#298646}.credit-hist-qty-unit{font-size:11px;color:var(--ink-faint)}@media(max-width:480px){.credit-hist-icon{display:none}}.account-card{background:linear-gradient(160deg,var(--primary-soft),var(--surface));border:1px solid var(--line);border-radius:20px;padding:22px;margin-bottom:22px;box-shadow:var(--shadow-sm)}.account-id{display:flex;align-items:center;gap:14px}.account-ava{width:56px;height:56px;flex:none;border-radius:50%;background:linear-gradient(150deg,var(--primary),var(--primary-deep));color:var(--on-primary);display:grid;place-items:center;font-family:var(--font-head);font-size:26px;font-weight:700}.account-id-text{display:flex;flex-direction:column;gap:4px;min-width:0}.account-name{font-family:var(--font-head);font-weight:700;font-size:20px;color:var(--ink);line-height:1.2}.account-email{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-soft);word-break:break-all}.account-email svg{width:14px;height:14px;flex:none;color:var(--primary)}.account-summary{display:flex;align-items:stretch;justify-content:center;gap:0;margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}.account-stat{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;border-radius:12px;padding:8px 4px;transition:background .18s ease}.account-stat:hover{background:color-mix(in oklab,var(--surface) 70%,transparent)}.account-stat-num{font-family:var(--font-head);font-weight:700;font-size:26px;color:var(--primary-deep);line-height:1}.account-stat-label{font-size:12px;color:var(--ink-faint)}.account-form{display:flex;flex-direction:column;gap:22px}.account-section{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:20px}.account-section-title{display:flex;align-items:center;gap:8px;font-family:var(--font-head);font-weight:600;font-size:16px;color:var(--ink);margin-bottom:4px}.account-section-title svg{width:18px;height:18px;color:var(--primary)}.account-section-sub{font-size:13px;color:var(--ink-soft);margin:0 0 14px;line-height:1.5}.account-section .field{margin-top:14px}.account-section .field:first-of-type{margin-top:10px}.field-hint{display:block;margin-top:6px;font-size:12px;color:var(--ink-faint);line-height:1.5}.input-wrap input.ro{background:var(--surface-2);color:var(--ink-soft);cursor:not-allowed}.account-actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center}.account-save{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:160px}.account-save svg{width:17px;height:17px}.account-save:disabled{opacity:.55;cursor:not-allowed}.account-logout{color:#bd413f}.account-logout:hover{background:#ffe7e4;background:oklch(.95 .04 25);color:#ac1922}@media(max-width:560px){.account-actions{flex-direction:column-reverse;align-items:stretch}.account-save,.account-logout{width:100%}}.chat-page .wrap{max-width:720px}.chat-box{display:flex;flex-direction:column;height:min(64vh,560px);border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);overflow:hidden;box-shadow:var(--shadow-sm)}.chat-scroll{flex:1;overflow-y:auto;padding:18px;display:flex;flex-direction:column;gap:10px}.chat-msg{display:flex;flex-direction:column;max-width:78%}.chat-msg.mine{align-self:flex-end;align-items:flex-end}.chat-msg.theirs{align-self:flex-start;align-items:flex-start}.chat-bubble{padding:9px 13px;border-radius:16px;font-size:.95rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}.chat-msg.mine .chat-bubble{background:var(--primary);color:var(--on-primary);border-bottom-right-radius:5px}.chat-msg.theirs .chat-bubble{background:var(--surface-2);color:var(--ink);border-bottom-left-radius:5px}.chat-time{font-size:.7rem;color:var(--ink-faint);margin-top:3px}.chat-empty{margin:auto;text-align:center;color:var(--ink-faint);display:flex;flex-direction:column;align-items:center;gap:8px}.chat-empty svg{width:34px;height:34px;opacity:.5}.chat-input{display:flex;gap:8px;padding:12px;border-top:1px solid var(--line);background:var(--surface)}.chat-input input{flex:1;border:1px solid var(--line);border-radius:999px;padding:10px 16px;font-size:.95rem;background:var(--surface);color:var(--ink);outline:none}.chat-input input:focus{border-color:var(--primary)}.chat-send{flex:none;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;padding:0}.chat-send svg{width:18px;height:18px}.chat-navlink{position:relative;display:inline-flex;align-items:center;gap:5px}.chat-navbadge{display:inline-grid;place-items:center;min-width:17px;height:17px;padding:0 5px;border-radius:9px;background:var(--primary);color:var(--on-primary);font-size:.68rem;font-weight:700;line-height:1}.chat-day{text-align:center;margin:6px 0}.chat-day span{display:inline-block;padding:2px 12px;background:var(--surface-2);color:var(--ink-faint);border-radius:999px;font-size:.72rem;font-weight:600}.review-submit{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px;margin:16px auto;max-width:720px;display:flex;flex-direction:column;gap:10px}.review-submit-title{color:var(--ink-soft);font-size:15px;font-weight:600}.review-submit-text{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:12px;padding:10px 12px;font:inherit;resize:vertical;color:var(--ink);background:var(--surface)}.review-submit-text:focus{outline:none;border-color:var(--primary)}.review-submit-actions{display:flex;align-items:center;gap:8px}:root{--primary-h: 200;--radius: 18px;--radius-sm: 12px;--primary: oklch(.52 .066 var(--primary-h));--primary-deep: oklch(.44 .064 var(--primary-h));--primary-press: oklch(.39 .06 var(--primary-h));--primary-soft: oklch(.955 .022 var(--primary-h));--primary-tint: oklch(.92 .03 var(--primary-h));--on-primary: oklch(.99 .01 var(--primary-h));--bg: oklch(.978 .006 95);--surface: oklch(1 0 0);--surface-2: oklch(.97 .007 95);--surface-3: oklch(.955 .008 95);--ink: oklch(.26 .012 90);--ink-soft: oklch(.48 .012 90);--ink-faint: oklch(.62 .01 90);--line: oklch(.915 .008 95);--line-soft: oklch(.945 .007 95);--warn: oklch(.66 .13 60);--warn-deep: oklch(.46 .12 55);--warn-soft: oklch(.96 .04 70);--warn-tint: oklch(.91 .06 65);--ok: oklch(.58 .11 160);--ok-deep: oklch(.42 .1 160);--ok-soft: oklch(.96 .035 160);--ok-tint: oklch(.9 .05 160);--danger: oklch(.58 .16 25);--danger-soft: oklch(.97 .025 25);--danger-tint: oklch(.9 .045 25);--shadow-sm: 0 1px 2px oklch(.4 .02 90 / .05), 0 1px 1px oklch(.4 .02 90 / .04);--shadow-md: 0 6px 20px oklch(.4 .03 95 / .07), 0 2px 6px oklch(.4 .03 95 / .05);--shadow-lg: 0 18px 50px oklch(.4 .04 95 / .13), 0 6px 16px oklch(.4 .03 95 / .07);--font-head: "Noto Serif TC", serif;--font-body: "Noto Sans TC", system-ui, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace;--sidebar-w: 232px}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font-body);color:var(--ink);background:var(--bg);line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3{font-family:var(--font-head);font-weight:600;line-height:1.25;margin:0;letter-spacing:.005em}p{margin:0}button,input,textarea{font-family:inherit}button{cursor:pointer;border:none;background:none;padding:0;color:inherit}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:6px}.app{display:grid;grid-template-columns:var(--sidebar-w) 1fr;min-height:100vh}@media(max-width:880px){.app{grid-template-columns:1fr;padding-bottom:64px}}.side{position:sticky;top:0;height:100vh;background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:18px 14px;z-index:30}@media(max-width:880px){.side{display:none}}.side-brand{display:flex;align-items:center;gap:11px;padding:6px 10px 18px}.brand-mark{width:38px;height:38px;border-radius:12px;flex:none;background:linear-gradient(150deg,var(--primary),var(--primary-deep));color:var(--on-primary);display:grid;place-items:center;font-size:22px;box-shadow:var(--shadow-sm)}.brand-name{font-family:var(--font-head);font-weight:600;font-size:17px;letter-spacing:.01em}.brand-sub{font-size:11.5px;color:var(--ink-faint);margin-top:-2px;letter-spacing:.04em}.side-section{padding:14px 12px 6px;font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}.side-nav{display:flex;flex-direction:column;gap:2px;flex:1}.nav-item{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:10px;font-size:14.5px;font-weight:500;color:var(--ink-soft);text-align:left;white-space:nowrap;transition:background .15s ease,color .15s ease;position:relative}.nav-item svg{width:18px;height:18px;flex:none}.nav-item:hover{background:var(--surface-2);color:var(--ink)}.nav-item.active{background:var(--primary-soft);color:var(--primary-deep);font-weight:600}.nav-item.active:before{content:"";position:absolute;left:0;top:50%;width:3px;height:18px;border-radius:2px;background:var(--primary);transform:translateY(-50%)}.nav-badge{margin-left:auto;min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:var(--warn);color:#fff;font-size:11.5px;font-weight:700;display:inline-grid;place-items:center}.side-foot{border-top:1px solid var(--line);padding:14px 6px 4px;display:flex;align-items:center;gap:10px}.side-ava{width:34px;height:34px;border-radius:50%;flex:none;background:linear-gradient(150deg,var(--primary),var(--primary-deep));color:var(--on-primary);display:grid;place-items:center;font-size:18px}.side-foot-meta{flex:1;min-width:0;line-height:1.25}.side-foot-name{font-size:13.5px;font-weight:600;color:var(--ink)}.side-foot-email{font-size:11.5px;color:var(--ink-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.side-foot-logout{flex:none;width:30px;height:30px;border-radius:8px;color:var(--ink-faint);display:grid;place-items:center;transition:background .15s ease,color .15s ease}.side-foot-logout:hover{background:var(--surface-2);color:var(--danger)}.side-foot-logout svg{width:16px;height:16px}.tabbar{display:none}@media(max-width:880px){.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:40;display:grid;grid-template-columns:repeat(5,1fr);background:#ffffffeb;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-top:1px solid var(--line);padding:6px 4px calc(6px + env(safe-area-inset-bottom))}.tab-item{display:flex;flex-direction:column;align-items:center;gap:2px;padding:7px 4px;border-radius:10px;font-size:10.5px;color:var(--ink-faint);font-weight:500;position:relative}.tab-item svg{width:20px;height:20px}.tab-item.active{color:var(--primary-deep)}.tab-badge{position:absolute;top:4px;right:calc(50% - 18px);min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:var(--warn);color:#fff;font-size:10px;font-weight:700;display:inline-grid;place-items:center}}.mobtop{display:none}@media(max-width:880px){.mobtop{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;background:var(--surface);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}.mobtop .brand-mark{width:32px;height:32px;font-size:18px}.mobtop-brand{display:flex;align-items:center;gap:9px}.mobtop-name{font-family:var(--font-head);font-weight:600;font-size:16px}.mobtop-ava{width:32px;height:32px;border-radius:50%;background:linear-gradient(150deg,var(--primary),var(--primary-deep));color:var(--on-primary);display:grid;place-items:center;font-size:16px}}.main{padding:32px clamp(20px,4vw,44px) 64px;min-width:0}@media(max-width:880px){.main{padding:20px 18px 88px}}.page-head{display:flex;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;gap:14px;margin-bottom:24px}.page-title{font-size:clamp(24px,3vw,30px);font-weight:600;display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.page-title .wave{font-family:var(--font-body)}.page-sub{font-size:13.5px;color:var(--ink-faint);margin-top:6px;letter-spacing:.02em}.page-actions{display:flex;gap:8px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 16px;border-radius:10px;font-size:13.5px;font-weight:600;border:1px solid transparent;white-space:nowrap;transition:background .15s ease,border-color .15s ease,color .15s ease,box-shadow .15s ease,transform .08s ease}.btn:active{transform:translateY(1px)}.btn svg{width:15px;height:15px}.btn-primary{background:var(--primary);color:var(--on-primary);box-shadow:0 4px 12px oklch(.5 .06 var(--primary-h) / .22)}.btn-primary:hover{background:var(--primary-deep)}.btn-primary:disabled,.btn-primary.loading{background:var(--line);color:var(--ink-faint);box-shadow:none;cursor:not-allowed}.btn-primary:disabled:hover{background:var(--line)}.btn-ghost{background:var(--surface);color:var(--ink);border-color:var(--line)}.btn-ghost:hover{background:var(--surface-2);border-color:var(--primary-tint)}.btn-danger{background:var(--surface);color:var(--danger);border-color:var(--danger-tint)}.btn-danger:hover{background:var(--danger-soft);border-color:var(--danger)}.btn-success{background:var(--ok);color:var(--on-primary)}.btn-success:hover{background:var(--ok-deep)}.btn-sm{padding:6px 12px;font-size:12.5px;border-radius:8px}.btn-lg{padding:12px 22px;font-size:14.5px;border-radius:12px}.spinner{width:14px;height:14px;border-radius:50%;border:2px solid oklch(1 0 0 / .45);border-top-color:currentColor;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:20px}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.card-title{font-family:var(--font-head);font-size:17px;font-weight:600;color:var(--ink)}.card-sub{font-size:12.5px;color:var(--ink-faint);margin-top:3px}.card-link{font-size:13px;font-weight:600;color:var(--primary-deep);display:inline-flex;align-items:center;gap:4px;white-space:nowrap;padding:5px 9px;border-radius:8px;transition:background .15s ease}.card-link:hover{background:var(--primary-soft)}.card-link svg{width:14px;height:14px}.badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}.badge-dot{width:6px;height:6px;border-radius:50%;background:currentColor}.badge.pending{background:var(--warn-soft);color:var(--warn-deep)}.badge.confirmed{background:var(--ok-soft);color:var(--ok-deep)}.badge.completed{background:var(--primary-soft);color:var(--primary-deep)}.badge.cancelled{background:var(--surface-3);color:var(--ink-faint)}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:28px}@media(max-width:1080px){.stats{grid-template-columns:repeat(2,1fr)}}@media(max-width:520px){.stats{grid-template-columns:1fr}}.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;display:flex;flex-direction:column;gap:10px;position:relative;transition:box-shadow .2s ease,transform .2s ease}.stat:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.stat-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.stat-label{white-space:nowrap}.stat-ico{width:36px;height:36px;border-radius:10px;background:var(--primary-soft);color:var(--primary-deep);display:grid;place-items:center}.stat-ico svg{width:18px;height:18px}.stat-ico.warn{background:var(--warn-soft);color:var(--warn-deep)}.stat-ico.ok{background:var(--ok-soft);color:var(--ok-deep)}.stat-ico.muted{background:var(--surface-3);color:var(--ink-soft)}.stat-label{font-size:12.5px;color:var(--ink-faint);letter-spacing:.02em;text-align:right}.stat-value{font-family:var(--font-head);font-size:30px;font-weight:600;letter-spacing:-.01em;color:var(--ink);line-height:1}.stat-value .unit{font-size:14px;color:var(--ink-faint);margin-left:3px;font-weight:500;font-family:var(--font-body)}.stat-delta{font-size:12px;color:var(--ink-soft);display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.stat-delta.up{color:var(--ok-deep)}.stat-delta.warn{color:var(--warn-deep)}.stat-delta svg{width:12px;height:12px}.dash-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:20px}@media(max-width:1000px){.dash-grid{grid-template-columns:1fr}}.lesson-list{display:flex;flex-direction:column;gap:0}.lesson{display:grid;grid-template-columns:78px 1fr auto;gap:14px;align-items:center;padding:14px 4px;border-top:1px solid var(--line-soft)}.lesson:first-child{border-top:none;padding-top:6px}.lesson-time{font-family:var(--font-head);font-size:18px;font-weight:600;color:var(--ink);line-height:1.1}.lesson-time .end{display:block;font-size:11.5px;color:var(--ink-faint);font-weight:400;font-family:var(--font-body);margin-top:2px}.lesson-body{min-width:0;display:flex;align-items:center;gap:12px}.lesson-ava{width:38px;height:38px;border-radius:50%;flex:none;display:grid;place-items:center;color:var(--on-primary);font-weight:600;font-size:14.5px;font-family:var(--font-head)}.lesson-meta{min-width:0}.lesson-name{font-size:14.5px;font-weight:600;color:var(--ink)}.lesson-course{font-size:12.5px;color:var(--ink-faint);margin-top:1px;display:inline-flex;align-items:center;gap:5px}.lesson-course:before{content:"";width:4px;height:4px;border-radius:50%;background:var(--ink-faint);display:inline-block}.lesson-course-first:before{display:none}.lesson-action{display:flex;gap:6px;align-items:center}.lesson-now{font-size:11px;font-weight:700;letter-spacing:.05em;color:var(--warn-deep);background:var(--warn-soft);padding:3px 8px;border-radius:6px}.pend-list{display:flex;flex-direction:column;gap:12px}.pend-item{border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px;background:var(--surface);transition:border-color .15s ease,box-shadow .15s ease}.pend-item:hover{border-color:var(--warn-tint)}.pend-top{display:flex;align-items:center;gap:10px;margin-bottom:8px}.pend-ava{width:32px;height:32px;border-radius:50%;flex:none;display:grid;place-items:center;color:var(--on-primary);font-weight:600;font-size:13px;font-family:var(--font-head)}.pend-name{font-size:14px;font-weight:600;color:var(--ink)}.pend-when{font-size:12px;color:var(--ink-faint);margin-top:1px}.pend-note{font-size:12.5px;color:var(--ink-soft);padding:8px 10px;background:var(--surface-2);border-radius:8px;margin-bottom:10px;line-height:1.55;font-style:italic;border-left:2px solid var(--line)}.pend-actions{display:flex;gap:6px}.pend-actions .btn{flex:1}.empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;padding:36px 20px;color:var(--ink-faint)}.empty-ico{width:44px;height:44px;border-radius:12px;background:var(--surface-2);color:var(--ink-soft);display:grid;place-items:center}.empty-ico svg{width:22px;height:22px}.empty-title{font-size:14.5px;font-weight:600;color:var(--ink-soft)}.empty-text{font-size:13px;color:var(--ink-faint);max-width:28ch}.seg-tabs{display:inline-flex;gap:4px;padding:4px;background:var(--surface-2);border:1px solid var(--line);border-radius:12px;margin-bottom:20px;flex-wrap:wrap}.seg-tab{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;font-size:13.5px;font-weight:600;color:var(--ink-soft);white-space:nowrap;transition:background .15s ease,color .15s ease,box-shadow .15s ease}.seg-tab.active{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm)}.seg-count{min-width:18px;height:18px;padding:0 6px;border-radius:999px;background:var(--surface-3);color:var(--ink-soft);font-size:11px;font-weight:700;display:inline-grid;place-items:center}.seg-tab.active .seg-count{background:var(--primary);color:var(--on-primary)}.seg-tab.warn .seg-count{background:var(--warn);color:#fff}.seg-tab.warn.active .seg-count{background:var(--warn)}.bk-list{display:grid;grid-template-columns:1fr 1fr;gap:14px}@media(max-width:980px){.bk-list{grid-template-columns:1fr}}.bk-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:18px;display:flex;flex-direction:column;gap:12px;transition:box-shadow .2s ease,border-color .2s ease}.bk-card:hover{box-shadow:var(--shadow-md)}.bk-card.is-pending{border-left:3px solid var(--warn)}.bk-card.is-cancelled{opacity:.68}.bk-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.bk-student{display:flex;gap:12px;align-items:center;min-width:0}.bk-ava{width:42px;height:42px;border-radius:50%;flex:none;display:grid;place-items:center;color:var(--on-primary);font-weight:600;font-size:16px;font-family:var(--font-head)}.bk-name{font-size:15px;font-weight:600;color:var(--ink)}.bk-contact{font-size:12px;color:var(--ink-faint);margin-top:2px;display:flex;gap:10px;flex-wrap:wrap}.bk-contact span{display:inline-flex;align-items:center;gap:4px}.bk-contact svg{width:12px;height:12px}.bk-when{display:flex;align-items:center;gap:14px;padding:10px 12px;background:var(--surface-2);border-radius:10px;font-size:13.5px}.bk-when-date{font-family:var(--font-head);font-weight:600;color:var(--ink);display:inline-flex;align-items:center;gap:6px}.bk-when-date svg{width:14px;height:14px;color:var(--primary)}.bk-when-time{display:inline-flex;align-items:center;gap:6px;color:var(--ink-soft);font-weight:500;margin-left:auto}.bk-when-time svg{width:14px;height:14px;color:var(--primary)}.bk-tag{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:6px;font-size:11.5px;font-weight:600;background:var(--primary-soft);color:var(--primary-deep)}.bk-note{font-size:13px;color:var(--ink-soft);padding:10px 12px;background:var(--surface-2);border-left:3px solid var(--primary-tint);border-radius:8px;line-height:1.6}.bk-note .note-label{display:block;font-size:11px;color:var(--ink-faint);font-weight:600;letter-spacing:.05em;text-transform:uppercase;margin-bottom:4px}.bk-zoom{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;background:var(--ok-soft);border:1px solid var(--ok-tint);font-size:12.5px}.bk-zoom-ico{width:28px;height:28px;border-radius:8px;flex:none;background:var(--surface);color:var(--ok-deep);display:grid;place-items:center}.bk-zoom-ico svg{width:14px;height:14px}.bk-zoom-text{flex:1;min-width:0}.bk-zoom-label{font-size:11px;color:var(--ok-deep);font-weight:700;letter-spacing:.05em;text-transform:uppercase}.bk-zoom-url{font-family:var(--font-mono);font-size:12px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.bk-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:auto;padding-top:4px}.bk-actions .btn{flex:1;min-width:100px}.list-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;padding:64px 24px;border:1px dashed var(--line);border-radius:var(--radius);background:var(--surface);grid-column:1 / -1}.list-empty .empty-ico{width:56px;height:56px;border-radius:14px}.list-empty .empty-ico svg{width:28px;height:28px}.list-empty .empty-title{font-size:16px}.list-empty .empty-text{font-size:14px;max-width:36ch}.slot-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:20px}.slot-week-nav{display:inline-flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.slot-week-nav button{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;color:var(--ink-soft);transition:background .15s ease,color .15s ease}.slot-week-nav button:hover{background:var(--surface-2);color:var(--ink)}.slot-week-nav button svg{width:16px;height:16px}.slot-week-label{font-size:13.5px;font-weight:600;color:var(--ink);padding:0 8px;white-space:nowrap}.slot-grid{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:18px;overflow-x:auto}.slot-table{display:grid;grid-template-columns:70px repeat(7,minmax(110px,1fr));gap:8px;min-width:880px}.slot-header{display:contents}.slot-day-head{text-align:center;padding:8px 4px 12px;border-bottom:1px solid var(--line-soft)}.slot-day-head.today{color:var(--primary-deep)}.slot-day-week{font-size:11.5px;color:var(--ink-faint);letter-spacing:.04em;font-weight:600}.slot-day-num{font-family:var(--font-head);font-size:22px;font-weight:600;color:var(--ink);margin-top:2px}.slot-day-head.today .slot-day-num{display:inline-grid;place-items:center;width:36px;height:36px;border-radius:50%;background:var(--primary);color:var(--on-primary);margin:2px auto 0}.slot-day-head.today .slot-day-week{color:var(--primary-deep)}.slot-time-label{font-family:var(--font-mono);font-size:12px;color:var(--ink-faint);display:flex;align-items:center;justify-content:flex-end;padding-right:6px;letter-spacing:.02em}.slot-cell{position:relative;min-height:56px;border-radius:10px;border:1px solid var(--line-soft);padding:8px 10px;font-size:12px;display:flex;flex-direction:column;justify-content:center;gap:2px;cursor:pointer;transition:border-color .15s ease,background .15s ease,transform .08s ease;-webkit-user-select:none;user-select:none;touch-action:none}.slot-cell:active{transform:scale(.98)}.slot-cell.open{background:var(--surface);border-color:var(--primary-tint);color:var(--primary-deep)}.slot-cell.open .cell-state{font-weight:600}.slot-cell.open:hover{background:var(--primary-soft)}.slot-cell.closed{background:var(--surface-2);border-style:dashed;color:var(--ink-faint)}.slot-cell.closed:hover{background:var(--surface-3);border-color:var(--ink-faint)}.slot-cell.selecting{outline:2px solid var(--primary);outline-offset:1px;box-shadow:0 0 0 3px var(--primary-soft)}.slot-cell.booked{background:var(--ok-soft);border-color:var(--ok-tint);color:var(--ok-deep);cursor:not-allowed}.slot-cell.booked:active{transform:none}.slot-cell.pending{background:var(--warn-soft);border-color:var(--warn-tint);color:var(--warn-deep);cursor:not-allowed}.slot-cell.past{background:repeating-linear-gradient(135deg,var(--surface-3) 0 4px,transparent 4px 8px);border-color:var(--line);color:var(--ink-faint);cursor:not-allowed}.cell-state{font-size:11px;font-weight:600;letter-spacing:.02em}.cell-student{font-size:12px;font-weight:600;color:var(--ok-deep)}.cell-mark{position:absolute;top:6px;right:6px;width:6px;height:6px;border-radius:50%}.slot-cell.open .cell-mark{background:var(--primary)}.slot-cell.booked .cell-mark{background:var(--ok)}.slot-cell.pending .cell-mark{background:var(--warn)}.slot-legend{display:flex;flex-wrap:wrap;gap:16px;margin-top:14px;padding:12px 14px;background:var(--surface-2);border-radius:10px;font-size:12.5px}.slot-legend .lg{display:inline-flex;align-items:center;gap:7px;color:var(--ink-soft)}.lg-sw{width:14px;height:14px;border-radius:4px;flex:none}.lg-sw.open{background:var(--surface);border:1.5px solid var(--primary-tint)}.lg-sw.closed{background:var(--surface-2);border:1.5px dashed var(--ink-faint)}.lg-sw.booked{background:var(--ok-soft);border:1.5px solid var(--ok-tint)}.lg-sw.pending{background:var(--warn-soft);border:1.5px solid var(--warn-tint)}.month-grid{min-width:720px}.month-head{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-bottom:10px}.month-hcell{text-align:center;font-size:11.5px;font-weight:600;color:var(--ink-faint);letter-spacing:.04em;padding-bottom:8px;border-bottom:1px solid var(--line-soft)}.month-hcell.wknd{color:var(--ink-soft)}.month-body{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}.mday{min-height:84px;border:1px solid var(--line-soft);border-radius:10px;padding:8px;background:var(--surface);display:flex;flex-direction:column;gap:6px;cursor:pointer;transition:border-color .15s ease,background .15s ease,transform .08s ease}.mday:hover{border-color:var(--primary-tint);background:var(--primary-soft)}.mday:active{transform:scale(.98)}.mday.out{background:var(--surface-2);opacity:.55}.mday.out .mday-num{color:var(--ink-faint)}.mday.out:hover{background:var(--surface-3);opacity:.8}.mday.past{background:repeating-linear-gradient(135deg,var(--surface-3) 0 4px,transparent 4px 8px)}.mday.past .mday-num{color:var(--ink-faint)}.mday-num{font-family:var(--font-head);font-size:15px;font-weight:600;color:var(--ink)}.mday.today .mday-num{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--primary);color:var(--on-primary);font-size:13px}.mday-pills{display:flex;flex-wrap:wrap;gap:4px;margin-top:auto}.mday-quick{align-self:flex-start;height:24px;padding:0 8px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line);color:var(--ink-soft);font-size:11px;font-weight:700;line-height:1}.mday:hover .mday-quick{background:var(--surface);border-color:var(--primary-tint);color:var(--primary-deep)}.mday-pill{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;line-height:1;padding:3px 7px;border-radius:999px}.mday-pill .mdot{width:6px;height:6px;border-radius:50%;flex:none}.mday-pill.open{background:var(--primary-soft);color:var(--primary-deep)}.mday-pill.open .mdot{background:var(--primary)}.mday-pill.booked{background:var(--ok-soft);color:var(--ok-deep)}.mday-pill.booked .mdot{background:var(--ok)}.month-legend-hint{margin-left:auto;color:var(--ink-faint);font-size:12px}@media(max-width:560px){.mday{min-height:64px;padding:6px}.mday-quick{height:22px;padding:0 6px;font-size:10px}.mday-pill{padding:2px 5px;font-size:10px}}.batch-form{display:flex;flex-direction:column;gap:16px;margin:18px 0 2px}.batch-row{display:grid;gap:12px}.batch-row.two{grid-template-columns:repeat(2,minmax(0,1fr))}.batch-row.three{grid-template-columns:repeat(3,minmax(0,1fr))}.batch-field{display:flex;flex-direction:column;gap:7px;min-width:0}.batch-field>span{color:var(--ink-soft);font-size:12px;font-weight:700}.batch-field input,.batch-field select{width:100%;min-height:40px;box-sizing:border-box;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:13.5px;padding:8px 10px}.batch-days{display:flex;flex-wrap:wrap;gap:8px}.batch-days button{height:34px;padding:0 12px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);font-size:12.5px;font-weight:700}.batch-days button.active{border-color:var(--primary-tint);background:var(--primary-soft);color:var(--primary-deep)}.batch-error{color:var(--danger, #e5484d);font-size:12.5px;font-weight:700}@media(max-width:680px){.batch-row.two,.batch-row.three{grid-template-columns:1fr}}.settings-form{display:flex;flex-direction:column;gap:16px}.set-card{padding:22px 24px}.set-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px 20px}.set-field{display:flex;flex-direction:column;gap:6px;min-width:0}.set-field-full{grid-column:1 / -1}.set-label{font-size:12.5px;font-weight:600;color:var(--ink-soft)}.set-input{width:100%;box-sizing:border-box;font-family:var(--font-body);font-size:13.5px;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px;transition:border-color .15s ease,box-shadow .15s ease}.set-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.set-textarea{resize:vertical;min-height:72px;line-height:1.6}.set-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;padding-right:30px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center}.set-hint{font-size:11.5px;color:var(--ink-faint);line-height:1.5}.set-avatar-row{display:flex;align-items:center;gap:12px}.set-avatar-preview{width:42px;height:42px;flex:none;border-radius:50%;display:grid;place-items:center;font-size:22px;background:var(--primary-soft);border:1px solid var(--line)}.set-input-mini{width:72px;text-align:center}.set-price-row{display:flex;gap:8px}.set-input-currency{width:92px;flex:none}.set-discount-row{display:flex;align-items:center;gap:8px}.set-discount-row .set-input{width:100%}.set-discount-unit{font-size:15px;font-weight:600;color:var(--ink-soft);flex:none}.set-toggles{display:flex;flex-direction:column}.set-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--line-soft)}.set-row:last-child{border-bottom:none}.set-row-title{font-size:13.5px;font-weight:600;color:var(--ink)}.set-row-desc{font-size:12px;color:var(--ink-faint);margin-top:2px}.set-switch{position:relative;flex:none;width:44px;height:26px;border-radius:999px;background:var(--line);transition:background .18s ease;cursor:pointer}.set-switch.on{background:var(--primary)}.set-switch-knob{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:var(--shadow-sm);transition:transform .18s ease}.set-switch.on .set-switch-knob{transform:translate(18px)}.set-savebar{position:sticky;bottom:16px;margin-top:18px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-lg);opacity:0;transform:translateY(12px);pointer-events:none;transition:opacity .2s ease,transform .2s ease}.set-savebar.show{opacity:1;transform:none;pointer-events:auto}.set-savebar-note{font-size:13px;color:var(--ink-soft);font-weight:500}.set-savebar-actions{display:flex;gap:8px}@media(max-width:720px){.set-grid{grid-template-columns:1fr}.set-card{padding:18px}}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;background:#2521176b;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:grid;place-items:center;padding:24px;animation:fadeIn .18s ease}@keyframes fadeIn{0%{opacity:0}}.modal{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:26px;max-width:460px;width:100%;animation:rise .22s cubic-bezier(.2,.7,.3,1)}@keyframes rise{0%{opacity:0;transform:translateY(8px)}}.modal-head{display:flex;align-items:flex-start;gap:14px;margin-bottom:16px}.modal-ico{width:42px;height:42px;border-radius:12px;flex:none;background:var(--primary-soft);color:var(--primary-deep);display:grid;place-items:center}.modal-ico svg{width:22px;height:22px}.modal-ico.warn{background:var(--warn-soft);color:var(--warn-deep)}.modal-ico.danger{background:var(--danger-soft);color:var(--danger)}.modal-title{font-family:var(--font-head);font-size:19px;font-weight:600;color:var(--ink)}.modal-sub{font-size:13.5px;color:var(--ink-soft);margin-top:4px;line-height:1.6}.modal-summary{background:var(--surface-2);border-radius:12px;padding:14px;margin-bottom:16px;font-size:13.5px}.modal-summary div{display:flex;gap:10px;padding:4px 0}.modal-summary .ms-label{width:64px;color:var(--ink-faint);font-size:12.5px;flex:none}.modal-summary .ms-value{color:var(--ink);font-weight:500}.modal label.fld{display:block}.modal .fld-label{display:block;font-size:13px;font-weight:600;color:var(--ink);margin-bottom:6px}.modal input{width:100%;padding:11px 14px;border-radius:10px;border:1px solid var(--line);background:var(--surface);font-size:14px;color:var(--ink);transition:border-color .15s ease,box-shadow .15s ease}.modal input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.modal input.invalid{border-color:var(--danger)}.modal .fld-hint{font-size:11.5px;color:var(--ink-faint);margin-top:6px}.modal-actions{display:flex;gap:10px;margin-top:20px}.modal-actions .btn{flex:1}.toast{position:fixed;left:50%;bottom:30px;transform:translate(-50%) translateY(20px);background:#1d1a14;color:#f6f5f1;padding:11px 18px;border-radius:999px;font-size:13.5px;font-weight:500;display:inline-flex;align-items:center;gap:8px;box-shadow:var(--shadow-lg);opacity:0;pointer-events:none;transition:opacity .22s ease,transform .22s ease;z-index:100}.toast.show{opacity:1;transform:translate(-50%) translateY(0);pointer-events:auto}.toast svg{width:16px;height:16px;color:var(--ok)}.section-row{display:grid;grid-template-columns:1.4fr 1fr;gap:20px}@media(max-width:1000px){.section-row{grid-template-columns:1fr}}.apply-banner{display:flex;align-items:center;gap:14px;padding:16px 18px;background:linear-gradient(140deg,var(--primary-soft),var(--surface));border:1px solid var(--primary-tint);border-radius:var(--radius);margin-bottom:18px}.apply-ico{width:38px;height:38px;border-radius:10px;flex:none;background:var(--surface);color:var(--primary-deep);display:grid;place-items:center}.apply-ico svg{width:20px;height:20px}.apply-text{flex:1;min-width:0}.apply-title{font-size:14px;font-weight:600;color:var(--ink)}.apply-desc{font-size:12.5px;color:var(--ink-soft);margin-top:2px}.trev-grid{column-count:2;column-gap:16px;margin-top:4px}@media(max-width:900px){.trev-grid{column-count:1}}.trev-card{break-inside:avoid;display:inline-block;width:100%;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:16px 16px 14px;margin-bottom:16px}.trev-card.bad{border-color:var(--warn-tint);background:var(--warn-soft)}.trev-head{display:flex;align-items:center;gap:10px}.trev-who{flex:1;min-width:0}.trev-name{font-size:14px;font-weight:600;color:var(--ink)}.trev-date{font-size:12px;color:var(--ink-faint);font-family:var(--font-mono);margin-top:1px}.trev-tag{flex:none;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px;background:var(--ok-soft);color:var(--ok-deep)}.trev-tag.bad{background:var(--warn-tint);color:var(--warn-deep)}.trev-topic{display:inline-block;margin:10px 0 0;font-size:11.5px;color:var(--ink-soft);background:var(--surface-2);border:1px solid var(--line-soft);border-radius:999px;padding:2px 9px}.trev-text-wrap{margin-top:10px}.trev-text{font-size:13.5px;line-height:1.72;color:var(--ink-soft)}.trev-text p{margin:0 0 8px}.trev-text p:last-child{margin-bottom:0}.trev-text.collapsed{display:-webkit-box;-webkit-line-clamp:8;-webkit-box-orient:vertical;overflow:hidden}.trev-toggle{margin-top:6px;padding:0;border:0;background:none;cursor:pointer;font-size:12.5px;font-weight:600;color:var(--primary);font-family:var(--font-body)}.trev-toggle:hover{color:var(--primary-deep)}.trev-reply{margin-top:12px;padding:10px 12px;background:var(--primary-soft);border:1px solid var(--primary-tint);border-radius:var(--radius-sm)}.trev-reply-head{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--primary-deep)}.trev-reply-ava{width:20px;height:20px;border-radius:50%;flex:none;background:var(--primary);color:var(--on-primary);display:grid;place-items:center;font-size:11px;font-weight:700;font-family:var(--font-head)}.trev-reply p{margin:6px 0 0;font-size:13px;line-height:1.65;color:var(--ink)}.trev-reply-actions{display:flex;gap:6px;margin-top:8px}.trev-danger{color:var(--danger)}.trev-danger:hover{background:var(--danger-soft)}.trev-compose{margin-top:12px}.trev-textarea{width:100%;resize:vertical;min-height:64px;font-family:var(--font-body);font-size:13px;line-height:1.6;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px;box-sizing:border-box}.trev-textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.trev-compose-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.trev-foot{margin-top:12px}.stu-card{padding:0;overflow:hidden}.stu-summary{display:flex;gap:28px;padding:18px 22px;border-bottom:1px solid var(--line, #ece8df);background:var(--surface-2, #faf9f7);font-size:14px;color:var(--muted, #6b6555)}.stu-summary strong{font-size:19px;color:var(--ink, #29261b);font-family:var(--font-head, serif);margin-right:2px}.stu-table{display:flex;flex-direction:column}.stu-row{display:grid;grid-template-columns:1fr 90px 90px 110px;align-items:center;gap:10px;padding:13px 22px;border-bottom:1px solid var(--line, #f0ece3)}.stu-row:last-child{border-bottom:0}.stu-head{font-size:12.5px;color:var(--muted, #8a8473);font-weight:600;background:var(--surface-2, #faf9f7)}.stu-c-num{text-align:right;font-variant-numeric:tabular-nums}.stu-who{display:flex;align-items:center;gap:11px;min-width:0}.stu-ava{width:36px;height:36px;flex:none;border-radius:50%;display:grid;place-items:center;font-family:var(--font-head, serif);font-weight:600;font-size:15px;color:#fff;background:linear-gradient(150deg,#4a8a82,#2f5d57)}.stu-id{min-width:0}.stu-name{font-weight:600;font-size:14.5px;color:var(--ink, #29261b);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stu-email{font-size:12px;color:var(--muted, #8a8473);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stu-purchased{font-size:15px;color:var(--ink, #29261b)}.stu-used{font-size:15px;color:var(--muted, #8a8473)}.stu-remaining{font-size:19px;font-weight:700;font-family:var(--font-head, serif)}.stu-remaining.pos{color:#2f7d5b}.stu-remaining.zero{color:var(--muted, #b3ac9b)}@media(max-width:560px){.stu-row{grid-template-columns:1fr 56px 56px 70px;padding:12px 14px;gap:6px}.stu-summary{gap:16px;padding:14px 16px}.stu-ava{width:30px;height:30px}}.stu-row-btn{width:100%;border:0;background:transparent;font:inherit;text-align:left;cursor:pointer;transition:background .15s ease}.stu-row-btn:hover{background:var(--surface-2, #faf9f7)}.stu-chev{display:inline-flex;margin-left:6px;color:var(--muted, #b3ac9b);transition:transform .18s ease}.stu-chev svg{width:16px;height:16px}.stu-group.open .stu-chev{transform:rotate(90deg)}.stu-group.open>.stu-row-btn{background:var(--surface-2, #faf9f7)}.stu-detail{padding:6px 22px 16px 69px;background:var(--surface-2, #faf9f7);border-bottom:1px solid var(--line, #f0ece3)}.stu-detail-title{font-size:12.5px;font-weight:600;color:var(--muted, #8a8473);margin:8px 0 10px}.stu-detail-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:9px 12px;background:#fff;border:1px solid var(--line, #ece8df);border-radius:10px;margin-bottom:8px;font-size:13px;color:var(--ink, #4a4636)}.stu-detail-row:last-child{margin-bottom:0}.stu-detail-row svg{width:14px;height:14px;margin-right:4px;vertical-align:-2px;color:var(--muted, #a8a190)}.sd-date{color:var(--muted, #6b6555)}.sd-lessons{font-weight:700;color:#2f7d5b}.sd-amount{font-weight:600;color:var(--ink, #29261b)}.sd-method{color:var(--muted, #6b6555)}.sd-trade{margin-left:auto;font-size:11.5px;color:var(--muted, #b3ac9b);font-variant-numeric:tabular-nums}@media(max-width:560px){.stu-detail{padding-left:16px}.sd-trade{margin-left:0;width:100%}}.t-chat{display:grid;grid-template-columns:280px 1fr;height:min(68vh,620px);border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);overflow:hidden;box-shadow:var(--shadow-sm)}.t-chat-list{border-right:1px solid var(--line);overflow-y:auto;background:var(--surface)}.t-chat-thread{width:100%;display:flex;align-items:center;gap:10px;padding:12px 14px;border:none;border-bottom:1px solid var(--line);background:transparent;cursor:pointer;text-align:left}.t-chat-thread:hover{background:var(--surface-2)}.t-chat-thread.active{background:var(--primary-tint)}.t-chat-ava{flex:none;width:36px;height:36px;border-radius:50%;display:grid;place-items:center;font-weight:600;background:var(--primary);color:var(--on-primary)}.t-chat-thread-meta{flex:1;min-width:0;display:flex;flex-direction:column}.t-chat-thread-name{font-weight:600;color:var(--ink);font-size:.9rem}.t-chat-thread-last{font-size:.8rem;color:var(--ink-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.t-chat-thread-time{flex:none;font-size:.7rem;color:var(--ink-faint);align-self:flex-start}.t-chat-conv{display:flex;flex-direction:column;min-width:0}.t-chat-conv-head{padding:14px 18px;border-bottom:1px solid var(--line);font-weight:600;color:var(--ink)}.t-chat-scroll{flex:1;overflow-y:auto;padding:18px;display:flex;flex-direction:column;gap:10px}.t-chat-empty{margin:auto;text-align:center;color:var(--ink-faint);display:flex;flex-direction:column;align-items:center;gap:8px;padding:24px}.t-chat-empty svg{width:32px;height:32px;opacity:.5}@media(max-width:720px){.t-chat{grid-template-columns:1fr;height:auto}.t-chat-list{max-height:220px}}.t-chat-unread{display:inline-grid;place-items:center;min-width:17px;height:17px;margin-top:4px;padding:0 5px;border-radius:9px;background:var(--primary);color:var(--on-primary);font-size:.68rem;font-weight:700;line-height:1}.t-chat-thread-time{display:flex;flex-direction:column;align-items:flex-end;gap:2px}
