@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700;800&display=swap');
:root{--green:#254d42;--muted:#858b84;--ink:#26372f;--border:#e5e7df;--bg:#f7f8f3;--white:#fff;--light:#edf2eb;--gold:#bd9254}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:'Noto Sans KR',sans-serif;font-size:16.1px}button,input,select,textarea{font:inherit}button,a,input,select,textarea{outline-offset:4px}button{cursor:pointer}button{border:0;background:none;color:inherit}a{color:inherit;text-decoration:none}.sidebar{width:246px;background:#fff;height:100dvh;position:fixed;display:flex;flex-direction:column;padding:37px 22px 20px;border-right:1px solid var(--border);z-index:5}.brand{display:flex;gap:13px;align-items:center;padding:0 14px;font-size:28.7px;font-weight:700;letter-spacing:2px}.brandmark{font-family:Georgia,serif;font-size:48.3px;font-style:italic;letter-spacing:-4px;color:var(--green)}small{display:block;font-size:12.6px;font-weight:400;color:var(--muted);letter-spacing:0}.brand small{font-size:9.2px;letter-spacing:2px;margin-top:3px}.workspace{margin:35px 0 24px;background:#f7f8f3;border:1px solid var(--border);border-radius:12px;padding:13px 10px;display:flex;align-items:center;gap:9px;font-weight:600;font-size:13.8px}.workspace small{font-size:9.2px;margin-top:5px}.studio-avatar{display:grid;place-items:center;width:33px;height:33px;background:#e9eee5;border-radius:10px;color:var(--green);flex-shrink:0}.sidebar nav{display:grid;gap:8px}.sidebar nav button{text-align:left;padding:14px;border-radius:8px;font-weight:500;color:#7b837c;display:flex;align-items:center;gap:12px}.sidebar nav button span{font-size:25.3px;width:24px;text-align:center}.sidebar nav button.active{background:var(--green);color:#fff}.sidebar nav button:hover:not(.active){background:var(--bg)}.sidebar-bottom{margin-top:auto;font-size:12.6px;color:#67766c;padding:20px 10px 0}.live-dot{display:inline-block;width:6px;height:6px;background:#72947d;border-radius:50%;margin-right:7px}.version{float:right;background:#f0f2eb;border-radius:4px;padding:1px 6px}.sidebar-bottom p{font-size:11.5px;line-height:1.8;color:#93998f}.owner{border-top:1px solid var(--border);margin-top:22px;padding-top:18px;display:flex;align-items:center;gap:12px;font-size:13.8px}.owner small{margin-top:4px}.main-shell{margin-left:246px}header{height:80px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 42px;background:#ffffff8c}.breadcrumb{font-size:11.5px;letter-spacing:1.4px;color:#929a90}.breadcrumb span{margin:0 14px;color:#c2c7bd}.breadcrumb b{font-size:13.8px;color:#5f6d62;letter-spacing:0;font-weight:500}.header-actions{display:flex;align-items:center;gap:19px}.storage-indicator{font-size:11.5px;color:#718575}.avatar{height:33px;width:33px;border-radius:50%;background:#e9eee5;font-size:13.8px;font-weight:600}main{padding:36px 42px;min-height:calc(100dvh - 145px);max-width:1600px;margin:auto}h1{font-size:31.1px;letter-spacing:-1.2px;font-weight:600;margin:4px 0 8px}h2{font-size:18.4px;margin:0;font-weight:600;letter-spacing:-.4px}h3{font-size:16.1px;margin:0 0 10px}.eyebrow{font-size:10.4px;letter-spacing:2px;color:var(--gold);font-weight:600}.page-top{display:flex;justify-content:space-between;align-items:center;gap:18px;margin-bottom:28px}.subtitle{font-size:13.8px;color:var(--muted);margin:0;line-height:1.8}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--border);border-radius:7px;padding:10px 15px;background:white;font-size:13.8px;font-weight:500;min-height:39px}.btn.primary{background:var(--green);border-color:var(--green);color:#fff}.btn.danger{color:#ac5348}.btn:hover{filter:brightness(.97)}.btn:disabled{opacity:.45;cursor:wait}.icon-btn{font-size:21.8px;padding:5px 10px}.notice{padding:11px 15px;border:1px solid #e4e5d7;background:#f2f3e9;border-radius:8px;font-size:12.6px;color:#788169;line-height:1.8;margin-bottom:24px}.notice button{text-decoration:underline;float:right}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:17px;margin-bottom:27px}.stat{background:#fff;border:1px solid var(--border);border-radius:12px;padding:21px 22px}.stat-top{display:flex;justify-content:space-between;color:#7f897e;font-size:12.6px}.stat-icon{font-size:19.5px;color:#718875}.stat strong{display:block;font-size:33.3px;font-weight:500;letter-spacing:-1px;margin:10px 0}.stat strong span{font-size:13.8px;margin-left:4px;color:#7e887c;font-weight:400}.stat small{font-size:11.5px}.stat.accent{background:var(--green);color:white;border-color:var(--green)}.stat.accent .stat-top,.stat.accent small,.stat.accent strong span{color:#c0d1c5}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(270px,1fr);gap:22px}.panel{background:#fff;border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:22px}.panel-head{display:flex;justify-content:space-between;align-items:center;padding:22px 23px;border-bottom:1px solid #eff0eb;gap:10px}.panel-head small{margin-top:6px;font-size:11.5px}.text-btn{font-size:12.6px;color:#82927d;white-space:nowrap}.appointments{padding:0 23px}.appointment{display:flex;gap:18px;padding:19px 0;border-bottom:1px solid #eff0eb;align-items:center;cursor:pointer}.appointment:last-child{border:0}.appointment:hover .customer-name{color:#668565}.time{font-size:16.1px;font-weight:500;min-width:48px}.time small{font-size:10.4px;margin-top:4px}.appt-line{height:37px;width:3px;background:#88a78b;border-radius:3px}.appt-main{flex:1;min-width:0}.customer-name{font-weight:600;font-size:15px}.appt-main p{color:#899184;font-size:12.6px;margin:5px 0 0}.pill{display:inline-block;font-size:10.4px;padding:4px 8px;border-radius:5px;background:#f0f3ec;color:#748466;white-space:nowrap}.pill.tattoo{background:#edeaf4;color:#8b7c9e}.pill.pmu{background:#f7ede5;color:#b38a6b}.pill.smp{background:#e9f1eb;color:#5d856c}.pill.cancel{background:#f6e9e6;color:#b97a70}.pill.done{background:#e8efea;color:#5b7c67}.pill.wait{background:#f7f2e6;color:#a6915a}.recent-list{padding:0 22px}.recent-row{display:flex;align-items:center;gap:12px;padding:16px 0;border-bottom:1px solid #eff0eb;cursor:pointer}.recent-row:last-child{border:0}.initial{height:36px;width:36px;background:#f0f1e9;border-radius:50%;display:grid;place-items:center;color:#8a927c;font-size:13.8px;flex-shrink:0}.recent-row .details{flex:1}.recent-row strong{font-size:13.8px;font-weight:500}.recent-row small{font-size:11.5px;margin-top:5px}.recent-row .date{font-size:11.5px;color:#929b8c}.quick-card{padding:23px;background:#eaf0e5;border:1px solid #dfe7d8;border-radius:12px;position:relative;overflow:hidden}.quick-card .decoration{position:absolute;right:18px;bottom:5px;color:#cddbc8;font-family:Georgia,serif;font-size:95px;font-style:italic;line-height:1}.quick-card h3{font-size:17.3px;font-weight:500}.quick-card p{font-size:12.6px;color:#819078;line-height:1.9;position:relative}.quick-card button{position:relative;margin-top:5px;border-color:#d4dfcc;background:#f8faf6}.section-note{font-size:12.6px;color:#9aa18f;line-height:1.8}.searchbar{display:flex;align-items:center;background:#fff;border:1px solid var(--border);border-radius:8px;padding:4px 13px;gap:10px;max-width:420px;width:100%}.searchbar input{border:0!important;box-shadow:none;background:transparent;padding:9px 0!important;width:100%}.toolbar{display:flex;gap:12px;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap}.toolbar-left{display:flex;gap:9px;align-items:center;flex-wrap:wrap}.tabs{display:flex;gap:4px;background:#ebeee6;padding:4px;border-radius:8px}.tabs button{padding:7px 13px;font-size:12.6px;border-radius:5px}.tabs button.selected{background:#fff;box-shadow:0 1px 4px #00000008;color:var(--green)}input:not([type=file]):not([type=checkbox]),select,textarea{border:1px solid #dfe4d9;border-radius:7px;padding:10px 11px;background:#fff;color:var(--ink);min-width:0;max-width:100%}input:focus,textarea:focus,select:focus{border-color:#72947d!important}textarea{resize:vertical;min-height:86px}table{width:100%;border-collapse:collapse;text-align:left}th{background:#f9faf6;color:#929a8b;font-size:11.5px;font-weight:500;padding:14px 19px}td{padding:18px 19px;border-top:1px solid #eff0eb;font-size:13.8px}tbody tr.clickable{cursor:pointer}tbody tr.clickable:hover{background:#fafbf7}.table-wrap{overflow:auto}.muted{color:var(--muted);font-size:12.6px}.customer-cell{display:flex;align-items:center;gap:11px}.empty{padding:55px 20px;text-align:center;color:#97a08f;font-size:13.8px;line-height:2}.empty strong{display:block;font-size:17.3px;color:#677b66;font-weight:500}.service-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.service-card{background:white;border:1px solid var(--border);border-radius:12px;overflow:hidden;align-self:start}.service-title{padding:23px;background:#f0f3eb;display:flex;align-items:center;justify-content:space-between}.service-title.pmu{background:#f6efe7}.service-title.tattoo{background:#efedf4}.service-title .eyebrow{font-size:9.2px;color:#8a9684;margin-bottom:6px}.service-item{padding:19px 20px;border-bottom:1px solid #eff0eb;display:flex;align-items:center;justify-content:space-between;gap:9px}.service-item b{font-size:13.8px;font-weight:500}.service-item small{margin-top:7px;font-size:11.5px}.service-item button{font-size:12.6px;color:#8b987e}.service-item .price{font-size:13.8px;font-weight:500;margin-bottom:5px;text-align:right}.add-service{padding:16px;width:100%;text-align:center;font-size:12.6px;color:#7f9174}.calendar-shell{background:#fff;border:1px solid var(--border);border-radius:12px;overflow:hidden}.calendar-controls{display:flex;align-items:center;justify-content:space-between;padding:21px;gap:10px;flex-wrap:wrap}.calendar-controls strong{font-size:20.7px;font-weight:500}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.day-label{padding:12px;text-align:center;border-top:1px solid var(--border);font-size:12.6px;color:#899281}.day-label:first-child{color:#bd8c7b}.calendar-day{min-height:125px;padding:8px;border-top:1px solid var(--border);border-right:1px solid #eef0e9;cursor:pointer}.calendar-day:hover{background:#f9fbf7}.calendar-day.outside{background:#fafbf8;color:#bdc4b7}.day-num{display:grid;place-items:center;width:25px;height:25px;font-size:12.6px;margin-bottom:6px}.calendar-day.today .day-num{background:var(--green);color:#fff;border-radius:50%}.calendar-event{display:block;width:100%;font-size:10.4px;padding:5px 6px;text-align:left;background:#edf2e9;border-radius:4px;margin:3px 0;color:#5c795b;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.calendar-event.done{opacity:.7}.calendar-event.cancel{background:#f4e9e6;text-decoration:line-through;color:#ac8a80}.detail-header{display:flex;align-items:center;gap:18px;padding:25px}.detail-header .initial{width:58px;height:58px;font-size:24.2px}.detail-header h2{font-size:25.3px;margin-bottom:8px}.detail-header .actions{margin-left:auto}.detail-summary{display:flex;gap:30px;padding:0 25px 23px;flex-wrap:wrap}.detail-summary strong{font-size:24.2px;display:block;margin-top:6px}.memo-block{margin:0 25px 24px;background:#f7f8f2;border-radius:8px;padding:15px;white-space:pre-wrap;line-height:1.8;font-size:13.8px}.record-card{margin:0 24px;padding:23px 0;border-bottom:1px solid var(--border)}.record-card:last-child{border:0}.record-head{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:12px}.record-card p{white-space:pre-wrap;line-height:1.8;font-size:13.8px;color:#7f8979}.photo-grid{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}.photo-grid img{width:110px;height:110px;object-fit:cover;border-radius:8px;cursor:zoom-in}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.settings-body{padding:24px}.settings-body p{font-size:13.8px;line-height:1.9;color:#85907e}.settings-body .btn{margin:5px 4px 5px 0}.status-row{display:flex;justify-content:space-between;padding:13px 0;border-bottom:1px solid #eff0eb;font-size:13.8px;gap:15px}.status-row span:last-child{color:#87957b;text-align:right}.status-row:last-child{border:0}footer{border-top:1px solid var(--border);margin:0 42px;padding:20px 0;color:#a4ad9d;font-size:10.4px;letter-spacing:1.2px;display:flex;justify-content:space-between}footer span{letter-spacing:0;font-size:11.5px}dialog{border:1px solid var(--border);border-radius:15px;padding:0;max-width:650px;width:calc(100% - 30px);max-height:90dvh;color:var(--ink);box-shadow:0 20px 100px #173e2b2b}dialog::backdrop{background:#233b3059;backdrop-filter:blur(3px)}.modal-head{padding:22px 25px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:#fff;z-index:2}.modal-body{padding:24px 25px}.modal-footer{border-top:1px solid var(--border);padding:17px 25px;display:flex;justify-content:flex-end;gap:9px;background:#fff;position:sticky;bottom:0}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.field{display:flex;flex-direction:column;gap:8px;font-size:13.8px}.field.full{grid-column:1/-1}.field small{line-height:1.8;font-size:11.5px}.field label{font-weight:500}.required{color:#b09061}.photo-upload{display:block;background:#f8faf4;border:1px dashed #bdcdb6;border-radius:8px;padding:18px;text-align:center;color:#809373;cursor:pointer;font-size:13.8px}.photo-preview{position:relative}.photo-preview button{position:absolute;right:3px;top:3px;background:#fff;border-radius:50%;height:22px;width:22px;color:#a75b4c}.checkbox-row{display:flex;align-items:center;gap:8px;font-size:13.8px;padding:12px 0}.full-image{max-width:100%;max-height:70dvh;object-fit:contain;display:block;margin:auto}#toast{position:fixed;bottom:28px;left:calc(50% + 110px);transform:translateX(-50%) translateY(15px);opacity:0;pointer-events:none;background:#254d42;color:white;padding:13px 22px;border-radius:9px;font-size:13.8px;z-index:20;transition:.2s;max-width:90vw;box-shadow:0 5px 25px #254d4222}#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}.import-preview{max-height:220px;overflow:auto;margin:15px 0}.error{color:#b35b4f;font-size:13.8px;line-height:1.7}.filter-count{font-size:12.6px;color:#9aa18f}.mobile-only{display:none}
@media(min-width:1500px){main{padding-top:45px}.calendar-day{min-height:145px}}@media(max-width:1150px){.sidebar{width:210px;padding:28px 15px 18px}.main-shell{margin-left:210px}header{padding:0 25px}main{padding:28px 25px}.stats{gap:10px}.stat{padding:17px}.dashboard-grid{grid-template-columns:1.35fr 1fr;gap:16px}.service-grid{gap:12px}.panel-head{padding:18px}.appointments{padding:0 18px}.appointment{gap:12px}.service-item{padding:16px 13px}.service-title{padding:20px 14px}}@media(max-width:800px){.sidebar{width:77px;padding:23px 10px}.brand{padding:0;justify-content:center}.brand>span:last-child,.workspace,.sidebar nav button:not(.active)~x,.sidebar-bottom{display:none}.brandmark{font-size:42.6px}.sidebar nav{margin-top:36px;gap:13px}.sidebar nav button{font-size:0;padding:12px;justify-content:center;gap:0}.sidebar nav button span{font-size:26.5px}.main-shell{margin-left:77px}.dashboard-grid{grid-template-columns:1fr}.service-grid{grid-template-columns:1fr}.settings-grid{grid-template-columns:1fr}#toast{left:calc(50% + 35px)}.calendar-day{min-height:100px}.calendar-event{font-size:9.2px;padding:4px}.calendar-day{padding:5px}.stats{grid-template-columns:repeat(2,1fr)}.page-top{align-items:flex-start}.subtitle{font-size:12.6px}}@media(max-width:520px){.sidebar{width:100%;height:65px;bottom:0;top:auto;padding:0 5px;border-top:1px solid var(--border);border-right:0;padding-bottom:env(safe-area-inset-bottom);height:calc(65px + env(safe-area-inset-bottom))}.brand{display:none}.sidebar nav{display:flex;margin:0;gap:0;justify-content:space-around;height:65px}.sidebar nav button{font-size:10.4px;flex-direction:column;padding:6px 4px;border-radius:0;gap:2px;flex:1}.sidebar nav button.active{background:#edf2e9;color:var(--green)}.sidebar nav button span{font-size:24.2px}.main-shell{margin-left:0;padding-bottom:70px}header{height:57px;padding:0 18px}.breadcrumb{font-size:9.2px}.breadcrumb b{font-size:11.5px}.storage-indicator{font-size:10.4px}.header-actions{gap:9px}.avatar{width:28px;height:28px}main{padding:25px 17px;min-height:calc(100dvh - 185px)}h1{font-size:27.6px}.page-top{margin-bottom:22px;gap:8px}.page-top .btn{font-size:12.6px;padding:10px}.eyebrow{font-size:9.2px}.subtitle{font-size:11.5px}.stats{gap:10px;margin-bottom:20px}.stat{padding:16px}.stat strong{font-size:28.7px}.stat-top{font-size:11.5px}.stat small{font-size:10.4px}.dashboard-grid{gap:0}.notice{font-size:11.5px;padding:10px 12px}.notice button{float:none;display:block;margin-top:4px;padding:0}.panel-head{padding:18px}h2{font-size:17.3px}.appointment{gap:11px;padding:17px 0}.appt-main p{font-size:11.5px}.pill{font-size:9.2px;padding:4px 6px}.customer-name{font-size:13.8px}.time{font-size:13.8px;min-width:40px}.recent-row{padding:14px 0}footer{margin:0 17px;font-size:9.2px}footer span{font-size:9.2px}#toast{left:50%;bottom:90px}.toolbar{gap:10px}.searchbar{max-width:none}.tabs button{padding:7px 10px}.calendar-controls{padding:12px}.calendar-controls strong{font-size:17.3px}.calendar-controls .btn{padding:8px 10px}.calendar-day{min-height:85px;padding:3px}.day-label{font-size:10.4px;padding:10px 4px}.day-num{font-size:11.5px;width:22px;height:22px}.calendar-event{font-size:9.2px;padding:4px 3px}.calendar-event .event-time{display:none}.form-grid{gap:16px 12px}.modal-body{padding:20px}.modal-head{padding:18px 20px}.modal-footer{padding:14px 20px}.detail-header{padding:20px;gap:12px;flex-wrap:wrap}.detail-header .actions{width:100%;display:flex;gap:8px;margin-top:5px}.detail-summary{padding:0 20px 20px;gap:22px}.memo-block{margin:0 20px 20px}.record-card{margin:0 20px}.photo-grid img{width:90px;height:90px}th,td{padding:13px 14px;white-space:nowrap}.settings-body{padding:20px}.mobile-only{display:inline}.desktop-extra{display:none}}
.brand-logo{width:57px;height:57px;object-fit:contain;border-radius:50%;flex-shrink:0}.logo-avatar{object-fit:contain;border-radius:50%;background:white}.avatar{padding:0;overflow:hidden;background:white}.avatar img{width:100%;height:100%;object-fit:contain;border-radius:50%}.quick-card .decoration-logo{position:absolute;width:94px;height:94px;border-radius:50%;object-fit:contain;right:17px;bottom:15px;opacity:.13}.search-caption{background:#f3f6ed;padding:13px 20px;color:#75836a;font-size:12.6px;line-height:1.8;border-top:1px solid var(--border)}.photo-count{display:flex;align-items:center;gap:7px;color:#718465;font-size:11.5px;white-space:nowrap}.photo-count img{width:36px;height:36px;border-radius:6px;object-fit:cover}@media(max-width:800px){.brand-logo{width:44px;height:44px}}
.calendar-fab{position:fixed;right:30px;bottom:30px;display:flex;flex-direction:column;gap:12px;z-index:8}.calendar-fab button{width:58px;height:58px;border-radius:50%;box-shadow:0 5px 20px #173e2b26;display:flex;align-items:center;justify-content:center}.fab-mode{background:white;border:1px solid #d6dfd0;flex-direction:column;color:var(--green);gap:2px}.fab-mode svg{width:23px;height:23px}.fab-mode span{font-size:10.4px}.fab-add{background:var(--green);color:white;font-size:36.8px;font-weight:400}.week-strip{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding:15px 18px;gap:8px;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.week-date{display:flex;flex-direction:column;align-items:center;padding:10px 2px;border-radius:11px;gap:6px;border:1px solid transparent}.week-date>span{font-size:12.6px;color:#8a9483}.week-date strong{font-size:23px;font-weight:500}.week-date small{font-size:10.4px;min-height:14px}.week-date.is-today{border-color:#ced9c8}.week-date.selected{background:var(--green);color:white;border-color:var(--green)}.week-date.selected span,.week-date.selected small{color:#d5e4d4}.week-date:hover:not(.selected){background:#f2f5ee}.timeline-date{display:flex;justify-content:space-between;align-items:center;padding:21px 24px;gap:10px}.timeline-date strong{font-size:16.1px;font-weight:500}.timeline-date>span{font-size:11.5px;color:#8c9784}.day-timeline{padding:0 24px 20px}.hour-row{display:grid;grid-template-columns:55px minmax(0,1fr);min-height:72px}.hour-label{font-size:11.5px;color:#929c8a;padding-top:10px}.hour-slot{border-top:1px solid #ebeee6;position:relative;padding:5px 28px 5px 0;min-height:72px}.hour-add{position:absolute;right:0;top:8px;color:#b1beaa;border-radius:50%;width:25px;height:25px;font-size:18.4px}.hour-add:hover{background:#edf2e8;color:var(--green)}.timeline-appointment{width:100%;display:flex;align-items:center;gap:13px;padding:12px 14px;background:#edf3e9;border-radius:7px;border-left:3px solid #88a879;text-align:left;margin-bottom:4px;min-height:58px}.timeline-appointment.tattoo{background:#f1eef6;border-left-color:#aa9abb}.timeline-appointment.pmu{background:#f8f0e8;border-left-color:#c8a281}.timeline-appointment.cancelled{opacity:.6}.timeline-appointment>div{flex:1}.timeline-appointment strong{font-size:13.8px;font-weight:500}.timeline-appointment small{font-size:11.5px;margin-top:5px}.timeline-time{font-size:13.8px;color:#6e7f67;align-self:flex-start;padding-top:1px}.timeline-end{border-top:1px solid #ebeee6;color:#929c8a;font-size:11.5px;padding:10px 0}.calendar-event{display:flex;gap:5px;align-items:center}.month-time{flex-shrink:0}.month-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.day-label:first-child{color:#899281}.day-label:nth-child(7){color:#bd8c7b}@media(max-width:520px){.calendar-fab{right:18px;bottom:calc(84px + env(safe-area-inset-bottom));gap:10px}.calendar-fab button{width:52px;height:52px}.week-strip{padding:10px 8px;gap:3px}.week-date{gap:5px;padding:10px 1px}.week-date strong{font-size:21.8px}.week-date>span{font-size:11.5px}.timeline-date{padding:17px 13px}.timeline-date strong{font-size:13.8px}.timeline-date>span{font-size:10.4px}.day-timeline{padding:0 12px 15px}.hour-row{grid-template-columns:42px minmax(0,1fr)}.timeline-appointment{padding:10px 8px;gap:8px}.timeline-appointment strong{font-size:12.6px}.timeline-appointment small{font-size:10.4px}.timeline-time{font-size:11.5px}.calendar-event{flex-direction:column;align-items:flex-start;gap:1px;line-height:1.4}.month-name{max-width:100%}.calendar-shell{margin-bottom:80px}}
.day-timeline{position:relative;height:clamp(300px,62dvh,660px);overflow-y:auto;overscroll-behavior-y:contain;touch-action:pan-y;scrollbar-gutter:stable;cursor:grab;scroll-behavior:auto;padding-top:0;padding-bottom:0}.day-timeline.dragging{cursor:grabbing;user-select:none}.day-timeline button{cursor:pointer}.day-timeline:focus-visible{outline:2px solid #72947d;outline-offset:-2px}.timeline-end{min-height:35px}@media(max-width:520px){.day-timeline{height:clamp(280px,55dvh,580px)}}
.calendar-heading{display:flex;align-items:center;gap:12px;margin:0 0 12px}.calendar-heading h1{font-size:19.5px;letter-spacing:-.5px;margin:0;font-weight:600}.calendar-heading>span{font-size:11.5px;color:#99a18f}main:has(.calendar-heading){padding-top:18px}.calendar-fab{flex-direction:row;align-items:center}.fab-search{background:#fff;border:1px solid #d6dfd0;color:var(--green)}.fab-search.active{background:#e8f0e2}.fab-search svg{width:24px;height:24px}.calendar-search-panel{position:fixed;right:30px;bottom:106px;width:min(380px,calc(100vw - 36px));background:white;border:1px solid var(--border);border-radius:13px;padding:17px;box-shadow:0 10px 40px #173e2b26;z-index:9}.calendar-search-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;font-size:15px}.calendar-search-heading button{font-size:26.5px;padding:0 5px}.calendar-search-panel>small{margin-top:10px;line-height:1.7;font-size:11.5px}.week-date .day-booking-count,.day-booking-count{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:25px;height:25px;border-radius:50%;font-size:12.6px;font-weight:600;background:#f0f2eb;color:#a0aa96;line-height:1;min-height:25px}.week-date .day-booking-count.has-bookings,.day-booking-count.has-bookings{background:#e1ecd9;color:#486b3e}.week-date.selected .day-booking-count{background:#527766;color:#fff}.week-date.selected .day-booking-count.has-bookings{background:#fff;color:#254d42}.month-day-heading{display:flex;align-items:center;justify-content:space-between;gap:2px;margin-bottom:5px}.month-day-heading .day-num{margin-bottom:0}.month-day-heading .day-booking-count{width:20px;height:20px;min-height:20px;font-size:10.4px}.week-strip{padding-top:10px;padding-bottom:10px}.week-date{padding-top:7px;padding-bottom:7px;gap:5px}.calendar-controls{padding-top:12px;padding-bottom:12px}@media(max-width:520px){main:has(.calendar-heading){padding-top:14px}.calendar-heading{margin-bottom:10px}.calendar-heading h1{font-size:18.4px}.calendar-heading>span{font-size:10.4px}.calendar-fab{gap:9px}.calendar-search-panel{right:18px;bottom:calc(148px + env(safe-area-inset-bottom))}.week-date .day-booking-count{width:23px;height:23px;min-height:23px;font-size:11.5px}.month-day-heading .day-booking-count{width:16px;height:16px;min-height:16px;font-size:9.2px}.month-day-heading .day-num{width:18px;height:20px}.calendar-day{padding-top:5px}}
.day-label:first-child{color:#c44040}.day-label:nth-child(7){color:#899281}.week-date.holiday>span:not(.day-booking-count),.week-date.holiday>strong,.calendar-day.holiday .day-num,.timeline-date.holiday>strong{color:#c43d3d}.week-date.holiday.selected{background:#fff0ed;border-color:#d6655f;color:#c43d3d}.week-date.holiday.selected>span:not(.day-booking-count),.week-date.holiday.selected>strong{color:#b52f2f}.week-date.holiday.selected>small{color:#a95b51}.calendar-day.holiday.today .day-num{background:#fff0ed;color:#b52f2f;box-shadow:inset 0 0 0 1px #d6655f}.week-date small{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.holiday-coverage{padding:10px 18px}.customer-heading{justify-content:space-between}.customer-heading .btn{min-height:33px;padding:6px 12px;font-size:12.6px}.customer-toolbar{margin-bottom:13px;gap:8px}.customer-toolbar .searchbar{padding:0 10px;min-height:34px}.customer-toolbar .searchbar input{padding:6px 0!important;font-size:13.8px;line-height:20px}@media(max-width:520px){.customer-heading h1{font-size:18.4px}.customer-toolbar .searchbar{min-height:32px}.customer-toolbar .searchbar input{padding:5px 0!important}.week-date small{font-size:9.2px}}
.week-strip{padding-top:5px;padding-bottom:5px}.week-date{padding-top:4px;padding-bottom:4px;gap:3px}.week-date strong{line-height:1.15}.week-date small{line-height:12px;min-height:12px}.timeline-date{padding-top:10px;padding-bottom:10px}.timeline-zoom{display:flex;align-items:center;gap:5px;margin-left:auto}.timeline-zoom button{width:29px;height:29px;border:1px solid var(--border);border-radius:6px;background:#f7f9f3;font-size:19.5px}.timeline-zoom output{font-size:11.5px;min-width:42px;text-align:center;color:#7a8870}.day-timeline{touch-action:none;user-select:none}.day-timeline .hour-row{height:var(--hour-height,60px);min-height:0}.day-timeline .hour-slot{height:100%;min-height:0;padding:2px 28px 2px 0;display:flex;gap:5px;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}.day-timeline .timeline-appointment{flex:1 0 min(240px,100%);width:auto;height:100%;min-height:0;margin:0;padding:4px 8px;overflow:hidden}.day-timeline .timeline-appointment>div{min-width:0}.day-timeline .timeline-appointment strong,.day-timeline .timeline-appointment small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.day-timeline .hour-label{padding-top:4px}.day-timeline .hour-add{position:sticky;right:0;top:0;margin-left:auto;flex-shrink:0;background:#fff;width:24px;height:24px}.day-timeline .timeline-time{align-self:center}.day-timeline .timeline-appointment small{margin-top:2px}@media(max-width:520px){.week-strip{padding-top:4px;padding-bottom:4px}.week-date{padding-top:3px;padding-bottom:3px;gap:2px}.timeline-date{padding-top:8px;padding-bottom:8px;gap:6px}.timeline-zoom{gap:3px}.timeline-zoom button{width:26px;height:26px}.timeline-date>span{font-size:10.4px}}
.day-timeline .timeline-appointment{flex:1 1 0;min-width:0}.day-timeline .hour-slot{overflow-x:hidden;padding-right:0}.day-timeline .hour-add{position:static;margin:0;align-self:center}.day-timeline .timeline-appointment .pill{flex-shrink:0}
.service-heading{justify-content:space-between;flex-wrap:wrap}.service-actions{display:flex;gap:8px}.service-heading .btn{min-height:33px;padding:6px 12px;font-size:12.6px}.service-title h2{overflow-wrap:anywhere}.service-title small{margin-top:5px}.service-title{gap:10px}@media(max-width:520px){.service-heading{gap:10px}.service-heading .btn{padding:6px 9px;font-size:11.5px}}
.customer-picker{position:relative;min-width:0}.customer-picker summary{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:41px;padding:10px 11px;border:1px solid #dfe4d9;border-radius:7px;background:#fff;cursor:pointer;list-style:none}.customer-picker summary::-webkit-details-marker{display:none}#booking-customer-label,.customer-choice-line{display:flex;align-items:baseline;gap:9px;min-width:0}.customer-choice-name{font-size:13.8px;font-weight:500;overflow-wrap:anywhere}.customer-age{color:#9ca497;font-size:11.5px;font-weight:400;white-space:nowrap;flex-shrink:0}.picker-chevron{color:#8c9984}.customer-picker-list{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:5;max-height:240px;overflow-y:auto;background:#fff;border:1px solid #dce4d6;border-radius:8px;box-shadow:0 8px 24px #254d421c;padding:4px}.customer-choice{display:block;width:100%;text-align:left;padding:10px 9px;border-radius:5px}.customer-choice:hover,.customer-choice:focus-visible{background:#f0f5eb}.customer-choice[aria-pressed=true]{background:#eaf0e4}.customer-choice-phone{display:block;font-size:11.5px;color:#8f9a86;margin-top:4px}
.stat-link{text-align:left;width:100%;font-family:inherit;transition:box-shadow .15s,transform .15s}.stat-link:hover{box-shadow:0 5px 18px #254d4217;transform:translateY(-2px)}.customer-back{padding:0;margin-bottom:12px}.statistics-toolbar{margin-bottom:8px}.stats-anchor{font-size:12.6px;display:flex;align-items:center;gap:8px;color:#84917a}.stats-anchor input{padding:7px 9px!important;font-size:13.8px}.stats-range{font-size:12.6px;color:#84917a;margin:0 0 20px}.stats-breakdown{display:grid;grid-template-columns:1.35fr 1fr;gap:22px}.donut-layout{padding:25px;display:flex;align-items:center;gap:28px;flex-wrap:wrap}.revenue-donut{width:195px;height:195px;flex-shrink:0;border-radius:50%;display:grid;place-items:center}.revenue-donut>div{width:145px;height:145px;border-radius:50%;background:#fff;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:7px}.revenue-donut strong{font-size:24.2px;font-weight:600}.chart-legend{flex:1;min-width:140px;max-height:310px;overflow:auto}.chart-legend>div{display:flex;align-items:center;gap:9px;margin:13px 0;font-size:12.6px}.chart-legend>div>span:nth-child(2){flex:1;overflow-wrap:anywhere}.chart-legend small{font-size:10.4px;margin-top:4px}.chart-legend b{font-size:12.6px;white-space:nowrap}.legend-dot{width:9px;height:9px;flex-shrink:0;border-radius:50%}.payment-summary{padding:10px 23px 20px}.payment-item{padding:17px 0;border-bottom:1px solid #edf0e7}.payment-item>div:first-child{display:flex;justify-content:space-between;align-items:center;font-size:13.8px}.payment-item>div>span{font-size:11.5px;color:#8e9985}.payment-item>strong{display:block;margin:9px 0 10px;font-size:24.2px;font-weight:500}.payment-item>strong small{display:inline;font-size:12.6px}.payment-track{height:5px;background:#edf0e7;border-radius:6px;overflow:hidden}.payment-track span{height:100%;display:block;border-radius:6px}.payment-total{display:flex;justify-content:space-between;margin-top:18px;font-size:13.8px}@media(max-width:900px){.stats-breakdown{grid-template-columns:1fr}}@media(max-width:520px){.donut-layout{padding:22px 18px;gap:22px;justify-content:center}.revenue-donut{width:165px;height:165px}.revenue-donut>div{width:120px;height:120px}.revenue-donut strong{font-size:20.7px}.chart-legend{min-width:135px}.statistics-toolbar .tabs{width:100%;justify-content:space-between}}
.monthly-customer-revenue{margin-top:22px}.revenue-rank{color:#698261;font-weight:600;width:65px}.monthly-customer-revenue .customer-cell small{margin-top:5px}.monthly-customer-revenue td:last-child{text-align:right}.monthly-customer-revenue th:last-child{text-align:right}
@media(max-width:520px){.sidebar nav button{min-width:0;white-space:nowrap;font-size:9.2px;padding-left:2px;padding-right:2px}.sidebar nav{gap:0}.sidebar nav button span{font-size:23px}}
.stats.dashboard-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-stats .all-customers-card{grid-column:1/-1}.dashboard-stats .stat{min-width:0}.dashboard-stats .stat strong{overflow-wrap:anywhere}

/* Customer list: keep the desktop table, use compact vertical cards on phones. */
.mobile-customer-count,.mobile-customer-date,.mobile-customer-service{display:none}
@media(max-width:640px){
  .customer-list .table-wrap{overflow-x:hidden}
  .customer-list table,.customer-list tbody{display:block;width:100%;min-width:0}
  .customer-list thead{display:none}
  .customer-list tbody{padding:8px 12px}
  .customer-list tr.clickable{display:grid;grid-template-columns:80px minmax(0,1fr);column-gap:10px;row-gap:5px;padding:13px 14px;margin:6px 0 12px;border:1px solid var(--border);border-radius:10px;background:#fff;max-width:100%;min-width:0}
  .customer-list tr.clickable:hover,.customer-list tr.clickable:focus-visible{background:#f8faf5;border-color:#b7c9b8}
  .customer-list td{display:block;border:0;padding:0;min-width:0;white-space:normal;overflow-wrap:anywhere}
  .customer-list td:first-child{grid-column:1/-1}
  .customer-list .customer-cell{gap:9px}
  .customer-list .customer-cell .initial{width:32px;height:32px}
  .customer-list .customer-cell b{font-size:17.3px;color:var(--ink)}
  .customer-list .customer-phone{grid-column:1/-1;padding-left:41px;font-size:15px;color:#526b5c}
  .customer-list .desktop-customer-count,.customer-list .desktop-customer-date{display:none}
  .customer-list .mobile-customer-count,.customer-list .mobile-customer-date,.customer-list .mobile-customer-service{display:block}
  .customer-list .mobile-customer-count{font-size:12.6px;color:#71836e;white-space:nowrap}
  .customer-list .customer-recent{font-size:12.6px;line-height:1.5}
  .customer-list .mobile-customer-date{color:#838d81}
  .customer-list .mobile-customer-service{color:#556e5c;overflow-wrap:anywhere}
  .customer-list .customer-memo{display:none}
  .customer-list .customer-empty-row{display:block}
  .customer-list .customer-empty-row td{display:block;text-align:center}
}

/* Dashboard summary cards */
.dashboard-stats .stat-top{font-size:13.8px;font-weight:700}
.dashboard-stats .all-customers-card{padding-top:9px;padding-bottom:9px}
.dashboard-stats .all-customers-card strong{margin:3px 0;font-size:26.5px}

/* Larger readable type throughout the app, especially on phones. */
body{font-size:17.3px}
.btn{font-size:15px}
.subtitle,.notice,.section-note,.filter-count,.text-btn{font-size:13.8px}
.stat small,.panel-head small,.recent-row small,.service-item small{font-size:12.6px}
.service-item b,.service-item .price,.field,.status-row,.record-card p,.memo-block{font-size:15px}
.pill{font-size:11.5px}
@media(max-width:640px){
  .sidebar nav button{font-size:12.6px}
  .breadcrumb,.breadcrumb b,.storage-indicator{font-size:12.6px}
  .page-top .btn,.customer-toolbar .searchbar input{font-size:15px}
  .eyebrow{font-size:11.5px}
  .subtitle,.notice,.section-note,.filter-count,.text-btn,.stat small,.panel-head small,.recent-row small,.recent-row .date,.appt-main p,.quick-card p{font-size:13.8px}
  .dashboard-stats .stat-top{font-size:15px}
  .customer-name,.time,.recent-row strong,.timeline-appointment strong{font-size:16.1px}
  .pill{font-size:12.6px}
  .week-date>span,.week-date small,.timeline-date>span,.hour-label,.day-label,.day-num,.calendar-event,.search-caption{font-size:12.6px}
  .service-item b,.service-item .price,.service-item button,.add-service,.field,.status-row,.record-card p,.memo-block,.settings-body p,.checkbox-row{font-size:15px}
  .field small{font-size:13.8px}
  .customer-list tr.clickable{grid-template-columns:minmax(0,1fr) minmax(0,44%);row-gap:4px;padding:10px 12px;margin:4px 0 9px}
  .customer-list td:first-child{grid-column:1;min-width:0}
  .customer-list .customer-cell{min-width:0}
  .customer-list .customer-cell b{font-size:18.4px;min-width:0;overflow-wrap:anywhere}
  .customer-list .customer-phone{grid-column:2;grid-row:1;padding-left:0;align-self:center;font-size:16.1px;white-space:normal;overflow-wrap:anywhere}
  .customer-list .mobile-customer-count,.customer-list .customer-recent{font-size:13.8px}
  .customer-list .customer-recent{grid-column:2;text-align:right}
}

.customer-back{display:inline-flex;align-items:center;gap:9px;min-height:44px;padding:5px 11px 5px 5px;margin:0 0 14px;color:var(--green);font-size:18.4px;font-weight:700;border-radius:9px}
.customer-back span{display:grid;place-items:center;width:36px;height:36px;border-radius:9px;background:#eaf0e5;font-size:28.7px;line-height:1;font-weight:700}
.customer-back:hover,.customer-back:focus-visible{background:#f0f4ec}
@media(max-width:520px){.sidebar nav button{white-space:normal;line-height:1.15;text-align:center}}

/* Long-press rescheduling in the daily timeline. */
.day-timeline .half-hour-slot.drop-target{background:#e9f2e6;outline:2px solid #81a889;outline-offset:-2px}
.day-timeline.moving-appointment,.day-timeline.moving-appointment .timeline-appointment{cursor:grabbing}
.day-timeline .timeline-appointment.repositioning{position:relative;z-index:2;opacity:.7;outline:2px dashed var(--green);outline-offset:-2px}
.day-timeline .timeline-appointment.repositioning::after{content:attr(data-drop-time);position:absolute;right:3px;top:2px;background:var(--green);color:white;border-radius:4px;padding:2px 4px;font-size:11px;font-weight:700}

/* Each hour has separate :00 and :30 lanes, aligned with the time axis. */
.day-timeline .hour-axis{position:relative;min-width:0}
.day-timeline .hour-axis .hour-label{position:absolute;top:2px;left:0;padding:0}
.day-timeline .half-hour-label{position:absolute;top:50%;left:0;transform:translateY(-50%);color:#98a499;font-size:10.4px}
.day-timeline .hour-slot{display:grid;grid-template-rows:repeat(2,minmax(0,1fr));gap:0;padding:0;overflow:hidden}
.day-timeline .half-hour-slot{display:flex;align-items:stretch;gap:5px;min-height:0;min-width:0;padding:2px 0;overflow:hidden;border-top:1px solid #ebeee6}
.day-timeline .half-hour-slot.second-half{border-top:1px dashed #dde6d9}
.day-timeline .half-hour-slot .timeline-appointment{height:100%;min-height:0;min-width:0;flex:1 1 0}
.day-timeline .half-hour-slot .hour-add{position:static;width:23px;height:100%;min-height:0;margin:0;flex-shrink:0}
.day-timeline .half-hour-slot{justify-content:flex-end}
.day-timeline .timeline-bookings{position:absolute;top:0;left:calc(24px + 55px);right:calc(24px + 27px);height:var(--timeline-total-height,1440px);pointer-events:none;z-index:2}
.day-timeline .timeline-bookings .timeline-appointment{position:absolute;display:flex;min-height:18px;max-height:none;pointer-events:auto;z-index:1}
.day-timeline .timeline-bookings .timeline-appointment.repositioning{position:absolute;z-index:3}
@media(max-width:520px){.day-timeline .timeline-bookings{left:calc(12px + 42px);right:calc(12px + 27px)}}

/* Booking status colors stay visible in both calendar modes. */
.day-timeline .timeline-bookings .timeline-appointment.wait,.calendar-event.wait{background:#fff2d8;border-left-color:#d8aa55;color:#5f4821}
.day-timeline .timeline-bookings .timeline-appointment.done,.calendar-event.done{background:#e3f1e6;border-left-color:#69a37b;color:#315b3d;opacity:1}
.day-timeline .timeline-bookings .timeline-appointment.cancel,.calendar-event.cancel{background:#ecefed;border-left-color:#a4afa8;color:#66716a;opacity:.75}
.day-timeline .timeline-bookings .timeline-appointment.noshow,.calendar-event.noshow{background:#f8d0d0;border-left-color:#d3323d;color:#8d1824;opacity:1}
.pill.noshow{background:#cf3340;color:#fff}
.day-timeline .timeline-bookings .timeline-appointment{padding:2px 6px;gap:4px}
.day-timeline .timeline-bookings .timeline-appointment strong,.day-timeline .timeline-bookings .timeline-appointment small{line-height:1.15}
.day-timeline .timeline-bookings .timeline-appointment small{margin-top:1px}
.day-timeline .timeline-bookings .timeline-appointment .pill{padding:2px 5px;line-height:1.1}

/* Keep the storage state and studio logo beside each page title. */
.main-shell{position:relative}
.main-shell>header{position:absolute;top:28px;right:42px;width:auto;height:36px;padding:0;border:0;background:transparent;z-index:4}
.main-shell>main{padding-top:20px;min-height:calc(100dvh - 65px)}
.main-shell:has(.calendar-heading)>header{top:14px}
.calendar-heading,.page-top{padding-right:158px}
.calendar-heading .booking-title-action{margin-left:auto;white-space:nowrap}
.calendar-heading{min-height:36px}
@media(max-width:1100px){.main-shell>header{right:25px}}
@media(max-width:640px){
  .main-shell>header{right:17px;top:28px}
  .main-shell:has(.calendar-heading)>header{top:14px}
  .main-shell>main{padding-top:17px}
  .calendar-heading,.page-top{padding-right:145px}
  .calendar-heading>span{display:none}
  .calendar-heading{gap:6px}
  .calendar-heading .booking-title-action{padding:6px 8px;min-height:33px;font-size:12.6px}
  .service-heading .service-actions{flex-basis:100%}
}

/* Revenue overview and drill-down chart. */
.revenue-total-card{margin:0 0 18px;padding:19px 23px}
.revenue-total-card strong{margin:5px 0 3px}
.revenue-total-card small{font-size:13px}
.stats-supporting{grid-template-columns:minmax(0,1fr);gap:12px}
.stats-supporting .stat{width:100%;padding:15px 22px}
.stats-supporting .stat strong{margin:4px 0}
.revenue-chart-panel{margin-bottom:18px}
.revenue-chart-frame{display:flex;gap:8px;padding:24px 21px 15px;min-width:0}
.revenue-y-axis{height:204px;min-width:51px;display:flex;flex-direction:column;justify-content:space-between;text-align:right;color:#869286;font-size:11px;line-height:1;flex-shrink:0}
.revenue-chart-scroll{flex:1;min-width:0;overflow-x:auto;overflow-y:hidden;padding-bottom:4px}
.revenue-chart-inner{width:100%}
.revenue-chart-plot{height:204px;position:relative;border-bottom:1px solid #dce5da}
.revenue-chart-grid{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;pointer-events:none}
.revenue-chart-grid i{width:100%;border-top:1px solid #e9eee7}
.revenue-chart-bars{position:relative;z-index:1;height:100%;display:grid;grid-template-columns:repeat(var(--columns),minmax(0,1fr));gap:7px;align-items:end}
.revenue-bar-column{height:100%;min-width:0;position:relative;display:flex;align-items:flex-end;justify-content:center;padding:0 4px;border-radius:5px 5px 0 0}
.revenue-bar-column:not(:disabled):hover,.revenue-bar-column:not(:disabled):focus-visible{background:#eaf1e9}
.revenue-bar-column:disabled{cursor:default}
.revenue-bar-fill{display:block;width:min(100%,43px);height:var(--bar-height);min-height:2px;background:#5d8971;border-radius:6px 6px 0 0;transition:background .15s}
.revenue-bar-column:not(:disabled):hover .revenue-bar-fill,.revenue-bar-column:not(:disabled):focus-visible .revenue-bar-fill{background:#254d42}
.revenue-bar-value{position:absolute;bottom:calc(var(--bar-height) + 5px);left:0;right:0;text-align:center;color:#45614e;font-size:10px;font-weight:600;white-space:nowrap;pointer-events:none}
.revenue-x-axis{display:grid;grid-template-columns:repeat(var(--columns),minmax(0,1fr));gap:7px;margin-top:9px;text-align:center;color:#667767;font-size:12px;font-weight:600}
.revenue-chart-hint{margin:0;padding:0 21px 16px;color:#879185;font-size:12px;line-height:1.5}
@media(max-width:640px){
  .stats-supporting{grid-template-columns:minmax(0,1fr)}
  .stats-supporting .stat{padding:13px 17px}
  .revenue-chart-frame{padding:19px 11px 12px;gap:4px}
  .revenue-y-axis{min-width:43px;font-size:10px}
  .revenue-chart-hint{padding:0 14px 15px}
}

/* Compact, aligned statistics cards and a chart that fits the viewport. */
.revenue-total-card{padding:10px 22px 11px}
.revenue-total-head{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:5px;min-height:29px}
.revenue-total-head .stat-top{font-size:17px;font-weight:600;color:#fff}
.revenue-period-nav{display:flex;align-items:center;justify-content:center;gap:3px;white-space:nowrap;color:#e2eee5;font-size:13px;font-weight:600}
.revenue-period-nav button{display:grid;place-items:center;width:28px;height:28px;border-radius:7px;color:#fff;font-size:25px;line-height:1}
.revenue-period-nav button:hover,.revenue-period-nav button:focus-visible{background:#ffffff28}
.revenue-total-card strong{display:flex;justify-content:flex-end;align-items:baseline;margin:0;font-size:30px;line-height:1.15;white-space:nowrap;font-variant-numeric:tabular-nums}
.revenue-total-card strong span{color:#dce9df}
.stats-supporting .revenue-detail-card{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 22px;min-height:69px}
.revenue-detail-label{min-width:0}
.revenue-detail-label small{font-size:11.3px;line-height:1.2;margin-bottom:4px}
.revenue-detail-label h2{font-size:18.4px;line-height:1.2}
.stats-supporting .revenue-detail-card strong{margin:0;text-align:right;white-space:nowrap;font-size:27px;line-height:1.1;font-variant-numeric:tabular-nums}
.stats-supporting .revenue-detail-card strong span{font-size:13px}
.revenue-chart-scroll{overflow-x:hidden}
.revenue-chart-inner{width:100%;min-width:0!important}
.revenue-chart-bars,.revenue-x-axis{gap:clamp(2px,.6vw,7px)}
.revenue-x-axis{font-size:clamp(9px,1.2vw,12px)}
.revenue-x-axis span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.revenue-bar-column{padding:0 1px}
.revenue-bar-value{font-size:clamp(8px,.8vw,10px);overflow:hidden;text-overflow:ellipsis}
.revenue-chart-bars:empty::after{content:'이 날짜에 완료된 예약이 없습니다.';position:absolute;top:45%;left:0;right:0;text-align:center;color:#8a9589;font-size:13px}
@media(max-width:640px){
  .revenue-total-card{padding:9px 14px 10px}
  .revenue-total-head .stat-top{font-size:15px}
  .revenue-period-nav{font-size:11px;gap:0}
  .revenue-period-nav button{width:24px;height:27px;font-size:22px}
  .revenue-total-card strong{font-size:27px}
  .stats-supporting .revenue-detail-card{padding:9px 14px;min-height:62px}
  .revenue-detail-label h2{font-size:17px}
  .stats-supporting .revenue-detail-card strong{font-size:24px}
  .revenue-x-axis{font-size:9px}
}

/* Service menu actions share the title row. */
.service-heading{justify-content:flex-start;align-items:center;flex-wrap:nowrap}
.service-heading h1{flex:0 0 auto;white-space:nowrap}
.service-heading .service-actions{display:flex;align-items:center;justify-content:center;flex:0 0 auto;gap:7px;margin-left:auto}
.service-heading .btn{white-space:nowrap}
.service-btn-short{display:none}
@media(max-width:640px){
  .service-heading{gap:5px}
  .service-heading .service-actions{flex-basis:auto;gap:4px}
  .service-heading .btn{padding:5px 4px;font-size:11.5px;min-height:33px}
  .service-btn-wide{display:none}
  .service-btn-short{display:inline}
}
@media(max-width:380px){
  .service-heading{flex-wrap:wrap}
  .service-heading .service-actions{flex-basis:100%;justify-content:center;margin-left:0}
}

/* Show complete treatment names and complete mobile action labels. */
.service-card,.service-item{min-width:0}
.service-item>div:first-child{flex:1 1 0;min-width:0}
.service-item>div:last-child{flex:0 0 auto;max-width:43%}
.service-item b{display:block;white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;line-height:1.4}
.service-item small,.service-item .price{white-space:normal;overflow-wrap:anywhere}
@media(max-width:640px){
  .service-heading .btn{white-space:normal;min-height:38px;padding:3px 4px;line-height:1.08;text-align:center}
  .service-btn-short{display:inline-block}
}

/* Keep each add-button label on one line. */
@media(max-width:640px){
  .service-heading .btn,.service-btn-short{white-space:nowrap}
  .service-heading .btn{min-height:33px;padding:5px 7px;line-height:1.2}
}
@media(max-width:430px){
  .service-heading{flex-wrap:wrap}
  .service-heading .service-actions{flex-basis:100%;justify-content:center;margin-left:0}
}

/* Keep the customer registration label on one line. */
.customer-heading .btn{white-space:nowrap;flex-shrink:0}
@media(max-width:360px){
  .customer-heading{flex-wrap:wrap}
  .customer-heading .btn{margin-left:auto}
}

/* Keep the reservation calendar title intact on narrow screens. */
.booking-heading h1{white-space:nowrap;flex-shrink:0}
@media(max-width:430px){
  .booking-heading{flex-wrap:wrap}
  .booking-heading .booking-title-action{margin-left:0}
}

@media(max-width:430px){
  .dashboard-greeting-first,.dashboard-greeting-second{display:block;white-space:nowrap}
}

/* v1.1 monthly reservations: compact start-time badge and one-line customer name. */
.calendar-event{display:flex;flex-direction:row;align-items:center;gap:4px;min-width:0;overflow:hidden;white-space:nowrap}
.calendar-event .month-time{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;min-width:18px;padding:1px 3px;border-radius:4px;background:#ffffffa8;font-weight:700;line-height:1.2;font-variant-numeric:tabular-nums}
.calendar-event .month-name{display:block;flex:1 1 auto;min-width:0;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:640px){
  .calendar-grid .calendar-day{padding-left:1px;padding-right:1px}
  .calendar-grid .calendar-event{gap:1px;padding:2px 0;font-size:10.5px}
  .calendar-grid .calendar-event .month-time{min-width:0;padding:0 1px;font-size:clamp(7px,2.1vw,8.2px);letter-spacing:-.3px}
  .calendar-grid .calendar-event .month-name{font-size:clamp(8.6px,2.7vw,10.5px);letter-spacing:-.5px}
}
.extra-service-list{max-height:150px;overflow-y:auto;border:1px solid #e6e9e1;border-radius:8px;padding:6px 8px}
.extra-service-option{display:flex;align-items:flex-start;gap:8px;padding:5px 2px;cursor:pointer}
.extra-service-option input{flex:0 0 auto;margin-top:3px}
.extra-service-option span{min-width:0;line-height:1.35}
.extra-service-option small{color:#879285}

/* v1.1 dashboard summary and compact reservation list. */
.dashboard-stats .all-customers-card{display:flex;flex-direction:column;gap:6px;padding-top:13px;padding-bottom:13px;cursor:pointer}
.all-customers-main{min-width:0;padding:0;text-align:left;white-space:nowrap;font-size:inherit;font-weight:inherit}
.all-customers-line{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;width:100%;font-size:19px;font-weight:700;line-height:1.2}
.dashboard-stats .all-customers-line strong{display:block;margin:0;text-align:center;white-space:nowrap;font-size:31px;font-variant-numeric:tabular-nums}
.dashboard-stats .all-customers-line strong span{font-size:.52em;font-weight:500}
.dashboard-add-customer{justify-self:end;min-height:35px;padding:6px 12px;font-size:12.6px;font-weight:700;white-space:nowrap}
.dashboard-stats .all-customers-caption{align-self:flex-start;margin:0;color:#858f81;font-size:12.6px}
.dashboard-stats .stat:not(.all-customers-card)>strong{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.dashboard-appointment-list{position:relative;background:#eaf0e5;border-color:#dfe7d8;cursor:pointer}
.dashboard-appointment-list .decoration-logo{position:absolute;width:120px;height:120px;object-fit:contain;right:17px;bottom:4px;opacity:.11;pointer-events:none}
.dashboard-appointment-list .panel-head,.dashboard-appointment-list .appointments{position:relative;z-index:1}
.dashboard-appointment-list .panel-head{border-bottom-color:#dce5d6}
.dashboard-appointment-row{display:flex;align-items:center;gap:11px;padding:12px 0;min-width:0;border-bottom-color:#dce5d6}
.dashboard-appointment-row .time{flex:0 0 auto;min-width:44px;font-size:15px;font-variant-numeric:tabular-nums}
.dashboard-customer-name{padding:0;text-align:left;font-size:15px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dashboard-customer-name:hover{text-decoration:underline}
.dashboard-appointment-row .dashboard-customer-name{flex:0 1 auto;max-width:35%}
.dashboard-appointment-service{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#657763;font-size:14px}
.dashboard-recent-customers{cursor:pointer}
.dashboard-recent-customers .recent-row .dashboard-customer-name{max-width:100%;font-size:15px}
@media(max-width:520px){
  .all-customers-line{font-size:18px}
  .dashboard-stats .all-customers-line strong{font-size:29px}
  .dashboard-stats .stat:not(.all-customers-card)>strong{font-size:clamp(18px,4.8vw,29px);letter-spacing:-.05em}
  .dashboard-appointment-row{gap:8px}
  .dashboard-appointment-row .time,.dashboard-appointment-row .dashboard-customer-name{font-size:14px}
  .dashboard-appointment-service{font-size:13px}
}

/* Isolated merged-data trial additions */
.customer-toolbar .filter-count{color:#263e34;font-weight:750;font-size:16px;line-height:1.5}
.customer-category-name{display:inline-block;border-radius:9px;padding:5px 9px;color:#31473b;font-weight:700;border:0}
.import-review{display:inline-flex;margin:4px 0 0 6px;background:#fbf0d9;color:#79591c;font-size:11px;font-weight:650;white-space:normal;line-height:1.35}
.import-verified{background:#e7eee1;color:#3a6045}.import-unverified{background:#faf0db;color:#805e23}.import-legacy{background:#e9e6f0;color:#645579}
.import-list-counts{display:block;font-size:11px;line-height:1.4;margin-top:4px;color:#6e766c}
.import-registration{display:block;margin-top:4px;color:#758071;font-size:12px}
.import-memo-body{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.7}
.import-review-notice{margin:14px 20px}.import-review-notice ul{margin:6px 0;padding-left:20px}
.imported-record .record-head>div{display:flex;flex-wrap:wrap;align-items:center;gap:7px}
.import-record-fields{display:grid;grid-template-columns:105px 1fr;gap:12px;margin:20px 0}
.import-record-fields dt{color:#77816f}.import-record-fields dd{margin:0;overflow-wrap:anywhere}
@media(max-width:600px){.customer-toolbar .filter-count{font-size:15px}.customer-category-name{padding:5px 8px}.import-review{margin-left:0;display:table}.import-record-fields{grid-template-columns:85px 1fr}}

/* Calendar status badges and cancellation marks */
.day-timeline .timeline-appointment .pill.wait,.calendar-event .pill.wait{background:#cfe3f8;color:#285c90}
.day-timeline .timeline-appointment .pill.done,.calendar-event .pill.done{background:#cfe8d4;color:#2c6840}
.day-timeline .timeline-appointment .pill.cancel,.calendar-event .pill.cancel{background:#e2d5ef;color:#6c4789}
.day-timeline .timeline-appointment .pill.noshow,.calendar-event .pill.noshow{background:#f5c8ce;color:#9a3542}
.day-timeline .timeline-appointment.cancel,.calendar-event.cancel,.day-timeline .timeline-appointment.noshow,.calendar-event.noshow{text-decoration:none}
.day-timeline .timeline-appointment.cancel strong,.day-timeline .timeline-appointment.cancel small,.calendar-event.cancel .month-name{text-decoration-line:line-through;text-decoration-thickness:1.1px;text-decoration-color:#79648e}
.day-timeline .timeline-appointment.noshow strong,.day-timeline .timeline-appointment.noshow small,.calendar-event.noshow .month-name{text-decoration-line:line-through;text-decoration-thickness:2.4px;text-decoration-color:#ac455a}
.calendar-event .month-state{display:inline-flex;flex:0 0 auto;line-height:1}
.calendar-event .month-state .pill{padding:1px 4px;font-size:9px;line-height:1.3;border-radius:4px}
@media(max-width:600px){.calendar-event .month-state .pill{font-size:0;padding:0;width:5px;height:5px;min-width:5px;min-height:5px;border-radius:50%}.calendar-event .month-state{margin-right:1px}}

/* Category color belongs to the card; customer names remain black. */
.calendar-event .month-name,.calendar-event strong,.timeline-appointment strong{color:#111!important}
.day-timeline .timeline-current-time{position:absolute;left:0;right:0;height:0;border-top:2px solid #d64045;z-index:8;pointer-events:none;color:#b6252c;font-size:10px;font-weight:700;line-height:1;transform:translateY(-1px);text-indent:-43px}.day-timeline .timeline-current-time::before{content:"";position:absolute;left:-4px;top:-5px;width:8px;height:8px;border-radius:50%;background:#d64045}
.list-sticky-top{position:sticky;top:0;z-index:4;background:var(--bg);padding-top:12px;padding-bottom:1px;margin-top:-12px;box-shadow:0 5px 8px -7px #53694b55}

.service-item[hidden],.service-card[hidden],#service-search-empty[hidden]{display:none!important}

.service-category-jumps{display:flex;gap:8px;overflow-x:auto;padding:0 0 12px;scrollbar-width:thin}.service-category-jumps button{flex:0 0 auto;border:1px solid #00000012;border-radius:18px;padding:7px 15px;color:#263e34;font-weight:700;cursor:pointer}.service-search-toolbar{margin-bottom:8px}

/* Drag only the dedicated handle; ordinary list scrolling stays available. */
.service-item{position:relative;padding-right:48px!important}.service-sort-handle{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:32px;min-height:44px;padding:0!important;border:0!important;background:transparent!important;color:#657660;font-size:25px!important;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.service-sort-handle:focus-visible{outline:2px solid #6d865e}.service-item.service-sort-active{outline:2px solid #91a783;background:#f0f5ed;z-index:1}.service-sort-active .service-sort-handle{cursor:grabbing;color:#284521}body.service-sorting{user-select:none;cursor:grabbing}

.booking-drag-preview{position:fixed;left:50%;bottom:90px;transform:translateX(-50%);z-index:20;background:#284a38;color:#fff;padding:12px 18px;border-radius:12px;font-weight:700;pointer-events:none;white-space:nowrap;box-shadow:0 3px 12px #0003}

.calendar-controls>div:first-child>strong{font-size:23px;line-height:1.3}.calendar-controls>div:first-child>.icon-btn{font-size:34px;width:44px;min-width:44px;min-height:44px;line-height:1}.week-strip{touch-action:pan-y;user-select:none;-webkit-user-select:none;cursor:grab}.week-strip.week-swiping{cursor:grabbing}.week-strip.week-swiping .week-date{pointer-events:none}@media(max-width:550px){.calendar-controls>div:first-child>strong{font-size:21px}.calendar-controls>div:first-child>.icon-btn{font-size:32px;min-width:40px;width:40px}}

.calendar-shell{overflow-x:clip}

/* Center exact-hour text on the solid line, like half-hour labels. */
.day-timeline .hour-axis .hour-label{top:1.5px;transform:translateY(-50%)}

.line-item-editor{grid-column:1/-1;margin:10px 0}.line-item-row{border:1px solid var(--border);border-radius:9px;padding:12px;margin-bottom:10px;display:grid;grid-template-columns:1fr 1fr;gap:8px}.line-item-row label:first-child{grid-column:1/-1}.line-item-row label{display:flex;flex-direction:column;gap:5px;font-size:13px}.line-item-grand-total{padding:16px 0 4px;border-top:2px solid #dbe5d6;font-size:19px;font-weight:750;text-align:right}.record-line-items{border-top:1px solid #e4e9df;padding-top:8px;margin-top:8px}.record-line-items>div{display:flex;justify-content:space-between;gap:15px;padding:5px 0}.record-line-total{border-top:1px solid #d6e1cf;margin-top:4px}

.booking-menu-picker{grid-column:1/-1}.booking-category-tabs{display:flex;gap:8px;overflow-x:auto;margin-bottom:12px}.booking-category-tabs button{padding:9px 14px;border:2px solid transparent;border-radius:9px;color:#263e34;font-weight:700;white-space:nowrap}.booking-category-tabs button.selected{border-color:#395e49}.booking-menu-option{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--border)}.booking-menu-option>label:first-child{display:flex;align-items:center;gap:9px;flex:1}.booking-menu-option input[type=checkbox]{width:20px;height:20px;flex-shrink:0}.booking-menu-option small{display:block;font-size:12px;color:var(--muted)}.booking-menu-price{width:120px;flex-shrink:0;font-size:12px}.booking-menu-price input{width:100%;box-sizing:border-box}

.field[hidden],.line-item-editor[hidden]{display:none!important}.line-item-grand-total .selected-price-row{display:flex;justify-content:space-between;gap:12px;font-size:14px;font-weight:400;padding:5px 0}.line-item-grand-total .grand-total-value{border-top:1px solid #dbe5d6;padding-top:10px;margin-top:8px}

.booking-menu-option{padding:7px 0;gap:8px}.booking-menu-duration{display:flex;align-items:center;justify-content:center;gap:4px;flex-shrink:0}.booking-menu-duration button{border:1px solid #d7e1d0;background:#f5f8f0;border-radius:7px;min-width:28px;min-height:32px;padding:0;font-size:18px;color:#35533f}.booking-menu-duration output{font-size:12px;min-width:38px;text-align:center;white-space:nowrap}.booking-menu-price{width:100px}.booking-menu-price input{padding:7px 8px}.booking-menu-option>label:first-child{min-width:0}@media(max-width:380px){.booking-menu-option{gap:5px}.booking-menu-price{width:82px}.booking-menu-duration{gap:2px}.booking-menu-duration button{min-width:25px}.booking-menu-duration output{min-width:34px;font-size:11px}}

.money-stepper{display:flex;align-items:stretch;position:relative;min-width:0}.money-stepper input[type=number]{appearance:textfield;-moz-appearance:textfield;min-width:0;padding-right:25px}.money-stepper input::-webkit-inner-spin-button,.money-stepper input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.money-stepper-arrows{position:absolute;right:2px;top:2px;bottom:2px;display:flex;flex-direction:column;width:23px}.money-stepper-arrows button{flex:1;padding:0!important;min-height:0;font-size:9px;border:0;background:#edf2e9;color:#45613f;line-height:1;cursor:pointer}.money-stepper-arrows button:first-child{border-radius:0 5px 0 0}.money-stepper-arrows button:last-child{border-radius:0 0 5px 0}

.booking-previous-history{border-top:1px solid #dbe5d6;margin-top:18px;padding-top:8px}.booking-history-item{border-bottom:1px solid #e4eadf;padding:10px 0}.booking-history-item summary{cursor:pointer;font-weight:650}.booking-payment-summary{background:#edf4e8;padding:12px;border-radius:8px}

.payment-item-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 0;border-bottom:1px solid #dfe6d8}.payment-item-row>span{flex:1}.payment-item-row small{display:block;color:#6d7d65;margin-top:4px}.payment-item-row>input,.payment-item-row>.money-stepper{width:145px;max-width:45%;flex-shrink:0}.payment-item-row>.money-stepper input{width:100%;box-sizing:border-box}

.revenue-donut{position:relative}.category-revenue-hit-areas{position:absolute;inset:0;width:100%;height:100%;z-index:1}.category-revenue-hit-areas path{cursor:pointer}.category-revenue-hit-areas path:hover,.category-revenue-hit-areas path:focus{fill:#ffffff35;outline:none}.revenue-donut>div{position:relative;z-index:2;pointer-events:none}.chart-legend [data-revenue-category]{cursor:pointer;border-radius:7px}.chart-legend [data-revenue-category]:hover,.chart-legend [data-revenue-category]:focus{background:#e9f1e3;outline:2px solid #b2c3a9}

/* Keep the original light palette in system dark mode. */
:root{color-scheme:only light;}
