:root{--sage:#7a9e8e;--sage-dark:#5f8273;--sage-light:#e8f0ec;--off-white:#f7f5f2;--cream:#fffefb;--text:#2c2c2c;--text-muted:#6b6b6b;--border:#e2ddd6;--danger:#c45c5c;--waitlist:#b8860b;--radius:12px;--radius-lg:20px;--shadow:0 4px 24px #2c2c2c0f;--font:"Noto Sans TC", "PingFang HK", "Microsoft JhengHei", system-ui, sans-serif;--max:640px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font);background:var(--off-white);color:var(--text);-webkit-font-smoothing:antialiased;min-height:100dvh;line-height:1.6}img{max-width:100%;display:block}a{color:var(--sage-dark);text-decoration:none}a:hover{text-decoration:underline}.container{width:min(100% - 2rem, var(--max));margin-inline:auto}.site-header{z-index:40;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#f7f5f2eb;border-bottom:1px solid #0000;transition:border-color .2s;position:sticky;top:0}.site-header.scrolled{border-bottom-color:var(--border)}.header-inner{justify-content:space-between;align-items:center;padding:.85rem 0;display:flex}.logo{color:var(--text);letter-spacing:.02em;font-size:1.05rem;font-weight:600}.logo span{color:var(--sage)}.nav-links{gap:1rem;font-size:.9rem;list-style:none;display:flex}.nav-links a{color:var(--text-muted);text-decoration:none}.nav-links a:hover{color:var(--sage)}.hero{text-align:center;padding:2.5rem 0 2rem}.avatar{background:linear-gradient(145deg, var(--sage), var(--sage-dark));color:#fff;width:96px;height:96px;box-shadow:var(--shadow);letter-spacing:.04em;border-radius:50%;place-items:center;margin:0 auto 1.25rem;font-size:1.75rem;font-weight:600;display:grid}.hero h1{letter-spacing:.01em;margin-bottom:.5rem;font-size:clamp(1.35rem,4vw,1.65rem);font-weight:600}.tagline{color:var(--text-muted);white-space:pre-line;margin-bottom:.35rem;font-size:1rem}.tagline-sub{color:var(--sage-dark);margin-bottom:1.75rem;font-size:.95rem}.btn{cursor:pointer;border:none;border-radius:999px;justify-content:center;align-items:center;gap:.4rem;padding:.85rem 1.75rem;font-family:inherit;font-size:1rem;font-weight:600;text-decoration:none;transition:background .15s,transform .1s,box-shadow .15s;display:inline-flex}.btn:active{transform:scale(.98)}.btn-primary{background:var(--sage);color:#fff;box-shadow:0 4px 16px #7a9e8e59}.btn-primary:hover{background:var(--sage-dark);color:#fff;text-decoration:none}.btn-outline{color:var(--sage-dark);border:1.5px solid var(--sage);background:0 0}.btn-outline:hover{background:var(--sage-light);text-decoration:none}.btn-sm{padding:.4rem .9rem;font-size:.85rem}.class-row .btn-book{flex-shrink:0;min-width:72px;min-height:44px;padding:.65rem 1.1rem;font-size:.9rem}.class-row .btn-book.is-disabled,.class-row .btn-book[aria-disabled=true]{pointer-events:none;opacity:.45;box-shadow:none;background:var(--border);color:var(--text-muted);cursor:not-allowed}.class-pick.is-closed{opacity:.55;pointer-events:none}.class-pick.is-closed input{display:none}.btn-block{width:100%}.btn-danger{background:var(--danger);color:#fff}.btn-ghost{color:var(--text-muted);background:0 0;padding:.4rem .6rem}.btn-lg{padding:1rem 2.25rem;font-size:1.05rem}.cta-wrap{text-align:center;margin:.5rem 0 2.5rem}section{padding:1.75rem 0}.section-title{letter-spacing:.02em;margin-bottom:1rem;font-size:1.15rem;font-weight:600}.section-note{color:var(--text-muted);margin-bottom:1rem;font-size:.85rem}.about-card{background:var(--cream);border-radius:var(--radius-lg);box-shadow:var(--shadow);border:1px solid var(--border);padding:1.5rem}.about-card p{color:var(--text);margin-bottom:.75rem}.about-card p:last-child{margin-bottom:0}.about-meta{border-top:1px solid var(--border);color:var(--text-muted);flex-wrap:wrap;gap:.75rem 1.25rem;margin-top:1rem;padding-top:1rem;font-size:.9rem;display:flex}.about-meta strong{color:var(--text);font-weight:500}.cards{gap:1rem;display:grid}@media (width>=520px){.cards{grid-template-columns:1fr 1fr}}.type-card{background:var(--cream);border-radius:var(--radius-lg);border:1px solid var(--border);box-shadow:var(--shadow);padding:1.35rem}.type-card h3{color:var(--sage-dark);margin-bottom:.35rem;font-size:1.05rem}.type-card .price{color:var(--text);margin:.5rem 0;font-size:1.5rem;font-weight:700}.type-card .price small{color:var(--text-muted);font-size:.85rem;font-weight:400}.type-card ul{color:var(--text-muted);font-size:.88rem;list-style:none}.type-card ul li{padding:.2rem 0 .2rem 1rem;position:relative}.type-card ul li:before{content:"·";color:var(--sage);font-weight:700;position:absolute;left:0}.filter-tabs{flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;display:flex}.filter-tab{border:1px solid var(--border);background:var(--cream);cursor:pointer;color:var(--text-muted);border-radius:999px;padding:.4rem .95rem;font-family:inherit;font-size:.85rem}.filter-tab.active{background:var(--sage);color:#fff;border-color:var(--sage)}.class-list{flex-direction:column;gap:.65rem;display:flex}.class-row{background:var(--cream);border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:.75rem;padding:.85rem 1rem;display:flex;box-shadow:0 1px 4px #00000008}.class-row-info{flex:1;min-width:0}.class-row-title{flex-wrap:wrap;align-items:center;gap:.4rem;font-size:.95rem;font-weight:600;display:flex}.class-row-meta{color:var(--text-muted);margin-top:.15rem;font-size:.8rem}.badge{letter-spacing:.02em;border-radius:999px;padding:.15rem .45rem;font-size:.7rem;font-weight:600;display:inline-block}.badge-open{background:var(--sage-light);color:var(--sage-dark)}.badge-waitlist{color:var(--waitlist);background:#fff3cd}.badge-full{color:var(--danger);background:#f5e6e6}.badge-type{color:var(--text-muted);background:#eee;font-weight:500}.empty-state{text-align:center;color:var(--text-muted);padding:2rem 1rem;font-size:.95rem}.pay-box{background:var(--sage-light);border-radius:var(--radius);color:var(--text);margin:1.25rem 0;padding:1rem 1.15rem;font-size:.88rem}.pay-box strong{color:var(--sage-dark)}.site-footer{text-align:center;border-top:1px solid var(--border);color:var(--text-muted);margin-top:2rem;padding:2rem 0 2.5rem;font-size:.9rem}.site-footer a{color:var(--sage-dark);font-weight:600}.ig-link{background:var(--cream);border:1px solid var(--border);color:var(--text);border-radius:999px;align-items:center;gap:.4rem;margin:.75rem 0;padding:.55rem 1.1rem;font-weight:500;text-decoration:none;display:inline-flex}.ig-link:hover{border-color:var(--sage);color:var(--sage-dark);text-decoration:none}.footer-links{margin-top:.75rem;font-size:.8rem}.footer-links a{color:var(--text-muted);margin:0 .4rem}.page-header{padding:1.5rem 0 .5rem}.page-header h1{margin-bottom:.35rem;font-size:1.35rem}.back-link{color:var(--sage-dark);margin-bottom:.75rem;font-size:.9rem;display:inline-block}.form-card{background:var(--cream);border-radius:var(--radius-lg);border:1px solid var(--border);box-shadow:var(--shadow);margin-bottom:1.5rem;padding:1.5rem}.form-group{margin-bottom:1.15rem}.form-group label{margin-bottom:.35rem;font-size:.9rem;font-weight:500;display:block}.req{color:var(--danger)}.opt{color:var(--text-muted);font-size:.8rem;font-weight:400}.form-group input,.form-group select,.form-group textarea{border:1.5px solid var(--border);width:100%;color:var(--text);background:#fff;border-radius:10px;padding:.7rem .85rem;font-family:inherit;font-size:1rem;transition:border-color .15s}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--sage);outline:none}.form-group textarea{resize:vertical;min-height:80px}.form-error{color:var(--danger);margin-top:.25rem;font-size:.8rem;display:none}.form-group.has-error input,.form-group.has-error select,.form-group.has-error textarea{border-color:var(--danger)}.form-group.has-error .form-error{display:block}.class-pick-list{flex-direction:column;gap:.5rem;max-height:320px;display:flex;overflow-y:auto}.class-pick{border:1.5px solid var(--border);cursor:pointer;background:#fff;border-radius:10px;align-items:flex-start;gap:.65rem;padding:.75rem;transition:border-color .15s,background .15s;display:flex}.class-pick:has(input:checked){border-color:var(--sage);background:var(--sage-light)}.class-pick input{accent-color:var(--sage);width:auto;margin-top:.2rem}.class-pick-body{flex:1;font-size:.88rem}.class-pick-body strong{font-size:.92rem;display:block}.rules-box{color:var(--text-muted);background:var(--off-white);border-radius:10px;margin:1rem 0;padding:.9rem 1rem;font-size:.82rem}.rules-box ul{margin:.4rem 0 0 1.1rem}.rules-box li{margin:.2rem 0}.success-panel{text-align:center;padding:2rem 1rem;display:none}.success-panel.show{display:block}.success-icon{background:var(--sage-light);width:64px;height:64px;color:var(--sage-dark);border-radius:50%;place-items:center;margin:0 auto 1rem;font-size:1.75rem;display:grid}.admin-login{max-width:360px;margin:3rem auto}.admin-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.25rem;display:flex}.admin-bar h1{font-size:1.25rem}.admin-table-wrap{margin-bottom:1.5rem;overflow-x:auto}.admin-table{border-collapse:collapse;background:var(--cream);border-radius:var(--radius);border:1px solid var(--border);width:100%;font-size:.85rem;overflow:hidden}.admin-table th,.admin-table td{text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:.65rem .75rem}.admin-table th{background:var(--sage-light);color:var(--sage-dark);font-weight:600}.admin-table tr:last-child td{border-bottom:none}.admin-actions{gap:.35rem;display:flex}.modal-overlay{z-index:100;background:#0006;justify-content:center;align-items:flex-end;display:none;position:fixed;inset:0}.modal-overlay.open{display:flex}@media (width>=560px){.modal-overlay{align-items:center}}.modal{background:var(--cream);border-radius:var(--radius-lg) var(--radius-lg) 0 0;width:min(100%,480px);max-height:90dvh;padding:1.5rem;overflow-y:auto;box-shadow:0 -4px 40px #00000026}@media (width>=560px){.modal{border-radius:var(--radius-lg)}}.modal h2{margin-bottom:1rem;font-size:1.15rem}.modal-actions{gap:.75rem;margin-top:1.25rem;display:flex}.modal-actions .btn{flex:1}.toast{background:var(--text);color:#fff;z-index:200;white-space:nowrap;border-radius:999px;padding:.75rem 1.25rem;font-size:.9rem;transition:transform .25s;position:fixed;bottom:1.5rem;left:50%;transform:translate(-50%)translateY(120%)}.toast.show{transform:translate(-50%)translateY(0)}.hidden{display:none!important}.screenshot-preview{margin-top:.5rem}.screenshot-preview img{border:1px solid var(--border);border-radius:10px;max-height:160px}.form-group input[type=file]{padding:.55rem;font-size:.9rem}.admin-tabs{border-bottom:1px solid var(--border);gap:.35rem;margin-bottom:1rem;padding-bottom:.35rem;display:flex}.admin-tab{appearance:none;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:999px;min-height:44px;padding:.55rem .9rem;font-family:inherit;font-size:.95rem;font-weight:500}.admin-tab.active{background:var(--sage-light);color:var(--sage-dark)}.booking-card{background:var(--cream);border:1px solid var(--border);border-radius:var(--radius);align-items:flex-start;gap:.85rem;margin-bottom:.75rem;padding:1rem;display:flex}.booking-main{flex:1;min-width:0}.booking-title{flex-wrap:wrap;align-items:center;gap:.4rem;margin-bottom:.25rem;display:flex}.booking-meta{color:var(--text-muted);margin-top:.2rem;font-size:.8rem}.booking-classes{margin-top:.45rem;font-size:.85rem;line-height:1.45}.booking-side{flex-direction:column;flex-shrink:0;align-items:stretch;gap:.5rem;width:96px;display:flex}.shot-thumb{appearance:none;border:1px solid var(--border);cursor:pointer;background:#fff;border-radius:10px;width:96px;height:96px;padding:0;overflow:hidden}.shot-thumb img{object-fit:cover;width:100%;height:100%}.status-select{border:1.5px solid var(--border);background:#fff;border-radius:8px;min-height:36px;padding:.4rem .35rem;font-family:inherit;font-size:.8rem}.lightbox{z-index:300;cursor:zoom-out;background:#000000bf;justify-content:center;align-items:center;padding:1.5rem;display:none;position:fixed;inset:0}.lightbox.open{display:flex}.lightbox img{border-radius:12px;max-width:min(100%,720px);max-height:90dvh;box-shadow:0 8px 40px #00000059}.class-pick.is-waitlist{background:#fffbf0;border-color:#e6c76a}.class-pick.is-waitlist .badge-waitlist{vertical-align:middle;margin-left:.35rem}.btn-waitlist{color:#8a6d1b;background:#fff8e1;border-color:#e6c76a}.btn-waitlist:hover{background:#fff3cd}.waitlist-banner{color:#8a6d1b;background:#fff8e1;border:1px solid #e6c76a;border-radius:10px;margin:.25rem 0 .5rem;padding:.85rem 1rem;font-size:1.15rem;line-height:1.4;display:block}.success-seat{text-align:left;margin-top:.5rem}.success-seat ul{margin:.25rem 0 0 1.1rem;padding:0}.success-waitlist,.line-waitlist{color:#8a6d1b}
