:root{--c-primary:#2f5fe8;--c-primary-strong:#1f47c2;--c-primary-soft:#e8eefc;--c-bg:#f4f6fa;--c-surface:#ffffff;--c-border:#dde3ee;--c-text:#1a2233;--c-text-2:#5a6579;--c-text-3:#8b93a7;--c-success:#16803c;--c-success-soft:#e2f5e9;--c-warn:#a05e03;--c-warn-soft:#fdf0dc;--c-danger:#c2313a;--c-danger-soft:#fbe7e8;--c-info-soft:#e8f0fd;--c-info:#1f47c2;--radius:12px;--radius-sm:8px;--shadow:0 1px 3px rgba(20,30,60,0.08),0 4px 14px rgba(20,30,60,0.06);--shadow-lg:0 8px 30px rgba(20,30,60,0.18);--font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:var(--font);background:var(--c-bg);color:var(--c-text);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--c-primary);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{margin:0 0 8px;line-height:1.25}h1{font-size:22px}h2{font-size:18px}h3{font-size:16px}p{margin:0 0 10px}.app{display:flex;min-height:100vh}.sidebar{display:none;width:232px;background:var(--c-surface);border-right:1px solid var(--c-border);flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh;padding:18px 14px;gap:4px}.sidebar .brand{font-weight:700;font-size:17px;padding:4px 10px 16px;color:var(--c-primary)}.sidebar .brand small{display:block;font-weight:500;font-size:11.5px;color:var(--c-text-3)}.navlink{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-sm);color:var(--c-text-2);font-weight:500;font-size:14.5px}.navlink:hover{background:var(--c-bg);text-decoration:none}.navlink.active{background:var(--c-primary-soft);color:var(--c-primary-strong)}.sidebar .spacer{flex:1 1}.sidebar .foot{padding:10px 12px;font-size:12.5px;color:var(--c-text-3);border-top:1px solid var(--c-border)}.main{flex:1 1;min-width:0;padding:16px 14px 84px;max-width:1180px;margin:0 auto;width:100%}.topbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}.bottomnav{position:fixed;bottom:0;left:0;right:0;display:flex;background:var(--c-surface);border-top:1px solid var(--c-border);z-index:40}.bottomnav a{flex:1 1;text-align:center;padding:8px 2px 10px;font-size:10.5px;color:var(--c-text-3);font-weight:600}.bottomnav a .ic{display:block;font-size:19px;margin-bottom:2px}.bottomnav a.active{color:var(--c-primary-strong)}@media (min-width:900px){.sidebar{display:flex}.bottomnav{display:none}.main{padding:24px 28px 40px}}.card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:14px}.card h2,.card-title{margin-bottom:12px}.card-title{display:flex;align-items:center;justify-content:space-between;gap:8px}.card-title h2{margin:0}.grid{display:grid;grid-gap:12px;gap:12px}@media (min-width:700px){.grid.c2{grid-template-columns:1fr 1fr}.grid.c3{grid-template-columns:repeat(3,1fr)}.grid.c4{grid-template-columns:repeat(4,1fr)}}.stat{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius);padding:14px}.stat .n{font-size:26px;font-weight:700}.stat .l{font-size:12.5px;color:var(--c-text-2);font-weight:500}.field{margin-bottom:12px}.field label{display:block;font-size:13px;font-weight:600;color:var(--c-text-2);margin-bottom:5px}.field .req{color:var(--c-danger)}.field input,.field select,.field textarea{width:100%;padding:9px 12px;border:1px solid var(--c-border);border-radius:var(--radius-sm);font-size:15px;font-family:inherit;background:var(--c-surface);color:var(--c-text)}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid var(--c-primary-soft);border-color:var(--c-primary)}.field textarea{resize:vertical;min-height:70px}.field .hint{font-size:12px;color:var(--c-text-3);margin-top:4px}.form-row{display:grid;grid-gap:12px;gap:12px}@media (min-width:640px){.form-row.r2{grid-template-columns:1fr 1fr}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1px solid transparent;border-radius:var(--radius-sm);padding:9px 16px;font-size:14.5px;font-weight:600;cursor:pointer;font-family:inherit;text-decoration:none;transition:background .15s}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background:var(--c-primary);color:#fff}.btn.primary:hover:not(:disabled){background:var(--c-primary-strong)}.btn.secondary{background:var(--c-surface);border-color:var(--c-border);color:var(--c-text)}.btn.secondary:hover:not(:disabled){background:var(--c-bg)}.btn.ghost{background:transparent;color:var(--c-primary)}.btn.danger{background:var(--c-danger);color:#fff}.btn.dangerSoft{background:var(--c-danger-soft);color:var(--c-danger)}.btn.success{background:var(--c-success);color:#fff}.btn.sm{padding:6px 11px;font-size:13px}.btn.block{width:100%}.btnRow{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}.badge.pending{background:var(--c-warn-soft);color:var(--c-warn)}.badge.confirmed{background:var(--c-success-soft);color:var(--c-success)}.badge.completed{background:var(--c-info-soft);color:var(--c-info)}.badge.cancelled,.badge.declined{background:#eef0f4;color:var(--c-text-3)}.badge.no_show{background:var(--c-danger-soft);color:var(--c-danger)}.badge.neutral{background:#eef0f4;color:var(--c-text-2)}.badge.on{background:var(--c-success-soft);color:var(--c-success)}.badge.off{background:#eef0f4;color:var(--c-text-3)}.listrow{display:flex;align-items:center;gap:10px;padding:11px 4px;border-bottom:1px solid var(--c-border);cursor:pointer;border-radius:6px}.listrow:last-child{border-bottom:none}.listrow:hover{background:var(--c-bg)}.listrow .grow{flex:1 1;min-width:0}.listrow .t{font-weight:600}.listrow .s{font-size:12.5px;color:var(--c-text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty{color:var(--c-text-3);text-align:center;padding:22px 10px;font-size:14px}.modalOverlay{position:fixed;inset:0;background:rgba(15,22,40,.45);display:flex;align-items:flex-end;justify-content:center;z-index:60;padding:0}.modal{background:var(--c-surface);width:100%;max-width:560px;border-radius:16px 16px 0 0;padding:18px;max-height:92vh;overflow-y:auto}@media (min-width:640px){.modalOverlay{align-items:center;padding:20px}.modal{border-radius:var(--radius)}}.modalHead{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.modalHead h3{margin:0}.iconBtn{background:none;border:none;font-size:20px;cursor:pointer;color:var(--c-text-2);padding:4px 8px;border-radius:6px}.iconBtn:hover{background:var(--c-bg)}.cal{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius);overflow:hidden}.calHead{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--c-border);flex-wrap:wrap}.calTitle{font-weight:700;font-size:16px}.calNav{display:flex;gap:6px}.viewTabs{display:inline-flex;background:var(--c-bg);border-radius:999px;padding:3px}.viewTabs button{border:none;background:transparent;padding:6px 14px;border-radius:999px;font-weight:600;font-size:13px;cursor:pointer;color:var(--c-text-2)}.viewTabs button.active{background:var(--c-surface);color:var(--c-primary-strong);box-shadow:var(--shadow)}.weekGrid{display:grid;grid-template-columns:52px 1fr}.weekTimes{border-right:1px solid var(--c-border)}.weekTimes .hcell{height:44px;font-size:11px;color:var(--c-text-3);text-align:right;padding-right:6px;position:relative;top:-7px}.weekCols{display:grid;min-width:0}.weekCols .daycol{border-right:1px solid var(--c-border);min-width:0;position:relative}.weekCols .daycol:last-child{border-right:none}.daylabel{text-align:center;font-size:12px;font-weight:600;padding:7px 2px;border-bottom:1px solid var(--c-border);color:var(--c-text-2)}.daylabel.today{color:var(--c-primary-strong);background:var(--c-primary-soft);border-radius:8px 8px 0 0}.hourcells{position:relative}.hcell{height:44px;border-bottom:1px dashed var(--c-border)}.apptChip{position:absolute;left:2px;right:2px;border-radius:6px;padding:2px 5px;font-size:11px;font-weight:600;color:#fff;overflow:hidden;cursor:pointer;border-left-width:3px;box-shadow:var(--shadow)}.apptChip .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.apptChip.pending{background:var(--c-warn)}.apptChip.confirmed{background:var(--c-success)}.apptChip.completed{background:var(--c-info)}.apptChip.cancelled,.apptChip.declined,.apptChip.no_show{background:var(--c-text-3)}.monthGrid{display:grid;grid-template-columns:repeat(7,1fr)}.monthDow{text-align:center;font-size:11.5px;font-weight:700;color:var(--c-text-3);padding:8px 0}.monthCell,.monthDow{border-bottom:1px solid var(--c-border)}.monthCell{min-height:74px;border-right:1px solid var(--c-border);padding:4px 5px;font-size:12px;cursor:pointer}.monthCell:last-child{border-right:none}.monthCell:hover{background:var(--c-bg)}.monthCell .d{font-weight:600;font-size:12.5px}.monthCell.other{color:var(--c-text-3);background:#fafbfd}.monthCell.today .d{background:var(--c-primary);color:#fff;border-radius:999px;display:inline-flex;width:22px;height:22px;align-items:center;justify-content:center}.monthCell .dotRow{display:flex;gap:2px;margin-top:3px;flex-wrap:wrap}.monthCell .dot{width:7px;height:7px;border-radius:99px}@media (max-width:700px){.weekGrid{font-size:11px}.weekGrid .weekTimes .hcell{font-size:9.5px}.monthCell{min-height:52px;padding:2px 3px}.monthCell .dot{width:5px;height:5px}}.slotGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(86px,1fr));grid-gap:8px;gap:8px}.slotBtn{border:1px solid var(--c-border);background:var(--c-surface);border-radius:var(--radius-sm);padding:9px 4px;font-size:14px;font-weight:600;cursor:pointer;font-family:inherit}.slotBtn.selected,.slotBtn:hover:not(:disabled){border-color:var(--c-primary)}.slotBtn.selected{background:var(--c-primary);color:#fff}.slotBtn:disabled{color:var(--c-text-3);background:var(--c-bg);cursor:not-allowed;text-decoration:line-through}.dateStrip{display:flex;gap:8px;overflow-x:auto;padding-bottom:6px}.dateChip{flex:0 0 auto;border:1px solid var(--c-border);background:var(--c-surface);border-radius:var(--radius-sm);padding:8px 12px;text-align:center;cursor:pointer;min-width:64px}.dateChip .dw{font-size:11px;color:var(--c-text-3);font-weight:600}.dateChip .dn{font-size:16px;font-weight:700}.dateChip.selected{border-color:var(--c-primary);background:var(--c-primary-soft)}.dateChip.selected .dw{color:var(--c-primary-strong)}.dateChip.dim{opacity:.45}.publicWrap{max-width:620px;margin:0 auto;padding:18px 14px 60px}.publicHead{text-align:center;margin-bottom:18px}.publicHead .logo{width:64px;height:64px;border-radius:16px;object-fit:cover;margin-bottom:8px}.publicHead h1{font-size:21px}.publicHead .tag{color:var(--c-text-2)}.steps{display:flex;align-items:center;gap:6px;margin-bottom:14px}.steps .st{flex:1 1;height:5px;border-radius:99px;background:var(--c-border)}.steps .st.done{background:var(--c-primary)}.serviceCard{border:1px solid var(--c-border);border-radius:var(--radius);padding:14px;cursor:pointer;background:var(--c-surface);margin-bottom:10px}.serviceCard.selected,.serviceCard:hover{border-color:var(--c-primary)}.serviceCard.selected{background:var(--c-primary-soft)}.serviceCard .nm{font-weight:700}.serviceCard .meta{font-size:12.5px;color:var(--c-text-2);margin-top:3px}.successBox{text-align:center;padding:30px 14px}.successBox .icn{font-size:52px;margin-bottom:8px}.alert{border-radius:var(--radius-sm);padding:10px 13px;font-size:13.5px;font-weight:500;margin-bottom:12px;border:1px solid transparent}.alert.error{background:var(--c-danger-soft);color:var(--c-danger);border-color:#f3c8cb}.alert.success{background:var(--c-success-soft);color:var(--c-success);border-color:#bfe8cc}.alert.warn{background:var(--c-warn-soft);color:var(--c-warn);border-color:#f1dcb8}.alert.info{background:var(--c-info-soft);color:var(--c-info);border-color:#c6d8f6}.toastWrap{position:fixed;bottom:78px;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:8px;z-index:100;pointer-events:none}@media (min-width:900px){.toastWrap{bottom:24px}}.toast{background:var(--c-text);color:#fff;padding:10px 18px;border-radius:999px;font-size:13.5px;font-weight:600;box-shadow:var(--shadow-lg);max-width:90%}.toast.error{background:var(--c-danger)}.toast.success{background:var(--c-success)}.spinner{width:22px;height:22px;border-radius:50%;border:3px solid var(--c-border);border-top-color:var(--c-primary);animation:spin .8s linear infinite;margin:12px auto}@keyframes spin{to{transform:rotate(1turn)}}.center{text-align:center}.tabRow{display:flex;gap:4px;overflow-x:auto;border-bottom:1px solid var(--c-border);margin-bottom:14px;padding-bottom:0}.tabRow button{background:none;padding:9px 14px;font-size:14px;font-weight:600;color:var(--c-text-2);cursor:pointer;border:none;border-bottom:2.5px solid transparent;white-space:nowrap}.tabRow button.active{color:var(--c-primary-strong);border-bottom-color:var(--c-primary)}.hoursRow{display:grid;grid-template-columns:110px 1fr 1fr 40px;grid-gap:8px;gap:8px;align-items:center;padding:7px 0;border-bottom:1px solid var(--c-border)}.hoursRow:last-child{border-bottom:none}.hoursRow .dw{font-weight:600;font-size:13.5px}.kv{display:flex;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px solid var(--c-border);font-size:14px}.kv:last-child{border-bottom:none}.kv .k{color:var(--c-text-2)}.kv .v{font-weight:600;text-align:right}.table{width:100%;border-collapse:collapse;font-size:13.5px}.table th{text-align:left;color:var(--c-text-2);font-size:12px;padding:7px 8px}.table td,.table th{border-bottom:1px solid var(--c-border)}.table td{padding:8px}.table tr:last-child td{border-bottom:none}.authWrap{max-width:420px;margin:6vh auto;padding:0 14px}.authCard{background:var(--c-surface);border:1px solid var(--c-border);border-radius:16px;padding:26px 22px;box-shadow:var(--shadow)}.brandBig{text-align:center;font-size:24px;font-weight:800;color:var(--c-primary);margin-bottom:4px}.brandSub{text-align:center;color:var(--c-text-2);font-size:13.5px;margin-bottom:18px}.chipRow{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}.chip{border:1px solid var(--c-border);background:var(--c-surface);color:var(--c-text-2);border-radius:999px;padding:5px 13px;font-size:13px;font-weight:600;cursor:pointer}.chip.active{background:var(--c-primary-soft);border-color:var(--c-primary);color:var(--c-primary-strong)}.legal{max-width:720px;margin:0 auto;padding:24px 16px 60px}.legal h1{margin-bottom:18px}.legal h2{margin-top:22px}.legal li,.legal p{color:var(--c-text);font-size:14.5px}.legal ul{padding-left:20px}.footerLinks{text-align:center;padding:18px;font-size:12.5px;color:var(--c-text-3)}.footerLinks a{color:var(--c-text-2);margin:0 8px}