:root{--ink: #30204F;--muted: #89829F;--purple: #8161DF;--soft: #F1ECFF;--bg: #FCFBFF;--line: #E7E1F4;--beige: #F4F0E8;--danger: #B0578D}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:PingFang SC,Noto Sans SC,system-ui,sans-serif;font-size:14px}h1,h2,h3,p{margin:0}button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}input,select,textarea{font:inherit;color:inherit;border:1px solid var(--line);border-radius:8px;padding:8px 12px;background:#fff;outline:none}input:focus,select:focus,textarea:focus{border-color:var(--purple)}textarea{resize:vertical}.layout{display:flex;min-height:100vh}.side{width:220px;flex-shrink:0;background:#fff;border-right:1px solid var(--line);padding:24px 16px;display:flex;flex-direction:column}.side .logo{font-size:20px;font-weight:800;color:var(--purple)}.side .logo-sub{font-size:11px;color:var(--muted);margin:4px 0 24px}.nav-item{display:flex;align-items:center;gap:10px;padding:11px 14px;border-radius:10px;color:var(--muted);margin-bottom:4px;text-align:left;width:100%}.nav-item:hover{background:var(--soft)}.nav-item.on{background:var(--soft);color:var(--purple);font-weight:600}.side .me{margin-top:auto;border-top:1px solid var(--line);padding-top:16px;display:flex;align-items:center;gap:10px}.avatar-dot{width:34px;height:34px;border-radius:50%;background:var(--purple);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}.me-name{font-size:13px;font-weight:600}.me-role{font-size:11px;color:var(--muted)}.main{flex:1;padding:28px 36px;min-width:0}.page-eyebrow{font-size:11px;letter-spacing:2px;color:#9b7bc5}.page-title{font-size:26px;font-weight:800;margin-top:8px}.page-sub{color:var(--muted);margin-top:6px;font-size:13px}.panel{background:#fff;border:1px solid var(--line);border-radius:14px;padding:22px;margin-top:22px}.panel-title{font-size:16px;font-weight:700}.panel-sub{font-size:12px;color:var(--muted);margin-top:4px}.row{display:flex;align-items:center;gap:12px}.between{display:flex;align-items:center;justify-content:space-between}.mt{margin-top:16px}.btn{background:var(--purple);color:#fff;border-radius:10px;padding:9px 18px;font-size:13px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{border:1px solid var(--purple);color:var(--purple);border-radius:10px;padding:8px 16px;font-size:13px}.btn-text{color:var(--purple);font-size:13px;padding:4px 8px}.btn-danger-text{color:var(--danger);font-size:13px;padding:4px 8px}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:22px}.stat-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:20px}.stat-num{font-size:30px;font-weight:800;color:#7453b2}.stat-label{font-size:12px;color:var(--muted);margin-top:6px}table{width:100%;border-collapse:collapse}th{text-align:left;font-size:12px;color:var(--muted);font-weight:500;padding:10px 12px;border-bottom:1px solid var(--line)}td{padding:12px;border-bottom:1px solid var(--line);font-size:13px;vertical-align:middle}tr:last-child td{border-bottom:0}.tag{display:inline-block;font-size:11px;border-radius:999px;padding:3px 12px}.tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid #EAE6F5}.tabs button{padding:10px 18px;font-size:13px;color:var(--muted);border-bottom:2px solid transparent}.tabs button.on{color:var(--purple);border-bottom-color:var(--purple);font-weight:600}.tag.purple{background:var(--soft);color:var(--purple)}.tag.green{background:#e9f4ec;color:#4a7c59}.tag.pink{background:#f9eaf3;color:var(--danger)}.tag.grey{background:#f2f0f7;color:var(--muted)}.tag.beige{background:var(--beige);color:#a3875f}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#30204f59;display:flex;align-items:center;justify-content:center;z-index:50}.modal{background:#fff;border-radius:16px;padding:26px;width:520px;max-width:92vw;max-height:86vh;overflow:auto}.modal-title{font-size:17px;font-weight:700;margin-bottom:18px}.form-row{margin-bottom:14px}.form-label{font-size:12px;color:var(--muted);margin-bottom:6px;display:block}.form-row input,.form-row select,.form-row textarea{width:100%}.form-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.error-text{color:var(--danger);font-size:12px;margin-top:8px}.cal-head{display:flex;align-items:center;gap:14px;margin:18px 0}.cal-range{font-size:15px;font-weight:700}.cal-grid{display:grid;grid-template-columns:70px repeat(7,1fr);border:1px solid var(--line);border-radius:12px;overflow:hidden}.cal-cell{border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:130px;padding:8px;font-size:12px;background:#fff}.cal-cell:nth-child(8n){border-right:0}.cal-cell.head{min-height:0;background:#fbfafe;font-weight:700;text-align:center;padding:12px 8px}.cal-cell.head .sub{font-weight:400;color:var(--muted);font-size:11px;margin-top:2px}.cal-cell.today{background:#f7f4ff}.cal-cell.slot{color:var(--muted);background:#fbfafe}.slot-card{background:var(--soft);border-radius:8px;padding:8px;margin-bottom:6px;cursor:pointer;border:1px solid #E6DCF7}.slot-card.cancelled{opacity:.5;text-decoration:line-through}.slot-card .t{font-weight:700;color:#503469}.slot-card .m{color:var(--muted);margin-top:2px}.add-slot{color:#c4bad9;text-align:center;padding:6px;border:1px dashed var(--line);border-radius:8px;cursor:pointer}.add-slot:hover{color:var(--purple);border-color:var(--purple)}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center}.login-box{width:360px;background:#fff;border:1px solid var(--line);border-radius:16px;padding:36px}.toast{position:fixed;top:20px;left:50%;transform:translate(-50%);background:var(--ink);color:#fff;border-radius:10px;padding:10px 22px;font-size:13px;z-index:99}.pager{display:flex;align-items:center;gap:14px;justify-content:flex-end;margin-top:14px;font-size:12px;color:var(--muted)}.empty{text-align:center;color:var(--muted);padding:40px 0;font-size:13px}.crop-stage{position:relative;overflow:hidden;background:#2e2440;border-radius:12px;touch-action:none;cursor:grab}.crop-stage:active{cursor:grabbing}.crop-stage img{position:absolute;left:0;top:0;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;pointer-events:none;max-width:none}.crop-zoom{display:flex;align-items:center;gap:10px;margin-top:12px;width:360px;max-width:100%}.crop-zoom input[type=range]{flex:1;accent-color:var(--purple)}
