:root{
  --bg:#f7f7fb;--card:#fff;--txt:#211b35;--muted:#766f86;--line:#e9e6f0;
  --accent:#5b36d7;--accent2:#7446ea;--accent-soft:#eee9ff;
  --green:#268a55;--green-bg:#eefaf2;--green-line:#b9e5c8;
  --red:#d9414b;--red2:#ee5a63;--red-bg:#fff0f1;
  --orange:#b96b13;--blue:#2764c8;
  --shadow:0 14px 34px rgba(40,27,75,.08)
}
*{box-sizing:border-box}html{background:var(--bg)}body{margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:var(--bg);color:var(--txt);-webkit-font-smoothing:antialiased}body.drawer-open{overflow:hidden}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}.shell{min-height:100vh}.top{height:70px;background:rgba(255,255,255,.96);backdrop-filter:blur(16px);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:50}.top-left,.top-actions,.me{display:flex;align-items:center;gap:12px}.brand{display:flex;align-items:center;gap:10px;font-weight:900;font-size:18px;letter-spacing:-.02em}.brandmark{display:grid;place-items:center;width:34px;height:34px;border-radius:11px;background:linear-gradient(145deg,var(--accent),var(--accent2));color:#fff;font-weight:950;box-shadow:0 8px 18px rgba(91,54,215,.22)}.menu-toggle{display:none;border:0;background:transparent;width:44px;height:44px;border-radius:12px;padding:10px;cursor:pointer}.menu-toggle span{display:block;height:2.5px;border-radius:99px;background:var(--txt);margin:5px 0}.top-new{white-space:nowrap}.me{gap:8px}.role{font-size:12px}.layout{display:grid;grid-template-columns:238px minmax(0,1fr)}.side{position:sticky;top:70px;height:calc(100vh - 70px);padding:20px 14px;border-right:1px solid var(--line);background:#fff;display:flex;flex-direction:column;overflow:auto}.side-title{padding:2px 12px 8px;font-size:10px;font-weight:900;letter-spacing:.14em;color:#aaa3b7}.side>a,.drawer nav a{display:flex;align-items:center;gap:11px;padding:12px;border-radius:12px;margin:2px 0;font-weight:760;color:#514a61}.side>a:hover,.side>a.active,.drawer nav a.active{background:var(--accent-soft);color:var(--accent)}.navico{width:24px;height:24px;display:grid;place-items:center;border-radius:8px;background:#f4f2f8;font-size:14px}.side>a.active .navico,.drawer nav a.active .navico{background:#fff}.side-user{margin-top:auto;border-top:1px solid var(--line);padding:16px 10px 4px;display:grid;gap:4px}.side-user span{font-size:12px;color:var(--muted)}.side-user a{font-size:13px;color:var(--accent);font-weight:800;margin-top:4px}.main{padding:24px;min-width:0;max-width:1460px;width:100%;margin:0 auto}.drawer,.drawer-backdrop{display:none}.drawer-backdrop[hidden]{display:none!important;pointer-events:none!important}.card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:18px;box-shadow:0 4px 16px rgba(40,27,75,.025)}.muted{color:var(--muted)}.actions{display:flex;gap:8px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;border-radius:12px;padding:11px 15px;background:linear-gradient(145deg,var(--accent),var(--accent2));color:#fff;font-weight:800;cursor:pointer;min-height:44px;box-shadow:0 7px 18px rgba(91,54,215,.16)}.btn.alt{background:#fff;color:var(--txt);border:1px solid var(--line);box-shadow:none}.btn.ok{background:#238756}.btn.bad{background:#c93d47}.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.kpi b{font-size:27px;display:block;margin-top:6px}.filters,.formgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.formgrid.two{grid-template-columns:repeat(2,minmax(0,1fr))}label{font-size:13px;font-weight:800;color:#5a5268;display:block;margin-bottom:6px}input,select,textarea{width:100%;border:1px solid #dcd7e5;border-radius:12px;padding:11px 12px;background:#fff;color:var(--txt);font-size:16px;outline:none;min-height:44px}input:focus,select:focus,textarea:focus{border-color:#9c84f4;box-shadow:0 0 0 3px rgba(91,54,215,.1)}textarea{min-height:96px;resize:vertical}.tablewrap{overflow:auto;border:1px solid var(--line);border-radius:16px;background:#fff}table{width:100%;border-collapse:collapse;min-width:760px}th,td{text-align:left;padding:12px;border-bottom:1px solid var(--line);vertical-align:top}th{font-size:12px;color:#777084;background:#fbfafd;text-transform:uppercase;letter-spacing:.03em}.badge{display:inline-block;padding:5px 8px;border-radius:999px;font-size:12px;font-weight:800;background:#f1eff5}.badge.ok{background:#dff6e7;color:#17653e}.badge.warn{background:#fff0d7;color:#92550f}.badge.bad{background:#ffe3e5;color:#9e2a32}.flash{padding:12px 14px;border-radius:12px;margin-bottom:14px;background:#e9f5ff;border:1px solid #cae8ff}.flash.error{background:#ffe9eb;border-color:#ffcdd1}.split{display:grid;grid-template-columns:2fr 1fr;gap:14px}.day{margin:18px 0 9px;font-size:18px}.appt{display:grid;grid-template-columns:90px 1fr 160px 110px;gap:10px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.appt:last-child{border-bottom:0}.login{max-width:430px;margin:72px auto;padding:20px}.login .card{padding:28px;box-shadow:var(--shadow)}.login h1{margin:0 0 20px}.hstack{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.nowrap{white-space:nowrap}
/* Calendar */
.calendar-page{max-width:1120px;margin:0 auto}.calendar-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin:0 0 16px}.eyebrow{font-size:11px;letter-spacing:.13em;color:var(--accent);font-weight:950;margin-bottom:5px}.calendar-hero h1{font-size:38px;line-height:1;margin:0 0 7px;letter-spacing:-.04em}.hero-date{font-weight:720;color:var(--muted)}.calendar-toolbar{display:flex;gap:14px;align-items:end;justify-content:space-between;background:#fff;border:1px solid var(--line);border-radius:17px;padding:10px 12px;margin-bottom:11px}.view-tabs{display:flex;align-items:center;background:#f4f2f8;border-radius:13px;padding:4px}.view-tabs a{padding:10px 18px;border-radius:10px;font-weight:850;color:#5c5468;min-width:74px;text-align:center}.view-tabs a.active{background:linear-gradient(145deg,var(--accent),var(--accent2));color:#fff;box-shadow:0 5px 13px rgba(91,54,215,.18)}.staff-filter{display:flex;align-items:center;gap:9px}.staff-filter label{margin:0;white-space:nowrap}.staff-filter select{min-width:210px}.date-nav{display:grid;grid-template-columns:48px minmax(0,1fr) 48px;gap:10px;align-items:center;margin:12px 0}.date-arrow,.date-pill{height:48px;background:#fff;border:1px solid var(--line);border-radius:14px;display:flex;align-items:center;justify-content:center;font-weight:900}.date-arrow{font-size:28px}.date-pill{gap:8px;font-size:15px}.date-pill span{color:var(--accent)}.calendar-summary{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 10px}.calendar-summary span{background:#fff;border:1px solid var(--line);border-radius:999px;padding:7px 11px;font-size:12px;color:var(--muted)}.calendar-summary b{color:var(--txt)}.day-calendar{background:#fff;border:1px solid var(--line);border-radius:20px;padding:8px 14px 16px;box-shadow:0 12px 30px rgba(40,27,75,.045)}.time-row{display:grid;grid-template-columns:72px minmax(0,1fr);min-height:54px;position:relative}.time-row:after{content:"";position:absolute;left:71px;right:0;bottom:0;border-bottom:1px dashed #edeaf1}.time-row:last-child:after{display:none}.time-label{font-size:13px;font-weight:850;color:#3d354c;padding:17px 12px 0 0;text-align:right;position:relative}.time-label:after{content:"";position:absolute;right:-5px;top:24px;width:8px;height:8px;border-radius:50%;background:#ded9e7;border:2px solid #fff;z-index:2}.time-content{padding:4px 0 4px 15px;min-width:0;position:relative;z-index:1}.slot-free{min-height:46px;border:1px solid var(--green-line);background:linear-gradient(90deg,#f1fbf4,#eaf8ef);border-radius:12px;display:flex;align-items:center;gap:9px;padding:8px 12px;color:var(--green);font-weight:850}.slot-free small{margin-left:auto;color:#6b9b7d;font-size:11px;font-weight:700}.slot-check{width:20px;height:20px;border:1.5px solid #68b983;border-radius:50%;display:grid;place-items:center;font-size:12px}.slot-stack{display:grid;gap:5px}.slot-busy{min-height:50px;border-radius:13px;padding:9px 12px;display:grid;grid-template-columns:58px minmax(0,1fr) auto;gap:10px;align-items:center;color:#fff;background:linear-gradient(115deg,var(--red),var(--red2));box-shadow:0 8px 18px rgba(217,65,75,.16)}.busy-time{font-size:16px;font-weight:950}.busy-main{display:grid;gap:2px;min-width:0}.busy-main b,.busy-main span,.busy-main small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.busy-main b{font-size:15px}.busy-main span{font-size:13px;opacity:.94}.busy-main small{font-size:11px;opacity:.82}.busy-status{font-size:10px;font-weight:850;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.25);padding:5px 7px;border-radius:999px;white-space:nowrap}.week-calendar{display:grid;grid-template-columns:repeat(7,minmax(150px,1fr));gap:8px;overflow-x:auto;padding-bottom:6px}.week-day{background:#fff;border:1px solid var(--line);border-radius:16px;min-height:260px;padding:8px}.week-day.today{border-color:#a996f2;box-shadow:0 0 0 2px rgba(91,54,215,.07)}.week-head{display:grid;gap:2px;text-align:center;border-bottom:1px solid var(--line);padding:8px}.week-head span,.week-head small{font-size:11px;color:var(--muted);font-weight:800}.week-head b{font-size:25px}.week-items{display:grid;gap:7px;padding-top:8px}.week-free{background:var(--green-bg);border:1px solid var(--green-line);color:var(--green);border-radius:10px;padding:10px;font-size:12px;font-weight:850;text-align:center}.week-appt{background:var(--red-bg);border:1px solid #ffc7cb;color:#8f2930;border-radius:10px;padding:8px;display:grid;gap:2px}.week-appt b{font-size:12px}.week-appt span,.week-appt small{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.month-calendar{background:#fff;border:1px solid var(--line);border-radius:18px;padding:12px;overflow-x:auto}.month-weekdays,.month-grid{display:grid;grid-template-columns:repeat(7,minmax(100px,1fr));min-width:720px}.month-weekdays b{text-align:center;color:var(--muted);font-size:11px;padding:7px}.month-cell{min-height:112px;border:1px solid #f0edf3;margin:-1px 0 0 -1px;padding:9px;display:flex;flex-direction:column;gap:4px;background:#fff}.month-cell b{font-size:15px}.month-cell span{font-size:11px;font-weight:850}.month-cell small{font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.month-cell.has-appt{background:#fff2f3;color:#842a31}.month-cell.free-day{background:#f3fbf5;color:#28704a}.month-cell.today{outline:2px solid var(--accent);outline-offset:-2px;position:relative;z-index:2}.month-cell.blank{background:#faf9fc}.hero-new{align-self:center}
@media(max-width:980px){.layout{grid-template-columns:1fr}.side{display:none}.menu-toggle{display:block}.main{padding:16px 14px 28px}.top{padding:0 12px;height:66px}.brand{font-size:17px}.brandmark{display:none}.drawer{display:flex;position:fixed;z-index:90;left:0;top:0;bottom:0;width:min(330px,86vw);background:#fff;transform:translateX(-102%);transition:transform .2s ease;flex-direction:column;padding:18px 13px;box-shadow:20px 0 45px rgba(27,20,47,.18);visibility:hidden;pointer-events:none}.drawer.open{transform:translateX(0);visibility:visible;pointer-events:auto}.drawer-backdrop{display:block;position:fixed;inset:0;z-index:80;background:rgba(27,20,47,.42);opacity:0;transition:opacity .18s ease;pointer-events:none}.drawer-backdrop.show{opacity:1;pointer-events:auto}.drawer-backdrop[hidden]{display:none!important;pointer-events:none!important}.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:7px 7px 16px;border-bottom:1px solid var(--line);margin-bottom:10px}.drawer-head div{display:grid;gap:2px}.drawer-head small{color:var(--muted)}.drawer-close{width:44px;height:44px;border:0;border-radius:12px;background:#f3f1f7;font-size:27px;color:var(--txt)}.drawer nav{display:grid;gap:2px;overflow:auto}.drawer-logout{margin-top:auto;border-top:1px solid var(--line);padding:17px 12px 4px;font-weight:850;color:#b12f39}.grid{grid-template-columns:repeat(2,1fr)}.filters,.formgrid{grid-template-columns:repeat(2,1fr)}.split{grid-template-columns:1fr}.calendar-page{max-width:none}.calendar-hero h1{font-size:32px}}
@media(max-width:680px){.top{height:64px}.top-new{padding:9px 11px;min-height:40px}.top-new span{display:none}.brand{font-size:17px}.main{padding:14px 10px 24px}.calendar-hero{align-items:center;margin-bottom:11px}.calendar-hero .hero-new{display:none}.calendar-hero h1{font-size:29px}.eyebrow{font-size:9px}.hero-date{font-size:13px}.calendar-toolbar{align-items:stretch;display:grid;gap:9px;padding:8px}.view-tabs{width:100%;display:grid;grid-template-columns:repeat(3,1fr)}.view-tabs a{min-width:0;padding:9px 10px}.staff-filter{display:grid;grid-template-columns:76px 1fr}.staff-filter select{min-width:0}.date-nav{grid-template-columns:44px minmax(0,1fr) 44px;margin:9px 0}.date-arrow,.date-pill{height:44px}.date-pill{font-size:13px}.calendar-summary{gap:6px}.calendar-summary span{padding:6px 8px}.day-calendar{padding:5px 7px 10px;border-radius:16px}.time-row{grid-template-columns:53px minmax(0,1fr);min-height:51px}.time-row:after{left:52px}.time-label{font-size:12px;padding-right:8px}.time-label:after{right:-4px;width:7px;height:7px}.time-content{padding-left:10px}.slot-free{min-height:43px;padding:7px 9px}.slot-free small{display:none}.slot-busy{grid-template-columns:48px minmax(0,1fr);padding:8px 9px;gap:8px}.busy-time{font-size:14px}.busy-main b{font-size:13px}.busy-main span{font-size:11px}.busy-status{grid-column:2;justify-self:start;padding:3px 6px}.week-calendar{grid-template-columns:repeat(7,142px)}.month-calendar{padding:8px}.grid{grid-template-columns:1fr 1fr;gap:8px}.card{padding:14px;border-radius:14px}.filters,.formgrid,.formgrid.two{grid-template-columns:1fr}.appt{grid-template-columns:70px 1fr}.appt .staff,.appt .status{grid-column:2}.kpi b{font-size:22px}.hide-sm{display:none}.login{margin:28px auto}.hstack{align-items:flex-start}.tablewrap{border-radius:12px}}
@media(max-width:380px){.brand{font-size:15px}.menu-toggle{width:40px;padding:8px}.main{padding-left:8px;padding-right:8px}.calendar-hero h1{font-size:26px}.time-row{grid-template-columns:49px minmax(0,1fr)}.time-row:after{left:48px}.time-label{font-size:11px}.time-content{padding-left:8px}.busy-main span{max-width:175px}}
.slot-continuation{min-height:44px;border-radius:12px;padding:8px 11px;display:flex;align-items:center;gap:8px;background:linear-gradient(90deg,#fff0f1,#ffe7e9);border:1px solid #ffc5c9;color:#a12e36}.slot-continuation>span{font-size:10px}.slot-continuation b{font-size:13px}.slot-continuation small{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#a9585e}

/* v1.3 mobile touch hardening */
a,button,.slot-free,.slot-busy,.week-free,.week-appt,.month-cell,.date-arrow,.date-pill,.view-tabs a{-webkit-tap-highlight-color:rgba(91,54,215,.12);touch-action:manipulation}.slot-free,.slot-busy,.week-free,.week-appt,.month-cell,.date-arrow,.date-pill,.view-tabs a{cursor:pointer;position:relative}.menu-toggle,.drawer-close{touch-action:manipulation}.drawer-backdrop:not(.show){pointer-events:none!important}.drawer-backdrop.show:not([hidden]){pointer-events:auto!important}


/* v1.4 navigation + manual income */
.back-btn{display:inline-flex;align-items:center;gap:8px;min-height:42px;margin:0 0 14px;padding:8px 13px;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--txt);font:inherit;font-weight:850;box-shadow:0 5px 14px rgba(40,27,75,.04);cursor:pointer;touch-action:manipulation}.back-btn span{font-size:23px;line-height:1;color:var(--accent)}.back-btn:active{transform:translateY(1px)}@media(max-width:680px){.back-btn{min-height:44px;margin-bottom:11px;padding:8px 12px;position:relative;z-index:2}}
