:root{--bg:#f7f8fc;--surface:#fff;--surface-2:#f0f1f7;--text:#272738;--muted:#737386;--primary:#7063d9;--primary-dark:#594bc5;--primary-soft:#eeebff;--mint:#dff6ee;--mint-strong:#2b9b78;--peach:#fff0e5;--peach-strong:#c87037;--rose:#ffe9ee;--danger:#bd435c;--border:#e8e8f0;--shadow:0 10px 35px rgba(52,48,92,.08);--radius:18px;--radius-sm:12px;--sidebar:252px}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.5 Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(26px,4vw,36px);line-height:1.15;letter-spacing:-.035em}h2{font-size:21px;letter-spacing:-.02em}h3{font-size:16px}.muted{color:var(--muted)}.small,small{font-size:12px}.eyebrow{color:var(--primary);font-weight:800;text-transform:uppercase;letter-spacing:.1em;font-size:11px;margin-bottom:8px}.hidden{display:none!important}.full{grid-column:1/-1}.text-right{text-align:right}.nowrap{white-space:nowrap}
.brand{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:850;letter-spacing:-.03em}.brand-mark{width:34px;height:34px;border-radius:11px;background:linear-gradient(135deg,#8678e8,#5e50c6);color:#fff;display:grid;place-items:center;box-shadow:0 7px 18px rgba(112,99,217,.25)}.brand-large{font-size:24px;margin-bottom:34px}.brand-large .brand-mark{width:42px;height:42px}
.auth-body{min-height:100vh;background:radial-gradient(circle at 15% 10%,#e9f8f3 0,transparent 30%),radial-gradient(circle at 90% 90%,#eeeaff 0,transparent 32%),#fafaff}.auth-shell,.install-shell{min-height:100vh;padding:24px;display:grid;place-items:center}.auth-card{width:min(100%,460px);background:rgba(255,255,255,.92);border:1px solid rgba(255,255,255,.8);border-radius:26px;padding:clamp(24px,5vw,44px);box-shadow:0 25px 70px rgba(52,48,92,.12)}.install-card{width:min(100%,760px)}.auth-card h1{margin-bottom:10px}.auth-card>.muted{margin-bottom:28px}.auth-footer{text-align:center;margin-top:24px}.auth-footer a,.link{color:var(--primary);font-weight:700}.requirements{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0}.req{padding:6px 10px;border-radius:999px;background:var(--surface-2);font-size:12px}.req.ok{background:var(--mint);color:#197558}.req.bad{background:var(--rose);color:var(--danger)}
.app-shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;width:var(--sidebar);background:#fff;border-right:1px solid var(--border);padding:26px 18px;display:flex;flex-direction:column;z-index:30}.sidebar .brand{padding:0 10px;margin-bottom:32px}.nav{display:grid;gap:5px}.nav-section{padding:18px 12px 7px;color:#a0a0af;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.11em}.nav-link{display:flex;align-items:center;gap:12px;padding:11px 13px;border-radius:12px;color:#666679;font-weight:650;transition:.18s}.nav-link:hover{background:var(--surface-2);color:var(--text)}.nav-link.active{background:var(--primary-soft);color:var(--primary)}.nav-icon{width:22px;text-align:center;font-size:17px}.sidebar-footer{margin-top:auto;padding:14px 8px 0;border-top:1px solid var(--border)}.user-chip{display:flex;gap:10px;align-items:center}.avatar{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:var(--mint);color:var(--mint-strong);font-weight:850}.user-chip strong,.user-chip span{display:block;max-width:145px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-chip span{font-size:12px;color:var(--muted)}
.main{margin-left:var(--sidebar);min-height:100vh}.topbar{height:74px;padding:0 clamp(20px,4vw,48px);display:flex;align-items:center;justify-content:flex-end;border-bottom:1px solid var(--border);background:rgba(247,248,252,.86);backdrop-filter:blur(12px);position:sticky;top:0;z-index:20}.public-link{display:flex;align-items:center;gap:8px;font-weight:700;color:var(--primary)}.content{width:min(100%,1280px);padding:34px clamp(18px,4vw,48px) 90px}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:28px}.page-head h1{margin-bottom:5px}.page-actions{display:flex;gap:10px;flex-wrap:wrap}.subscription-banner{background:var(--rose);color:#7f2b40;border:1px solid #ffd2dc;padding:13px 18px;margin:0 clamp(18px,4vw,48px);border-radius:0 0 14px 14px}
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px}.card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px}.card-head h2,.card-head h3{margin:0}.grid{display:grid;gap:18px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.stat-card{position:relative;overflow:hidden}.stat-label{font-size:13px;color:var(--muted);font-weight:650}.stat-value{display:block;font-size:30px;line-height:1.2;font-weight:850;letter-spacing:-.04em;margin:9px 0 3px}.stat-note{font-size:12px;color:var(--muted)}.stat-dot{position:absolute;width:70px;height:70px;border-radius:50%;right:-22px;top:-22px;background:var(--primary-soft)}.stat-card.mint .stat-dot{background:var(--mint)}.stat-card.peach .stat-dot{background:var(--peach)}.stat-card.rose .stat-dot{background:var(--rose)}
.btn{border:0;border-radius:11px;padding:10px 15px;display:inline-flex;align-items:center;justify-content:center;gap:7px;font-weight:750;cursor:pointer;transition:.18s;min-height:42px}.btn:hover{transform:translateY(-1px)}.btn-primary{background:var(--primary);color:#fff;box-shadow:0 8px 20px rgba(112,99,217,.2)}.btn-primary:hover{background:var(--primary-dark)}.btn-secondary{background:var(--surface-2);color:var(--text)}.btn-danger{background:var(--rose);color:var(--danger)}.btn-ghost{background:transparent;color:var(--muted)}.btn-lg{min-height:50px;padding:13px 20px}.btn-sm{min-height:34px;padding:6px 10px;font-size:12px}.btn-block{width:100%}.actions{display:flex;gap:7px;align-items:center;flex-wrap:wrap}.actions form{margin:0}
label{display:grid;gap:7px;font-size:13px;font-weight:700;color:#555568}input,select,textarea{width:100%;border:1px solid #dddde8;border-radius:11px;background:#fff;color:var(--text);padding:11px 13px;outline:none;min-height:44px;transition:.16s}textarea{min-height:104px;resize:vertical}input:focus,select:focus,textarea:focus{border-color:#9d93e9;box-shadow:0 0 0 4px var(--primary-soft)}input[type=checkbox]{width:18px;height:18px;min-height:0;accent-color:var(--primary)}.check-label{display:flex;align-items:center;gap:9px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.form-stack{display:grid;gap:16px}.form-separator{height:1px;background:var(--border);margin:5px 0}.input-row{display:flex;gap:10px;align-items:end}.input-row>*{flex:1}
.alert{border-radius:12px;padding:12px 15px;margin-bottom:16px;font-size:14px}.alert-success{background:var(--mint);color:#17694f}.alert-error{background:var(--rose);color:#8f3047}.alert-warning{background:var(--peach);color:#8b4d25}.flash-wrap{margin-bottom:20px}.badge{display:inline-flex;align-items:center;padding:5px 9px;border-radius:999px;background:var(--surface-2);font-size:11px;font-weight:800}.badge-success{background:var(--mint);color:#1e765b}.badge-danger{background:var(--rose);color:var(--danger)}.badge-warning{background:var(--peach);color:#9a5729}.badge-primary{background:var(--primary-soft);color:var(--primary)}
.table-wrap{overflow:auto;border-radius:14px;border:1px solid var(--border)}table{border-collapse:collapse;width:100%;background:#fff}th,td{text-align:left;padding:13px 15px;border-bottom:1px solid var(--border);vertical-align:middle}th{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#8d8d9b;background:#fafafd}tbody tr:last-child td{border-bottom:0}.empty{text-align:center;padding:48px 20px;color:var(--muted)}.empty-icon{font-size:36px;margin-bottom:12px}.list{display:grid;gap:10px}.appointment-item{display:grid;grid-template-columns:64px 1fr auto;align-items:center;gap:14px;padding:13px;border:1px solid var(--border);border-radius:14px}.appointment-time{background:var(--primary-soft);color:var(--primary);padding:8px;border-radius:10px;text-align:center;font-weight:850}.appointment-item h3{margin:0 0 2px}.appointment-item p{margin:0;color:var(--muted);font-size:13px}.color-dot{width:10px;height:10px;border-radius:50%;display:inline-block;margin-right:5px}.progress{height:8px;background:var(--surface-2);border-radius:99px;overflow:hidden}.progress>span{display:block;height:100%;background:var(--primary);border-radius:inherit}.bar-row{display:grid;grid-template-columns:120px 1fr 35px;gap:12px;align-items:center;margin:12px 0;font-size:13px}
.day-row{display:grid;grid-template-columns:120px 1fr 1fr;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid var(--border)}.day-row:last-child{border:0}.day-toggle{display:flex;gap:9px;align-items:center}.day-row.is-closed .time-input{opacity:.4;pointer-events:none}.entity-card{display:flex;justify-content:space-between;gap:18px;align-items:center}.entity-info{display:flex;gap:13px;align-items:center}.entity-avatar{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;color:#fff;font-size:18px;font-weight:850}.entity-card h3{margin:0 0 3px}.entity-card p{margin:0;color:var(--muted);font-size:13px}.service-price{font-weight:850;color:var(--primary)}
.public-body{background:radial-gradient(circle at 85% 5%,#ece9ff 0,transparent 28%),var(--bg);min-height:100vh}.public-nav{height:70px;display:flex;align-items:center;justify-content:space-between;width:min(1100px,calc(100% - 32px));margin:auto}.public-main{width:min(1100px,calc(100% - 32px));margin:20px auto 70px}.salon-hero{background:linear-gradient(135deg,#fff,#f6f3ff);border:1px solid var(--border);border-radius:26px;padding:clamp(24px,5vw,48px);box-shadow:var(--shadow);display:grid;grid-template-columns:1.4fr .8fr;gap:30px;align-items:end}.salon-hero h1{font-size:clamp(30px,6vw,52px);margin:0 0 12px}.salon-contact{display:grid;gap:10px;background:#fff;padding:18px;border-radius:16px;border:1px solid var(--border)}.booking-card{margin-top:20px;padding:clamp(20px,4vw,34px)}.booking-steps{display:flex;gap:6px;margin:0 0 28px}.step{height:5px;background:var(--surface-2);border-radius:99px;flex:1}.step.active{background:var(--primary)}.choice-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.choice{position:relative}.choice input{position:absolute;opacity:0;pointer-events:none}.choice label{height:100%;padding:16px;border:1.5px solid var(--border);border-radius:14px;cursor:pointer;background:#fff;display:block}.choice input:checked+label{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 3px rgba(112,99,217,.08)}.choice-title{font-weight:800;display:block}.choice-meta{color:var(--muted);font-size:12px;margin-top:4px;display:block}.booking-section{margin-top:28px}.booking-section h2{margin-bottom:13px}.slots{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}.slot{position:relative}.slot input{position:absolute;opacity:0}.slot label{text-align:center;border:1px solid var(--border);padding:9px 5px;border-radius:10px;cursor:pointer}.slot input:checked+label{background:var(--primary);color:#fff;border-color:var(--primary)}.loading{color:var(--muted);padding:14px 0}.booking-submit{margin-top:24px}.confirmation{width:min(620px,calc(100% - 32px));margin:40px auto}.success-mark{width:68px;height:68px;border-radius:22px;background:var(--mint);color:var(--mint-strong);display:grid;place-items:center;font-size:32px;margin-bottom:24px}.detail-list{display:grid;gap:12px;margin:24px 0}.detail-row{display:flex;justify-content:space-between;gap:16px;border-bottom:1px solid var(--border);padding-bottom:11px}.detail-row span{color:var(--muted)}
.modal{position:fixed;inset:0;background:rgba(30,28,48,.45);z-index:100;display:none;place-items:center;padding:16px}.modal.open{display:grid}.modal-card{background:#fff;border-radius:20px;padding:24px;width:min(100%,520px);max-height:90vh;overflow:auto;box-shadow:0 25px 80px rgba(20,18,40,.22)}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.modal-head h2{margin:0}.icon-btn{width:38px;height:38px;border:0;background:var(--surface-2);border-radius:10px;cursor:pointer;font-size:20px}
.mobile-nav{display:none}.desktop-only{display:block}
@media(max-width:1000px){.grid-4{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(2,1fr)}.slots{grid-template-columns:repeat(4,1fr)}}
@media(max-width:760px){:root{--sidebar:0px}.sidebar{display:none}.main{margin-left:0}.topbar{height:60px;padding:0 18px}.content{padding-top:22px}.page-head{align-items:flex-start;flex-direction:column}.page-actions{width:100%}.page-actions .btn{flex:1}.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.stat-grid{grid-template-columns:repeat(2,1fr)}.form-grid{grid-template-columns:1fr}.full{grid-column:auto}.day-row{grid-template-columns:1fr 1fr}.day-toggle{grid-column:1/-1}.mobile-nav{position:fixed;display:grid;grid-template-columns:repeat(5,1fr);inset:auto 0 0;background:rgba(255,255,255,.96);border-top:1px solid var(--border);padding:7px 5px max(7px,env(safe-area-inset-bottom));z-index:50;backdrop-filter:blur(15px)}.mobile-nav a{display:grid;place-items:center;gap:1px;color:#858594;font-size:10px;font-weight:700}.mobile-nav a span{font-size:19px}.mobile-nav a.active{color:var(--primary)}.salon-hero{grid-template-columns:1fr}.choice-grid{grid-template-columns:1fr 1fr}.slots{grid-template-columns:repeat(3,1fr)}.desktop-only{display:none}.appointment-item{grid-template-columns:55px 1fr}.appointment-item>.actions{grid-column:1/-1}.entity-card{align-items:flex-start;flex-direction:column}.entity-card>.actions{width:100%}.bar-row{grid-template-columns:90px 1fr 30px}.table-wrap.mobile-cards{border:0;overflow:visible}.mobile-cards table,.mobile-cards thead,.mobile-cards tbody,.mobile-cards th,.mobile-cards td,.mobile-cards tr{display:block}.mobile-cards thead{display:none}.mobile-cards tr{background:#fff;border:1px solid var(--border);border-radius:14px;padding:12px;margin-bottom:10px}.mobile-cards td{border:0;padding:5px 3px}.mobile-cards td:before{content:attr(data-label);color:var(--muted);font-size:11px;display:block}.auth-shell,.install-shell{padding:12px}.auth-card{border-radius:20px}.public-main{margin-top:8px}.subscription-banner{margin:0;border-radius:0}.detail-row{align-items:flex-end}.input-row{flex-direction:column;align-items:stretch}}
@media(max-width:420px){.stat-grid{grid-template-columns:1fr}.choice-grid{grid-template-columns:1fr}.slots{grid-template-columns:repeat(3,1fr)}.card{padding:17px}.public-nav{height:60px}}

/* Booking flow v0.2 */
.salon-identity{display:flex;align-items:flex-start;gap:20px}.salon-logo{width:82px;height:82px;border-radius:22px;object-fit:cover;background:#fff;border:1px solid var(--border);box-shadow:0 10px 28px rgba(65,56,120,.12);flex:none}.salon-logo-default{display:grid;place-items:center;background:var(--primary-soft);color:var(--primary);font-size:34px}.booking-flow{display:grid;gap:18px;margin-top:20px}.booking-step-card{position:relative;background:rgba(255,255,255,.96);border:1px solid var(--border);border-radius:22px;padding:clamp(20px,4vw,30px);box-shadow:var(--shadow);scroll-margin-top:80px}.booking-step-card:before{content:"";position:absolute;left:0;top:24px;bottom:24px;width:4px;border-radius:0 4px 4px 0;background:linear-gradient(var(--primary),#a99ff1)}.booking-step-head{display:flex;align-items:center;gap:12px;margin-bottom:22px}.booking-step-head h2{margin:0 0 2px;font-size:22px}.booking-step-head p{margin:0;color:var(--muted);font-size:13px}.step-number{width:30px;height:30px;border-radius:10px;background:var(--primary);color:#fff;display:grid;place-items:center;font-weight:850;box-shadow:0 6px 14px rgba(112,99,217,.22)}.step-icon{width:42px;height:42px;border-radius:13px;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center;font-size:21px}.barber-choice label{display:flex;align-items:center;gap:13px}.barber-photo{width:64px;height:64px;border-radius:18px;object-fit:cover;flex:none;border:2px solid #fff;box-shadow:0 5px 16px rgba(49,45,79,.12)}.barber-photo-default{display:grid;place-items:center;background:linear-gradient(135deg,var(--primary-soft),var(--mint));color:var(--primary);font-size:25px}.choice-description{display:block;color:var(--muted);font-size:11px;margin-top:8px;line-height:1.4}.service-choice label{min-height:92px}.booking-date-layout{display:grid;grid-template-columns:minmax(300px,430px) 1fr;gap:24px;align-items:start}.calendar{border:1px solid var(--border);border-radius:18px;padding:17px;background:#fbfbfe}.calendar-head{display:grid;grid-template-columns:40px 1fr 40px;align-items:center;text-align:center;margin-bottom:14px}.calendar-head strong{text-transform:capitalize;font-size:16px}.calendar-nav{width:38px;height:38px;border:0;border-radius:11px;background:#fff;color:var(--primary);font-size:25px;cursor:pointer;box-shadow:0 3px 12px rgba(45,40,80,.07)}.calendar-nav:disabled{opacity:.3;cursor:not-allowed}.calendar-weekdays,.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.calendar-weekdays{margin-bottom:7px}.calendar-weekdays span{text-align:center;color:var(--muted);font-size:11px;font-weight:800}.calendar-day{aspect-ratio:1;border:0;border-radius:11px;background:#fff;color:var(--text);font-weight:750;cursor:pointer;transition:.16s;min-width:0}.calendar-day:hover:not(:disabled){background:var(--primary-soft);color:var(--primary);transform:translateY(-1px)}.calendar-day:disabled{color:#c7c7d1;background:transparent;cursor:not-allowed}.calendar-day.today:not(.selected){box-shadow:inset 0 0 0 1.5px #bbb4ef}.calendar-day.selected{background:var(--primary);color:#fff;box-shadow:0 7px 16px rgba(112,99,217,.25)}.calendar-blank{aspect-ratio:1}.calendar-legend{display:flex;gap:15px;margin-top:13px;color:var(--muted);font-size:11px}.legend-dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:4px}.legend-dot.available{background:#fff;border:1px solid #bbb4ef}.legend-dot.selected{background:var(--primary)}.time-panel{min-height:290px;border-left:1px solid var(--border);padding-left:24px}.time-panel h3{margin:0 0 15px}.time-panel .slots{grid-template-columns:repeat(4,minmax(58px,1fr))}.slot-placeholder{grid-column:1/-1;display:grid;place-items:center;text-align:center;color:var(--muted);padding:50px 15px}.slot-placeholder span{font-size:32px;color:#aaa3df}.slot-placeholder p{margin:8px 0 0}.public-map{margin-top:20px;overflow:hidden}.public-map iframe{display:block;width:100%;height:360px;border:0;border-radius:14px}.media-field{display:flex;align-items:center;gap:18px;padding:16px;border:1px dashed #d7d4eb;border-radius:15px;background:#faf9ff}.media-field>div:last-child{flex:1}.media-preview{width:82px;height:82px;border-radius:18px;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center;font-size:29px;overflow:hidden;flex:none}.media-preview img{width:100%;height:100%;object-fit:cover}.media-preview-round{border-radius:50%}.entity-avatar-photo{object-fit:cover;background:#fff}

@media(max-width:860px){.booking-date-layout{grid-template-columns:1fr}.time-panel{border-left:0;border-top:1px solid var(--border);padding:20px 0 0;min-height:0}.time-panel .slots{grid-template-columns:repeat(5,1fr)}}
@media(max-width:600px){.salon-identity{align-items:center}.salon-logo{width:66px;height:66px;border-radius:18px}.booking-step-head{align-items:flex-start}.booking-step-head .step-icon{display:none}.booking-step-card:before{top:18px;bottom:18px}.barber-choice-grid{grid-template-columns:1fr}.booking-date-layout{gap:18px}.calendar{padding:12px}.calendar-day{border-radius:9px}.time-panel .slots{grid-template-columns:repeat(3,1fr)}.media-field{align-items:flex-start;flex-direction:column}.public-map iframe{height:300px}}
.log-stat{font-size:25px}.log-filters{margin-bottom:4px}.log-filters select{max-width:180px}.log-filters input{max-width:260px}.log-context{max-width:440px;max-height:220px;overflow:auto;background:#252438;color:#eeeefa;border-radius:10px;padding:12px;font-size:11px;white-space:pre-wrap;word-break:break-word}code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;color:#5e50c6}
