:root{--paper:#f1f0e9;--white:#fff;--ink:#151515;--muted:#61615d;--line:#deded7;--soft:#f2f2ee;--lime:#d4e875;--pink:#f29b99;--blue:#233a5d;--danger:#9a3027;--radius:8px;color:var(--ink);font-synthesis:weight;font-family:PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,sans-serif;font-size:16px}*{box-sizing:border-box}body{background:var(--paper);margin:0}button,input{font:inherit}button{cursor:pointer;color:inherit}button:disabled{cursor:not-allowed}button,input{border-radius:var(--radius)}:is(button:focus-visible,input:focus-visible,a:focus-visible){outline:3px solid var(--blue);outline-offset:4px}input{color:var(--ink);background:var(--white);min-width:0}h1,h2,p{margin:0}h1{letter-spacing:-1.5px;font-size:40px;font-weight:900;line-height:1.25}h2{font-size:26px;font-weight:800}strong{font-weight:700}button,input,.selection{font-variant-numeric:tabular-nums}.site-shell{isolation:isolate;min-height:100vh;padding:64px 24px 24px;position:relative;overflow:hidden}.booking-panel{background:var(--white);border-radius:24px;max-width:800px;margin:auto;padding:36px 48px 28px;position:relative}.page-header{justify-content:space-between;align-items:center;gap:20px;margin-bottom:32px;display:flex}.page-header p{color:var(--muted);margin-top:10px;font-size:16px;line-height:1.6}fieldset{border:0;min-width:0;margin:0;padding:0}legend{width:100%;margin-bottom:14px;padding:0;font-size:18px;font-weight:700}legend>span{color:var(--muted);float:right;padding-top:3px;font-size:14px;font-weight:400}.date-toolbar{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.date-toolbar>span{font-size:15px}.date-picker{max-width:172px}.date-picker input{border:1px solid var(--line);width:100%;min-height:44px;padding:8px 10px;font-size:15px}.date-strip{grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;display:grid}.date-button{background:var(--soft);border:1px solid #0000;flex-direction:column;align-items:center;gap:5px;min-height:82px;padding:10px 0 7px;display:flex;position:relative}.date-button>span:first-child{color:var(--muted);font-size:14px}.date-button strong{font-size:23px;line-height:1.2}.date-button.active{background:var(--ink);color:var(--white)}.date-button.active>span:first-child{color:var(--white)}.date-dot{background:0 0;border-radius:100%;width:4px;height:4px}.active .date-dot{background:var(--lime)}.date-button:not(.active):hover{border-color:var(--ink)}.slot-section{margin-top:28px}.slot-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.slot{background:var(--white);border:1px solid var(--ink);flex-direction:column;justify-content:center;align-items:center;gap:5px;min-height:72px;padding:10px 4px;display:flex}.slot strong{white-space:nowrap;letter-spacing:-.4px;font-size:16px}.slot>span{color:var(--muted);font-size:14px;line-height:1.45}.slot:disabled{border-color:var(--soft);background:var(--soft);color:var(--muted)}.slot.selected{background:var(--lime);border:2px solid var(--ink);padding:9px 3px}.slot.selected span{color:var(--ink);font-weight:600}.slot:not(:disabled):hover{box-shadow:inset 0 0 0 1px var(--ink)}.details-section{margin-top:28px}.input-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.input-grid label{font-weight:600}.input-grid label>span{color:var(--muted);margin-left:4px;font-size:14px;font-weight:400}.input-grid input{border:1px solid #a4a49d;width:100%;height:48px;margin-top:8px;padding:12px;font-size:16px;font-weight:400;display:block}.input-grid input::placeholder{color:var(--muted)}.privacy{color:var(--muted);margin-top:12px;font-size:14px;line-height:1.6}.submit-area{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:24px;margin-top:24px;padding-top:22px;display:flex}.selection{flex-direction:column;gap:4px;display:flex}.selection span{color:var(--muted);font-size:14px}.selection strong{font-size:20px}.primary{border:1px solid var(--ink);background:var(--ink);height:52px;color:var(--white);justify-content:space-between;align-items:center;gap:32px;min-width:224px;padding:0 24px;font-size:16px;font-weight:600;display:flex}.primary>span{font-size:22px;font-weight:400}.primary:disabled{color:var(--white);background:#484845;border-color:#484845}.primary:not(:disabled):hover{background:var(--blue)}.footer-note{color:var(--muted);margin-top:16px;font-size:14px;line-height:1.6}.empty{background:var(--soft);border-radius:var(--radius);margin-top:12px;padding:12px;font-size:14px}.submit-error,.load-error{color:var(--danger);margin-top:14px;font-size:16px;line-height:1.7}.load-error button{border:1px solid var(--ink);background:#fff;min-height:44px;margin-top:10px;padding:8px 16px;display:block}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.success{padding:12px 0}.success-check{background:var(--lime);border-radius:50%;justify-content:center;align-items:center;width:56px;height:56px;margin-bottom:20px;font-size:28px;display:flex}.success>p{margin-top:10px;line-height:1.6}.success dl{background:var(--soft);border-radius:12px;gap:16px;margin:28px 0;padding:24px;display:grid}.success dl>div{grid-template-columns:90px 1fr;gap:12px;display:grid}.success dt{color:var(--muted);font-size:14px}.success dd{overflow-wrap:anywhere;margin:0;line-height:1.6}.success dd span{color:var(--muted);font-size:14px}.success .support{color:var(--muted);margin-bottom:24px;font-size:14px}@media (max-width:700px){.site-shell{padding:24px 12px 20px}.booking-panel{border-radius:20px;padding:24px 20px}.page-header{margin-bottom:26px}h1{letter-spacing:-1px;font-size:32px}.page-header p{margin-top:8px}.date-strip{gap:5px}.date-button{min-height:75px}.date-button strong{font-size:21px}.date-toolbar{gap:6px}.date-toolbar>span{font-size:14px}.date-picker{max-width:150px}.date-picker input{padding:8px;font-size:14px}.slot-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.slot strong{letter-spacing:-.6px;font-size:14px}.slot{min-height:72px}.slot-section{margin-top:24px}legend{font-size:17px}legend>span{font-size:14px}.details-section{margin-top:24px}.input-grid{grid-template-columns:1fr;gap:16px}.submit-area{flex-direction:column;align-items:stretch;gap:16px}.selection{flex-flow:wrap;justify-content:space-between;align-items:center}.selection strong{font-size:18px}.primary{width:100%;min-width:0}.footer-note{margin-top:12px}}@media (max-width:359px){.booking-panel{padding:22px 16px}.slot-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.date-toolbar{flex-direction:column;align-items:flex-start}.date-picker{max-width:100%}.date-toolbar>span{line-height:1.6}.page-header{gap:8px}}.teacher-name{letter-spacing:-1.6px}.course-title{white-space:nowrap}.page-header{align-items:center}.page-header h1{line-height:1.2}.page-header p{margin-top:12px}@media (max-width:700px){.course-title{display:block}.page-header{gap:8px;margin-bottom:24px}.page-header h1{font-size:32px;line-height:1.18}.page-header p{margin-top:10px}.teacher-name{letter-spacing:-1.2px}}@media (max-width:359px){.teacher-name{letter-spacing:-1.6px}}@media (max-width:700px){.site-shell{padding-top:28px}}.admin-shell{max-width:1040px;margin:0 auto;padding:32px 24px 100px}.admin-header{justify-content:space-between;align-items:center;gap:20px;margin-bottom:28px;display:flex}.admin-brand{color:var(--muted);margin-bottom:8px;font-size:14px;font-weight:600}.admin-header h1{font-size:32px}.admin-nav{align-items:center;gap:16px;display:flex}.admin-nav a,.admin-nav button{color:var(--ink);background:0 0;border:0;align-items:center;min-height:44px;padding:8px 0;font-size:14px;display:flex}.admin-nav a{text-underline-offset:4px}.admin-panel{background:var(--white);border-radius:16px;margin-top:20px;padding:28px}.admin-panel h2{font-size:22px;font-weight:800}.muted{color:var(--muted);font-size:14px;line-height:1.7}.section-heading{justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;display:flex}.admin-date{flex-wrap:wrap;align-items:center;gap:16px;display:flex}.admin-date label{align-items:center;gap:12px;font-size:14px;display:flex}.admin-date input{border:1px solid #a4a49d;max-width:100%;height:46px;padding:8px 12px}.admin-date>span{color:var(--muted);flex:1;font-size:14px}.outline-button,.danger-button{background:var(--white);border:1px solid var(--ink);min-height:44px;padding:8px 14px;font-size:14px}.outline-button:disabled,.danger-button:disabled{color:var(--muted);border-color:var(--line)}.admin-slots{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:20px 0;display:grid}.admin-slot{border:1px solid var(--line);cursor:pointer;border-radius:8px;align-items:center;gap:10px;min-height:72px;padding:12px;display:flex}.admin-slot input{width:20px;height:20px;accent-color:var(--ink);flex:none}.admin-slot:has(input:checked){background:var(--lime);border-color:var(--ink)}.admin-slot.occupied{background:var(--soft);border-color:var(--line);cursor:not-allowed}.admin-slot strong{letter-spacing:-.4px;white-space:nowrap;font-size:15px}.admin-slot small{color:var(--muted);margin-top:6px;font-size:14px;display:block}.schedule-actions{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.schedule-actions .primary{justify-content:center;min-width:180px;height:44px}.loading{color:var(--muted);padding:24px 0 8px;font-size:16px}.unsaved{margin-top:14px;font-size:14px}.booking-row{border-top:1px solid var(--line);grid-template-columns:180px minmax(0,1fr) auto;align-items:center;gap:20px;margin-top:16px;padding:20px 0;display:grid}.booking-row+.booking-row{margin-top:0}.booking-when,.booking-person{flex-direction:column;gap:7px;min-width:0;display:flex}.booking-when>span,.booking-person>span{color:var(--muted);overflow-wrap:anywhere;font-size:14px}.booking-when strong{font-variant-numeric:tabular-nums}.booking-person strong{overflow-wrap:anywhere}.booking-person b{-webkit-user-select:all;user-select:all;color:var(--ink);font-weight:400}.danger-button{color:var(--danger);border-color:var(--danger);white-space:nowrap;font-weight:500}.cancelled-list{border-top:1px solid var(--line);margin-top:16px;padding-top:12px}.cancelled-list summary{cursor:pointer;min-height:44px;font-size:14px;line-height:44px}.cancelled-status{color:var(--muted);font-size:14px;line-height:1.6}.cancelled-status small{font-size:14px}.admin-feedback{background:var(--lime);border:1px solid var(--ink);z-index:5;border-radius:8px;width:max-content;max-width:calc(100% - 32px);padding:16px 20px;font-size:16px;line-height:1.6;position:fixed;bottom:20px;left:50%;transform:translate(-50%);box-shadow:0 3px 12px #0002}.admin-feedback.error{color:var(--danger);border-color:var(--danger);background:#fff0ee}.login-panel{max-width:460px;margin:64px auto 0}.login-panel h2{margin-bottom:12px}.login-panel form{margin-top:24px}.login-panel label{margin:0 0 20px;display:block}.login-panel input{border:1px solid #a4a49d;width:100%;min-height:48px;margin-top:8px;padding:10px 12px;font-size:16px;display:block}.login-panel .primary{justify-content:center;width:100%}@media (max-width:700px){.admin-shell{padding:24px 16px 110px}.admin-header{align-items:flex-start;gap:12px}.admin-header h1{font-size:28px}.admin-nav{flex-wrap:wrap;justify-content:flex-end;gap:12px}.admin-panel{padding:20px 16px}.admin-panel h2{font-size:20px}.admin-slots{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.admin-slot{gap:7px;padding:10px 8px}.admin-slot strong{letter-spacing:-.6px;font-size:14px}.schedule-actions{gap:10px}.schedule-actions .primary{width:100%}.schedule-actions .outline-button{flex:1}.booking-row{grid-template-columns:1fr auto;gap:14px}.booking-when{grid-column:1/-1}.booking-person{grid-column:1}.admin-date>span{flex-basis:100%;order:3}.admin-date{gap:12px}.admin-date label{flex:1;min-width:0}.admin-date input{width:150px;min-width:0}.section-heading{flex-wrap:wrap}.login-panel{margin-top:36px}.admin-feedback{padding:12px 16px;font-size:14px;bottom:12px}}.collage{z-index:-1;pointer-events:none;background:var(--paper) url(/art/linework.svg) center top / 1600px 1000px repeat-y;position:absolute;inset:0}.page-header>div{min-width:0}.input-grid{grid-template-columns:1fr}.slot-grid{width:100%;min-width:0}.slot{min-width:0}@media (max-width:700px){.site-shell{padding:24px 16px}.booking-panel{padding:24px 20px}.slot-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:0 2px}.slot strong{letter-spacing:-.4px;font-size:16px}.collage{background-size:800px 500px}.slot-section legend{flex-wrap:wrap;justify-content:space-between;gap:8px;display:flex}.slot-section legend>span{float:none}}.page-header{grid-template-columns:minmax(0,1fr) 160px;gap:0 20px;display:grid}.page-header>div{display:contents}.page-header h1{grid-area:1/1;align-self:end}.page-header p{grid-area:2/1;align-self:start}.header-mascot{object-fit:contain;grid-area:1/2/span 2;width:160px;height:auto}@media (max-width:700px){.page-header{grid-template-columns:minmax(0,1fr) 112px;column-gap:8px}.header-mascot{grid-row:1;width:112px}.page-header h1{align-self:center}.page-header p{grid-column:1/-1;margin-top:8px}}@media (max-width:359px){.page-header{grid-template-columns:minmax(0,1fr) 92px}.header-mascot{width:92px}.page-header h1{font-size:26px}}.booking-panel>form{width:100%;min-width:0}.booking-panel fieldset{inline-size:100%;min-inline-size:0;max-inline-size:100%}.date-section>.sr-only{width:1px;margin:0}.date-toolbar{flex-flow:row;justify-content:space-between;align-items:center;margin-bottom:14px}.date-toolbar>span{white-space:nowrap;font-size:18px;font-weight:700}.date-picker{flex:0 172px;min-width:0}.date-picker input{max-width:100%}.slot-section{margin-inline:auto}.slot-section legend{white-space:nowrap;flex-wrap:nowrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.slot-section legend>span{float:none;white-space:nowrap;padding-top:0}.slot-grid{width:100%;max-width:100%;margin-inline:auto;padding:0}.slot{width:100%;max-width:100%;min-inline-size:0}.page-header{grid-template-rows:auto}.header-mascot{grid-row:1}.page-header h1{align-self:center}@media (max-width:700px){.slot-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:calc(100% - 24px);max-width:480px;margin-inline:auto;padding:0}.date-toolbar>span{font-size:17px}.date-picker{flex-basis:150px}.slot-section legend{font-size:17px}.slot-section legend>span{font-size:14px}}.date-toolbar{grid-template-columns:minmax(0,1fr) 150px minmax(0,1fr);align-items:center;gap:0;width:100%;margin:0 auto 14px;display:grid}.date-toolbar>span{grid-column:1;justify-self:start}.date-picker{grid-column:2;width:150px;min-width:0;max-width:150px;margin:0;display:block}.date-picker input{width:100%;min-width:0;max-width:100%}.date-strip{width:100%;margin-inline:auto}.date-button{min-width:0}@media (max-width:700px){.date-strip{width:calc(100% - 24px);max-width:480px;margin-inline:auto}.date-toolbar>span{font-size:15px}}@media (max-width:359px){.date-toolbar{grid-template-columns:minmax(0,1fr) 120px minmax(0,1fr)}.date-picker{width:120px;max-width:120px}.date-toolbar>span{font-size:14px}.date-picker input{padding:8px 5px}}.student-nav{border-top:1px solid var(--line);justify-content:flex-end;margin:20px 0 0;padding-top:16px;display:flex}.student-nav a{border:1px solid var(--ink);border-radius:var(--radius);min-height:44px;color:var(--ink);background:var(--white);align-items:center;gap:14px;padding:8px 14px;font-size:14px;text-decoration:none;display:inline-flex}.student-nav a:hover{background:var(--lime)}.week-heading{justify-content:space-between;align-items:center;gap:20px;display:flex}.week-heading h2{margin-bottom:8px;font-size:26px}.week-heading .admin-brand{letter-spacing:1.5px;font-size:12px}.week-nav{flex-wrap:wrap;gap:8px;display:flex}.calendar-help{margin:18px 0 14px}.calendar-scroll{border:1px solid var(--line);isolation:isolate;overscroll-behavior-x:contain;border-radius:10px;max-height:680px;overflow:auto}.week-calendar{border-collapse:separate;border-spacing:0;table-layout:fixed;font-variant-numeric:tabular-nums;width:100%;min-width:850px}.week-calendar th,.week-calendar td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);vertical-align:top;padding:0}.week-calendar tr>:last-child{border-right:0}.week-calendar tbody tr:last-child>*{border-bottom:0}.week-calendar thead th{z-index:2;background:var(--white);height:94px;position:sticky;top:0}.week-calendar thead button{background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:4px;width:100%;height:94px;padding:12px 4px;display:flex}.week-calendar thead button>span{font-size:14px}.week-calendar thead strong{font-size:23px}.week-calendar thead small{color:var(--blue);font-size:12px}.week-calendar .time-axis{z-index:1;background:var(--white);text-align:center;width:64px;padding:14px 4px;position:sticky;left:0}.week-calendar thead .time-axis{z-index:3;padding-top:34px;font-size:14px}.time-axis strong{font-size:14px}.time-axis>span{color:var(--muted);margin-top:6px;font-size:12px;font-weight:400;display:block}.week-calendar td button{text-align:left;width:100%;min-height:78px;color:var(--ink);background:0 0;border:0;flex-direction:column;justify-content:center;align-items:flex-start;gap:8px;padding:12px 8px;display:flex}.week-calendar td strong{overflow-wrap:anywhere;max-width:100%;font-size:14px;line-height:1.5}.week-calendar td span{white-space:nowrap;font-size:12px}.week-calendar .booked{background:var(--lime)}.week-calendar .closed,.week-calendar .past{background:var(--soft)}.week-calendar .closed strong,.week-calendar .past strong,.week-calendar .open strong{color:var(--muted);font-weight:400}.week-calendar th.selected-day{background:var(--ink);color:var(--white)}.week-calendar th.selected-day button,.week-calendar th.selected-day small{color:var(--white)}.week-calendar td.selected-day{box-shadow:inset 2px 0 var(--ink),inset -2px 0 var(--ink)}.week-calendar button:not(:disabled):hover{box-shadow:inset 0 0 0 2px var(--ink)}.calendar-key{color:var(--muted);flex-wrap:wrap;gap:18px;margin-top:16px;font-size:14px;display:flex}.calendar-key>span{align-items:center;gap:6px;display:flex}.calendar-key i{border:1px solid var(--line);border-radius:3px;width:12px;height:12px;display:inline-block}.booked-key{background:var(--lime)}.open-key{background:var(--white)}.closed-key{background:var(--soft)}@media (max-width:700px){.student-nav{margin:16px 0 0}.week-heading{flex-direction:column;align-items:flex-start;gap:16px}.week-nav{grid-template-columns:repeat(3,minmax(0,1fr));width:100%;display:grid}.week-nav button{padding:8px 4px}.calendar-scroll{max-height:560px}.week-calendar{min-width:0}.week-calendar td button{min-height:78px}.calendar-key{gap:12px;font-size:12px}.week-heading h2{font-size:24px}.admin-date{margin-top:22px}}@media (min-width:901px){.admin-shell{max-width:1200px;padding-top:20px}.admin-header{margin-bottom:16px}.admin-header h1{font-size:28px}.admin-header .admin-brand{margin-bottom:2px}.week-panel{margin-top:0;padding:16px 20px}.week-heading{gap:16px}.week-heading .admin-brand{display:none}.week-heading h2{margin-bottom:2px;font-size:22px}.calendar-help{margin:8px 0;font-size:14px}.calendar-scroll{max-height:none;overflow:visible}.week-calendar{min-width:0}.week-calendar thead th{height:44px;position:static}.week-calendar thead button{flex-flow:wrap;gap:0 6px;height:44px;padding:3px 2px}.week-calendar thead button>span{font-size:14px}.week-calendar thead strong{font-size:18px}.week-calendar thead small{font-size:12px}.week-calendar .time-axis{width:58px;padding:2px;position:static}.week-calendar thead .time-axis{padding:10px 2px}.week-calendar tbody .time-axis strong{line-height:16px;display:block}.time-axis>span{margin-top:0;line-height:12px}.week-calendar td button{gap:0;height:clamp(34px,8.33333dvh - 27.5px,46px);min-height:0;padding:2px 6px}.week-calendar td strong{white-space:nowrap;text-overflow:ellipsis;width:100%;font-size:14px;line-height:16px;display:block;overflow:hidden}.week-calendar td span{font-size:12px;line-height:12px}.calendar-key{margin-top:8px}}.week-day-mobile{display:none}@media (max-width:900px){.admin-shell{padding-inline:12px}.week-panel{padding:16px 10px}.week-heading{flex-direction:column;align-items:flex-start;gap:12px}.week-heading .admin-brand{display:none}.week-heading h2{margin-bottom:4px;font-size:22px}.week-nav{grid-template-columns:repeat(3,minmax(0,1fr));width:100%;display:grid}.week-nav button{padding:8px 4px}.calendar-help{margin:12px 0;font-size:14px}.calendar-scroll{overscroll-behavior:auto;width:100%;max-height:none;overflow:visible}.week-calendar{width:100%;min-width:0}.week-calendar thead th{height:62px;position:static}.week-calendar thead button{gap:1px;height:62px;padding:4px 0}.week-calendar thead button>span{white-space:nowrap;font-size:14px;line-height:18px}.week-calendar thead strong{font-size:18px;line-height:20px}.week-calendar thead small{font-size:12px;line-height:14px}.week-day-prefix,.week-month{display:none}.week-day-mobile{display:inline}.week-calendar .time-axis{width:34px;padding:3px 0;position:static}.week-calendar thead .time-axis{padding:22px 0 0;font-size:12px}.week-calendar tbody .time-axis strong{font-size:12px;line-height:16px;display:block}.week-calendar .time-axis>span{margin-top:1px;font-size:12px;line-height:14px}.week-calendar td button{text-align:center;align-items:center;gap:0;min-width:0;height:44px;min-height:44px;padding:2px}.week-calendar td strong{-webkit-line-clamp:2;overflow-wrap:anywhere;white-space:normal;-webkit-box-orient:vertical;width:100%;max-width:100%;font-size:14px;line-height:18px;display:-webkit-box;overflow:hidden}.week-calendar td button>span{display:none}.calendar-key{gap:12px;margin-top:12px;font-size:14px;line-height:20px}}
