@import url('https://fonts.googleapis.com/css2?family=Onest:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');

:root{
  --bg:#F1ECE4;--card:#fff;--ink:#1A1714;--muted:#8A7F74;--line:#E1DBD2;
  --accent:#1A1714;--green:#2F6F58;--amber:#8A5F13;--red:#A63A2B;--blue:#3B5C7A;
  --shadow:0 14px 40px rgba(16,24,40,.08)
}
*{box-sizing:border-box}html{background:var(--bg)}body{margin:0;font-family:'Onest','Golos Text',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--ink)}
button,input,select,textarea{font:inherit}button{cursor:pointer}a{color:inherit}
.hidden{display:none!important}.muted{color:var(--muted)}.small{font-size:12px}.dangerText{color:var(--red)}
.shell{min-height:100vh}.authWrap{max-width:980px;margin:auto;padding:26px 18px 70px}
.authTop{display:flex;justify-content:space-between;align-items:center}.brand{font-size:23px;font-weight:950;letter-spacing:-.045em}
.deviceBadge,.badge,.pill{display:inline-flex;align-items:center;border-radius:999px;font-size:11px;font-weight:800}
.deviceBadge{padding:6px 9px;background:#F1ECE4;color:#6B6156}.badge{padding:6px 8px;background:#E9F0EC;color:var(--green)}
.badge.warn{background:#FBEFD9;color:var(--amber)}.badge.red{background:#F6E7E4;color:var(--red)}.badge.gray{background:#F1ECE4;color:#6B6156}.badge.blue{background:#E4EDF5;color:var(--blue)}
.hero{padding:70px 0 30px}.eyebrow{font-size:11px;font-weight:900;letter-spacing:.1em;text-transform:uppercase;color:#A79B8B}
.hero h1{font-size:clamp(40px,7vw,72px);line-height:.98;letter-spacing:-.065em;margin:10px 0 18px;max-width:800px}
.hero p{max-width:650px;color:var(--muted);font-size:17px;line-height:1.55}
.authGrid{display:grid;grid-template-columns:1.05fr .95fr;gap:16px}.card{background:var(--card);border:1px solid var(--line);border-radius:20px;padding:18px}
.authCard{padding:24px}.authCard h2{font-size:26px;margin:6px 0 14px;letter-spacing:-.03em}
.field{margin:12px 0}.field label{display:block;font-size:12px;font-weight:800;margin:0 0 6px}.field input,.field select,.field textarea{
  width:100%;padding:12px 13px;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--ink);outline:none
}.field input:focus,.field select:focus,.field textarea:focus{border-color:#A79B8B;box-shadow:0 0 0 3px #F1ECE4}.field textarea{min-height:110px;resize:vertical}
.fields{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}.field.full{grid-column:1/-1}
.btn{border:0;border-radius:12px;background:var(--accent);color:#fff;font-weight:850;padding:11px 14px;display:inline-flex;gap:8px;align-items:center;justify-content:center;text-decoration:none}
.btn.light{background:#F1ECE4;color:#1A1714}.btn.red{background:#F6E7E4;color:var(--red)}.btn.green{background:#E9F0EC;color:var(--green)}
.btn.sm{padding:8px 10px;font-size:12px;border-radius:10px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.full{width:100%}
.note{margin-top:14px;padding:13px 14px;border-radius:13px;background:#FBFAF8;color:#6B6156;font-size:13px;line-height:1.5}
.note.ok{background:#E9F0EC;color:#2F6F58}.note.warn{background:#FBEFD9;color:#8A5F13}
.appLayout{display:grid;grid-template-columns:252px 1fr;min-height:100vh}.sidebar{background:#1A1714;color:#fff;padding:22px 15px;position:sticky;top:0;height:100vh;z-index:20}
.sidebar .brand{margin:0 8px 6px}.sidebarRole{font-size:12px;color:#A79B8B;margin:0 8px 20px}.nav{margin-top:18px}.nav button{
  display:flex;width:100%;gap:10px;align-items:center;border:0;background:none;color:#A79B8B;padding:11px 12px;border-radius:12px;margin:3px 0;text-align:left;font-weight:750
}.nav button:hover,.nav button.active{background:#332D26;color:#fff}.nav .ico{width:20px;text-align:center}
.appMain{min-width:0}.topbar{height:74px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 26px;position:sticky;top:0;z-index:15}
.topbar h1{font-size:19px;margin:0}.userBox{display:flex;align-items:center;gap:10px}.avatar{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:#1A1714;color:#fff;font-weight:900}
.content{padding:26px;max-width:1500px}.page{display:none}.page.active{display:block}.title{font-size:34px;letter-spacing:-.045em;margin:5px 0 20px}
.sectionHead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:25px 0 12px}.sectionHead h2{margin:0;font-size:19px}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:13px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:13px}.grid2{display:grid;grid-template-columns:repeat(2,1fr);gap:13px}
.stat{background:#fff;border:1px solid var(--line);border-radius:18px;padding:17px;cursor:pointer;transition:.15s}.stat:hover{transform:translateY(-1px);box-shadow:var(--shadow)}
.stat b{font-size:29px;display:block;margin-top:8px;letter-spacing:-.04em}.stat small{color:var(--muted)}
.tableWrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:18px}table{width:100%;border-collapse:collapse;min-width:760px}th,td{text-align:left;padding:13px 15px;border-bottom:1px solid #F1ECE4;font-size:13px}
th{font-size:10px;letter-spacing:.075em;text-transform:uppercase;color:#A79B8B}tr.clickable{cursor:pointer}tr.clickable:hover td{background:#E4EDF5}
.objectGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:13px}.objectCard{cursor:pointer;transition:.15s}.objectCard:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.objectCard h3{font-size:18px;margin:7px 0 4px}
.meta{display:flex;gap:7px;flex-wrap:wrap;margin-top:13px}.pill{background:#F1ECE4;color:#6B6156;padding:6px 8px}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.toolbar input,.toolbar select{padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:#fff}
.ticketList{display:grid;gap:10px}.ticket{background:#fff;border:1px solid var(--line);border-radius:16px;padding:15px;cursor:pointer}.ticket:hover{box-shadow:var(--shadow)}
.ticketTop{display:flex;justify-content:space-between;gap:12px}.ticket h3{font-size:15px;margin:0}.ticket p{font-size:13px;color:var(--muted);margin:8px 0 0}.ticketMeta{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}
.empty{padding:36px;text-align:center;color:var(--muted);background:#fff;border:1px dashed #D9D2C7;border-radius:18px}
.modal{display:none;position:fixed;inset:0;background:rgba(26,23,20,.5);z-index:60;align-items:center;justify-content:center;padding:18px}.modal.open{display:flex}
.sheet{background:#fff;border-radius:22px;width:min(820px,100%);max-height:92vh;overflow:auto;padding:22px;box-shadow:0 30px 100px #0005}.sheet.wide{width:min(1100px,100%)}
.sheetHead{display:flex;justify-content:space-between;gap:14px;align-items:start}.sheetHead h2{margin:2px 0 4px;letter-spacing:-.035em}.close{border:0;background:#F1ECE4;border-radius:50%;width:38px;height:38px;font-size:18px;cursor:pointer;touch-action:manipulation;position:relative;z-index:5;-webkit-tap-highlight-color:transparent}
.photoGrid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}.photo{aspect-ratio:1;background:#F1ECE4;border-radius:13px;overflow:hidden;display:block;border:0;padding:0}.photo img{width:100%;height:100%;object-fit:cover}
.kv{display:grid;grid-template-columns:170px 1fr;gap:8px 14px;font-size:13px;padding:6px 0}.kv b{color:#6B6156}.divider{height:1px;background:var(--line);margin:18px 0}
.group{border:1px solid var(--line);border-radius:15px;margin:9px 0;overflow:hidden}.groupHead{padding:12px 14px;background:#FBFAF8;display:flex;justify-content:space-between;font-weight:850}.groupBody{padding:8px}
.eqRow{padding:11px;border-bottom:1px solid #F1ECE4;display:flex;justify-content:space-between;gap:10px;cursor:pointer}.eqRow:last-child{border-bottom:0}
.timeline{display:grid;gap:10px}.timelineItem{border-left:3px solid #D9D2C7;padding:3px 0 3px 14px}.timelineItem b{font-size:13px}.timelineItem p{margin:5px 0;color:var(--muted);font-size:13px}
.toast{position:fixed;right:20px;bottom:20px;background:#1A1714;color:#fff;padding:12px 15px;border-radius:12px;z-index:100;opacity:0;transform:translateY(12px);transition:.2s;max-width:420px}.toast.show{opacity:1;transform:none}
.mobileNav{display:none}
.loading{opacity:.55;pointer-events:none}.spinner{width:18px;height:18px;border:2px solid #D9D2C7;border-top-color:#1A1714;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.reportResult{background:#fff;border:1px solid var(--line);border-radius:18px;padding:18px}.barRow{display:grid;grid-template-columns:150px 1fr 40px;gap:10px;align-items:center;font-size:12px;margin:10px 0}.bar{height:9px;background:#F1ECE4;border-radius:999px;overflow:hidden}.bar i{display:block;height:100%;background:#1A1714}
@media(max-width:1050px){.grid4{grid-template-columns:repeat(2,1fr)}.objectGrid,.grid3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:820px){
  .appLayout{grid-template-columns:1fr}.sidebar{display:none}.topbar{padding:0 16px}.content{padding:17px 14px 86px}.title{font-size:29px}
  .mobileNav{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--line);z-index:40;padding-bottom:env(safe-area-inset-bottom)}
  .mobileNav button{border:0;background:#fff;padding:10px 3px 8px;font-size:9px;color:#8A7F74}.mobileNav button span{font-size:18px;display:block;margin-bottom:2px}.mobileNav button.active{color:#1A1714;font-weight:900}
  .authGrid{grid-template-columns:1fr}.hero{padding-top:46px}.photoGrid{grid-template-columns:repeat(3,1fr)}.fields{grid-template-columns:1fr}
}
@media(max-width:560px){.grid4,.grid3,.grid2,.objectGrid{grid-template-columns:1fr}.photoGrid{grid-template-columns:repeat(2,1fr)}.kv{grid-template-columns:1fr}.barRow{grid-template-columns:110px 1fr 30px}}


/* v1.0.1 UX */
.kanban{display:flex;gap:12px;overflow-x:auto;padding:2px 2px 14px;scroll-snap-type:x proximity;align-items:flex-start}
.kanbanCol{flex:0 0 300px;background:#E4EDF5;border:1px solid #E1DBD2;border-radius:18px;padding:10px;min-height:210px;scroll-snap-align:start}
.kanbanHead{display:flex;justify-content:space-between;align-items:center;padding:5px 5px 10px;font-size:13px;font-weight:900;position:sticky;top:0}
.kanbanCount{display:grid;place-items:center;min-width:24px;height:24px;border-radius:999px;background:#fff;color:#6B6156;font-size:11px}
.kanbanCards{display:grid;gap:8px}.kanbanCard{background:#fff;border:1px solid #E1DBD2;border-radius:14px;padding:12px;cursor:pointer;box-shadow:0 1px 2px rgba(16,24,40,.03)}
.kanbanCard:hover{box-shadow:var(--shadow)}.kanbanCard h4{margin:0 0 6px;font-size:13px;line-height:1.35}.kanbanCard p{font-size:12px;line-height:1.4;color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:0}
.kanbanCard .ticketMeta{margin-top:9px}.kanbanCard .pill{font-size:9px;padding:4px 6px}.kanbanCol.dropOver{outline:2px solid #8A7F74;outline-offset:2px}
.estimateBox{background:#1A1714;color:#fff;border-radius:18px;padding:16px}.estimateBox .eyebrow{color:#A79B8B}.estimateRows{margin-top:10px;display:grid;gap:8px}.estimateRow{display:flex;justify-content:space-between;gap:14px;font-size:13px}.estimateRow.total{border-top:1px solid #4A423B;padding-top:10px;font-weight:900;font-size:15px}.estimateBox small{color:#A79B8B;line-height:1.45;display:block;margin-top:10px}
.serviceHints{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.serviceHint{background:#332D26;border-radius:999px;padding:6px 8px;font-size:10px;color:#D9D2C7}
.thumbGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:9px}.thumbBtn{aspect-ratio:1.3;border:0;border-radius:14px;overflow:hidden;background:#F1ECE4;padding:0;position:relative}.thumbBtn img{width:100%;height:100%;object-fit:cover;display:block}.thumbBtn span{position:absolute;left:6px;right:6px;bottom:6px;background:rgba(16,24,40,.72);color:white;border-radius:8px;padding:5px 6px;font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lightbox{position:fixed;inset:0;background:rgba(3,7,18,.94);z-index:150;display:none;align-items:center;justify-content:center;padding:22px}.lightbox.open{display:flex}.lightbox img{max-width:min(1200px,92vw);max-height:84vh;object-fit:contain;border-radius:10px}.lightboxClose,.lightboxPrev,.lightboxNext{position:absolute;border:0;background:rgba(255,255,255,.12);color:white;border-radius:50%;width:46px;height:46px;font-size:24px}.lightboxClose{right:20px;top:20px}.lightboxPrev{left:18px;top:50%}.lightboxNext{right:18px;top:50%}.lightboxCaption{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);color:white;background:rgba(0,0,0,.45);padding:8px 12px;border-radius:999px;font-size:12px;max-width:80vw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.assistantFab{position:fixed;right:20px;bottom:20px;z-index:52;border:0;background:#1A1714;color:#fff;border-radius:999px;padding:12px 16px;font-weight:900;box-shadow:0 16px 40px #10182840}.assistantPanel{position:fixed;right:20px;bottom:76px;width:min(380px,calc(100vw - 28px));max-height:65vh;background:#fff;border:1px solid var(--line);border-radius:20px;box-shadow:0 25px 80px #10182833;z-index:53;display:none;overflow:hidden}.assistantPanel.open{display:block}.assistantHead{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.assistantBody{padding:15px}.assistantBubble{background:#F1ECE4;border-radius:14px;padding:12px;font-size:13px;line-height:1.45}.assistantQuick{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.assistantQuick button{border:1px solid var(--line);background:#fff;border-radius:999px;padding:7px 9px;font-size:11px}
.timelineStatus{font-weight:850}.pricePreviewLoading{opacity:.55}
@media(max-width:820px){.assistantFab{bottom:76px;right:14px}.assistantPanel{bottom:128px;right:14px}.kanbanCol{flex-basis:82vw}.thumbGrid{grid-template-columns:repeat(2,1fr)}}


/* v1.1.0 realtime + notification center */
.notifyWrap{position:relative}.notifyBtn{position:relative;width:38px;height:38px;border-radius:12px;border:1px solid var(--line);background:#fff;font-size:17px;display:grid;place-items:center}.notifyBtn:hover{background:#FBFAF8}.notifyCount{position:absolute;right:-5px;top:-6px;min-width:19px;height:19px;padding:0 5px;border-radius:999px;background:#A63A2B;color:white;display:grid;place-items:center;font-size:9px;font-weight:900;border:2px solid white}.notifyPanel{position:absolute;right:0;top:48px;width:min(390px,calc(100vw - 24px));max-height:70vh;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 24px 70px rgba(16,24,40,.2);display:none;overflow:hidden;z-index:90}.notifyPanel.open{display:block}.notifyHead{display:flex;align-items:center;justify-content:space-between;padding:13px 14px;border-bottom:1px solid var(--line)}.notifyList{overflow:auto;max-height:58vh}.notifyItem{width:100%;border:0;border-bottom:1px solid #F1ECE4;background:#fff;text-align:left;padding:12px;display:grid;grid-template-columns:8px 1fr;gap:9px}.notifyItem:hover{background:#FBFAF8}.notifyItem.read{opacity:.62}.notifyDot{width:7px;height:7px;background:#3B5C7A;border-radius:50%;margin-top:6px}.notifyItem.read .notifyDot{background:#D9D2C7}.notifyItem b{display:block;font-size:12px}.notifyItem small{display:block;color:#8A7F74;font-size:11px;line-height:1.35;margin-top:3px}.notifyItem em{display:block;color:#A79B8B;font-size:9px;font-style:normal;margin-top:5px}.notifyEmpty{padding:30px;text-align:center;color:#8A7F74;font-size:12px}
html[data-realtime="online"] .topbar:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:#B07D22}html[data-realtime="offline"] .topbar:after,html[data-realtime="error"] .topbar:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:#C79337}
@media(max-width:820px){.notifyPanel{position:fixed;top:70px;right:12px;left:12px;width:auto}.userBox>div:not(.notifyWrap):first-of-type{display:none}}


/* v1.1.1 sound unlock + new-request alert */
.notifyHeadActions{display:flex;gap:6px;align-items:center}.notifyHeadActions .btn{white-space:nowrap}.notifyHeadActions .soundOn{background:#E9F0EC;color:#2F6F58;border-color:#B9D4C7}
.soundPrompt{position:fixed;left:50%;top:88px;transform:translateX(-50%);z-index:120;width:min(620px,calc(100vw - 28px));background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 24px 80px rgba(16,24,40,.22);padding:13px 14px;display:grid;grid-template-columns:42px 1fr auto;align-items:center;gap:12px;animation:soundPromptIn .22s ease-out}.soundPromptIcon{width:42px;height:42px;border-radius:13px;background:#E4EDF5;display:grid;place-items:center;font-size:21px}.soundPrompt b{display:block;font-size:14px}.soundPrompt small{display:block;color:var(--muted);margin-top:3px;line-height:1.35}.soundPromptActions{display:flex;gap:6px}@keyframes soundPromptIn{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}
.requestAlertModal{z-index:125;background:rgba(26,23,20,.58)}.requestAlertSheet{width:min(520px,100%);text-align:center;padding:28px}.requestAlertIcon{width:64px;height:64px;border-radius:20px;background:#E4EDF5;display:grid;place-items:center;font-size:30px;margin:0 auto 15px}.requestAlertSheet h2{font-size:27px;letter-spacing:-.04em;margin:7px 0 9px}.requestAlertSheet p{font-size:14px;line-height:1.5;margin:0 auto;max-width:420px}.requestAlertMeta{display:flex;justify-content:center;gap:7px;margin:15px 0 19px}.requestAlertActions{display:grid;grid-template-columns:1fr 1.35fr;gap:8px}
@media(max-width:620px){.soundPrompt{top:auto;bottom:86px;grid-template-columns:38px 1fr}.soundPromptIcon{width:38px;height:38px}.soundPromptActions{grid-column:1/-1}.soundPromptActions .btn{flex:1}.notifyHead{align-items:flex-start;gap:8px}.notifyHeadActions{flex-wrap:wrap;justify-content:flex-end}.requestAlertActions{grid-template-columns:1fr}.requestAlertSheet{padding:23px 18px}}


/* v1.1.2 priority alerts + executor assignment */
.requestAlertModal.emergency{background:rgba(79,15,15,.68)}
.requestAlertModal.emergency .requestAlertSheet{border:1px solid #E2B3AB;box-shadow:0 28px 100px rgba(180,35,24,.28)}
.requestAlertModal.emergency .requestAlertIcon{background:#F6E7E4;color:#A63A2B;animation:emergencyPulse 1.05s ease-in-out infinite}
.requestAlertModal.emergency .eyebrow{color:#A63A2B}
.requestAlertModal.emergency .requestAlertSheet h2{color:#A63A2B}
.requestAlertModal.emergency [data-open]{background:#A63A2B}
.requestAlertModal.assignment .requestAlertIcon{background:#E9F0EC;color:#2F6F58}
.requestAlertModal.assignment .eyebrow{color:#2F6F58}
.requestAlertModal.assignment .requestAlertSheet{border:1px solid #B9D4C7}
@keyframes emergencyPulse{0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(217,45,32,.18)}50%{transform:scale(1.055);box-shadow:0 0 0 10px rgba(217,45,32,0)}}

/* Resident dashboard quick filters */
.residentStat{
  width:100%;
  appearance:none;
  text-align:left;
  color:var(--ink);
  font-family:inherit;
}
.residentStat.active{
  border-color:#B07D22;
  box-shadow:0 0 0 2px rgba(18,183,106,.12), var(--shadow);
}
.residentStat.active small{color:#2F6F58;font-weight:850}
.residentStat:active{transform:scale(.985)}
.residentStat:focus-visible{outline:3px solid rgba(23,92,211,.20);outline-offset:2px}

@media(max-width:560px){
  #residentStats.grid4{grid-template-columns:repeat(2,1fr)!important;gap:10px}
  #residentStats .stat{padding:14px 16px;min-height:112px}
  #residentStats .stat b{font-size:25px}
}

/* v1.2.0 — system push */
.notifyHeadActions{flex-wrap:wrap;justify-content:flex-end}
.pushPrompt{max-width:720px}
@media(max-width:560px){
  .notifyHead{align-items:flex-start}
  .notifyHeadActions{gap:5px}
  .notifyHeadActions .btn{padding:7px 8px;font-size:10px}
}

/* Staff report drill-down v1.2.1 */
.reportStat{
  width:100%;
  appearance:none;
  text-align:left;
  color:var(--ink);
  font-family:inherit;
  border:1px solid var(--line);
}
.reportStat span{
  display:block;
  margin-top:10px;
  color:#6B6156;
  font-size:11px;
  font-weight:850;
  opacity:.72;
}
.reportStat:hover span{opacity:1}
.reportStat:focus-visible{outline:3px solid rgba(23,92,211,.18);outline-offset:2px}
.reportStat:active{transform:scale(.985)}
.reportDrillNotice{
  margin:0 0 14px;
  padding:10px 12px;
  border:1px solid #D9D2C7;
  background:#FBFAF8;
  border-radius:12px;
  display:flex;
  gap:12px;
  justify-content:space-between;
  align-items:center;
  color:#6B6156;
  font-size:12px;
}
@media(max-width:560px){
  .reportDrillNotice{align-items:flex-start;flex-direction:column}
  #page-reports .grid4{grid-template-columns:repeat(2,1fr)}
}

/* v1.2.2 report export */
.reportExportToolbar{margin-top:4px}
.reportExportToolbar .btn{min-width:128px}
@media(max-width:560px){
  .reportExportToolbar{display:grid;grid-template-columns:1fr 1fr}
  .reportExportToolbar .btn:first-child{grid-column:1/-1}
  .reportExportToolbar .btn{width:100%;min-width:0}
}

/* AI Assistant v1.3 */
.assistantPanel{width:min(440px,calc(100vw - 28px));max-height:76vh}
.assistantChat{display:flex;flex-direction:column;min-height:360px;max-height:calc(76vh - 62px)}
.assistantMessages{padding:14px;overflow:auto;display:flex;flex-direction:column;gap:10px;min-height:180px;flex:1;background:#E4EDF5}
.assistantMsg{display:flex}
.assistantMsg>div{max-width:88%;padding:10px 12px;border-radius:14px;font-size:13px;line-height:1.45;word-break:break-word}
.assistantMsg.ai>div{background:#fff;border:1px solid var(--line);border-bottom-left-radius:5px}
.assistantMsg.user{justify-content:flex-end}
.assistantMsg.user>div{background:#1A1714;color:#fff;border-bottom-right-radius:5px}
.assistantMsg.typing>div{color:var(--muted);font-style:italic}
.assistantComposer{display:grid;grid-template-columns:1fr auto;gap:8px;padding:10px 12px;border-top:1px solid var(--line);background:#fff}
.assistantComposer textarea{resize:none;border:1px solid var(--line);border-radius:12px;padding:10px 11px;outline:none;min-width:0}
.assistantComposer textarea:focus{border-color:#A79B8B;box-shadow:0 0 0 3px #F1ECE4}
.assistantComposer .btn{align-self:stretch}
.assistantFoot{padding:0 12px 10px;color:#A79B8B;font-size:10px;background:#fff}
.assistantQuick{padding:10px 12px;margin:0;border-top:1px solid #F1ECE4;background:#fff}
.aiAnalysisBox{background:#FBFAF8;border:1px solid var(--line);border-radius:16px;padding:14px;white-space:pre-wrap;line-height:1.5;font-size:13px}
@media(max-width:560px){
  .assistantPanel{left:10px;right:10px;bottom:132px;width:auto;max-height:72vh}
  .assistantChat{max-height:calc(72vh - 62px)}
  .assistantComposer{grid-template-columns:1fr}
}

/* AI Function Calling v1.4 */
.assistantActions{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 2px 2px}
.assistantAction{border:1px solid #9DB2C4;background:#E4EDF5;color:#3B5C7A;border-radius:999px;padding:7px 10px;font-size:11px;font-weight:850;cursor:pointer}
.assistantAction:hover{background:#E4EDF5}
.assistantAction:active{transform:scale(.98)}

/* AI Function Calling 2.0 confirmation */
.assistantAction.confirm{background:#FBEFD9;border-color:#EBD9B3;color:#A63A2B}
.aiConfirmSheet{width:min(560px,100%)}
.aiConfirmIcon{width:56px;height:56px;border-radius:18px;background:#F1ECE4;display:grid;place-items:center;font-size:26px;margin:18px 0 12px}
.aiConfirmSummary{font-size:18px;font-weight:850;line-height:1.35;margin-bottom:12px}
.aiConfirmButtons{justify-content:flex-end;margin-top:18px}
.aiConfirmButtons .btn{min-width:130px}
@media(max-width:560px){
  .aiConfirmSheet{border-radius:22px 22px 0 0;align-self:flex-end;margin:0;width:100%;max-height:88vh}
  #aiConfirmModal{align-items:flex-end;padding:0}
  .aiConfirmButtons{display:grid;grid-template-columns:1fr 1fr}
  .aiConfirmButtons .btn{width:100%;min-width:0}
}

/* Request communication v1.7.0 */
.contactCard{display:flex;align-items:center;justify-content:space-between;gap:18px;background:#fff;border:1px solid var(--line);border-radius:18px;padding:17px}
.contactCard h3{margin:4px 0 6px;font-size:18px}.contactLines{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:13px}.contactLines span{color:var(--muted)}
.requestChatShell{background:#fff;border:1px solid var(--line);border-radius:18px;overflow:hidden}
.chatTabs{display:flex;gap:4px;padding:8px;border-bottom:1px solid var(--line);background:#FBFAF8}
.chatTab{border:0;background:transparent;padding:10px 12px;border-radius:11px;color:#8A7F74;font-weight:800}
.chatTab.active{background:#fff;color:#1A1714;box-shadow:0 1px 3px rgba(16,24,40,.08)}
.chatTab span:not(:empty){display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 5px;margin-left:4px;border-radius:999px;background:#F6E7E4;color:#A63A2B;font-size:10px}
.chatChannelNote{padding:10px 14px;color:#8A7F74;font-size:12px;border-bottom:1px solid #F1ECE4}
.chatMessages{height:320px;overflow:auto;padding:14px;background:#FBFAF8;display:flex;flex-direction:column;gap:9px}
.chatMessage{align-self:flex-start;max-width:min(76%,620px);background:#fff;border:1px solid #E1DBD2;border-radius:16px 16px 16px 5px;padding:10px 12px;box-shadow:0 1px 2px rgba(16,24,40,.03)}
.chatMessage.mine{align-self:flex-end;background:#1A1714;color:#fff;border-color:#1A1714;border-radius:16px 16px 5px 16px}
.chatMessageTop{display:flex;justify-content:space-between;gap:14px;align-items:center;margin-bottom:5px;font-size:10px}
.chatMessageTop span{color:#A79B8B}.chatMessage.mine .chatMessageTop span{color:#D9D2C7}
.chatMessageText{font-size:13px;line-height:1.45;white-space:pre-wrap;word-break:break-word}
.chatComposer{display:grid;grid-template-columns:1fr auto;gap:8px;padding:10px;border-top:1px solid var(--line)}
.chatComposer textarea{min-height:52px;max-height:140px;resize:vertical;padding:11px 12px;border:1px solid var(--line);border-radius:12px;outline:none}
.chatComposer textarea:focus{border-color:#A79B8B;box-shadow:0 0 0 3px #F1ECE4}.chatComposer .btn{align-self:end;min-height:46px}
.quickReplies{display:flex;gap:6px;flex-wrap:wrap;padding:9px 10px 0}.quickReplies button{border:1px solid var(--line);background:#fff;border-radius:999px;padding:7px 9px;font-size:11px;color:#6B6156}
.quickReplies button:hover{background:#F1ECE4}.chatEmpty{width:100%;background:transparent}
@media(max-width:650px){
  .contactCard{align-items:flex-start;flex-direction:column}.contactCard .toolbar{width:100%}.contactCard .toolbar .btn{flex:1}
  .chatTabs{overflow-x:auto}.chatTab{white-space:nowrap}.chatMessages{height:360px;padding:10px}
  .chatMessage{max-width:88%}.chatComposer{grid-template-columns:1fr}.chatComposer .btn{width:100%}
}

/* AI estimator v1.8.0 */
.estimateDetailItems{display:grid;gap:7px;margin:14px 0}.estimateDetailItem{display:grid;grid-template-columns:1fr auto;gap:14px;padding:11px 0;border-top:1px solid var(--line)}.estimateDetailItem:first-child{border-top:0}.estimateDetailItem b{display:block;font-size:13px}.estimateDetailItem small{display:block;color:var(--muted);margin-top:3px;line-height:1.4}.estimateItemPrice{text-align:right;font-weight:850;font-size:13px;white-space:nowrap}.estimateItemPrice small{display:block;font-weight:500}.quoteLinks{display:flex;gap:6px;flex-wrap:wrap;margin-top:7px}.quoteLinks a{font-size:10px;padding:5px 7px;border-radius:999px;border:1px solid var(--line);text-decoration:none;color:var(--blue);background:#fff}.aiEstimateAnalysis{margin-top:12px;padding:13px;border-radius:14px;background:#FBFAF8;border:1px solid var(--line)}.aiEstimateAnalysis p{font-size:13px;line-height:1.5}.aiEstimateList{margin-top:10px;font-size:12px}.aiEstimateList ul{margin:5px 0 0;padding-left:18px;color:#6B6156}.aiEstimateList li{margin:3px 0;line-height:1.4}.estimateDecision{display:flex;gap:8px;margin-top:16px}.estimateDecision .btn{flex:1}
@media(max-width:560px){.estimateDetailItem{grid-template-columns:1fr}.estimateItemPrice{text-align:left}.estimateDecision{display:grid;grid-template-columns:1fr}.estimateBox .sectionHead{align-items:flex-start;flex-direction:column}.estimateBox .sectionHead .toolbar{width:100%}.estimateBox .sectionHead .toolbar .btn{flex:1}}

/* v1.9.0 material market options + actual costs */
.materialItem{align-items:flex-start}.estimateItemMain{flex:1;min-width:0}
.materialVariants{display:grid;gap:7px;margin-top:10px}
.materialVariant{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto auto;gap:8px;align-items:center;border:1px solid #E1DBD2;border-radius:13px;padding:9px;background:#fff;cursor:pointer}
.materialVariant.selected{border-color:#B07D22;box-shadow:0 0 0 2px rgba(18,183,106,.10)}
.materialVariant input{margin:0}.tier{font-size:10px;font-weight:900;padding:5px 7px;border-radius:999px;white-space:nowrap}
.tier.economy{background:#E9F0EC;color:#2F6F58}.tier.standard{background:#E4EDF5;color:#3B5C7A}.tier.better{background:#FBEFD9;color:#8A5F13}
.variantBody{min-width:0;display:flex;flex-direction:column}.variantBody b{font-size:12px;overflow:hidden;text-overflow:ellipsis}.variantBody small{font-size:10px;color:#8A7F74}
.variantPrice{font-weight:900;white-space:nowrap}.variantLink{font-size:11px;color:#3B5C7A;white-space:nowrap}
.costCompare{display:grid;gap:14px}.compactStats .stat{min-height:auto;padding:13px}.compactStats .stat b{font-size:18px}
.actualMaterials{border:1px solid var(--line);border-radius:16px;overflow:hidden}.actualMaterials h3{padding:13px 14px;margin:0;border-bottom:1px solid var(--line)}
.actualMaterialRow{display:grid;grid-template-columns:minmax(220px,1fr) 150px 90px 130px;gap:8px;align-items:center;padding:10px 14px;border-bottom:1px solid #F1ECE4}
.actualMaterialRow:last-child{border-bottom:0}.actualMaterialRow>div{display:flex;flex-direction:column}.actualMaterialRow small{color:#8A7F74;font-size:10px}
.actualMaterialRow select,.actualMaterialRow input{width:100%;padding:9px;border:1px solid var(--line);border-radius:10px}
.actualCostForm{border:1px solid var(--line);border-radius:16px;padding:14px}.checkLine{display:flex;gap:8px;align-items:center;margin:10px 0 14px;font-weight:700;font-size:12px}
.note.good{background:#E9F0EC;color:#2F6F58;border-color:#B9D4C7}
@media(max-width:720px){
  .materialVariant{grid-template-columns:auto auto 1fr auto}.variantLink{grid-column:3/-1}.actualMaterialRow{grid-template-columns:1fr 1fr}.actualMaterialRow>div{grid-column:1/-1}
}

/* v1.9.1 — explicit material prices */
.materialVariant{color:#1A1714}
.materialVariant .variantBody,
.materialVariant .variantBody b{color:#1A1714}
.materialVariant .variantBody small{color:#8A7F74}
.materialVariant .variantPrice{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  justify-content:center;
  min-width:86px;
  color:#1A1714;
  white-space:nowrap;
}
.materialVariant .variantPrice small{
  display:block;
  margin:0 0 1px;
  color:#8A7F74;
  font-size:9px;
  font-weight:700;
  line-height:1.1;
}
.materialVariant .variantPrice b{
  color:#1A1714;
  font-size:14px;
  font-weight:900;
  line-height:1.15;
}
@media(max-width:720px){
  .materialVariant .variantPrice{min-width:auto;align-items:flex-start}
}

/* v1.9.2 — справочники, фильтры и связи */
.directoryToolbar{
  display:grid;
  grid-template-columns:minmax(220px,1.6fr) repeat(3,minmax(150px,.8fr)) auto;
  gap:10px;
  align-items:center;
  margin:0 0 14px;
  padding:12px;
  background:#fff;
  border:1px solid var(--line);
  border-radius:16px;
}
.staffDirectoryToolbar{grid-template-columns:minmax(210px,1.5fr) repeat(6,minmax(135px,.75fr)) auto}
.directoryToolbar input,.directoryToolbar select{
  width:100%;min-width:0;padding:11px 12px;border:1px solid var(--line);border-radius:11px;background:#fff;color:var(--ink)
}
.directorySummary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 12px}
.directoryStat{
  appearance:none;text-align:left;border:1px solid var(--line);background:#fff;border-radius:14px;padding:11px 13px;color:var(--ink);cursor:default
}
.directoryStat[onclick]{cursor:pointer}.directoryStat[onclick]:hover,.directoryStat.active{border-color:#A79B8B;background:#E4EDF5}
.directoryStat small{display:block;color:#8A7F74;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.04em}
.directoryStat b{display:block;margin-top:4px;font-size:20px}
.directoryGroup{margin:0 0 18px}
.directoryGroupHead{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:0 0 8px}
.directoryGroupHead h3{margin:0;font-size:17px}.directoryGroupHead>span{background:#F1ECE4;border-radius:999px;padding:5px 9px;font-size:11px;font-weight:900}
.objectDirectoryGroup{grid-column:1/-1}.objectDirectoryGroup>.objectGrid{margin:0}
.directoryObjectCard{position:relative}.objectCardTop{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.directoryArrow{font-size:30px;line-height:1;color:#A79B8B}
.relationGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:15px;border-top:1px solid #9DB2C4;padding-top:12px}
.relationGrid>span{display:flex;flex-direction:column;min-width:0}
.relationGrid b{font-size:17px}.relationGrid small{font-size:9px;color:#8A7F74;line-height:1.2}
.relationTag{display:inline-flex;align-items:center;margin:2px 4px 2px 0;padding:4px 7px;border-radius:999px;background:#E4EDF5;color:#3B5C7A;font-size:10px;font-weight:800}
.relationTag.subtle{background:#F1ECE4;color:#6B6156}
.directoryEmpty{grid-column:1/-1}
table td{vertical-align:top}
@media(max-width:1200px){
  .staffDirectoryToolbar{grid-template-columns:repeat(4,minmax(140px,1fr))}
  .directoryToolbar{grid-template-columns:repeat(3,minmax(150px,1fr))}
}
@media(max-width:720px){
  .directorySummary{grid-template-columns:repeat(2,minmax(0,1fr))}
  .directoryToolbar,.staffDirectoryToolbar{grid-template-columns:1fr 1fr;padding:10px}
  .directoryToolbar input{grid-column:1/-1}
  .directoryToolbar .btn{grid-column:1/-1}
  .relationGrid{grid-template-columns:1fr 1fr}
}

/* v1.9.3 — equipment filters */
.equipmentDirectoryToolbar{
  grid-template-columns:minmax(220px,1.5fr) repeat(6,minmax(135px,.75fr)) auto;
}
.equipmentConditionBadge{
  display:inline-flex;align-items:center;padding:5px 8px;border-radius:999px;
  font-size:10px;font-weight:900;white-space:nowrap;background:#F1ECE4;color:#6B6156
}
.equipmentConditionBadge.condition-operational{background:#E9F0EC;color:#2F6F58}
.equipmentConditionBadge.condition-attention{background:#FBEFD9;color:#8A5F13}
.equipmentConditionBadge.condition-repair{background:#FBEFD9;color:#A63A2B}
.equipmentConditionBadge.condition-out_of_service{background:#F6E7E4;color:#A63A2B}
.dangerText{color:#A63A2B;font-weight:800}
@media(max-width:1200px){
  .equipmentDirectoryToolbar{grid-template-columns:repeat(4,minmax(140px,1fr))}
}
@media(max-width:720px){
  .equipmentDirectoryToolbar{grid-template-columns:1fr 1fr}
  .equipmentDirectoryToolbar input{grid-column:1/-1}
  .equipmentDirectoryToolbar .btn{grid-column:1/-1}
}


/* ==========================================================
   v1.9.4 — unified responsive / collision prevention layer
   ========================================================== */

html,body{max-width:100%;overflow-x:hidden}
.appMain,.content,.page,.sectionHead>*,.grid2>*,.grid3>*,.grid4>*{min-width:0}
.content{width:100%}
.tableWrap{max-width:100%;overscroll-behavior-inline:contain;-webkit-overflow-scrolling:touch}
.toolbar{min-width:0}
.toolbar input,.toolbar select{min-width:0;max-width:100%}

/* Flexible directory filters replace rigid multi-column grids. */
.directoryToolbar,
.staffDirectoryToolbar,
.equipmentDirectoryToolbar{
  display:flex;
  flex-wrap:wrap;
  grid-template-columns:none;
  align-items:stretch;
  gap:9px;
}
.directoryToolbar>input{flex:2 1 280px;min-width:220px}
.directoryToolbar>select{flex:1 1 165px;min-width:150px;max-width:260px}
.directoryToolbar>.btn{flex:0 0 auto;white-space:nowrap}
.directoryFilterToggle{display:none!important}

.sheet,.sheet.wide{max-width:calc(100vw - 36px)}
.mobileMoreMenu{display:none}

.variantBody b,.variantBody small,
.ticket h3,.ticket p,.objectCard h3,
.chatMessageText,.contactLines,.relationTag{overflow-wrap:anywhere}
.estimateRow span,.estimateRow b{min-width:0}
.materialVariant{max-width:100%}

@media(max-width:1100px) and (min-width:721px){
  .directoryToolbar>input{flex-basis:100%;min-width:0}
  .directoryToolbar>select{flex:1 1 180px;max-width:none}
}

@media(max-width:820px){
  .topbar{height:66px;gap:10px;padding:0 14px}
  .topbar h1{
    min-width:0;max-width:42vw;font-size:17px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis
  }
  .userBox{gap:7px;flex:0 0 auto}
  .avatar{width:34px;height:34px}
  .userBox>.btn{
    width:34px;height:34px;padding:0;border-radius:10px;font-size:0
  }
  .userBox>.btn:after{content:"⇥";font-size:16px}
  .content{padding:16px 12px calc(92px + env(safe-area-inset-bottom))}

  .mobileNav{
    grid-template-columns:repeat(auto-fit,minmax(58px,1fr));
    min-height:64px;align-items:stretch
  }
  .mobileNav button{min-width:0;padding:8px 2px 6px}

  .mobileMoreMenu{
    position:fixed;left:10px;right:10px;
    bottom:calc(68px + env(safe-area-inset-bottom));
    z-index:46;background:#fff;border:1px solid var(--line);
    border-radius:18px;padding:8px;
    box-shadow:0 24px 70px rgba(16,24,40,.22);
    grid-template-columns:1fr 1fr;gap:6px
  }
  .mobileMoreMenu.open{display:grid}
  .mobileMoreMenu button{
    border:0;background:#FBFAF8;border-radius:13px;padding:12px;
    text-align:left;display:flex;gap:9px;align-items:center;color:#4A423B
  }
  .mobileMoreMenu button span{font-size:19px;width:25px;text-align:center}
  .mobileMoreMenu button b{font-size:12px}
  .mobileMoreMenu button.active{background:#1A1714;color:#fff}

  body.mobileMoreOpen .assistantFab{opacity:0;pointer-events:none}

  #page-requests>.toolbar{
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
    width:100%;gap:8px
  }
  #page-requests>.toolbar input,
  #page-requests>.toolbar select{width:100%}
  #reqSearch{grid-column:1/-1}

  .toast{
    left:12px;right:12px;top:76px;bottom:auto;
    max-width:none;text-align:center
  }

  .assistantFab{
    bottom:calc(76px + env(safe-area-inset-bottom));
    right:12px
  }
  .assistantPanel{
    bottom:calc(126px + env(safe-area-inset-bottom));
    right:10px
  }
}

@media(max-width:720px){
  .directorySummary{
    grid-template-columns:repeat(2,minmax(0,1fr));gap:8px
  }
  .directoryStat{padding:10px 11px}
  .directoryStat b{font-size:18px}
  .directoryStat small{font-size:9px}

  .directoryToolbar,
  .staffDirectoryToolbar,
  .equipmentDirectoryToolbar{
    display:grid;grid-template-columns:minmax(0,1fr) auto;
    gap:8px;padding:9px
  }
  .directoryToolbar>input{
    grid-column:1/2;width:100%;min-width:0
  }
  .directoryFilterToggle{
    display:inline-flex!important;grid-column:2/3;
    align-items:center;justify-content:center;gap:5px;
    border:1px solid var(--line);background:#FBFAF8;color:#4A423B;
    border-radius:11px;padding:9px 11px;font-size:11px;
    font-weight:850;white-space:nowrap
  }
  .directoryToolbar>select,
  .directoryToolbar>.btn:not(.directoryFilterToggle){display:none}
  .directoryToolbar.filters-open>select,
  .directoryToolbar.filters-open>.btn:not(.directoryFilterToggle){
    grid-column:1/-1;width:100%;max-width:none;min-width:0
  }
  .directoryToolbar.filters-open>select{display:block}
  .directoryToolbar.filters-open>.btn:not(.directoryFilterToggle){display:flex}
  .directoryToolbar.filters-open>.directoryFilterToggle{
    background:#1A1714;color:#fff;border-color:#1A1714
  }

  .relationGrid{grid-template-columns:repeat(2,minmax(0,1fr))}

  .materialVariant{
    grid-template-columns:auto auto minmax(0,1fr);align-items:start
  }
  .materialVariant .variantPrice{
    grid-column:2/4;grid-row:2;align-items:flex-start
  }
  .materialVariant .variantLink{
    grid-column:2/4;grid-row:3;justify-self:start
  }

  .actualMaterialRow{grid-template-columns:1fr 1fr}
  .actualMaterialRow>div{grid-column:1/-1}
}

@media(max-width:560px){
  .title{font-size:27px;margin-bottom:14px}
  .page>.sectionHead{
    flex-direction:column;align-items:stretch;gap:9px;margin-top:18px
  }
  .page>.sectionHead>.btn,
  .page>.sectionHead>.toolbar{width:100%}
  .page>.sectionHead>.btn{justify-content:center}

  .grid4,.grid3,.grid2,.objectGrid{gap:10px}
  .card{border-radius:16px;padding:14px}

  .modal:not(.requestAlertModal){align-items:flex-end;padding:0}
  .modal:not(.requestAlertModal)>.sheet,
  .modal:not(.requestAlertModal)>.sheet.wide{
    width:100%;max-width:100%;max-height:94dvh;
    border-radius:22px 22px 0 0;
    padding:17px 14px calc(18px + env(safe-area-inset-bottom))
  }
  .modal:not(.requestAlertModal)>.sheet>.sheetHead{
    position:sticky;top:-17px;z-index:3;background:#fff;padding:6px 0 10px
  }

  .close{flex:0 0 38px}
  .tableWrap{border-radius:14px}
  .estimateRow{align-items:flex-start}
  .estimateRow b{text-align:right}
  .estimateRow.total{font-size:14px}

  .contactCard .toolbar{
    display:grid;grid-template-columns:1fr 1fr
  }
  .contactCard .toolbar .btn{width:100%}

  .notifyPanel{
    top:62px;right:8px;left:8px;
    max-height:calc(100dvh - 145px)
  }
  .soundPrompt{
    bottom:calc(78px + env(safe-area-inset-bottom));
    width:calc(100vw - 20px)
  }
  .assistantPanel{
    left:8px;right:8px;width:auto;
    max-height:calc(100dvh - 155px)
  }
  .assistantChat{max-height:calc(100dvh - 220px)}
}

@media(max-width:390px){
  .topbar{padding:0 10px}
  .content{padding-left:9px;padding-right:9px}
  .topbar h1{font-size:15px;max-width:38vw}
  .directoryFilterToggle{padding-left:9px;padding-right:9px}
  .directorySummary{gap:6px}
  .directoryStat{padding:9px}
  .directoryStat b{font-size:17px}
  .mobileNav button{font-size:8px}
  .mobileNav button span{font-size:17px}
  .estimateBox{padding:13px}
  .materialVariant{padding:8px;gap:6px}
  .tier{font-size:9px}
  .chatMessage{max-width:94%}
}


/* ==========================================================
   v2.0.0 — fixed desktop shell + owner-only administration UI
   ========================================================== */

/* Desktop: sidebar never participates in document scroll.
   Only the white work surface (.appMain) scrolls. */
@media(min-width:821px){
  html,body{height:100%;overflow:hidden}
  .appLayout{display:block;height:100dvh;min-height:0}
  .sidebar{
    position:fixed;
    left:0;top:0;bottom:0;
    width:252px;
    height:100dvh;
    overflow-y:auto;
    overscroll-behavior:contain;
  }
  .appMain{
    margin-left:252px;
    height:100dvh;
    min-height:0;
    overflow-y:auto;
    overflow-x:hidden;
    overscroll-behavior-y:contain;
    scroll-behavior:smooth;
  }
  .content{min-height:calc(100dvh - 74px)}
}

/* Owner-only controls */
.ownerAdminZone{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  margin:14px 0;
  padding:14px 16px;
  border:1px solid #E2B3AB;
  border-radius:16px;
  background:#FBF7F5;
}
.ownerAdminZone>div:first-child{
  display:flex;
  min-width:0;
  flex-direction:column;
  gap:3px;
}
.ownerAdminZone small{color:#8A7F74}
.ownerRowActions{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:6px;
}
.ownerRowActions .btn{white-space:nowrap}
table .ownerRowActions{min-width:150px}

/* Preserve a comfortable owner edit form on all sizes */
#residentEditModal .sheet,
#requestOwnerEditModal .sheet{width:min(680px,100%)}

@media(max-width:720px){
  .ownerAdminZone{
    flex-direction:column;
    align-items:stretch;
  }
  .ownerAdminZone .ownerRowActions{
    display:grid;
    grid-template-columns:1fr 1fr;
  }
  .ownerAdminZone .ownerRowActions .btn{width:100%;justify-content:center}
  table .ownerRowActions{
    min-width:130px;
    flex-direction:column;
    align-items:stretch;
  }
  table .ownerRowActions .btn{width:100%;justify-content:center}
}


/* v2.0.1 — own delete confirmations instead of browser confirm() */
.ownerDeleteSheet{width:min(560px,100%)}
.ownerDeleteBody{display:flex;gap:14px;align-items:flex-start;margin:6px 0 16px}
.ownerDeleteBody h3{margin:2px 0 6px;font-size:18px;overflow-wrap:anywhere}
.ownerDeleteBody p{margin:0;line-height:1.5}
.ownerDeleteIcon{
  display:grid;place-items:center;flex:0 0 42px;width:42px;height:42px;
  border-radius:999px;background:#F6E7E4;color:#A63A2B;font-size:22px;font-weight:950
}
.ownerDeleteWarning{
  padding:12px 13px;border:1px solid #E2B3AB;border-radius:13px;
  background:#FBF7F5;color:#A63A2B;font-size:12px;font-weight:750;line-height:1.45
}
.ownerDeleteActions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
.ownerDeleteActions .btn{min-width:130px;justify-content:center}
.ownerDeleteActions .dangerStrong{background:#A63A2B;border-color:#A63A2B}
.ownerDeleteActions .dangerStrong:hover{background:#A63A2B}
.ownerDeleteActions .btn:disabled{opacity:.55;pointer-events:none}
@media(max-width:560px){
  .ownerDeleteActions{display:grid;grid-template-columns:1fr 1fr}
  .ownerDeleteActions .btn{min-width:0;width:100%}
}


/* v2.2.0 — work calculator */
.workItem{align-items:flex-start}
.workFormulaRead,.estimateFormula{
  display:block;margin-top:7px;color:#6B6156;font-size:11px;line-height:1.4
}
.workCalculator{
  margin-top:11px;padding:11px;border:1px solid #D9D2C7;border-radius:14px;
  background:#E4EDF5;color:#1A1714
}
.workCalcTop{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:9px}
.workCalcFormula{font-size:11px;font-weight:750;color:#4A423B}
.workCalcFields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.workCalculator .field{margin:0}
.readOnlyPrice{
  min-height:42px;display:flex;align-items:center;padding:9px 11px;
  border:1px solid #E1DBD2;border-radius:10px;background:#fff;font-weight:850
}
.workOverrideToggle{margin:10px 0 6px}
.workOverridePanel{
  margin:6px 0 10px;padding:10px;border:1px solid #E2B3AB;border-radius:12px;background:#FBF7F5
}
.workOverridePanel>small{display:block;margin-top:7px;color:#8A5F13}
.workCalcSave{margin-top:9px}
.priceRangeField.hidden,.priceFixedField.hidden{display:none!important}
#pricePricingHelp{margin:0}
@media(max-width:620px){
  .workCalcFields{grid-template-columns:1fr}
  .workCalculator{padding:9px}
}


/* v2.2.2 — resident preliminary-cost notice */
.residentEstimateNotice{
  display:flex;
  align-items:flex-start;
  gap:11px;
  margin:18px 0 4px;
  padding:14px 15px;
  border:1px solid #EBD9B3;
  border-radius:15px;
  background:#FBEFD9;
  color:#4A423B;
}
.residentEstimateNoticeIcon{
  display:grid;
  place-items:center;
  flex:0 0 30px;
  width:30px;
  height:30px;
  border-radius:999px;
  background:#C79337;
  color:#fff;
  font-size:16px;
  font-weight:950;
  line-height:1;
}
.residentEstimateNotice>div:last-child{min-width:0}
.residentEstimateNotice b{
  display:block;
  margin:1px 0 4px;
  color:#8A5F13;
  font-size:13px;
  font-weight:900;
}
.residentEstimateNotice p{
  margin:0;
  color:#A63A2B;
  font-size:12px;
  line-height:1.5;
  font-weight:650;
}
@media(max-width:560px){
  .residentEstimateNotice{
    margin-top:16px;
    padding:13px;
    border-radius:14px;
  }
  .residentEstimateNotice p{
    font-size:11px;
    line-height:1.55;
  }
}

/* v2.2.3 */
.workUnitWarning{margin:0 0 9px;padding:8px 10px;border:1px solid #EBD9B3;border-radius:10px;background:#FBEFD9;color:#8A5F13;font-size:10px;font-weight:750;line-height:1.4}
#priceUnitName[readonly]{background:#F1ECE4;color:#6B6156}

/* v2.2.4 — actual cost reset states */
.actualMaterialRow select[data-mat-status]{font-weight:750}
.actualMaterialRow input[data-mat-cost]:disabled{background:#F1ECE4;color:#A79B8B}
.actualMaterialRow input[data-mat-cost]::placeholder{color:#A79B8B;opacity:1}

/* v2.3.0 — verified actual-cost saving */
.actualSaveState{margin-top:8px;min-height:16px;font-size:10px;font-weight:750;color:#8A7F74}
.actualSaveState.saving{color:#3B5C7A}
.actualSaveState.error{color:#A63A2B}

/* v2.3.0 — одноразовая проверка регистрации жильца */
.verificationSheet{width:min(1180px,100%)}
.verificationSecurityNote{display:flex;gap:10px;align-items:flex-start;justify-content:space-between;margin:14px 0 16px;padding:12px 14px;border:1px solid #EBD9B3;background:#FBEFD9;color:#A63A2B;border-radius:14px;font-size:12px;line-height:1.45}
.verificationSecurityNote span{color:#8A5F13;text-align:right}
.verificationGrid{display:grid;grid-template-columns:minmax(330px,.9fr) minmax(420px,1.35fr);gap:16px;align-items:start}
.verificationSectionTitle{font-size:12px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:#8A7F74;margin:16px 0 8px}
.verificationData{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.verificationData>div{padding:10px 11px;border:1px solid var(--line);background:#FBFAF8;border-radius:12px;min-width:0}
.verificationData span{display:block;font-size:10px;color:#A79B8B;font-weight:800;text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px}
.verificationData b{display:block;font-size:12px;line-height:1.4;overflow-wrap:anywhere}
.verificationDocuments{display:grid;gap:8px}
.verificationDoc{width:100%;border:1px solid var(--line);background:#fff;border-radius:12px;padding:10px 12px;display:flex;gap:12px;align-items:center;justify-content:space-between;text-align:left;cursor:pointer;color:var(--ink)}
.verificationDoc:hover,.verificationDoc.active{background:#FBFAF8;border-color:#A79B8B}
.verificationDoc span:first-child{min-width:0}.verificationDoc b{display:block;font-size:12px}.verificationDoc small{display:block;color:#8A7F74;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:300px}
.verificationDoc>span:last-child{font-size:11px;font-weight:800;color:#6B6156;white-space:nowrap}
.verificationViewer{position:relative;min-height:520px;height:min(64vh,720px);border:1px solid var(--line);background:#F1ECE4;border-radius:16px;overflow:hidden;display:grid;place-items:center}
.verificationViewer img,.verificationViewer iframe{width:100%;height:100%;border:0;object-fit:contain;background:#fff}
.verificationViewerEmpty{padding:28px;text-align:center;color:#8A7F74;font-size:13px}
.verificationWatermark{position:absolute;left:14px;right:14px;bottom:12px;padding:7px 10px;border-radius:10px;background:rgba(16,24,40,.72);color:#fff;font-size:10px;font-weight:800;text-align:center;pointer-events:none;z-index:3;letter-spacing:.02em}
.verificationChecklist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:12px}
.verificationChecklist label{display:flex;gap:10px;align-items:flex-start;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:#fff;cursor:pointer}
.verificationChecklist input{margin-top:3px;accent-color:#1A1714}.verificationChecklist b{display:block;font-size:12px}.verificationChecklist small{display:block;color:#8A7F74;margin-top:3px;line-height:1.35}
.verificationDecisionBar{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;margin-top:12px}
.verificationDecisionBar .btn:disabled{opacity:.45;cursor:not-allowed}
@media(max-width:900px){.verificationGrid{grid-template-columns:1fr}.verificationViewer{min-height:420px;height:55vh}.verificationSecurityNote{display:block}.verificationSecurityNote span{display:block;text-align:left;margin-top:4px}}
@media(max-width:560px){.verificationData,.verificationChecklist{grid-template-columns:1fr}.verificationViewer{min-height:340px;height:48vh}.verificationDecisionBar .btn{width:100%;justify-content:center}}


/* v2.4.0 — printable request act / estimate */
.requestDocsCard{display:flex;align-items:center;justify-content:space-between;gap:18px}.requestDocsCard p{margin:5px 0 0;max-width:760px}.workActSheet textarea{min-height:90px;resize:vertical}.workActActions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.workActFinalField .check{display:flex;align-items:center;gap:9px;font-weight:800}.workActFinalField .check input{width:auto}.workActFinalField small{display:block;margin-top:6px}@media(max-width:720px){.requestDocsCard{align-items:stretch;flex-direction:column}.requestDocsCard .btn,.workActActions .btn{width:100%}.workActActions{flex-direction:column-reverse}}


/* v2.5.0 — internal/service requests */
.serviceContactCard{border-left:4px solid #4A423B}.clickRow{cursor:pointer}.clickRow:hover td{background:#FBFAF8}

/* v2.7.0 — Дополнительные услуги */
.serviceTabs{display:flex;gap:8px;margin:14px 0 18px}.serviceTabs button{border:1px solid var(--line);background:#fff;border-radius:999px;padding:9px 14px;font-weight:800;cursor:pointer}.serviceTabs button.active{background:#1A1714;color:#fff;border-color:#1A1714}.serviceCatalogGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.serviceCatalogCard h3{margin:7px 0}.servicePrice{font-size:22px;font-weight:900;letter-spacing:-.03em;margin:14px 0}.serviceTicket{border-left:4px solid #3B5C7A}.serviceFilters{margin-bottom:14px}.serviceLine{display:grid;grid-template-columns:110px minmax(180px,1fr) 90px 120px 100px 42px;gap:7px;align-items:center;margin:7px 0}.serviceLine input,.serviceLine select{width:100%;padding:9px;border:1px solid var(--line);border-radius:9px}.serviceLine .qty,.serviceLine .money,.serviceLine .unit{min-width:0}.serviceChat{display:grid;gap:8px;max-height:300px;overflow:auto;margin:10px 0}.serviceChat .comment{background:#FBFAF8;border:1px solid var(--line);border-radius:12px;padding:10px}.serviceChat .comment p{margin:5px 0}.serviceChat .comment small{color:var(--muted)}
@media(max-width:900px){.serviceCatalogGrid{grid-template-columns:1fr 1fr}.serviceLine{grid-template-columns:1fr 70px 100px 80px 40px}.serviceLine select{grid-column:1/-1}}
@media(max-width:620px){.serviceCatalogGrid{grid-template-columns:1fr}.serviceLine{grid-template-columns:1fr 1fr}.serviceLine select,.serviceLine input:first-of-type{grid-column:1/-1}.serviceLine .miniBtn{justify-self:end}.serviceTabs{overflow:auto}.serviceTabs button{white-space:nowrap}}

/* v2.8.1 — executor work report */
.executorWorkReportCard{margin-top:14px;border:1px solid #9DB2C4;background:linear-gradient(180deg,#fff 0%,#E4EDF5 100%)}
.executorWorkReportCard textarea{min-height:150px;line-height:1.55}
.workReportToolbar{align-items:center;flex-wrap:wrap}
.workReportHint{margin-top:10px;font-size:12px}
.workReportHint.recording{color:#A63A2B;font-weight:700}
.workReportHint.error{color:#A63A2B}
#workReportVoiceBtn.recording{background:#F6E7E4;color:#A63A2B;border-color:#E2B3AB}
.dispatcherWorkReport p{line-height:1.6;margin:0}
.executorEstimateReadOnly .estimateDetailItem{cursor:default}
.executorResidentContact .toolbar{align-items:center}
@media(max-width:700px){.workReportToolbar .btn{width:100%;justify-content:center}.executorWorkReportCard textarea{min-height:180px}}


/* v2.9.0 — dashboard services + unified report */
.dashboardKpiGrid,.reportKpiGrid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px}
.reportMoneyGrid .stat{cursor:default}.reportMoneyGrid .stat:hover{transform:none;box-shadow:none}
@media(max-width:1180px){.dashboardKpiGrid,.reportKpiGrid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:780px){.dashboardKpiGrid,.reportKpiGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.dashboardKpiGrid,.reportKpiGrid{grid-template-columns:1fr}}

/* v2.9.2: reliable modal controls on mobile Safari */
body.modalOpen{overscroll-behavior:none}.close:active{transform:scale(.96)}


/* =========================================================
   v3.0.0-alpha1 — MASTER REDESIGN / staff shell + dashboard
   Visual direction approved from WindFarm / ORION references.
   Functional logic stays on v2.9.2.
   ========================================================= */
:root{
  --bg:#FBFAF8;--card:#ffffff;--ink:#1A1714;--muted:#8A7F74;--line:#E8E3DB;
  --accent:#B07D22;--accent-2:#B07D22;--green:#2F6F58;--amber:#8A5F13;--red:#A63A2B;--blue:#3B5C7A;
  --nav:#221E1A;--nav-2:#2A251F;--shadow:0 10px 30px rgba(26,23,20,.055);--shadow-lg:0 24px 70px rgba(26,23,20,.11)
}
body{background:var(--bg);font-feature-settings:"cv02","cv03","cv04","cv11";letter-spacing:-.005em}
.v3Shell.appLayout{grid-template-columns:220px minmax(0,1fr)}
.v3Shell .sidebar{background:linear-gradient(180deg,#221E1A 0%,#221E1A 100%);padding:24px 14px 18px;border-right:1px solid rgba(255,255,255,.04);box-shadow:8px 0 28px rgba(26,23,20,.05)}
.v3Brand{display:flex;align-items:center;gap:10px!important;margin:0 8px 4px!important;font-size:18px!important;letter-spacing:-.04em!important}
.brandMark{width:32px;height:32px;border-radius:10px;background:linear-gradient(145deg,#C79337,#2F6F58);display:grid;place-items:center;color:white;font-size:16px;box-shadow:0 8px 22px rgba(176,125,34,.20)}
.v3Shell .sidebarRole{margin:0 50px 25px 50px;font-size:10px;white-space:nowrap;color:#7E7368}
.v3Nav{margin-top:8px!important}.navSectionLabel{margin:22px 12px 7px;color:#7E7368;font-size:8px;line-height:1;font-weight:900;text-transform:uppercase;letter-spacing:.13em}
.v3Nav button{min-height:39px;padding:10px 11px!important;margin:2px 0!important;border-radius:10px!important;color:#B8AC9C!important;font-size:12px!important;font-weight:720!important;gap:9px!important;transition:background .15s,color .15s,transform .15s}
.v3Nav button .ico{width:22px!important;font-size:14px;color:#8C8072}
.v3Nav button:hover{background:rgba(255,255,255,.055)!important;color:#E4EDF5!important;transform:translateX(1px)}
.v3Nav button.active{background:linear-gradient(135deg,rgba(176,125,34,.22),rgba(176,125,34,.11))!important;color:#fff!important;box-shadow:inset 0 0 0 1px rgba(199,147,55,.08)}
.v3Nav button.active .ico{color:#C79337}
.v3Topbar.topbar{height:72px;background:rgba(255,255,255,.94);backdrop-filter:blur(18px);border-bottom:1px solid #E8E3DB;padding:0 30px;gap:24px}
.topbarHeading{min-width:180px}.topbarHeading h1{font-size:18px!important;letter-spacing:-.025em}.topbarHeading small{display:block;margin-top:3px;color:#A79B8B;font-size:9px;font-weight:650}
.topbarSearch{margin-left:auto;width:min(360px,31vw);height:38px;display:flex;align-items:center;gap:8px;border:1px solid #E8E3DB;border-radius:11px;background:#FBFAF8;padding:0 11px;color:#A79B8B;transition:.15s}
.topbarSearch:focus-within{background:#fff;border-color:#9DB2C4;box-shadow:0 0 0 3px rgba(176,125,34,.08)}
.topbarSearch input{min-width:0;flex:1;border:0;outline:0;background:transparent;font-size:11px;color:#221E1A}.topbarSearch input::placeholder{color:#3B5C7A}
.v3Topbar .userBox{gap:9px}.v3Topbar .userIdentity{text-align:left}.v3Topbar .userIdentity b{font-size:12px}.v3Topbar .avatar{width:36px;height:36px;background:#1A1714;font-size:12px}.v3Topbar .logoutBtn{height:36px;background:#F1ECE4;padding:0 12px;font-size:10px}
.v3Topbar .notifyBtn{width:36px;height:36px;border-radius:11px;background:#fff;font-size:15px}
.v3Shell .content{max-width:1600px;padding:30px 32px 48px}
.v3Shell .title{font-size:32px;line-height:1.05;margin:5px 0 0;letter-spacing:-.055em}.v3Shell .eyebrow{font-size:9px;color:#3B5C7A;letter-spacing:.13em}.dashboardLead{margin-top:8px;color:#6B6156;font-size:12px}
.dashboardIntro{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:22px}.dashboardActions{display:flex;gap:8px}.dashboardActions .btn{min-height:38px;border-radius:10px;font-size:10px;padding:9px 12px}
.v3KpiGrid.dashboardKpiGrid{grid-template-columns:repeat(6,minmax(0,1fr));gap:10px}
.v3Stat.stat{position:relative;min-height:126px;padding:15px 15px 14px;border-radius:15px;border:1px solid #E8E3DB;box-shadow:0 1px 0 rgba(26,23,20,.015);overflow:hidden;background:#fff}
.v3Stat.stat:before{content:"";position:absolute;right:-22px;top:-28px;width:80px;height:80px;border-radius:50%;opacity:.08;background:currentColor}.v3Stat.stat:hover{transform:translateY(-2px);box-shadow:0 14px 30px rgba(26,23,20,.07);border-color:#9DB2C4}
.v3Stat .statIcon{width:28px;height:28px;border-radius:9px;display:grid;place-items:center;margin-bottom:12px;font-size:12px;background:#E9F0EC;color:#2F6F58;font-weight:900}.v3Stat.blue .statIcon{background:#E4EDF5;color:#3B5C7A}.v3Stat.violet .statIcon{background:#E4EDF5;color:#3B5C7A}.v3Stat.orange .statIcon{background:#FBEFD9;color:#B07D22}.v3Stat.money .statIcon{background:#E9F0EC;color:#B07D22}.v3Stat.moneyAlt .statIcon{background:#E4EDF5;color:#3B5C7A}
.v3Stat small{display:block;font-size:9px;font-weight:700;color:#6B6156;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.v3Stat b{font-size:24px;margin-top:5px;letter-spacing:-.05em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.v3Stat.money b,.v3Stat.moneyAlt b{font-size:17px;margin-top:8px}.v3Stat em{display:block;margin-top:6px;font-style:normal;font-size:8px;color:#3B5C7A}.v3Stat.green em{color:#2F6F58}.v3Stat.orange em{color:#B07D22}
.dashboardMainGrid{display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.15fr);gap:12px;margin-top:12px}.dashboardBottomGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:12px}
.dashboardCard.card{border-radius:16px;padding:17px 18px;border-color:#E8E3DB;box-shadow:0 1px 0 rgba(26,23,20,.018);min-width:0}.dashboardCardHead.sectionHead{margin:0 0 12px}.dashboardCardHead h2{font-size:14px;letter-spacing:-.025em}.textBtn{border:0;background:transparent;color:#3B5C7A;font-size:9px;font-weight:750;padding:6px 0;cursor:pointer}.textBtn:hover{color:#3B5C7A}
.dashObjectRow,.dashFeedRow{width:100%;border:0;background:#fff;text-align:left;display:grid;align-items:center;cursor:pointer;color:#221E1A;transition:.12s}.dashObjectRow:hover,.dashFeedRow:hover{background:#FBFAF8}
.dashObjectRow{grid-template-columns:34px minmax(0,1fr) 48px 74px 10px;gap:9px;padding:10px 3px;border-top:1px solid #F1ECE4}.dashObjectRow:first-child{border-top:0}.dashObjectAvatar{width:30px;height:30px;border-radius:9px;background:linear-gradient(145deg,#E9F0EC,#DCE8E1);color:#2F6F58;display:grid;place-items:center;font-size:11px;font-weight:900}.dashObjectName{min-width:0}.dashObjectName b{display:block;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dashObjectName small,.dashObjectMetric small{display:block;margin-top:3px;color:#A79B8B;font-size:8px}.dashObjectMetric{text-align:right}.dashObjectMetric b{font-size:11px}.dashObjectBar{height:4px;border-radius:99px;background:#F1ECE4;overflow:hidden}.dashObjectBar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#B07D22,#B07D22)}.dashChevron{color:#A79B8B;font-size:15px}
.trendLegend{display:flex;gap:12px;align-items:center;color:#6B6156;font-size:8px}.trendLegend span{display:flex;align-items:center;gap:5px}.trendLegend i{width:6px;height:6px;border-radius:50%;display:inline-block}.trendLegend i.req{background:#3B5C7A}.trendLegend i.srv{background:#B07D22}.trendChart{height:230px;padding:4px 2px 0}.trendChart svg{width:100%;height:205px;overflow:visible}.trendGrid line{stroke:#E8E3DB;stroke-width:1;vector-effect:non-scaling-stroke}.trendPath{fill:none;stroke-width:2.2;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round}.trendPath.requests{stroke:#3B5C7A}.trendPath.services{stroke:#B07D22}.trendDot{stroke:#fff;stroke-width:1.5;vector-effect:non-scaling-stroke}.trendDot.requests{fill:#3B5C7A}.trendDot.services{fill:#B07D22}.trendAxis{display:flex;justify-content:space-between;margin-top:-4px;color:#8A7F74;font-size:8px}
.dashFeedRow{grid-template-columns:30px minmax(0,1fr) auto;gap:9px;padding:10px 2px;border-top:1px solid #F1ECE4}.dashFeedRow:first-child{border-top:0}.feedIcon{width:28px;height:28px;border-radius:9px;display:grid;place-items:center;font-size:11px}.feedIcon.request{background:#E4EDF5;color:#3B5C7A}.feedIcon.service{background:#FBEFD9;color:#B07D22}.feedIcon.maintenance{background:#E9F0EC;color:#B07D22}.feedBody{min-width:0}.feedBody b{display:block;font-size:9.5px;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.feedBody small{display:block;margin-top:4px;color:#A79B8B;font-size:7.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dashFeedRow .badge{font-size:7px;padding:4px 6px}.maintenanceDate{font-size:8px;color:#8A7F74;font-weight:700;white-space:nowrap}.empty.compact{padding:28px 12px;font-size:10px;border-radius:12px}
.v3Shell .card,.v3Shell .tableWrap,.v3Shell .ticket{border-color:#E8E3DB;box-shadow:0 1px 0 rgba(26,23,20,.015)}.v3Shell .card{border-radius:16px}.v3Shell .btn{border-radius:10px;background:#2F6F58;box-shadow:none}.v3Shell .btn:hover{filter:brightness(.97)}.v3Shell .btn.light{background:#F1ECE4;color:#221E1A}.v3Shell .btn.red{background:#F6E7E4;color:#A63A2B}.v3Shell .field input,.v3Shell .field select,.v3Shell .field textarea,.v3Shell .toolbar input,.v3Shell .toolbar select{border-color:#9DB2C4;border-radius:10px}.v3Shell .badge,.v3Shell .pill{border-radius:7px}.v3Shell .badge{padding:5px 7px}.v3Shell .pill{padding:5px 7px;background:#E4EDF5}.v3Shell .tableWrap{border-radius:15px}.v3Shell th{background:#FBFAF8;color:#A79B8B}.v3Shell tr.clickable:hover td{background:#E9F0EC}
@media(max-width:1320px){.v3KpiGrid.dashboardKpiGrid{grid-template-columns:repeat(3,minmax(0,1fr))}.dashboardBottomGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboardBottomGrid .dashboardCard:last-child{grid-column:1/-1}}
@media(max-width:1050px){.v3Shell.appLayout{grid-template-columns:205px minmax(0,1fr)}.v3Topbar.topbar{padding:0 22px}.v3Shell .content{padding:24px 22px 42px}.dashboardMainGrid{grid-template-columns:1fr}.topbarSearch{width:min(290px,28vw)}}
@media(max-width:820px){.v3Shell.appLayout{grid-template-columns:1fr}.v3Topbar.topbar{height:68px;padding:0 14px}.topbarHeading small,.topbarSearch,.logoutBtn{display:none!important}.v3Topbar .userIdentity{display:none}.v3Shell .content{padding:18px 13px 92px}.dashboardIntro{align-items:flex-start}.dashboardActions{display:none}.v3KpiGrid.dashboardKpiGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.v3Stat.stat{min-height:116px;padding:13px}.v3Stat small{font-size:8px}.dashboardMainGrid,.dashboardBottomGrid{grid-template-columns:1fr;gap:9px;margin-top:9px}.dashboardBottomGrid .dashboardCard:last-child{grid-column:auto}.dashboardCard.card{padding:15px}.trendChart{height:210px}.trendChart svg{height:185px}.mobileNav{box-shadow:0 -8px 24px rgba(26,23,20,.05)}}
@media(max-width:480px){.v3KpiGrid.dashboardKpiGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.v3Stat b{font-size:22px}.v3Stat.money b,.v3Stat.moneyAlt b{font-size:14px}.dashObjectRow{grid-template-columns:30px minmax(0,1fr) 40px 10px}.dashObjectBar{display:none}.dashboardLead{font-size:11px}.v3Shell .title{font-size:29px}}


/* =========================================================
   v3.0.0-alpha2 — Requests + request detail
   ========================================================= */
.requestsIntro{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:18px}.requestsActions{display:flex;gap:8px}.requestsActions .btn{min-height:38px;font-size:10px}
.requestQuickTabs{display:flex;gap:5px;align-items:center;margin-bottom:12px;border-bottom:1px solid #E8E3DB;padding:0 2px}.requestQuickTabs button{position:relative;border:0;background:transparent;padding:10px 11px 12px;color:#6B6156;font-size:10px;font-weight:750;cursor:pointer}.requestQuickTabs button:after{content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:2px;background:transparent;border-radius:4px}.requestQuickTabs button.active{color:#2F6F58}.requestQuickTabs button.active:after{background:#2F6F58}.requestQuickTabs button span{display:inline-grid;place-items:center;min-width:18px;height:18px;margin-left:5px;padding:0 5px;border-radius:7px;background:#F1ECE4;color:#6B6156;font-size:8px}.requestQuickTabs button.active span{background:#E9F0EC;color:#2F6F58}
.requestFilters.card{display:grid;grid-template-columns:minmax(135px,.75fr) minmax(145px,.85fr) minmax(135px,.72fr) minmax(250px,1.65fr);gap:8px;padding:10px;margin-bottom:12px;border-radius:14px}.requestFilters select,.requestSearch{height:38px;background:#FBFAF8;border:1px solid #E8E3DB!important;border-radius:9px!important;font-size:10px}.requestFilters select{padding:0 30px 0 10px}.requestSearch{display:flex;align-items:center;gap:7px;padding:0 10px;color:#A79B8B}.requestSearch input{width:100%;height:auto!important;padding:0!important;border:0!important;background:transparent!important;outline:0;font-size:10px}.requestSearch:focus-within{background:#fff;border-color:#9DB2C4!important;box-shadow:0 0 0 3px rgba(176,125,34,.07)}
.requestListV3{border:1px solid #E8E3DB;border-radius:16px;background:#fff;overflow:hidden;box-shadow:0 1px 0 rgba(26,23,20,.018)}.requestTableV3{width:100%}.requestTableHead,.requestRowV3{display:grid;grid-template-columns:62px minmax(230px,1.65fr) minmax(135px,.9fr) 88px 104px minmax(120px,.85fr) 108px 22px;gap:10px;align-items:center}.requestTableHead{min-height:42px;padding:0 15px;border-bottom:1px solid #E8E3DB;background:#FBFAF8;color:#A79B8B;font-size:8px;font-weight:800;text-transform:uppercase;letter-spacing:.045em}.requestRowV3{width:100%;min-height:67px;padding:10px 15px;border:0;border-bottom:1px solid #F1ECE4;background:#fff;text-align:left;color:#221E1A;cursor:pointer;transition:.12s}.requestRowV3:last-child{border-bottom:0}.requestRowV3:hover{background:#F1ECE4}.reqNumber{font-size:9px;font-weight:800;color:#8A7F74}.reqSubject,.reqObject,.reqExecutor{min-width:0}.reqSubject b,.reqObject b,.reqExecutor b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reqSubject b{font-size:10.5px}.reqSubject small,.reqObject small,.reqExecutor small{display:block;margin-top:4px;color:#A79B8B;font-size:7.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reqObject b,.reqExecutor b{font-size:9px;font-weight:700}.reqCreated{font-size:8px;color:#6B6156}.reqArrow{font-size:16px;color:#9DB2C4}.requestSourceMark{display:inline-block;margin-top:4px;padding:3px 5px;border-radius:5px;font-size:6.5px;font-weight:800}.requestSourceMark.staff{background:#E4EDF5;color:#3B5C7A}.requestSourceMark.resident{background:#E9F0EC;color:#2F6F58}.requestStatus,.requestPriority{display:inline-flex;align-items:center;justify-content:center;min-height:22px;padding:4px 7px;border-radius:6px;font-size:7.5px;font-weight:800;font-style:normal;white-space:nowrap}.requestStatus.blue,.requestPriority.blue{background:#E4EDF5;color:#3B5C7A}.requestStatus.orange,.requestPriority.orange{background:#FBEFD9;color:#B07D22}.requestStatus.violet,.requestPriority.violet{background:#E4EDF5;color:#3B5C7A}.requestStatus.green,.requestPriority.green{background:#E9F0EC;color:#2F6F58}.requestStatus.gray,.requestPriority.gray{background:#E4EDF5;color:#6B6156}.requestStatus.red,.requestPriority.red{background:#F6E7E4;color:#A63A2B}.requestCardsMobile{display:none}.requestEmptyV3{border:0!important;border-radius:0!important;padding:60px 20px!important}
.requestModalV3{align-items:stretch;padding:14px}.requestSheetV3.sheet{width:min(1240px,96vw);max-width:1240px;height:calc(100vh - 28px);max-height:calc(100vh - 28px);padding:0;overflow:auto;border-radius:18px;background:#FBFAF8}.requestSheetHeadV3{position:sticky;top:0;z-index:15;padding:18px 22px 16px;background:rgba(255,255,255,.96);backdrop-filter:blur(16px);border-bottom:1px solid #9DB2C4}.requestSheetHeadV3 h2{font-size:20px;letter-spacing:-.035em;margin-top:3px}.requestSheetHeadV3 .close{background:#F1ECE4;border-radius:10px;width:34px;height:34px}.requestDetailV3{padding:0 22px 26px}.requestHeroV3{padding:15px 2px 12px}.requestHeroBadges,.requestHeroMeta{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.requestHeroMeta{margin-top:8px;color:#8A7F74;font-size:8px}.requestHeroMeta i{font-style:normal;color:#C9C1B6}.requestDetailTabsV3{position:sticky;top:69px;z-index:12;display:flex;gap:3px;margin:0 -22px 14px;padding:0 22px;background:rgba(248,250,251,.96);backdrop-filter:blur(12px);border-bottom:1px solid #E8E3DB}.requestDetailTabsV3 button{border:0;background:transparent;padding:11px 10px;color:#6B6156;font-size:9px;font-weight:800;cursor:pointer}.requestDetailTabsV3 button:hover{color:#2F6F58}.requestDetailGridV3{display:grid;grid-template-columns:minmax(0,1.72fr) minmax(270px,.72fr);gap:14px;align-items:start}.requestDetailMainV3{min-width:0}.requestDetailAsideV3{position:sticky;top:116px;display:grid;gap:12px}.requestDetailAsideV3>.card,.requestAsideSection>.contactCard,.requestOwnerV3{margin:0!important}.requestDetailAsideV3 .card{padding:15px}.requestDetailAsideV3 .card h3{font-size:12px;margin-bottom:11px}.requestDetailAsideV3 .fields{grid-template-columns:1fr}.requestDetailAsideV3 .btn{width:100%}.requestDetailAsideV3 .toolbar{display:grid;grid-template-columns:1fr;gap:6px}.requestInfoV3.card{padding:18px}.requestBlockTitle{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.requestBlockTitle h3{font-size:13px;margin-top:3px}.requestCategoryChip{padding:5px 8px;border-radius:7px;background:#E4EDF5;color:#6B6156;font-size:8px;font-weight:750}.requestDescriptionV3{margin:14px 0 16px;font-size:11px;line-height:1.55;color:#4A423B}.requestInfoMetaGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;padding-top:14px;border-top:1px solid #E8E3DB}.requestInfoMetaGrid>div{min-width:0}.requestInfoMetaGrid small{display:block;color:#A79B8B;font-size:7.5px}.requestInfoMetaGrid b{display:block;margin-top:4px;font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.requestInfoMetaGrid em{display:block;margin-top:3px;color:#A79B8B;font-size:7px;font-style:normal}.requestMediaV3{margin-top:16px}.requestMediaV3>small{display:block;margin-bottom:8px;color:#6B6156;font-size:8px;font-weight:800}.requestMediaV3 .thumbGrid{grid-template-columns:repeat(4,minmax(0,1fr))}.requestMediaV3 .thumbBtn img{height:94px}.requestSectionV3{scroll-margin-top:126px;margin-top:12px}.requestSectionV3>.sectionHead{margin:15px 2px 8px}.requestSectionV3>.sectionHead h2{font-size:12px}.aiRequestV3{padding:16px;border:1px solid #E8E3DB;border-radius:15px;background:#fff}.aiRequestV3>.sectionHead{margin:0 0 9px}.requestAsideSection>.sectionHead{margin:0 0 7px 2px}.requestAsideSection>.sectionHead h2{font-size:11px}.requestDetailAsideV3 .contactCard{border:1px solid #E8E3DB;border-radius:14px;padding:14px;background:#fff}.requestDetailAsideV3 .contactCard h3{font-size:11px}.requestEquipmentMini b{display:block;margin-top:6px;font-size:10px}.requestEquipmentMini small{display:block;margin-top:5px;color:#A79B8B;font-size:8px}.requestOwnerV3{display:grid!important;gap:10px;padding:14px!important;border-radius:14px!important}.requestOwnerV3 .ownerRowActions{display:grid;grid-template-columns:1fr 1fr;gap:6px}.requestOwnerV3 small{display:block;margin-top:5px}.requestDocsCard{align-items:center}
@media(max-width:1180px){.requestTableHead,.requestRowV3{grid-template-columns:54px minmax(210px,1.55fr) minmax(120px,.85fr) 84px 98px minmax(105px,.75fr) 22px}.requestTableHead>span:nth-child(7),.requestRowV3>.reqCreated{display:none}.requestDetailGridV3{grid-template-columns:minmax(0,1.5fr) minmax(245px,.7fr)}.requestInfoMetaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:900px){.requestFilters.card{grid-template-columns:1fr 1fr}.requestSearch{grid-column:1/-1}.requestTableHead,.requestRowV3{grid-template-columns:50px minmax(190px,1.5fr) minmax(120px,.85fr) 94px 96px 22px}.requestTableHead>span:nth-child(4),.requestRowV3>span:nth-child(4),.requestTableHead>span:nth-child(6),.requestRowV3>.reqExecutor{display:none}.requestDetailGridV3{grid-template-columns:1fr}.requestDetailAsideV3{position:static;grid-row:1}.requestDetailAsideV3{grid-template-columns:1fr 1fr}.requestDetailAsideV3>.card:first-child{grid-column:1/-1}}
@media(max-width:820px){.requestsIntro{align-items:flex-start}.requestsActions .btn.light{display:none}.requestQuickTabs{overflow-x:auto;scrollbar-width:none;margin-left:-13px;margin-right:-13px;padding-left:13px}.requestQuickTabs::-webkit-scrollbar{display:none}.requestQuickTabs button{white-space:nowrap}.requestFilters.card{grid-template-columns:1fr 1fr;padding:8px}.requestSearch{grid-column:1/-1}.requestTableV3{display:none}.requestCardsMobile{display:grid;gap:0}.requestMobileCard{width:100%;border:0;border-bottom:1px solid #E8E3DB;background:#fff;text-align:left;padding:14px;color:#221E1A}.requestMobileCard:last-child{border-bottom:0}.requestMobileTop{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.requestMobileTop>span{font-size:8px;font-weight:800;color:#6B6156}.requestMobileCard>b{display:block;font-size:11px}.requestMobileCard>p{margin:5px 0 10px;color:#6B6156;font-size:8px}.requestMobileCard>div:last-child{display:flex;align-items:center;justify-content:space-between;gap:8px}.requestMobileCard>div:last-child small{color:#8A7F74;font-size:7.5px}.requestModalV3{padding:0;align-items:stretch}.requestSheetV3.sheet{width:100vw;max-width:none;height:100dvh;max-height:100dvh;border-radius:0}.requestSheetHeadV3{padding:15px 14px 13px}.requestDetailV3{padding:0 13px 90px}.requestDetailTabsV3{top:64px;margin:0 -13px 11px;padding:0 9px;overflow-x:auto}.requestDetailTabsV3 button{white-space:nowrap}.requestDetailAsideV3{grid-template-columns:1fr}.requestDetailAsideV3>.card:first-child{grid-column:auto}.requestInfoV3.card{padding:15px}.requestInfoMetaGrid{grid-template-columns:1fr 1fr}.requestMediaV3 .thumbGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.requestMediaV3 .thumbBtn img{height:112px}.requestOwnerV3 .ownerRowActions{grid-template-columns:1fr}.requestHeroV3{padding-top:12px}}
@media(max-width:520px){.requestsIntro{display:grid;grid-template-columns:1fr;gap:12px;margin-bottom:16px}.requestsIntro .title{font-size:29px}.requestsActions{width:100%;align-self:stretch}.requestsActions .btn:first-child{width:100%;height:44px;min-height:44px;padding:0 16px;border-radius:13px;font-size:11px;justify-content:center;box-shadow:0 8px 20px rgba(8,164,104,.16)}.requestsActions .btn:first-child:after{content:none}.requestFilters.card{grid-template-columns:1fr}.requestSearch{grid-column:auto}.requestInfoMetaGrid{grid-template-columns:1fr 1fr}.requestHeroMeta{gap:5px}.requestHeroMeta span:last-child{width:100%;margin-top:2px}.requestDetailTabsV3{top:63px}}


/* =========================================================
   v3.0.0-alpha2.3 — mobile request tags + estimate redesign
   ========================================================= */
.requestTypeTags{display:flex;align-items:center;gap:5px;flex-wrap:wrap}.requestTypeTag{display:inline-flex;align-items:center;min-height:20px;padding:4px 7px;border-radius:7px;font-size:7px;line-height:1;font-weight:850;white-space:nowrap}.requestTypeTag.staff{background:#E4EDF5;color:#3B5C7A}.requestTypeTag.resident{background:#E9F0EC;color:#2F6F58}.requestTypeTag.equipment{background:#E4EDF5;color:#3B5C7A}.requestTypeTag.emergency{background:#F6E7E4;color:#A63A2B}.requestHeroBadges .requestTypeTag{min-height:22px;font-size:7.5px}

.estimateBox.estimateV3{background:#fff;color:#221E1A;border:1px solid #E1DBD2;border-radius:18px;padding:18px;box-shadow:0 1px 0 rgba(26,23,20,.02);overflow:hidden}.estimateV3.estimateV3Ai{border-color:#B9D4C7;background:linear-gradient(180deg,#FBFAF8 0,#fff 34%)}.estimateV3Header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.estimateV3Heading{display:flex;align-items:flex-start;gap:11px;min-width:0}.estimateV3Icon{flex:0 0 auto;width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:#E9F0EC;color:#2F6F58;font-size:15px;font-weight:900}.estimateV3Ai .estimateV3Icon{background:linear-gradient(145deg,#E9F0EC,#E4EDF5);color:#2F6F58}.estimateV3Heading h3{margin:3px 0 0;font-size:14px;letter-spacing:-.025em}.estimateV3Badges{display:flex;gap:5px;flex-wrap:wrap;margin-top:7px}.estimateV3Chip{display:inline-flex;align-items:center;min-height:21px;padding:4px 7px;border-radius:7px;font-size:7px;font-weight:800}.estimateV3Chip.neutral{background:#F1ECE4;color:#8A7F74}.estimateV3Chip.soft{background:#FBEFD9;color:#8A5F13}.estimateV3Chip.ai{background:#E4EDF5;color:#3B5C7A}.estimateV3Amount{text-align:right;min-width:180px}.estimateV3Amount small{display:block!important;margin:0!important;color:#A79B8B!important;font-size:8px!important;font-weight:750}.estimateV3Amount strong{display:block;margin-top:5px;font-size:20px;letter-spacing:-.04em;color:#1A1714;white-space:nowrap}.estimateV3Amount strong em{font-size:10px;font-style:normal;color:#6B6156;font-weight:700;letter-spacing:0}.estimateV3Notice{display:grid;grid-template-columns:24px minmax(0,1fr);gap:9px;align-items:start;margin-top:15px;padding:11px 12px;border:1px solid #E1DBD2;border-radius:12px;background:#FBFAF8}.estimateV3Notice.ai{border-color:#B9D4C7;background:#E9F0EC}.estimateV3Notice>span{width:22px;height:22px;border-radius:7px;display:grid;place-items:center;background:#fff;border:1px solid #9DB2C4;color:#2F6F58;font-size:10px;font-weight:900}.estimateV3Notice p{margin:1px 0 0!important;color:#8A7F74!important;font-size:9px!important;line-height:1.45}.estimateV3Notice p b{color:#221E1A}.estimateV3Metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px}.estimateV3Metrics>div{padding:11px 12px;border:1px solid #E8E3DB;border-radius:11px;background:#FBFAF8;min-width:0}.estimateV3Metrics small{display:block!important;margin:0!important;color:#A79B8B!important;font-size:7.5px!important;font-weight:700}.estimateV3Metrics b{display:block;margin-top:5px;color:#1A1714;font-size:10.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.estimateV3 .estimateDetailItems{margin:13px 0 0;padding:0 12px;border:1px solid #E8E3DB;border-radius:13px;background:#fff}.estimateV3 .estimateDetailItem{padding:12px 0}.estimateV3 .estimateDetailItem b{color:#4A423B}.estimateV3 .estimateItemPrice{color:#1A1714}.estimateV3 .estimateFormula{display:inline-block!important;margin-top:5px!important;padding:4px 6px;border-radius:6px;background:#E4EDF5;color:#6B6156!important}.estimateV3 .aiEstimateAnalysis{border-color:#B9D4C7;background:#E9F0EC;border-radius:13px}.estimateV3 .aiEstimateAnalysis p{color:#4A423B}.estimateV3Actions{display:flex;justify-content:flex-end;gap:7px;flex-wrap:wrap;margin-top:13px;padding-top:13px;border-top:1px solid #E8E3DB}.estimateV3Actions .btn{min-height:34px}.estimateV3Disclaimer{margin-top:10px;color:#8A7F74;font-size:8px;line-height:1.45}.residentEstimateV3 .estimateV3Icon{background:#E4EDF5;color:#3B5C7A}.residentEstimateV3 .estimateDecision{margin-top:13px}.residentEstimateV3 .estimateDetailItems{padding:0 11px}

@media(max-width:820px){
  .requestMobileCard{padding:15px 14px}.requestMobileTop{align-items:flex-start;margin-bottom:7px}.requestMobileNumber{padding-top:4px}.requestMobileCard .requestTypeTags{margin:0 0 9px}.requestMobileCard .requestTypeTag{font-size:7px;padding:4px 7px;min-height:20px}.requestMobileCard>b{font-size:12px;line-height:1.25}.requestMobileCard>p{font-size:8.5px;margin:6px 0 11px}.requestMobileFooter{padding-top:1px}.requestMobileFooter small{max-width:68%;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.requestHeroBadges{gap:5px}
  .estimateBox.estimateV3{padding:14px;border-radius:15px}.estimateV3Header{display:grid;grid-template-columns:1fr;gap:12px}.estimateV3Amount{text-align:left;min-width:0;padding-top:10px;border-top:1px solid #E8E3DB}.estimateV3Amount strong{font-size:19px}.estimateV3Metrics{grid-template-columns:1fr;gap:6px}.estimateV3Metrics>div{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 11px}.estimateV3Metrics b{margin:0;text-align:right}.estimateV3Notice{margin-top:11px}.estimateV3 .estimateDetailItems{padding:0 10px}.estimateV3 .estimateDetailItem{grid-template-columns:1fr auto;gap:10px}.estimateV3 .estimateItemPrice{text-align:right}.estimateV3Actions{display:grid;grid-template-columns:1fr}.estimateV3Actions .btn{width:100%;justify-content:center}.estimateV3Decision{display:grid!important;grid-template-columns:1fr!important}
}
@media(max-width:420px){.estimateV3 .estimateDetailItem{grid-template-columns:1fr}.estimateV3 .estimateItemPrice{text-align:left}.requestMobileFooter small{max-width:62%}}

/* =========================================================
   v3.0.0-alpha3 — services + equipment + internal requests
   ========================================================= */
.moduleIntroV3{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:18px}.moduleActionsV3{display:flex;align-items:center;gap:8px}.moduleActionsV3 .btn{min-height:38px}.moduleKpiGridV3{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:0 0 14px}.moduleKpiV3{min-height:92px;padding:14px;border:1px solid #E8E3DB;border-radius:15px;background:#fff;box-shadow:0 1px 0 rgba(26,23,20,.015);position:relative;overflow:hidden}.moduleKpiV3>span{width:26px;height:26px;display:grid;place-items:center;border-radius:8px;background:#E9F0EC;color:#2F6F58;font-weight:900;font-size:10px;margin-bottom:9px}.moduleKpiV3 small{display:block;color:#8A7F74;font-size:8px;font-weight:750}.moduleKpiV3 b{display:block;margin-top:4px;font-size:17px;letter-spacing:-.035em;color:#221E1A}.serviceTabsV3{margin:0 0 12px;border-bottom:1px solid #9DB2C4;gap:4px}.serviceTabsV3 button{border:0;background:transparent;padding:10px 12px;color:#6B6156;font-size:9px;font-weight:800;border-bottom:2px solid transparent}.serviceTabsV3 button.active{color:#2F6F58;border-bottom-color:#B07D22}.serviceFiltersV3{display:grid;grid-template-columns:180px 190px minmax(220px,1fr);gap:8px;padding:9px;margin-bottom:12px;border-radius:14px}.serviceFiltersV3 select,.serviceFiltersV3 input{height:38px;border:1px solid #E1DBD2;border-radius:10px;background:#fff;padding:0 11px}.serviceOrdersV3{border:1px solid #E8E3DB;border-radius:16px;background:#fff;overflow:hidden}.serviceTableV3{overflow:auto}.serviceTableV3 table{width:100%;border-collapse:collapse}.serviceTableV3 th{padding:11px 12px;font-size:7.5px;text-transform:uppercase;letter-spacing:.06em}.serviceTableV3 td{padding:13px 12px;border-top:1px solid #E8E3DB;font-size:9px;vertical-align:middle}.serviceTableV3 td b{font-size:9.5px}.serviceTableV3 td small{display:block;margin-top:4px;color:#A79B8B;font-size:7.5px;max-width:240px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.serviceTableV3 tr:hover td{background:#FBFAF8}.serviceStatusV3{display:inline-flex;align-items:center;min-height:22px;padding:4px 7px;border-radius:7px;font-size:7px;font-weight:850;white-space:nowrap;background:#F1ECE4;color:#8A7F74}.serviceStatusV3.green{background:#E9F0EC;color:#2F6F58}.serviceStatusV3.warn{background:#FBEFD9;color:#8A5F13}.serviceStatusV3.orange{background:#FBEFD9;color:#B07D22}.serviceStatusV3.red{background:#F6E7E4;color:#A63A2B}.serviceStatusV3.blue{background:#E4EDF5;color:#3B5C7A}.serviceStatusV3.gray{background:#F1ECE4;color:#6B6156}.serviceMobileListV3,.equipmentMobileListV3{display:none}.serviceCatalogNoticeV3{display:flex;gap:11px;align-items:flex-start;padding:14px 15px;margin-bottom:12px;border:1px solid #B9D4C7;border-radius:14px;background:#F4F1EA}.serviceCatalogNoticeV3>span{width:28px;height:28px;display:grid;place-items:center;border-radius:9px;background:#E9F0EC;color:#2F6F58;font-weight:900}.serviceCatalogNoticeV3 b{font-size:10px}.serviceCatalogNoticeV3 p{margin:4px 0 0;color:#6B6156;font-size:8.5px;line-height:1.45}.serviceCatalogGridV3{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.serviceCatalogCardV3{padding:15px!important;display:flex;flex-direction:column;min-height:205px}.serviceCatalogHeadV3{display:flex;justify-content:space-between;align-items:center;gap:8px}.serviceCatalogIconV3{width:30px;height:30px;border-radius:10px;display:grid;place-items:center;background:#E9F0EC;color:#2F6F58}.serviceCatalogCardV3 h3{font-size:12px;margin:12px 0 6px}.serviceCatalogCardV3 p{font-size:8.5px;line-height:1.45;flex:1}.serviceCatalogCardV3 .servicePrice{font-size:17px;margin:10px 0 6px;letter-spacing:-.035em}.serviceCatalogCardV3 .ownerRowActions{margin-top:10px;padding-top:10px;border-top:1px solid #E8E3DB}
.serviceOrderSheetV3.sheet{max-width:1180px}.serviceOrderHeroV3{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;padding:2px 2px 14px;border-bottom:1px solid #E8E3DB}.serviceOrderHeroBadgesV3{display:flex;gap:6px;flex-wrap:wrap}.serviceOrderHeroV3 p{margin:7px 0 0;color:#8A7F74;font-size:8.5px}.serviceOrderMoneyV3{display:flex;gap:8px}.serviceOrderMoneyV3>div{min-width:120px;padding:10px 12px;border:1px solid #E8E3DB;border-radius:11px;background:#FBFAF8;text-align:right}.serviceOrderMoneyV3 small{display:block;color:#A79B8B;font-size:7px}.serviceOrderMoneyV3 b{display:block;margin-top:4px;font-size:13px}.serviceOrderGridV3{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(250px,.65fr);gap:14px;align-items:start;margin-top:14px}.serviceOrderGridV3 main{min-width:0}.serviceOrderAsideV3{display:grid;gap:12px;position:sticky;top:0}.serviceOrderInfoV3{padding:17px!important}.serviceOrderInfoV3 h3{font-size:13px;margin-top:3px}.serviceOrderGridV3 main>.card{border-radius:15px}.serviceResidentV3 b{display:block;margin-top:7px;font-size:11px}.serviceResidentV3 small{display:block;margin-top:3px;color:#A79B8B}.serviceResidentV3 a{display:inline-flex;margin-top:10px;text-decoration:none;color:#2F6F58;font-size:9px;font-weight:800}.serviceHistoryV3 .timeline{margin-top:10px}
.internalWorkflowV3>.sectionHead{margin-bottom:8px}.internalCommentsWrapV3{margin-top:12px}.internalCommentsWrapV3>.sectionHead{margin:0 2px 7px}.internalCostsV3{padding:17px;border:1px solid #E1DBD2;border-radius:17px;background:#fff}.internalCostsHeaderV3{display:flex;justify-content:space-between;gap:20px;align-items:flex-start}.internalCostsHeaderV3 h3{margin:3px 0 0;font-size:14px}.internalCostsHeaderV3 p{max-width:580px;margin:6px 0 0;color:#6B6156;font-size:8.5px;line-height:1.45}.internalCostsTotalV3{text-align:right;min-width:150px}.internalCostsTotalV3 small{display:block;color:#A79B8B;font-size:8px}.internalCostsTotalV3 strong{display:block;margin-top:4px;font-size:20px;letter-spacing:-.04em}.internalCostMetricsV3{margin-top:14px}.internalMaterialsV3{margin-top:14px}.internalMaterialsV3>h3{font-size:10px}.internalCostFormV3{margin-top:14px;padding-top:14px;border-top:1px solid #E8E3DB}.internalDocsV3{border-color:#B9D4C7!important;background:linear-gradient(180deg,#FBFAF8,#fff)}
.equipmentSummaryV3{margin-bottom:12px}.equipmentFiltersV3{display:grid;grid-template-columns:minmax(220px,1.6fr) auto repeat(5,minmax(135px,.7fr)) auto;gap:7px;padding:9px;margin-bottom:12px}.equipmentFiltersV3 .requestSearch{min-width:0}.equipmentFiltersV3 .requestSearch input{width:100%;height:38px}.equipmentFiltersV3 select{height:38px;border:1px solid #E1DBD2;border-radius:10px;background:#fff;padding:0 9px;font-size:9px}.equipmentTableV3{border:1px solid #E8E3DB;border-radius:16px;background:#fff;overflow:auto}.equipmentTableV3 table{width:100%;border-collapse:collapse}.equipmentTableV3 th{padding:11px 12px;font-size:7.5px;text-transform:uppercase;letter-spacing:.06em}.equipmentTableV3 td{padding:13px 12px;border-top:1px solid #E8E3DB;font-size:9px;vertical-align:middle}.equipmentTableV3 td b{font-size:9.5px}.equipmentTableV3 td small{display:block;margin-top:4px;color:#A79B8B;font-size:7.5px}.equipmentTableV3 tr:hover td{background:#FBFAF8}.miniActionV3{width:28px;height:28px;border:1px solid #9DB2C4;border-radius:8px;background:#fff;color:#4A423B;cursor:pointer}.miniActionV3.danger{color:#A63A2B;background:#F6E7E4;border-color:#E2B3AB}.directoryGroup .equipmentTableV3{border-radius:0 0 14px 14px;border-top:0}.equipmentPassportSheetV3.sheet{max-width:1180px}.equipmentPassportHeroV3{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;padding:2px 2px 14px;border-bottom:1px solid #E8E3DB}.equipmentPassportHeroV3 p{margin:7px 0 0;color:#8A7F74;font-size:8.5px}.equipmentPassportHeroMetaV3{display:flex;gap:8px}.equipmentPassportHeroMetaV3>div{min-width:120px;padding:10px 12px;border:1px solid #E8E3DB;border-radius:11px;background:#FBFAF8}.equipmentPassportHeroMetaV3 small{display:block;color:#A79B8B;font-size:7px}.equipmentPassportHeroMetaV3 b{display:block;margin-top:4px;font-size:10px}.equipmentPassportGridV3{margin-top:14px}.equipmentPassportGridV3>.card{border-radius:15px}.equipmentPassportSheetV3 .sectionHead{margin-top:16px}.equipmentPassportSheetV3 .tableWrap{border-radius:14px}.equipmentPassportSheetV3 .timeline{padding-bottom:4px}
@media(max-width:1200px){.moduleKpiGridV3{grid-template-columns:repeat(3,minmax(0,1fr))}.serviceCatalogGridV3{grid-template-columns:repeat(2,minmax(0,1fr))}.equipmentFiltersV3{grid-template-columns:minmax(220px,1.5fr) auto repeat(3,minmax(140px,1fr))}.equipmentFiltersV3 #equipmentMaintenanceFilter,.equipmentFiltersV3 #equipmentSort,.equipmentFiltersV3 #equipmentGroupBy,.equipmentFiltersV3 .equipmentResetV3{display:none}.serviceOrderGridV3{grid-template-columns:minmax(0,1.4fr) minmax(240px,.65fr)}}
@media(max-width:820px){.moduleIntroV3{display:grid;grid-template-columns:1fr;gap:12px}.moduleActionsV3{width:100%}.moduleActionsV3 .btn:first-child{flex:1;justify-content:center}.moduleKpiGridV3{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.moduleKpiV3{min-height:80px;padding:12px}.moduleKpiV3:last-child{grid-column:1/-1}.serviceFiltersV3{grid-template-columns:1fr 1fr;padding:8px}.serviceFiltersV3 .requestSearch{grid-column:1/-1}.serviceTableV3,.equipmentTableV3{display:none}.serviceMobileListV3,.equipmentMobileListV3{display:grid}.serviceOrdersV3{border-radius:15px}.serviceMobileCardV3,.equipmentMobileCardV3{width:100%;padding:14px;border:0;border-bottom:1px solid #E8E3DB;background:#fff;text-align:left;color:#221E1A}.serviceMobileCardV3:last-child,.equipmentMobileCardV3:last-child{border-bottom:0}.serviceMobileTopV3,.equipmentMobileTopV3{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.serviceMobileTopV3>span:first-child{font-size:8px;font-weight:850;color:#6B6156}.serviceMobileCardV3>b,.equipmentMobileCardV3>b{display:block;font-size:11.5px}.serviceMobileCardV3>p,.equipmentMobileCardV3>p{margin:5px 0 10px;color:#8A7F74;font-size:8.5px}.serviceMobileCardV3>div:last-child,.equipmentMobileCardV3>div:last-child{display:flex;justify-content:space-between;align-items:center;gap:8px}.serviceMobileCardV3 small,.equipmentMobileCardV3 small{color:#A79B8B;font-size:7.5px}.serviceMobileCardV3 strong,.equipmentMobileCardV3 strong{font-size:8.5px}.serviceCatalogGridV3{grid-template-columns:1fr}.serviceOrderSheetV3.sheet,.equipmentPassportSheetV3.sheet{width:100vw;max-width:none;height:100dvh;max-height:100dvh;border-radius:0}.serviceOrderHeroV3,.equipmentPassportHeroV3{display:grid;grid-template-columns:1fr;gap:10px}.serviceOrderMoneyV3,.equipmentPassportHeroMetaV3{display:grid;grid-template-columns:1fr 1fr}.serviceOrderMoneyV3>div{text-align:left;min-width:0}.serviceOrderGridV3{grid-template-columns:1fr}.serviceOrderAsideV3{position:static;grid-row:1}.serviceOrderInfoV3 .requestInfoMetaGrid{grid-template-columns:1fr 1fr}.internalCostsHeaderV3{display:grid;grid-template-columns:1fr}.internalCostsTotalV3{text-align:left;min-width:0;padding-top:10px;border-top:1px solid #E8E3DB}.equipmentFiltersV3{grid-template-columns:1fr 1fr;padding:8px}.equipmentFiltersV3 .requestSearch{grid-column:1/-1}.equipmentFiltersV3 #equipmentGroupFilter,.equipmentFiltersV3 #equipmentMaintenanceFilter,.equipmentFiltersV3 #equipmentSort,.equipmentFiltersV3 #equipmentGroupBy,.equipmentFiltersV3 .equipmentResetV3{display:none}.equipmentMobileIconV3{width:28px;height:28px;border-radius:9px;background:#E9F0EC;color:#2F6F58;display:grid;place-items:center}.equipmentWrapV3>.directoryGroup{margin-bottom:10px}}
@media(max-width:520px){.moduleIntroV3 .title{font-size:29px}.moduleActionsV3 .btn{width:100%}.moduleActionsV3 .btn.light{display:none}.moduleKpiGridV3{grid-template-columns:1fr 1fr}.serviceFiltersV3,.equipmentFiltersV3{grid-template-columns:1fr}.serviceFiltersV3 .requestSearch,.equipmentFiltersV3 .requestSearch{grid-column:auto}.serviceOrderMoneyV3,.equipmentPassportHeroMetaV3{grid-template-columns:1fr}.serviceOrderInfoV3 .requestInfoMetaGrid{grid-template-columns:1fr 1fr}.internalCostMetricsV3{grid-template-columns:1fr}.internalCostMetricsV3>div{display:flex;justify-content:space-between;align-items:center}.internalCostMetricsV3 b{margin:0}.serviceCatalogNoticeV3{padding:12px}.serviceCatalogCardV3{min-height:0}}

/* v3.0.0-alpha4 — Objects / Residents / Staff / Reports */
.v3DirectoryPage .directoryIntroV3{margin-bottom:14px}
.v3DirectoryPage .directorySummary{grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin-bottom:12px}
.v3DirectoryPage .directoryStat{display:flex;align-items:center;gap:10px;min-height:76px;padding:12px 13px;border:1px solid #E1DBD2;border-radius:14px;background:#fff;text-align:left;box-shadow:0 1px 2px rgba(16,24,40,.02)}
.v3DirectoryPage .directoryStat:hover,.v3DirectoryPage .directoryStat.active{transform:translateY(-1px);border-color:#B9D4C7;background:#FBFAF8;box-shadow:0 8px 20px rgba(16,24,40,.05)}
.directoryStatIcon{flex:0 0 31px;width:31px;height:31px;display:grid;place-items:center;border-radius:10px;background:#E9F0EC;color:#2F6F58;font-size:12px;font-weight:900}
.directoryStat.blue .directoryStatIcon{background:#E4EDF5;color:#3B5C7A}.directoryStat.violet .directoryStatIcon{background:#F1ECE4;color:#4A423B}.directoryStat.orange .directoryStatIcon{background:#FBEFD9;color:#B07D22}
.directoryStatCopy{min-width:0}.directoryStatCopy small{display:block;color:#6B6156;font-size:8px;font-weight:800;text-transform:none;letter-spacing:0}.directoryStatCopy b{display:block;margin-top:3px;font-size:18px;letter-spacing:-.03em}.directoryStatCopy em{display:block;margin-top:3px;color:#8A7F74;font-size:7.5px;font-style:normal}
.v3DirectoryPage .directoryToolbar{display:grid;grid-template-columns:minmax(220px,1.6fr) auto repeat(3,minmax(130px,.7fr)) auto;gap:7px;margin:0 0 12px;padding:9px;border:1px solid #E8E3DB;border-radius:15px;background:#fff}
.v3Staff .directoryToolbar{grid-template-columns:minmax(220px,1.5fr) auto repeat(6,minmax(125px,.7fr)) auto}
.v3DirectoryPage .directoryToolbar input,.v3DirectoryPage .directoryToolbar select{height:38px;border:1px solid #E1DBD2;border-radius:10px;background:#fff;padding:0 10px;font-size:9px;min-width:0;max-width:none}
.v3DirectoryPage .directoryToolbar>input{grid-column:auto;min-width:0}
.v3DirectoryPage .directoryFilterToggle{height:38px;border-radius:10px}
.v3DirectoryPage .directoryToolbar>.btn{height:38px;align-self:center}

.objectGridV3,.v3Objects>.objectGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.objectCardV3{width:100%;padding:0;border:1px solid #E1DBD2;border-radius:16px;background:#fff;color:#221E1A;text-align:left;cursor:pointer;overflow:hidden;transition:.16s ease;box-shadow:0 1px 2px rgba(16,24,40,.02)}
.objectCardV3:hover{transform:translateY(-2px);border-color:#B9D4C7;box-shadow:0 12px 28px rgba(16,24,40,.07)}
.objectCardHeroV3{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:11px;align-items:start;padding:15px 15px 13px}
.objectAvatarV3{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:linear-gradient(145deg,#B9D4C7,#E9F0EC);color:#2F6F58;font-size:13px;font-weight:900}
.objectTypeV3{display:inline-flex;padding:4px 7px;border-radius:999px;background:#E4EDF5;color:#6B6156;font-size:7px;font-weight:850;letter-spacing:.04em;text-transform:uppercase}
.objectCardHeroV3 h3{margin:6px 0 3px;font-size:13px;letter-spacing:-.025em}.objectCardHeroV3 p{margin:0;color:#8A7F74;font-size:8.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.objectCardHeroV3 .directoryArrow{font-size:22px;color:#A79B8B}
.objectMetricsV3{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid #E8E3DB;border-bottom:1px solid #E8E3DB;background:#FBFAF8}
.objectMetricsV3 span{padding:10px 11px;border-right:1px solid #E8E3DB}.objectMetricsV3 span:last-child{border-right:0}.objectMetricsV3 b{display:block;font-size:12px}.objectMetricsV3 small{display:block;margin-top:3px;color:#A79B8B;font-size:7px}
.objectCardFooterV3{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 14px;color:#6B6156;font-size:7.5px}.objectCardFooterV3>span:first-child{display:flex;align-items:center;gap:6px}.healthDotV3{width:7px;height:7px;border-radius:50%;background:#B07D22}.healthDotV3.busy{background:#C79337}

.objectSheetV3.sheet{max-width:1180px}.objectHeroV3{display:flex;justify-content:space-between;gap:14px;align-items:center;padding:0 2px 13px;border-bottom:1px solid #E8E3DB}.objectHeroV3 p{margin:7px 0 0;color:#8A7F74;font-size:9px}.objectDetailKpisV3{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:13px 0}.objectDetailKpisV3>div{padding:11px 12px;border:1px solid #E8E3DB;border-radius:12px;background:#FBFAF8}.objectDetailKpisV3 small{display:block;color:#A79B8B;font-size:7px}.objectDetailKpisV3 b{display:block;margin-top:4px;font-size:15px}.objectDetailGridV3{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(260px,.7fr);gap:13px;align-items:start}.objectDetailGridV3 main{min-width:0}.objectAsideV3{display:grid;gap:10px;position:sticky;top:0}.objectPassportV3{padding:16px!important}.objectSectionHeadV3{margin:15px 2px 8px!important}.objectSectionHeadV3 h2{margin:3px 0 0;font-size:13px}.objectEquipmentGroupV3{margin-bottom:8px;border:1px solid #E8E3DB;border-radius:13px;overflow:hidden;background:#fff}.objectEquipmentGroupV3 .groupHead{padding:9px 11px;background:#FBFAF8}.objectEqRowV3{width:100%;border:0;border-top:1px solid #E8E3DB;background:#fff;padding:10px 11px;display:flex;justify-content:space-between;gap:10px;text-align:left;color:#221E1A;cursor:pointer}.objectEqRowV3:hover{background:#FBFAF8}.objectEqRowV3 small{display:block;margin-top:3px;color:#A79B8B;font-size:7.5px}.objectPeopleV3{display:grid;gap:1px;margin-top:8px}.objectPeopleV3>div{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid #F1ECE4}.objectPeopleV3>div:last-child{border-bottom:0}.objectPeopleV3>div>span{width:28px;height:28px;border-radius:9px;background:#E9F0EC;color:#2F6F58;display:grid;place-items:center;font-size:8px;font-weight:900}.objectPeopleV3 p{margin:0;min-width:0}.objectPeopleV3 b{display:block;font-size:8.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.objectPeopleV3 small{display:block;margin-top:2px;color:#A79B8B;font-size:7px}.objectPeopleV3 em{font-style:normal;font-size:6.5px}.objectAsideLinkV3{width:100%;justify-content:flex-start;margin-top:8px}

.directoryTableV3{border:1px solid #E8E3DB;border-radius:16px;background:#fff;overflow:auto}.directoryTableV3 table{width:100%;border-collapse:collapse}.directoryTableV3 th{padding:11px 12px;background:#FBFAF8;color:#8A7F74;font-size:7.5px;text-transform:uppercase;letter-spacing:.055em;text-align:left}.directoryTableV3 td{padding:12px;border-top:1px solid #E8E3DB;font-size:8.7px;vertical-align:middle}.directoryTableV3 td>b{font-size:9px}.directoryTableV3 td>small{display:block;margin-top:3px;color:#A79B8B;font-size:7px}.directoryTableV3 tbody tr:hover td{background:#FBFAF8}.personCellV3{display:flex;align-items:center;gap:9px;min-width:180px}.personCellV3>span{flex:0 0 31px;width:31px;height:31px;border-radius:10px;background:#E9F0EC;color:#2F6F58;display:grid;place-items:center;font-size:9px;font-weight:900}.personCellV3 p{min-width:0;margin:0}.personCellV3 b{display:block;font-size:9px}.personCellV3 small{display:block;margin-top:3px;color:#A79B8B;font-size:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.statusChipV3,.staffRoleChipV3{display:inline-flex;padding:5px 8px;border-radius:999px;font-size:7px;font-weight:850;white-space:nowrap}.statusChipV3.green{background:#E9F0EC;color:#2F6F58}.statusChipV3.warn{background:#FBEFD9;color:#8A5F13}.statusChipV3.red{background:#F6E7E4;color:#A63A2B}.statusChipV3.gray{background:#F1ECE4;color:#6B6156}.staffRoleChipV3{background:#E4EDF5;color:#3B5C7A}.staffRoleChipV3.executor{background:#E9F0EC;color:#2F6F58}.staffRoleChipV3.manager{background:#F1ECE4;color:#4A423B}.relationTagsV3{display:flex;flex-wrap:wrap;gap:4px}.directoryMobileListV3{display:none}.directoryGroup .directoryTableV3{border-radius:0 0 14px 14px}.directoryGroup .directoryMobileListV3{border:1px solid #E8E3DB;border-radius:0 0 14px 14px;overflow:hidden}

.v3Reports .moduleIntroV3{margin-bottom:14px}.reportControlV3{padding:10px!important;border-radius:15px!important}.reportControlFieldsV3{display:grid;grid-template-columns:minmax(180px,1fr) minmax(180px,.8fr) auto;gap:8px;align-items:end}.reportControlFieldsV3 .field{margin:0}.reportControlFieldsV3 label{font-size:8px}.reportControlFieldsV3 select{height:40px;border-radius:10px}.reportBuildV3{height:40px;min-width:180px;justify-content:center}.reportResultHostV3{margin-top:12px}.reportWelcomeV3{min-height:150px;border:1px dashed #9DB2C4;border-radius:16px;background:#FBFAF8;display:flex;align-items:center;justify-content:center;gap:12px;padding:24px;color:#8A7F74}.reportWelcomeV3>span{width:38px;height:38px;display:grid;place-items:center;border-radius:12px;background:#E9F0EC;color:#2F6F58;font-weight:900}.reportWelcomeV3 b{display:block;color:#4A423B;font-size:11px}.reportWelcomeV3 p{max-width:560px;margin:5px 0 0;font-size:8.5px;line-height:1.45}.reportKpiGridV3{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.reportKpiV3{position:relative;min-height:98px;padding:13px;border:1px solid #E8E3DB;border-radius:14px;background:#fff;text-align:left;color:#221E1A;cursor:pointer;overflow:hidden}.reportKpiV3:hover{transform:translateY(-1px);box-shadow:0 8px 20px rgba(16,24,40,.05)}.reportKpiV3>span{width:28px;height:28px;display:grid;place-items:center;border-radius:9px;background:#E9F0EC;color:#2F6F58;font-size:10px;font-weight:900}.reportKpiV3.blue>span{background:#E4EDF5;color:#3B5C7A}.reportKpiV3.orange>span{background:#FBEFD9;color:#B07D22}.reportKpiV3.violet>span{background:#F1ECE4;color:#4A423B}.reportKpiV3.gray>span{background:#F1ECE4;color:#6B6156}.reportKpiV3 small{display:block;margin-top:10px;color:#6B6156;font-size:7.5px}.reportKpiV3 b{display:block;margin-top:3px;font-size:19px;letter-spacing:-.04em}.reportKpiV3 em{display:block;margin-top:4px;color:#A79B8B;font-size:7px;font-style:normal}.reportMoneyV3{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.reportMoneyV3>div{display:flex;align-items:center;gap:10px;padding:13px 14px;border:1px solid #E8E3DB;border-radius:14px;background:#fff}.reportMoneyIconV3{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:#E9F0EC;color:#2F6F58;font-weight:900}.reportMoneyIconV3.alt{background:#E4EDF5;color:#3B5C7A}.reportMoneyV3 p{margin:0}.reportMoneyV3 small{display:block;color:#8A7F74;font-size:7.5px}.reportMoneyV3 b{display:block;margin-top:3px;font-size:15px}.reportChartsV3{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:9px}.reportChartCardV3{padding:15px!important}.reportBarsV3{display:grid;gap:10px;margin-top:12px}.barRowV3>div:first-child{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:5px}.barRowV3 span{color:#8A7F74;font-size:8px}.barRowV3 b{font-size:8px}.barV3{height:6px;border-radius:999px;background:#F1ECE4;overflow:hidden}.barV3 i{display:block;height:100%;border-radius:inherit;background:#B07D22}.reportBarsV3.services .barV3 i{background:#3B5C7A}.reportAiNoteV3{display:flex;gap:10px;align-items:flex-start;margin-top:9px;padding:13px 14px;border:1px solid #B9D4C7;border-radius:14px;background:#F4F1EA}.reportAiNoteV3>span{font-size:16px}.reportAiNoteV3 b{display:block;font-size:9px}.reportAiNoteV3 p{margin:4px 0 0;color:#8A7F74;font-size:8px;line-height:1.45}

@media(max-width:1180px){
  .v3Staff .directoryToolbar{grid-template-columns:minmax(220px,1.4fr) auto repeat(3,minmax(130px,1fr))}.v3Staff .directoryToolbar #staffJobFilter,.v3Staff .directoryToolbar #staffSpecFilter,.v3Staff .directoryToolbar #staffGroup{display:none}
  .reportKpiGridV3{grid-template-columns:repeat(3,minmax(0,1fr))}.reportKpiV3:nth-child(4),.reportKpiV3:nth-child(5){grid-column:auto}
}
@media(max-width:820px){
  .v3DirectoryPage .directorySummary{grid-template-columns:repeat(2,minmax(0,1fr))}.v3DirectoryPage .directoryStat{min-height:70px;padding:10px}.directoryStatIcon{width:29px;height:29px;flex-basis:29px}.directoryStatCopy b{font-size:16px}
  .v3DirectoryPage .directoryToolbar,.v3Staff .directoryToolbar{grid-template-columns:1fr 1fr;padding:8px}.v3DirectoryPage .directoryToolbar>input{grid-column:1/-1}.v3DirectoryPage .directoryToolbar .directoryFilterToggle{grid-column:auto}.v3DirectoryPage .directoryToolbar>select,.v3DirectoryPage .directoryToolbar>.btn:not(.directoryFilterToggle){display:none}.v3DirectoryPage .directoryToolbar.filters-open>select,.v3DirectoryPage .directoryToolbar.filters-open>.btn:not(.directoryFilterToggle){display:flex}.v3DirectoryPage .directoryToolbar.filters-open>select{display:block}.v3Staff .directoryToolbar #staffJobFilter,.v3Staff .directoryToolbar #staffSpecFilter,.v3Staff .directoryToolbar #staffGroup{display:none}
  .objectGridV3,.v3Objects>.objectGrid{grid-template-columns:1fr}.objectMetricsV3{grid-template-columns:repeat(4,1fr)}
  .directoryTableV3{display:none}.directoryMobileListV3{display:grid;border:1px solid #E8E3DB;border-radius:16px;background:#fff;overflow:hidden}.directoryMobileCardV3{padding:14px;border-bottom:1px solid #E8E3DB;background:#fff}.directoryMobileCardV3:last-child{border-bottom:0}.directoryMobileHeadV3{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.directoryMobileHeadV3 .personCellV3{min-width:0}.directoryMobileMetaV3{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:12px}.directoryMobileMetaV3>span{padding:8px 9px;border-radius:10px;background:#FBFAF8}.directoryMobileMetaV3 small{display:block;color:#A79B8B;font-size:7px}.directoryMobileMetaV3 b{display:block;margin-top:3px;font-size:8.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.directoryMobileCardV3>.relationTagsV3{margin-top:9px}.directoryMobileActionsV3{display:flex;gap:7px;margin-top:11px;padding-top:11px;border-top:1px solid #E8E3DB}.directoryMobileActionsV3 .btn{flex:1;justify-content:center}
  .objectSheetV3.sheet{width:100vw;max-width:none;height:100dvh;max-height:100dvh;border-radius:0}.objectHeroV3{align-items:flex-start}.objectDetailKpisV3{grid-template-columns:repeat(2,1fr)}.objectDetailKpisV3>div:last-child{grid-column:1/-1}.objectDetailGridV3{grid-template-columns:1fr}.objectAsideV3{position:static;grid-row:1}.objectPeopleV3>div{grid-template-columns:auto minmax(0,1fr)}.objectPeopleV3 em{grid-column:2}
  .reportControlFieldsV3{grid-template-columns:1fr 1fr}.reportBuildV3{grid-column:1/-1}.reportKpiGridV3{grid-template-columns:repeat(2,minmax(0,1fr))}.reportKpiV3:last-child{grid-column:1/-1}.reportChartsV3{grid-template-columns:1fr}.v3Reports .moduleActionsV3{display:flex;width:100%}.v3Reports .moduleActionsV3 .btn{flex:1;justify-content:center}
}
@media(max-width:520px){
  .v3DirectoryPage .moduleIntroV3 .title,.v3Reports .moduleIntroV3 .title{font-size:29px}.v3DirectoryPage .directorySummary{gap:7px}.v3DirectoryPage .directoryStat{min-height:68px}.v3DirectoryPage .directoryToolbar,.v3Staff .directoryToolbar{grid-template-columns:1fr}.v3DirectoryPage .directoryToolbar>input{grid-column:auto}.v3DirectoryPage .directoryFilterToggle{width:100%}
  .objectMetricsV3{grid-template-columns:1fr 1fr}.objectMetricsV3 span:nth-child(2){border-right:0}.objectMetricsV3 span:nth-child(-n+2){border-bottom:1px solid #E8E3DB}.objectCardFooterV3{align-items:flex-start;flex-direction:column}.objectDetailKpisV3{grid-template-columns:1fr 1fr}.objectHeroV3{display:grid;grid-template-columns:1fr}.objectHeroV3 .btn{width:100%;justify-content:center}.objectDetailGridV3 .requestInfoMetaGrid{grid-template-columns:1fr 1fr}
  .directoryMobileMetaV3{grid-template-columns:1fr 1fr}.directoryMobileMetaV3>span:last-child{grid-column:1/-1}.directoryMobileActionsV3{display:grid;grid-template-columns:1fr 1fr}.directoryMobileActionsV3 .btn:first-child:nth-last-child(3){grid-column:1/-1}.personCellV3>span{width:34px;height:34px;flex-basis:34px}.personCellV3 b{font-size:10px}.personCellV3 small{font-size:7.5px;max-width:190px}
  .reportControlFieldsV3{grid-template-columns:1fr}.reportBuildV3{grid-column:auto;width:100%}.reportKpiGridV3{grid-template-columns:1fr 1fr}.reportKpiV3{min-height:92px}.reportKpiV3:last-child{grid-column:1/-1}.reportMoneyV3{grid-template-columns:1fr}.v3Reports .moduleActionsV3{display:grid;grid-template-columns:1fr 1fr}
}
@media(min-width:821px){.v3Residents .directorySummary{grid-template-columns:repeat(5,minmax(0,1fr))}}

/* v3.0.0-alpha5 — desktop request source chips: Служебная / От жильца */


/* =========================================================
   v3.0.0-alpha5 — pricing, forms/modals, resident cabinet, mobile polish
   ========================================================= */
.v3Prices .moduleIntroV3{margin-bottom:14px}.priceSummaryV3{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin-bottom:10px}.priceKpiV3{display:flex;align-items:flex-start;gap:11px;padding:14px;border:1px solid #E8E3DB;border-radius:15px;background:#fff;box-shadow:0 1px 2px rgba(16,24,40,.02)}.priceKpiV3>span{width:31px;height:31px;flex:0 0 31px;border-radius:10px;display:grid;place-items:center;background:#E9F0EC;color:#2F6F58;font-size:11px;font-weight:900}.priceKpiV3.blue>span{background:#E4EDF5;color:#3B5C7A}.priceKpiV3.violet>span{background:#F1ECE4;color:#4A423B}.priceKpiV3.orange>span{background:#FBEFD9;color:#B07D22}.priceKpiV3 small{display:block;color:#6B6156;font-size:7.5px}.priceKpiV3 b{display:block;margin-top:3px;font-size:17px;letter-spacing:-.035em}.priceKpiV3 em{display:block;margin-top:3px;color:#8A7F74;font-size:7px;font-style:normal}.priceToolbarV3{display:grid;grid-template-columns:minmax(260px,1.7fr) minmax(170px,.8fr) minmax(160px,.8fr) auto;gap:8px;padding:9px!important;border-radius:14px!important;margin-bottom:10px}.priceToolbarV3 .requestSearch{height:38px}.priceToolbarV3 select,.priceToolbarV3 .btn{height:38px}.priceTableV3{border:1px solid #E8E3DB;border-radius:16px;background:#fff;overflow:auto}.priceTableV3 table{width:100%;border-collapse:collapse}.priceTableV3 th{padding:11px 12px;background:#FBFAF8;color:#8A7F74;font-size:7.5px;text-transform:uppercase;letter-spacing:.055em;text-align:left}.priceTableV3 td{padding:12px;border-top:1px solid #E8E3DB;font-size:8.5px;vertical-align:middle}.priceTableV3 tbody tr:hover td{background:#FBFAF8}.priceNameCellV3{display:flex;align-items:center;gap:9px;min-width:190px}.priceIconV3{width:31px;height:31px;flex:0 0 31px;border-radius:10px;background:#E9F0EC;color:#2F6F58;display:grid;place-items:center;font-size:10px;font-weight:900}.priceNameCellV3 b{display:block;font-size:9px}.priceNameCellV3 small{display:block;margin-top:3px;color:#A79B8B;font-size:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:230px}.priceCategoryChipV3,.priceTypeChipV3{display:inline-flex;align-items:center;border-radius:999px;padding:5px 8px;font-size:7px;font-weight:850;white-space:nowrap}.priceCategoryChipV3{background:#F1ECE4;color:#4A423B}.priceTypeChipV3.green{background:#E9F0EC;color:#2F6F58}.priceTypeChipV3.blue{background:#E4EDF5;color:#3B5C7A}.priceTypeChipV3.violet{background:#F1ECE4;color:#4A423B}.priceTypeChipV3.orange{background:#FBEFD9;color:#B07D22}.priceUnitHintV3{display:block;color:#A79B8B;font-size:7px;margin-top:2px}.priceMobileListV3{display:none}.priceAiNoteV3{display:flex;gap:10px;align-items:flex-start;margin-top:10px;padding:13px 14px;border:1px solid #B9D4C7;border-radius:14px;background:#F4F1EA}.priceAiNoteV3>span{font-size:16px}.priceAiNoteV3 b{display:block;font-size:9px}.priceAiNoteV3 p{margin:4px 0 0;color:#8A7F74;font-size:8px;line-height:1.45}.priceEmptyV3{border:1px dashed #9DB2C4;border-radius:16px;background:#FBFAF8}

/* unified v3 forms */
.v3Body .modal{backdrop-filter:blur(6px);background:rgba(10,22,37,.48)}.v3Body .sheet{border:1px solid rgba(222,228,235,.95);box-shadow:0 30px 90px rgba(26,23,20,.22)}.v3Body .sheetHead{position:sticky;top:0;z-index:4;margin:-22px -22px 18px;padding:18px 22px 14px;background:rgba(255,255,255,.96);backdrop-filter:blur(12px);border-bottom:1px solid #E8E3DB}.v3Body .sheetHead h2{margin:2px 0 0;font-size:18px;letter-spacing:-.035em}.v3Body .sheetHead .eyebrow{font-size:7.5px}.v3Body .sheetHead .close{width:34px;height:34px;border-radius:11px;background:#F1ECE4;color:#4A423B;border:1px solid #F1ECE4;font-size:18px}.v3Body .sheetHead .close:hover{background:#E4EDF5;color:#1A1714}.v3Body .formSheetV3{max-width:760px}.v3Body .formSheetV3 .fields{gap:10px}.v3Body .formSheetV3 .field{margin-bottom:4px}.v3Body .formSheetV3 label{font-size:8.5px;color:#4A423B;font-weight:850}.v3Body .formSheetV3 input,.v3Body .formSheetV3 select,.v3Body .formSheetV3 textarea{border-color:#9DB2C4;background:#fff;border-radius:11px;min-height:42px;box-shadow:0 1px 2px rgba(16,24,40,.015)}.v3Body .formSheetV3 input:focus,.v3Body .formSheetV3 select:focus,.v3Body .formSheetV3 textarea:focus{border-color:#C79337;box-shadow:0 0 0 3px rgba(16,163,106,.09)}.v3Body .formSheetV3 textarea{min-height:100px}.v3Body .formSheetV3>.note,.v3Body .formSheetV3 form>.note{border-radius:12px}.v3Body .formSheetV3 form>.btn.full{min-height:44px;border-radius:11px;margin-top:8px}.v3Body .modal .toolbar{gap:8px}.v3Body .modal .btn{border-radius:10px}

/* resident v3 */
.residentV3Shell.appLayout{grid-template-columns:220px minmax(0,1fr)}.residentV3Shell .sidebar{background:linear-gradient(180deg,#221E1A 0%,#221E1A 100%);padding:24px 14px 18px}.residentV3Shell .content{max-width:1240px;margin:0 auto;width:100%}.residentTopbarV3{border-bottom:2px solid #B07D22}.residentPageV3 .moduleIntroV3{margin-bottom:14px}.residentKpiGridV3{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin-bottom:16px}.residentKpiV3{display:flex;align-items:flex-start;gap:10px;min-height:92px;padding:13px;border:1px solid #E8E3DB;border-radius:15px;background:#fff;color:#221E1A;text-align:left;cursor:pointer;box-shadow:0 1px 2px rgba(16,24,40,.02);transition:.15s ease}.residentKpiV3:hover,.residentKpiV3.active{border-color:#B9D4C7;box-shadow:0 8px 20px rgba(16,24,40,.045);transform:translateY(-1px)}.residentKpiV3>span{width:30px;height:30px;flex:0 0 30px;border-radius:10px;display:grid;place-items:center;background:#E9F0EC;color:#2F6F58;font-size:10px;font-weight:900}.residentKpiV3.blue>span{background:#E4EDF5;color:#3B5C7A}.residentKpiV3.orange>span{background:#FBEFD9;color:#B07D22}.residentKpiV3.gray>span{background:#E4EDF5;color:#6B6156}.residentKpiV3 small{display:block;color:#6B6156;font-size:7.5px}.residentKpiV3 b{display:block;margin-top:3px;font-size:18px;letter-spacing:-.04em}.residentKpiV3 em{display:block;margin-top:3px;color:#8A7F74;font-size:7px;font-style:normal}.residentSectionHeadV3{margin:0 0 8px}.residentSectionHeadV3 h2{margin:2px 0 0;font-size:13px}.residentTicketListV3{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.residentRequestCardV3{position:relative;padding:15px;border:1px solid #E8E3DB;border-radius:16px;background:#fff;cursor:pointer;transition:.15s ease;box-shadow:0 1px 2px rgba(16,24,40,.02);overflow:hidden}.residentRequestCardV3:hover{transform:translateY(-2px);border-color:#B9D4C7;box-shadow:0 12px 28px rgba(16,24,40,.06)}.residentRequestCardV3:before{content:"";position:absolute;left:0;top:18px;bottom:18px;width:3px;border-radius:0 4px 4px 0;background:#B07D22}.residentRequestCardHeadV3{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.residentRequestNumberV3{color:#8A7F74;font-size:7.5px;font-weight:850;text-transform:uppercase;letter-spacing:.045em}.residentRequestCardV3 h3{margin:5px 0 0;font-size:13px;letter-spacing:-.025em}.residentRequestCardV3>p{margin:10px 0 0;color:#6B6156;font-size:8.5px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.residentRequestMetaV3{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:13px}.residentRequestMetaV3>span{padding:8px 9px;border-radius:10px;background:#FBFAF8;min-width:0}.residentRequestMetaV3 small{display:block;color:#A79B8B;font-size:6.8px}.residentRequestMetaV3 b{display:block;margin-top:3px;font-size:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.residentUnreadV3{display:inline-flex;margin-top:9px;padding:5px 8px;border-radius:999px;background:#E4EDF5;color:#3B5C7A;font-size:7px;font-weight:850}.residentRequestArrowV3{margin-top:11px;padding-top:10px;border-top:1px solid #E8E3DB;color:#2F6F58;font-size:8px;font-weight:850}.residentEmptyV3{grid-column:1/-1;border:1px dashed #9DB2C4;border-radius:16px;background:#FBFAF8}.residentServiceCatalogV3{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.residentServiceCardV3{display:flex;flex-direction:column;min-height:260px;padding:15px;border:1px solid #E8E3DB;border-radius:16px;background:#fff;box-shadow:0 1px 2px rgba(16,24,40,.02)}.residentServiceIconV3{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;margin-bottom:12px;background:#E9F0EC;color:#2F6F58;font-weight:900}.residentServiceCardV3 h3{margin:6px 0;font-size:13px}.residentServiceCardV3>p{margin:0;color:#8A7F74;font-size:8.5px;line-height:1.5;min-height:38px}.residentServicePriceV3{margin:14px 0 10px;padding:10px 11px;border-radius:11px;background:#FBFAF8}.residentServicePriceV3 small{display:block;color:#A79B8B;font-size:7px}.residentServicePriceV3 b{display:block;margin-top:3px;font-size:14px}.residentServiceNoteV3{margin-bottom:10px;color:#8A7F74;font-size:7.5px;line-height:1.45}.residentServiceCardV3 .btn{margin-top:auto}.residentProfileCardV3{max-width:760px;padding:18px!important}.residentProfileCardV3 .kv{grid-template-columns:160px minmax(0,1fr)}.residentProfileCardV3 .kv b,.residentProfileCardV3 .kv span{padding:10px 0;border-bottom:1px solid #E8E3DB}.residentFormSheetV3{max-width:700px}.residentDetailSheetV3{max-width:1050px}.residentDetailModalV3 .sheetHead{margin-bottom:12px}

@media(max-width:980px){.priceSummaryV3{grid-template-columns:repeat(2,1fr)}.priceToolbarV3{grid-template-columns:1fr 1fr}.priceToolbarV3 .requestSearch{grid-column:1/-1}.residentKpiGridV3{grid-template-columns:repeat(2,1fr)}.residentServiceCatalogV3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:820px){
  .priceTableV3{display:none}.priceMobileListV3{display:grid;gap:9px}.priceMobileCardV3{padding:14px;border:1px solid #E8E3DB;border-radius:15px;background:#fff}.priceMobileHeadV3{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.priceMobileMetricsV3{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:12px}.priceMobileMetricsV3>div{padding:9px;border-radius:10px;background:#FBFAF8}.priceMobileMetricsV3 small{display:block;color:#A79B8B;font-size:7px}.priceMobileMetricsV3 b{display:block;margin-top:3px;font-size:9px}.priceMobileCardV3>p{margin:10px 0 0;color:#8A7F74;font-size:8px;line-height:1.45}.priceMobileActionsV3{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:11px}.priceMobileActionsV3 .btn{justify-content:center}.priceToolbarV3{grid-template-columns:1fr}.priceToolbarV3 .requestSearch{grid-column:auto}
  .residentV3Shell.appLayout{display:block}.residentV3Shell .sidebar{display:none}.residentV3Shell .appMain{min-width:0}.residentV3Shell .content{padding-bottom:88px}.residentTopbarV3{padding-left:18px;padding-right:18px}.residentTopbarV3 .topbarHeading small{display:block}.residentTopbarV3 .userIdentity{display:none}.residentPageV3 .moduleIntroV3{display:grid;grid-template-columns:1fr}.residentActionsV3{display:grid;grid-template-columns:1fr 1fr;width:100%}.residentActionsV3 .btn{justify-content:center}.residentTicketListV3{grid-template-columns:1fr}.residentDetailSheetV3.sheet{width:100vw;max-width:none;height:100dvh;max-height:100dvh;border-radius:0}
  .v3Body .v3FormModal{align-items:flex-end;padding:0}.v3Body .v3FormModal .formSheetV3{width:100%;max-width:none;max-height:92dvh;border-radius:22px 22px 0 0;padding-bottom:calc(20px + env(safe-area-inset-bottom))}.v3Body .v3FormModal .sheetHead{margin-top:-22px;border-radius:22px 22px 0 0}.v3Body .v3FormModal .field input,.v3Body .v3FormModal .field select{min-height:48px;font-size:16px}.v3Body .v3FormModal .field textarea{font-size:16px}.v3Body .v3FormModal form>.btn.full{min-height:50px;font-size:15px}
}
@media(max-width:560px){
  .v3Prices .moduleIntroV3 .title,.residentPageV3 .moduleIntroV3 .title{font-size:29px}.priceSummaryV3{grid-template-columns:1fr 1fr;gap:7px}.priceKpiV3{padding:11px;min-height:78px}.priceKpiV3 b{font-size:14px}.priceKpiV3 em{display:none}.priceAiNoteV3{margin-bottom:8px}
  .residentV3Shell .content{padding-left:16px;padding-right:16px}.residentTopbarV3{height:76px}.residentTopbarV3 h1{font-size:20px}.residentKpiGridV3{gap:7px}.residentKpiV3{min-height:80px;padding:10px;gap:8px}.residentKpiV3>span{width:27px;height:27px;flex-basis:27px}.residentKpiV3 b{font-size:15px}.residentKpiV3 em{display:none}.residentActionsV3{grid-template-columns:1fr}.residentActionsV3 .btn{min-height:46px}.residentRequestCardV3{padding:14px}.residentRequestMetaV3{grid-template-columns:1fr 1fr}.residentRequestMetaV3>span:last-child{grid-column:1/-1}.residentRequestCardV3 h3{font-size:15px}.residentRequestCardV3>p{font-size:10px}.residentServiceCatalogV3{grid-template-columns:1fr}.residentServiceCardV3{min-height:0}.residentProfileCardV3 .kv{grid-template-columns:1fr}.residentProfileCardV3 .kv b{padding-bottom:2px;border:0}.residentProfileCardV3 .kv span{padding-top:0}.residentV3Body .mobileNav{grid-template-columns:repeat(4,1fr);padding-bottom:env(safe-area-inset-bottom)}.residentV3Body .mobileNav button:nth-child(5),.residentV3Body .mobileNav button:nth-child(6){display:none}
}

/* ==========================================================
   v3.0.0-alpha5.1 — equipment filter responsive layout hotfix
   Prevents controls from overlapping in the engineering registry.
   ========================================================== */
.v3Equipment .equipmentFiltersV3{
  display:grid;
  grid-template-columns:minmax(250px,1.7fr) repeat(4,minmax(130px,1fr));
  gap:9px;
  align-items:stretch;
  overflow:visible;
}
.v3Equipment .equipmentFiltersV3>*{
  min-width:0;
  max-width:none;
  width:100%;
  box-sizing:border-box;
}
.v3Equipment .equipmentFiltersV3 .requestSearch{
  grid-column:auto;
  min-width:0;
}
.v3Equipment .equipmentFiltersV3 .requestSearch input,
.v3Equipment .equipmentFiltersV3 select{
  width:100%;
  min-width:0;
  max-width:none;
  height:40px;
}
/* Keep every equipment filter available at every responsive width. */
.v3Equipment .equipmentFiltersV3 #equipmentGroupFilter,
.v3Equipment .equipmentFiltersV3 #equipmentMaintenanceFilter,
.v3Equipment .equipmentFiltersV3 #equipmentSort,
.v3Equipment .equipmentFiltersV3 #equipmentGroupBy{
  display:block!important;
}
.v3Equipment .equipmentFiltersV3 .equipmentResetV3{
  display:inline-flex!important;
  min-height:40px;
  width:auto;
  justify-self:start;
  align-items:center;
  justify-content:center;
  white-space:nowrap;
}
.v3Equipment .equipmentFiltersV3 .directoryFilterToggle{display:none!important}

/* Typical laptop / split-window width: two clean filter rows instead of overlap. */
@media(max-width:1320px) and (min-width:981px){
  .v3Equipment .equipmentFiltersV3{
    grid-template-columns:repeat(4,minmax(0,1fr));
  }
  .v3Equipment .equipmentFiltersV3 .requestSearch{grid-column:span 2}
}

/* Narrow desktop / tablet landscape. */
@media(max-width:980px) and (min-width:821px){
  .v3Equipment .equipmentFiltersV3{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
  .v3Equipment .equipmentFiltersV3 .requestSearch{grid-column:1/-1}
  .v3Equipment .equipmentFiltersV3 .equipmentResetV3{grid-column:1/-1;width:100%}
}

/* Mobile: one comfortable vertical stack, no hidden controls. */
@media(max-width:820px){
  .v3Equipment .equipmentFiltersV3{
    grid-template-columns:1fr;
    gap:8px;
    padding:9px;
  }
  .v3Equipment .equipmentFiltersV3 .requestSearch{grid-column:auto}
  .v3Equipment .equipmentFiltersV3 .equipmentResetV3{width:100%}
  .v3Equipment .equipmentFiltersV3 .requestSearch input,
  .v3Equipment .equipmentFiltersV3 select,
  .v3Equipment .equipmentFiltersV3 .equipmentResetV3{min-height:44px;height:44px}
}


/* ==========================================================
   v3.0.0-alpha5.2 — pricing filter control polish
   Removes native browser select chrome and aligns price filters
   with the v3 search/input visual language.
   ========================================================== */
.v3Prices .priceToolbarV3{
  align-items:stretch;
}
.v3Prices .priceToolbarV3 select{
  width:100%;
  min-width:0;
  height:38px;
  padding:0 36px 0 12px;
  border:1px solid #E8E3DB;
  border-radius:9px;
  background-color:#FBFAF8;
  color:#4A423B;
  font-size:10px;
  font-weight:650;
  line-height:1;
  box-shadow:none;
  outline:none;
  appearance:none;
  -webkit-appearance:none;
  -moz-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M6 8l4 4 4-4' stroke='%23778494' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 12px center;
  background-size:12px 12px;
  transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease;
}
.v3Prices .priceToolbarV3 select:hover{
  border-color:#D9D2C7;
  background-color:#fff;
}
.v3Prices .priceToolbarV3 select:focus{
  border-color:#C79337;
  background-color:#fff;
  box-shadow:0 0 0 3px rgba(16,163,106,.09);
}
.v3Prices .priceToolbarV3 .requestSearch{
  border-color:#E8E3DB!important;
  background:#FBFAF8;
}
.v3Prices .priceToolbarV3 .requestSearch:hover{
  border-color:#D9D2C7!important;
  background:#fff;
}
.v3Prices .priceToolbarV3>.btn.light{
  height:38px;
  min-height:38px;
  padding:0 14px;
  border:1px solid #E8E3DB;
  border-radius:9px;
  background:#F1ECE4;
  color:#4A423B;
  font-size:9px;
  font-weight:800;
  box-shadow:none;
}
.v3Prices .priceToolbarV3>.btn.light:hover{
  background:#E4EDF5;
  border-color:#9DB2C4;
}

/* ==========================================================
   v3.0.0-alpha5.3 — report filter select clipping fix
   Fixed-height selects must not inherit the global 12px vertical
   field padding: it clips the selected value on desktop/mobile.
   ========================================================== */
.v3Reports .reportControlFieldsV3 select{
  width:100%;
  min-width:0;
  height:42px;
  min-height:42px;
  padding:0 38px 0 12px !important;
  border:1px solid #E1DBD2;
  border-radius:10px;
  background-color:#fff;
  color:#4A423B;
  font-size:10px;
  font-weight:650;
  line-height:normal;
  box-shadow:none;
  outline:none;
  appearance:none;
  -webkit-appearance:none;
  -moz-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M6 8l4 4 4-4' stroke='%23778494' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 12px center;
  background-size:12px 12px;
  transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease;
}
.v3Reports .reportControlFieldsV3 select:hover{
  border-color:#D9D2C7;
  background-color:#fff;
}
.v3Reports .reportControlFieldsV3 select:focus{
  border-color:#C79337;
  box-shadow:0 0 0 3px rgba(16,163,106,.09);
}
.v3Reports .reportControlFieldsV3 .field{
  min-width:0;
}
.v3Reports .reportControlFieldsV3 .field label{
  line-height:1.2;
}
.v3Reports .reportBuildV3{
  height:42px;
  min-height:42px;
}

@media(max-width:820px){
  .v3Reports .reportControlFieldsV3 select{
    height:48px;
    min-height:48px;
    padding:0 42px 0 14px !important;
    background-position:right 14px center;
    font-size:16px;
    line-height:normal;
  }
  .v3Reports .reportControlFieldsV3 .field label{
    margin-bottom:7px;
    font-size:11px;
  }
  .v3Reports .reportBuildV3{
    height:48px;
    min-height:48px;
    font-size:14px;
  }
}


/* ==========================================================
   v3.0.0-alpha6 — resident estimate + mobile modal polish
   ========================================================== */
.residentEstimatePreviewV3{
  margin:12px 0 14px!important;
  padding:15px!important;
  border-color:#B9D4C7!important;
  background:linear-gradient(180deg,#FBFAF8 0%,#fff 44%)!important;
  color:#221E1A!important;
}
.residentEstimatePreviewHeadV3{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;min-width:0}
.residentEstimatePreviewHeadingV3{display:flex;align-items:flex-start;gap:10px;min-width:0}
.residentEstimatePreviewHeadingV3 .estimateV3Icon{width:32px;height:32px;border-radius:10px;background:#E9F0EC;color:#2F6F58;font-size:13px}
.residentEstimatePreviewHeadingV3 .eyebrow{color:#8A7F74;font-size:7.5px;line-height:1.35}
.residentEstimatePreviewHeadingV3 h3{margin:3px 0 0;font-size:12px;line-height:1.3;letter-spacing:-.02em;color:#1A1714}
.residentEstimatePreviewTotalV3{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-top:14px;padding:12px 13px;border:1px solid #E8E3DB;border-radius:12px;background:#fff}
.residentEstimatePreviewTotalV3 small{margin:0!important;color:#8A7F74!important;font-size:8px!important;font-weight:750}
.residentEstimatePreviewTotalV3 strong{min-width:0;color:#221E1A;font-size:18px;line-height:1.15;letter-spacing:-.035em;text-align:right;overflow-wrap:anywhere}
.residentEstimatePreviewTotalV3 strong em{display:inline;font-size:9px;font-style:normal;color:#8A7F74;font-weight:750;letter-spacing:0}
.residentEstimatePreviewMetricsV3{margin-top:8px!important}
.residentEstimatePreviewMetricsV3 b{white-space:normal!important;overflow:visible!important;text-overflow:clip!important;overflow-wrap:anywhere}
.residentEstimatePreviewHintsV3{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
.residentEstimatePreviewHintsV3 span{display:inline-flex;max-width:100%;padding:5px 8px;border-radius:999px;background:#E9F0EC;color:#4A423B;font-size:8px;font-weight:750;line-height:1.25;overflow-wrap:anywhere}
.residentEstimatePreviewNoticeV3{margin-top:10px!important}

/* Mobile Safari: keep resident sheets inside the visual viewport and keep
   header text / close hit target away from rounded edges. */
@media(max-width:820px){
  .residentV3Body{overflow-x:hidden}
  .residentV3Body .residentFormModalV3,
  .residentV3Body .residentDetailModalV3{
    width:100%;max-width:100vw;overflow:hidden;
    padding-left:max(8px,env(safe-area-inset-left));
    padding-right:max(8px,env(safe-area-inset-right));
  }
  .residentV3Body .residentFormModalV3 .residentFormSheetV3,
  .residentV3Body .residentDetailModalV3 .residentDetailSheetV3{
    width:100%!important;max-width:100%!important;min-width:0!important;
    margin:0!important;overflow-x:hidden!important;
  }
  .residentV3Body .residentFormModalV3 .residentFormSheetV3{
    border-radius:20px 20px 0 0!important;
  }
  .residentV3Body .residentDetailModalV3 .residentDetailSheetV3{
    border-radius:20px 20px 0 0!important;
  }
  .residentV3Body .residentFormModalV3 .sheetHead,
  .residentV3Body .residentDetailModalV3 .sheetHead{
    width:auto;min-width:0;
    margin-left:-14px!important;margin-right:-14px!important;
    padding-left:18px!important;padding-right:14px!important;
    gap:10px;
  }
  .residentV3Body .residentFormModalV3 .sheetHead>div,
  .residentV3Body .residentDetailModalV3 .sheetHead>div{min-width:0;flex:1 1 auto;padding-left:0}
  .residentV3Body .residentFormModalV3 .sheetHead h2,
  .residentV3Body .residentDetailModalV3 .sheetHead h2{
    max-width:100%;font-size:20px;line-height:1.08;overflow-wrap:anywhere;
  }
  .residentV3Body .residentFormModalV3 .sheetHead .eyebrow,
  .residentV3Body .residentDetailModalV3 .sheetHead .eyebrow{max-width:100%;overflow-wrap:anywhere}
  .residentV3Body .residentFormModalV3 .sheetHead .close,
  .residentV3Body .residentDetailModalV3 .sheetHead .close{
    flex:0 0 42px;width:42px;height:42px;margin:0 2px 0 4px;
    border-radius:13px;font-size:22px;line-height:1;touch-action:manipulation;
  }
  .residentV3Body .residentFormSheetV3 form,
  .residentV3Body .residentDetailSheetV3 #reqDetail,
  .residentV3Body .residentDetailSheetV3 #residentServiceOrderDetail{min-width:0;max-width:100%;overflow-x:hidden}
  .residentEstimatePreviewV3{padding:13px!important;border-radius:15px!important}
  .residentEstimatePreviewHeadV3{gap:8px}
  .residentEstimatePreviewHeadingV3{gap:8px}
  .residentEstimatePreviewTotalV3{display:grid;grid-template-columns:1fr;gap:5px;padding:11px}
  .residentEstimatePreviewTotalV3 strong{text-align:left;font-size:20px}
  .residentEstimatePreviewMetricsV3{grid-template-columns:1fr!important;gap:6px!important}
  .residentEstimatePreviewMetricsV3>div{display:flex!important;align-items:center;justify-content:space-between;gap:12px;padding:10px 11px!important}
  .residentEstimatePreviewMetricsV3 b{margin:0!important;text-align:right;max-width:58%}
}
@media(max-width:420px){
  .residentV3Body .residentFormModalV3,
  .residentV3Body .residentDetailModalV3{padding-left:6px;padding-right:6px}
  .residentV3Body .residentFormModalV3 .sheetHead,
  .residentV3Body .residentDetailModalV3 .sheetHead{padding-left:16px!important;padding-right:10px!important}
  .residentEstimatePreviewHeadingV3 h3{font-size:11px}
  .residentEstimatePreviewTotalV3 strong{font-size:18px}
}


/* =========================================================
   v3.0.0-alpha6 — FINAL POLISH
   notifications, AI, states, auth, motion, mobile
   ========================================================= */
:root{--v3-shadow:0 18px 55px rgba(26,23,20,.09);--v3-ease:cubic-bezier(.2,.75,.25,1)}
@keyframes v3PageIn{from{opacity:.25;transform:translateY(5px)}to{opacity:1;transform:none}}
@keyframes v3ModalIn{from{opacity:0;transform:translateY(8px) scale(.992)}to{opacity:1;transform:none}}
@keyframes v3Pulse{0%,100%{opacity:.35}50%{opacity:1}}
@keyframes v3Spin{to{transform:rotate(360deg)}}
.page.active{animation:v3PageIn .22s var(--v3-ease)}
.modal.open .sheet{animation:v3ModalIn .22s var(--v3-ease)}
.btn,.textBtn,.nav button,.requestListV3 article,.residentRequestCardV3,.directoryCardV3,.equipmentCardV3{transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease,background .16s ease}
@media(hover:hover){.btn:not(:disabled):hover{transform:translateY(-1px)}.requestListV3 article:hover,.residentRequestCardV3:hover{transform:translateY(-1px);box-shadow:0 12px 30px rgba(26,23,20,.07)}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}

/* Boot / async states */
.ukBootScreen{position:fixed;inset:0;z-index:999;background:rgba(247,249,252,.96);backdrop-filter:blur(12px);display:grid;place-items:center;transition:opacity .22s ease}
.ukBootScreen.done{opacity:0;pointer-events:none}.ukBootCard{display:flex;align-items:center;gap:13px;background:#fff;border:1px solid #9DB2C4;border-radius:20px;padding:16px 18px;box-shadow:var(--v3-shadow);min-width:min(330px,calc(100vw - 32px))}.ukBootLogo{width:44px;height:44px;border-radius:14px;background:#B07D22;color:#fff;display:grid;place-items:center;font-weight:900;font-size:20px}.ukBootCard b{display:block;font-size:14px;color:#1A1714}.ukBootCard small{display:block;font-size:11px;color:#3B5C7A;margin-top:3px}.ukSpinner{margin-left:auto;width:18px;height:18px;border:2px solid #D9D2C7;border-top-color:#B07D22;border-radius:50%;animation:v3Spin .75s linear infinite;display:inline-block;vertical-align:middle}.ukSpinner.sm{width:14px;height:14px;margin:0 7px 0 0;border-width:2px}
.ukAppError{position:fixed;top:82px;left:50%;transform:translateX(-50%);z-index:150;width:min(680px,calc(100vw - 28px));display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:11px;background:#fff;border:1px solid #E2B3AB;border-radius:16px;padding:11px 12px;box-shadow:0 18px 48px rgba(127,29,29,.12)}.ukAppErrorIcon{width:36px;height:36px;border-radius:11px;background:#F6E7E4;color:#A63A2B;display:grid;place-items:center;font-weight:900}.ukAppError b,.ukAppError small{display:block}.ukAppError b{font-size:12px}.ukAppError small{font-size:10px;color:#A63A2B;margin-top:2px}.ukInlineState{min-height:150px;border:1px dashed #9DB2C4;border-radius:18px;background:#fff;display:grid;place-items:center;text-align:center;padding:28px}.ukInlineState>span{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:#F6E7E4;color:#A63A2B;font-weight:900;margin:auto}.ukInlineState b{display:block;margin-top:10px}.ukInlineState small{display:block;color:#3B5C7A;margin:4px 0 12px}.ukSkeletonList{display:grid;gap:9px}.ukSkeletonRow{display:grid;grid-template-columns:38px 1fr;gap:10px;align-items:center;padding:12px;border:1px solid #E4EDF5;border-radius:14px}.ukSkeletonRow i,.ukSkeletonRow b,.ukSkeletonRow em{display:block;background:linear-gradient(90deg,#F1ECE4,#FBFAF8,#F1ECE4);background-size:220% 100%;animation:shimmer 1.3s infinite}.ukSkeletonRow i{width:38px;height:38px;border-radius:11px}.ukSkeletonRow b{height:10px;width:62%;border-radius:99px}.ukSkeletonRow em{height:8px;width:38%;border-radius:99px;margin-top:7px}@keyframes shimmer{to{background-position:-220% 0}}

/* Toast v3 */
.toast{right:22px;bottom:22px;display:grid;grid-template-columns:28px minmax(0,1fr);align-items:center;gap:10px;max-width:440px;padding:10px 13px 10px 10px;border:1px solid rgba(255,255,255,.11);border-radius:16px;background:#1A1714;box-shadow:0 18px 55px rgba(26,23,20,.22);font-size:12px;font-weight:750}.toastIcon{width:28px;height:28px;border-radius:9px;display:grid;place-items:center;background:rgba(255,255,255,.12);font-weight:950}.toast-success .toastIcon{background:#B9D4C7;color:#2F6F58}.toast-error .toastIcon{background:#F6E7E4;color:#A63A2B}.toast-info .toastIcon{background:#9DB2C4;color:#3B5C7A}

/* Notification center v3 */
.notifyPanelV3{width:min(430px,calc(100vw - 24px));border-radius:20px;box-shadow:0 28px 80px rgba(26,23,20,.18)}.notifyHeadV3{padding:15px 16px 12px}.notifyHeadV3>div>b{font-size:16px;letter-spacing:-.02em}.notifyHeadV3 .eyebrow{font-size:8px;margin-bottom:3px}.notifyHeadV3 .textBtn{font-size:10px}.notifySettingsV3{display:flex;align-items:center;gap:7px;padding:9px 12px;border-bottom:1px solid #E4EDF5;background:#E4EDF5}.notifySettingBtn{border:1px solid #9DB2C4;background:#fff;color:#4A423B;border-radius:10px;padding:7px 9px;font-size:10px;font-weight:800;cursor:pointer}.notifyRealtimeV3{margin-left:auto;display:flex;align-items:center;gap:5px;font-size:9px;color:#3B5C7A;font-weight:800}.notifyRealtimeV3 i{width:7px;height:7px;border-radius:50%;background:#2F6F58;box-shadow:0 0 0 4px #E9F0EC}.notifyList{max-height:54vh}.notifyItem{grid-template-columns:36px minmax(0,1fr) 18px;gap:10px;padding:12px 14px;align-items:start;border-bottom:1px solid #F1ECE4}.notifyItem:hover{background:#E4EDF5}.notifyItem.read{opacity:.66}.notifyIcon{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;font-style:normal;font-size:13px;font-weight:900}.notifyIcon.request{background:#E4EDF5;color:#3B5C7A}.notifyIcon.service{background:#FBEFD9;color:#B07D22}.notifyIcon.equipment{background:#E9F0EC;color:#2F6F58}.notifyIcon.system{background:#F1ECE4;color:#8A7F74}.notifyTitleRow{display:flex;gap:7px;align-items:flex-start}.notifyTitleRow b{font-size:11px;line-height:1.3;flex:1}.notifyTitleRow i{font-size:7px;font-style:normal;padding:3px 5px;border-radius:999px;background:#E9F0EC;color:#2F6F58;font-weight:900}.notifyCopy small{font-size:9.5px;line-height:1.4;color:#3B5C7A}.notifyCopy em{font-size:8px;margin-top:5px}.notifyArrow{color:#9DB2C4;margin-top:8px}.notifyEmptyV3{padding:38px 24px;text-align:center;display:grid;justify-items:center}.notifyEmptyV3>span{width:46px;height:46px;border-radius:15px;background:#E4EDF5;display:grid;place-items:center;font-size:20px}.notifyEmptyV3 b{font-size:12px;margin-top:10px}.notifyEmptyV3 small{font-size:9.5px;color:#3B5C7A;max-width:260px;line-height:1.45;margin-top:4px}.notifySettingBtn.soundOn{background:#E9F0EC;color:#2F6F58;border-color:#B9D4C7}

/* AI assistant v3 */
.assistantFab{background:#1A1714;border:1px solid rgba(255,255,255,.08);box-shadow:0 18px 52px rgba(15,27,46,.22);letter-spacing:-.01em}.assistantPanel{width:min(465px,calc(100vw - 28px));max-height:min(78vh,760px);border-radius:22px;border-color:#9DB2C4;box-shadow:0 30px 100px rgba(26,23,20,.20)}.assistantHeadV3{padding:13px 14px}.assistantIdentityV3{display:flex;align-items:center;gap:9px}.assistantLogoV3{width:34px;height:34px;border-radius:11px;background:linear-gradient(145deg,#2F6F58,#2F6F58);color:#fff;display:grid;place-items:center;font-size:16px;box-shadow:0 8px 20px rgba(10,163,106,.22)}.assistantContextV3{margin:10px 12px 0;padding:9px 10px;border-radius:12px;background:#E9F0EC;border:1px solid #B9D4C7;display:grid;grid-template-columns:8px 1fr;gap:8px}.assistantContextV3>span{font-size:9px;color:#B07D22;margin-top:1px}.assistantContextV3 b{display:block;font-size:9.5px;color:#2F6F58}.assistantContextV3 small{display:block;font-size:8px;color:#6B6156;margin-top:2px;line-height:1.35}.assistantMessages{padding:12px 12px 5px;display:flex;flex-direction:column;gap:9px}.assistantMsg{gap:7px;align-items:flex-end}.assistantMsg.user{flex-direction:row-reverse}.assistantAvatar{width:24px;height:24px;flex:0 0 24px;border-radius:8px;background:#E9F0EC;color:#2F6F58;display:grid;place-items:center;font-size:8px;font-weight:900}.assistantMsg.user .assistantAvatar{background:#1A1714;color:#fff}.assistantMsg>div.assistantBubbleV3{max-width:85%;padding:10px 11px;border-radius:14px;font-size:11px;line-height:1.5}.assistantMsg.ai>div.assistantBubbleV3{background:#FBFAF8;border:1px solid #E8E3DB;border-bottom-left-radius:5px}.assistantMsg.user>div.assistantBubbleV3{background:#1A1714;color:#fff;border-bottom-right-radius:5px}.assistantThinkingV3{display:flex!important;align-items:center;gap:4px;color:#3B5C7A}.assistantThinkingV3 i{width:5px;height:5px;border-radius:50%;background:#B07D22;animation:v3Pulse .9s infinite}.assistantThinkingV3 i:nth-child(2){animation-delay:.15s}.assistantThinkingV3 i:nth-child(3){animation-delay:.3s}.assistantThinkingV3 span{margin-left:5px;font-size:9px}.assistantQuick{padding:0 12px;margin:8px 0 0;gap:5px}.assistantQuick button{font-size:9px;padding:6px 8px;background:#fff;border-color:#E1DBD2;color:#4A423B}.assistantQuick button:hover{border-color:#B9D4C7;background:#E9F0EC}.assistantActionsV3{display:grid;gap:6px;margin:0 0 4px 31px;max-width:calc(100% - 44px)}.assistantResultCard{display:grid;grid-template-columns:30px minmax(0,1fr) 14px;align-items:center;gap:8px;text-align:left;border:1px solid #9DB2C4;background:#fff;border-radius:12px;padding:8px;cursor:pointer}.assistantResultCard:hover{border-color:#B9D4C7;background:#FBFAF8}.assistantResultCard.confirm{border-color:#EBD9B3;background:#FBEFD9}.assistantResultIcon{width:30px;height:30px;border-radius:9px;background:#E9F0EC;color:#2F6F58;display:grid;place-items:center;font-weight:900}.assistantResultCard.confirm .assistantResultIcon{background:#FBEFD9;color:#8A5F13}.assistantResultCard b{display:block;font-size:9.5px;color:#221E1A}.assistantResultCard small{display:block;font-size:8px;color:#3B5C7A;margin-top:2px}.assistantResultCard em{font-style:normal;color:#3B5C7A}.assistantComposer{padding:9px 12px 11px;gap:7px}.assistantComposer textarea{border-radius:13px!important;min-height:44px!important;font-size:11px!important}.assistantComposer .btn{border-radius:12px}.assistantFoot{font-size:7.5px!important;color:#8A7F74!important;padding:0 12px 11px!important}.aiConfirmSheet{border-radius:22px}.aiConfirmIcon{background:#E9F0EC;color:#2F6F58}

/* Empty states */
.empty{border-color:#9DB2C4;background:linear-gradient(180deg,#fff,#FBFAF8);color:#3B5C7A}.empty:before{content:'· · ·';display:block;color:#9DB2C4;letter-spacing:.18em;font-weight:900;margin-bottom:8px}.empty.compact:before{display:none}

/* Auth / registration v3 */
body.authV3{min-height:100vh;background:radial-gradient(circle at 12% 10%,rgba(10,163,106,.10),transparent 30%),linear-gradient(180deg,#FBFAF8 0%,#E4EDF5 100%);color:#1A1714}.authV3 .authWrap{max-width:1080px;padding:24px 22px 70px}.authV3 .authTop{padding:2px 2px 0}.authBrandV3{display:inline-flex;align-items:center;gap:10px}.authBrandV3 .brandMark{width:38px;height:38px;border-radius:12px;background:#B07D22;color:#fff;display:grid;place-items:center;font-size:16px;box-shadow:0 8px 22px rgba(10,163,106,.18)}.authV3 .hero{padding:76px 0 32px}.authV3 .hero h1{font-size:clamp(42px,6.5vw,72px);max-width:850px}.authV3 .authGrid{align-items:stretch;gap:18px}.authV3 .authCard{border-color:#9DB2C4;box-shadow:0 14px 40px rgba(26,23,20,.055)}.loginCardV3{position:relative;overflow:hidden}.loginCardV3:after{content:'';position:absolute;width:140px;height:140px;border-radius:50%;background:#E9F0EC;right:-70px;top:-70px;pointer-events:none}.authSecurityV3{display:inline-flex;align-items:center;gap:6px;font-size:9px;font-weight:850;color:#2F6F58;background:#E9F0EC;border:1px solid #B9D4C7;padding:5px 8px;border-radius:999px;margin-bottom:12px}.authSecurityV3 span{font-size:7px}.authCardLeadV3{font-size:11px;line-height:1.45;margin:-6px 0 14px;max-width:420px}.authSubmitV3{display:flex!important;align-items:center;justify-content:space-between!important;padding-left:16px!important;padding-right:13px!important;min-height:44px}.authTrustV3{grid-column:1/-1;display:flex;gap:14px;flex-wrap:wrap;color:#8A7F74;font-size:9px;font-weight:750;padding:4px 3px}.authTrustV3 span{display:flex;gap:5px;align-items:center}.authTrustV3 span:before{content:''}.registerV3 .authWrap{max-width:980px}.registerV3 .hero{padding-top:52px}.registerStepsV3{display:flex;gap:7px;margin:0 0 12px;overflow:auto;padding-bottom:2px}.registerStepsV3 span{white-space:nowrap;padding:7px 10px;border-radius:999px;background:#E4EDF5;color:#6B6156;font-size:9px;font-weight:850}.registerStepsV3 span.active{background:#E9F0EC;color:#2F6F58}.registerCardV3{padding:24px}.authV3 .field input,.authV3 .field select{background:#fff;border-color:#9DB2C4}.authV3 .field input:focus,.authV3 .field select:focus{border-color:#2F6F58;box-shadow:0 0 0 3px rgba(10,163,106,.09)}

@media(max-width:820px){
  .ukAppError{top:auto;bottom:88px;grid-template-columns:34px minmax(0,1fr);padding:10px}.ukAppError .btn{grid-column:1/-1;width:100%}
  .toast{left:12px;right:12px;bottom:88px;max-width:none;border-radius:15px}
  .notifyPanelV3{position:fixed;inset:auto 10px 86px 10px;width:auto;max-height:70vh;border-radius:20px}.notifyList{max-height:48vh}.notifySettingsV3{padding:8px 10px}.notifySettingBtn{flex:1}.notifyRealtimeV3{display:none}
  .assistantPanel{left:10px;right:10px;bottom:128px;width:auto;max-height:72vh;border-radius:20px}.assistantContextV3{margin:8px 10px 0}.assistantMessages{padding:10px}.assistantActionsV3{margin-left:30px;max-width:calc(100% - 40px)}.assistantFab{bottom:78px;right:12px;padding:11px 14px}
  .authV3 .authWrap{padding:18px 16px 42px}.authV3 .hero{padding:46px 0 22px}.authV3 .hero h1{font-size:39px}.authV3 .hero p{font-size:14px}.authTrustV3{gap:8px;font-size:8px}.registerV3 .hero{padding-top:38px}.registerCardV3{padding:18px}
}
@media(max-width:520px){
  .assistantFab{font-size:0;width:54px;height:54px;padding:0}.assistantFab:after{content:'✦';font-size:22px}.assistantPanel{bottom:143px}.assistantHead .toolbar .btn{display:none}.notifyHeadV3{padding:13px}.notifyTitleRow b{font-size:10.5px}.notifyItem{padding:11px 12px}.authV3 .authTop .deviceBadge{display:none}.authV3 .hero h1{font-size:35px;line-height:1.02}.authV3 .authCard h2{font-size:23px}.registerStepsV3{margin-left:-2px;margin-right:-2px}
}

/* v3.0.0-RC1 — mobile dashboard drilldowns */
button.dashboardKpiLink{width:100%;display:block;text-align:left;font:inherit;color:inherit;-webkit-appearance:none;appearance:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
button.dashboardKpiLink:active{transform:translateY(0) scale(.985);box-shadow:0 4px 14px rgba(26,23,20,.06)}
.barRowLinkV3{width:100%;border:0;background:transparent;padding:4px 2px;text-align:left;font:inherit;color:inherit;border-radius:9px;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.barRowLinkV3:hover{background:#E9F0EC}.barRowLinkV3:active{background:#E9F0EC}
@media(max-width:820px){button.dashboardKpiLink{min-height:116px}.barRowLinkV3{padding:8px 4px;min-height:44px}}

.dashboardLegacyTap{cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.dashboardLegacyTap:active{transform:scale(.985)}

/* v3.0.0-RC1.1 — dashboard KPI touch reliability */
.dashboardKpiLink{position:relative;z-index:1;cursor:pointer;user-select:none;-webkit-user-select:none}
.dashboardKpiLink>*{pointer-events:none}
.dashboardKpiLink:focus-visible{outline:3px solid rgba(10,163,106,.20);outline-offset:2px}
@media(max-width:820px){.dashboardKpiLink{touch-action:manipulation;-webkit-tap-highlight-color:rgba(10,163,106,.08)}}


/* =========================================================
   v3.0.0-RC1.2 — MOBILE INTERACTION RELIABILITY
   Shared by owner / manager / dispatcher / executor / resident
   ========================================================= */
@media(max-width:820px){
  .v3Body button,.v3Body a[href],.v3Body [role="button"],.v3Body [data-page],.v3Body [onclick],
  .residentV3Body button,.residentV3Body a[href],.residentV3Body [role="button"],.residentV3Body [data-page],.residentV3Body [onclick]{
    touch-action:manipulation;-webkit-tap-highlight-color:rgba(10,163,106,.10)
  }
  .avatar[role="button"]{cursor:pointer;touch-action:manipulation;position:relative;z-index:2}
  .mobileAccountMenu{display:none;position:fixed;right:10px;top:68px;z-index:140;width:min(260px,calc(100vw - 20px));padding:8px;background:#fff;border:1px solid #E1DBD2;border-radius:16px;box-shadow:0 24px 70px rgba(26,23,20,.20)}
  .mobileAccountMenu.open{display:grid;gap:6px}
  .mobileAccountIdentity{padding:8px 9px 10px;border-bottom:1px solid #F1ECE4}.mobileAccountIdentity b,.mobileAccountIdentity small{display:block}.mobileAccountIdentity b{font-size:12px}.mobileAccountIdentity small{font-size:9px;color:#3B5C7A;margin-top:2px}
  .mobileAccountMenu button{width:100%;border:0;border-radius:11px;padding:11px 12px;text-align:left;font-weight:850;background:#E4EDF5;color:#4A423B}
  .mobileAccountLogoutBtn{background:#F6E7E4!important;color:#A63A2B!important}
  .assistantFab,.mobileNav,.v3Topbar{pointer-events:auto!important}
}

/* v3.0.0-RC2 — equipment Excel import + multi-role staff */
.staffRoleBadgesV3{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.roleCapabilityCheck{display:flex;align-items:center;gap:9px;padding:12px 14px;border:1px solid #E8E3DB;border-radius:14px;background:#FBFAF8;font-weight:700}
.roleCapabilityCheck input{width:18px;height:18px;accent-color:#2F6F58}
.equipmentImportSheetV3{max-width:min(1220px,calc(100vw - 32px));width:100%}
.equipmentImportSetupV3{display:grid;grid-template-columns:1.05fr 1.5fr 1.3fr auto;gap:12px;align-items:end;margin-bottom:14px}
.equipmentImportSetupV3 .field{margin:0}
.equipmentImportPreviewAction .btn{min-height:44px;white-space:nowrap}
.equipmentImportStatsV3{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0}
.equipmentImportStatsV3>div{padding:14px 16px;border:1px solid #9DB2C4;border-radius:16px;background:#FBFAF8}
.equipmentImportStatsV3 small{display:block;color:#6B6156;font-size:12px;margin-bottom:6px}
.equipmentImportStatsV3 b{font-size:20px;color:#1A1714}
.equipmentImportTableV3{overflow:auto;max-height:52vh;border:1px solid #E8E3DB;border-radius:16px;background:#fff}
.equipmentImportTableV3 table{width:100%;border-collapse:separate;border-spacing:0;min-width:1120px}
.equipmentImportTableV3 thead th{position:sticky;top:0;z-index:2;background:#FBFAF8;color:#8A7F74;font-size:12px;font-weight:800;text-align:left;padding:10px;border-bottom:1px solid #E8E3DB}
.equipmentImportTableV3 td{padding:8px 10px;border-bottom:1px solid #F1ECE4;vertical-align:middle}
.equipmentImportTableV3 td input[type="text"],.equipmentImportTableV3 td input:not([type]){width:100%}
.equipmentImportTableV3 td input{border:1px solid #E1DBD2;border-radius:10px;padding:8px 9px;background:#fff;min-height:36px;font:inherit;color:#1A1714}
.equipmentImportTableV3 td input:focus{outline:none;border-color:#5F8F7B;box-shadow:0 0 0 3px rgba(22,163,106,.10)}
.equipmentImportTableV3 .importCellName{min-width:250px}
.equipmentImportTableV3 .importQty{width:76px}
.equipmentImportTableV3 .importDuplicateV3{background:#FBEFD9}
.equipmentImportTableV3 .badge.ok{background:#E9F0EC;color:#2F6F58;border-color:#B9D4C7}
.equipmentImportTableV3 td small{display:block;margin-top:4px;color:#8A5F13;max-width:180px}
.equipmentImportFooterV3{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:14px;margin-top:14px;border-top:1px solid #E8E3DB}
@media(max-width:980px){.equipmentImportSetupV3{grid-template-columns:1fr 1fr}.equipmentImportPreviewAction .btn{width:100%}.equipmentImportStatsV3{grid-template-columns:1fr 1fr}}
@media(max-width:640px){.equipmentImportSheetV3{max-width:100%;width:100%}.equipmentImportSetupV3{grid-template-columns:1fr}.equipmentImportStatsV3{grid-template-columns:1fr 1fr}.equipmentImportStatsV3>div{padding:12px}.equipmentImportFooterV3{align-items:stretch;flex-direction:column}.equipmentImportFooterV3 .btn{width:100%}.staffRoleBadgesV3{justify-content:flex-start}}

/* RC3 — property-specific visit prices + maintenance schedule import + auth touch hardening */
.propertyCalloutFieldV3{margin-top:2px}.propertyCalloutGridV3{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:10px}.propertyCalloutRowV3{display:grid;grid-template-columns:minmax(0,1fr) 112px 18px;align-items:center;gap:8px;border:1px solid #9DB2C4;background:#FBFAF8;border-radius:13px;padding:9px 10px}.propertyCalloutRowV3 span{min-width:0}.propertyCalloutRowV3 b,.propertyCalloutRowV3 small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.propertyCalloutRowV3 b{font-size:10px;color:#332D26}.propertyCalloutRowV3 small{font-size:8px;color:#8A7F74;margin-top:2px}.propertyCalloutRowV3 input{width:100%;min-width:0;height:38px!important;padding:0 9px!important;text-align:right}.propertyCalloutRowV3 em{font-style:normal;color:#8A7F74;font-size:10px;font-weight:750}
.maintenanceImportSheetV3{max-width:1220px}.maintenanceImportSetupV3{grid-template-columns:minmax(320px,1.4fr) minmax(220px,.8fr) auto}.maintenanceImportTableV3 select,.maintenanceImportTableV3 input[type=date]{min-width:160px}.maintenanceEquipmentSelectV3{max-width:310px}.maintenanceReviewRowV3{background:#FBEFD9}.maintenanceNeedsReviewV3{display:grid;gap:4px}.maintenanceNeedsReviewV3 b{font-size:9px;color:#8A5F13}.maintenanceNeedsReviewV3 small{font-size:8px;color:#8A5F13}.maintenanceDateInputV3{min-width:145px!important}
.authV3 form,.authV3 form *{pointer-events:auto}.authV3 .authSubmitV3{position:relative;z-index:4;touch-action:manipulation;-webkit-tap-highlight-color:rgba(10,163,106,.12)}.authV3 input,.authV3 select,.authV3 a,.authV3 button{touch-action:manipulation}
@media(max-width:820px){.propertyCalloutGridV3{grid-template-columns:1fr}.propertyCalloutRowV3{grid-template-columns:minmax(0,1fr) 105px 15px}.maintenanceImportSetupV3{grid-template-columns:1fr}.maintenanceImportTableV3{overflow:auto;-webkit-overflow-scrolling:touch}.maintenanceImportTableV3 table{min-width:1050px}.maintenanceImportSheetV3{padding-left:max(14px,env(safe-area-inset-left));padding-right:max(14px,env(safe-area-inset-right))}}

.priceObjectOverrideV3{display:block;margin-top:3px;color:#2F6F58;font-size:8px;font-weight:800}


/* =========================================================
   v3.0.0-RC3.2 — MOBILE INTERACTION STABILITY
   Root cause: hidden toast inherited both top and bottom on mobile,
   stretching across the viewport and intercepting pointer/touch events.
   Toasts are informational only and must never participate in hit testing.
   ========================================================= */
#toast.toast{
  pointer-events:none!important;
  visibility:hidden;
}
#toast.toast.show{
  visibility:visible;
  pointer-events:none!important;
}
@media(max-width:820px){
  #toast.toast{
    top:auto!important;
    bottom:calc(88px + env(safe-area-inset-bottom))!important;
    left:12px!important;
    right:12px!important;
    width:auto!important;
    height:auto!important;
    max-height:none!important;
  }
}


/* ==========================================================
   v3.0.0-RC3.3 — mobile modal scroll + profile polish + price import
   ========================================================== */
.priceToolbarV3{grid-template-columns:minmax(240px,1.5fr) minmax(155px,.75fr) minmax(155px,.75fr) minmax(150px,.7fr) auto}
.priceObjectOverrideV3{display:block;margin-top:3px;color:#8A7F74;font-size:7px}
.priceImportSheetV3{width:min(1240px,calc(100vw - 32px));max-width:1240px}
.priceImportSetupV3{display:grid;grid-template-columns:minmax(220px,.8fr) minmax(320px,1.5fr) auto;gap:12px;align-items:end;margin-bottom:14px}
.priceImportSetupV3 .field{margin:0}.priceImportPreviewAction .btn{min-height:44px;white-space:nowrap}
.priceImportTableV3{overflow:auto;max-height:52vh;border:1px solid #E8E3DB;border-radius:16px;background:#fff;-webkit-overflow-scrolling:touch}
.priceImportTableV3 table{width:100%;min-width:1120px;border-collapse:separate;border-spacing:0}
.priceImportTableV3 th{position:sticky;top:0;z-index:2;padding:10px;background:#FBFAF8;border-bottom:1px solid #E8E3DB;color:#8A7F74;font-size:8px;text-transform:uppercase;letter-spacing:.04em;text-align:left}
.priceImportTableV3 td{padding:8px 10px;border-bottom:1px solid #F1ECE4;vertical-align:middle;font-size:8.5px}.priceImportTableV3 td small{display:block;margin-top:3px;color:#8A7F74}
.priceImportTableV3 input,.priceImportTableV3 select{min-height:38px;border:1px solid #E1DBD2;border-radius:10px;background:#fff;padding:8px 9px;color:#1A1714;font:inherit}.priceImportNameV3{min-width:290px;width:100%}.priceImportUnitV3{width:92px}.priceImportReviewRowV3{background:#FBEFD9}.priceImportDuplicateV3{min-width:170px}.priceImportDuplicateV3 b,.priceImportDuplicateV3 small{display:block}.priceImportFooterV3{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:14px}

@media(max-width:980px){.priceToolbarV3{grid-template-columns:1fr 1fr}.priceToolbarV3 .requestSearch{grid-column:1/-1}.priceImportSetupV3{grid-template-columns:1fr 1fr}.priceImportPreviewAction{grid-column:1/-1}.priceImportPreviewAction .btn{width:100%}}
@media(max-width:640px){.priceImportSetupV3{grid-template-columns:1fr}.priceImportPreviewAction{grid-column:auto}.priceImportSheetV3{width:100%;max-width:100%}.priceImportFooterV3{flex-direction:column;align-items:stretch}.priceImportFooterV3 .btn{width:100%}}

/* Long form sheets: header stays visible, form body is the scroll container. */
@media(max-width:820px){
  .v3Body .v3FormModal.open{overflow:hidden;overscroll-behavior:contain}
  .v3Body .v3FormModal>.formSheetV3{
    width:100%;max-width:none;height:min(92dvh,calc(100dvh - max(8px,env(safe-area-inset-top))));max-height:min(92dvh,calc(100dvh - max(8px,env(safe-area-inset-top))));
    display:flex;flex-direction:column;overflow:hidden!important;padding:0!important;border-radius:22px 22px 0 0;
  }
  .v3Body .v3FormModal>.formSheetV3>.sheetHead{
    position:relative!important;top:auto!important;flex:0 0 auto;margin:0!important;padding:16px 16px 13px!important;border-radius:22px 22px 0 0;background:#fff;
  }
  .v3Body .v3FormModal>.formSheetV3>form{
    flex:1 1 auto;min-height:0;overflow-y:auto!important;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
    padding:14px 16px calc(24px + env(safe-area-inset-bottom));scroll-padding-bottom:calc(88px + env(safe-area-inset-bottom));
  }
  .v3Body .v3FormModal>.formSheetV3>form>.btn.full{position:relative;margin-top:12px;margin-bottom:max(4px,env(safe-area-inset-bottom))}
}

/* Mobile profile: same visual language as v3 cards, no heavy framed buttons. */
@media(max-width:820px){
  .mobileAccountMenu{right:12px;top:62px;width:min(252px,calc(100vw - 24px));padding:9px;border:1px solid #E8E3DB;border-radius:18px;background:rgba(255,255,255,.98);box-shadow:0 22px 70px rgba(26,23,20,.16);backdrop-filter:blur(16px)}
  .mobileAccountMenu.open{display:grid;gap:7px;animation:v3ModalIn .16s ease-out}
  .mobileAccountIdentity{padding:11px 12px;border:0!important;border-radius:13px;background:linear-gradient(145deg,#E9F0EC,#E9F0EC)}
  .mobileAccountIdentity b{font-size:12px;color:#221E1A}.mobileAccountIdentity small{font-size:8.5px;color:#6B6156;margin-top:3px}
  .mobileAccountMenu button{min-height:42px;width:100%;border:0!important;border-radius:12px;padding:10px 11px;text-align:left;font-size:10px;font-weight:800;background:transparent!important;color:#4A423B;box-shadow:none!important;transition:.14s ease}
  .mobileAccountMenu button:hover,.mobileAccountMenu button:active{background:#E9F0EC!important;color:#2F6F58}
  .mobileAccountLogoutBtn{color:#A63A2B!important;background:transparent!important}.mobileAccountLogoutBtn:hover,.mobileAccountLogoutBtn:active{background:#F6E7E4!important;color:#A63A2B!important}
  .v3Topbar .avatar,.residentTopbarV3 .avatar{box-shadow:0 0 0 3px rgba(10,163,106,.08);border:1px solid rgba(10,163,106,.14)}
}
/* RC3.3 — keep price filters single-column on phones after tablet grid rule. */
@media(max-width:820px){
  .priceToolbarV3{grid-template-columns:1fr}
  .priceToolbarV3 .requestSearch{grid-column:auto}
}

/* ==========================================================
   v3.0.0-RC3.4 — global price import + desktop account menu + compact import checks
   ========================================================== */
/* Account popover is used on desktop and mobile; keep one visual language everywhere. */
.mobileAccountMenu{
  display:none;position:fixed;right:22px;top:72px;z-index:220;
  width:min(264px,calc(100vw - 24px));padding:10px;
  background:rgba(255,255,255,.985);border:1px solid #E8E3DB;border-radius:18px;
  box-shadow:0 24px 72px rgba(26,23,20,.16);backdrop-filter:blur(16px);
}
.mobileAccountMenu.open{display:grid;gap:7px;animation:v3ModalIn .16s ease-out}
.mobileAccountIdentity{padding:11px 12px;border:0!important;border-radius:13px;background:linear-gradient(145deg,#E9F0EC,#E9F0EC)}
.mobileAccountIdentity b,.mobileAccountIdentity small{display:block}
.mobileAccountIdentity b{font-size:12px;line-height:1.25;color:#221E1A}
.mobileAccountIdentity small{margin-top:3px;font-size:8.5px;line-height:1.3;color:#6B6156}
.mobileAccountMenu button{
  width:100%;min-height:42px;margin:0;border:0!important;border-radius:12px!important;
  padding:10px 11px!important;text-align:left;font:inherit;font-size:10px;font-weight:800;
  background:transparent!important;color:#4A423B!important;box-shadow:none!important;outline:0;
  -webkit-appearance:none;appearance:none;cursor:pointer;transition:.14s ease;
}
.mobileAccountMenu button:hover,.mobileAccountMenu button:focus-visible{background:#E9F0EC!important;color:#2F6F58!important}
.mobileAccountLogoutBtn{color:#A63A2B!important}.mobileAccountLogoutBtn:hover,.mobileAccountLogoutBtn:focus-visible{background:#F6E7E4!important;color:#A63A2B!important}

/* Import tables: checkbox must not inherit the 36–38px text-input geometry. */
.equipmentImportTableV3 td input[type="checkbox"],
.priceImportTableV3 td input[type="checkbox"]{
  display:inline-block!important;width:16px!important;height:16px!important;min-width:16px!important;min-height:16px!important;
  max-width:16px!important;max-height:16px!important;padding:0!important;margin:0!important;
  border:1px solid #9DB2C4!important;border-radius:5px!important;background:#fff!important;
  box-shadow:none!important;vertical-align:middle;accent-color:#B07D22;cursor:pointer;
}
.equipmentImportTableV3 td input[type="checkbox"]:focus,
.priceImportTableV3 td input[type="checkbox"]:focus{outline:2px solid rgba(10,163,106,.16);outline-offset:2px;box-shadow:none!important}
.equipmentImportTableV3 td:first-child,.priceImportTableV3 td:first-child{text-align:center;width:44px}

/* Only editable text/number controls receive field styling. */
.equipmentImportTableV3 td input:not([type="checkbox"]){border:1px solid #E1DBD2;border-radius:10px;padding:8px 9px;background:#fff;min-height:36px;font:inherit;color:#1A1714}
.priceImportTableV3 input:not([type="checkbox"]),.priceImportTableV3 select{min-height:38px;border:1px solid #E1DBD2;border-radius:10px;background:#fff;padding:8px 9px;color:#1A1714;font:inherit}

/* Global price import does not ask for a property. */
.priceImportSetupV3{grid-template-columns:minmax(320px,1fr) auto}
.priceImportSetupV3 .field.full{grid-column:auto}
@media(max-width:820px){
  .mobileAccountMenu{right:12px;top:62px;width:min(252px,calc(100vw - 24px))}
  .priceImportSetupV3{grid-template-columns:1fr}.priceImportSetupV3 .field.full{grid-column:auto}
}


/* ==========================================================
   v3.0.0-RC3.5 — responsive modal hardening + notification glyph
   ========================================================== */
/* All modal content must stay inside its sheet on every viewport. */
.v3Body .modal>.sheet,
.residentV3Body .modal>.sheet{min-width:0;max-width:calc(100vw - 36px)}
.v3Body .modal .sheetHead,
.residentV3Body .modal .sheetHead{min-width:0;align-items:flex-start}
.v3Body .modal .sheetHead>div,
.residentV3Body .modal .sheetHead>div{min-width:0;flex:1 1 auto}
.v3Body .modal .sheetHead h2,
.residentV3Body .modal .sheetHead h2,
.v3Body .modal .sheetHead .eyebrow,
.residentV3Body .modal .sheetHead .eyebrow{max-width:100%;overflow-wrap:anywhere;word-break:normal}
.v3Body .modal .sheetHead .close,
.residentV3Body .modal .sheetHead .close{flex:0 0 36px;min-width:36px;max-width:36px}
.v3Body .modal .fields>*,.residentV3Body .modal .fields>*{min-width:0}
.v3Body .modal input,.v3Body .modal select,.v3Body .modal textarea,
.residentV3Body .modal input,.residentV3Body .modal select,.residentV3Body .modal textarea{max-width:100%;min-width:0}
.v3Body .modal .toolbar,.residentV3Body .modal .toolbar{max-width:100%;flex-wrap:wrap}
.v3Body .modal .btn,.residentV3Body .modal .btn{max-width:100%;min-width:0;white-space:normal;line-height:1.25;text-align:center;overflow-wrap:anywhere}
.v3Body .modal .card,.residentV3Body .modal .card{min-width:0;max-width:100%}
.v3Body .modal .kv,.residentV3Body .modal .kv{min-width:0}
.v3Body .modal .kv>* ,.residentV3Body .modal .kv>*{min-width:0;overflow-wrap:break-word;word-break:normal;hyphens:manual}

/* Notification: custom geometric icon instead of OS emoji, identical on desktop/mobile. */
.notifyBtn{font-size:0;overflow:visible;color:#1A1714;transition:.15s ease}
.notifyBtn:hover,.notifyBtn:focus-visible{background:#E9F0EC;border-color:#B9D4C7;color:#2F6F58;outline:none;box-shadow:0 0 0 3px rgba(10,163,106,.07)}
.notifyGlyphV3{width:20px;height:20px;display:grid;place-items:center;color:currentColor;pointer-events:none}
.notifyGlyphV3 svg{width:20px;height:20px;display:block;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.notifyEmptyV3 .notifyGlyphV3{width:22px;height:22px}
.notifyEmptyV3 .notifyGlyphV3 svg{width:22px;height:22px}
.notifyEmptyV3>span.notifyEmptyIconV3{width:46px;height:46px;border-radius:15px;background:#E9F0EC;color:#2F6F58;display:grid;place-items:center}

/* Desktop/modal safety at split-window and laptop widths. */
@media(min-width:821px){
  .v3Body .modal,.residentV3Body .modal{padding:18px}
  .v3Body .modal>.sheet,.residentV3Body .modal>.sheet{max-width:calc(100vw - 36px);max-height:calc(100dvh - 36px)}
  .v3Body .modal .sheetHead h2,.residentV3Body .modal .sheetHead h2{line-height:1.12}
  .v3Body .modal .toolbar>.btn,.residentV3Body .modal .toolbar>.btn{flex:0 1 auto}
}

/* Mobile: one universal containment rule for EVERY sheet/detail window. */
@media(max-width:820px){
  .v3Body .modal.open,.residentV3Body .modal.open{
    padding-top:max(6px,env(safe-area-inset-top));
    padding-right:max(6px,env(safe-area-inset-right));
    padding-bottom:max(6px,env(safe-area-inset-bottom));
    padding-left:max(6px,env(safe-area-inset-left));
    overflow:hidden;overscroll-behavior:contain;
  }
  .v3Body .modal>.sheet,.residentV3Body .modal>.sheet{
    width:100%!important;max-width:100%!important;min-width:0!important;
    margin:0!important;max-height:calc(100dvh - max(12px,env(safe-area-inset-top)) - max(12px,env(safe-area-inset-bottom)))!important;
    overflow-x:hidden!important;
  }
  /* Full/detail sheets no longer use 100vw inside a padded modal (the source of left/right clipping). */
  .v3Body #objectModal>.objectSheetV3,
  .v3Body #requestModal>.requestSheetV3,
  .v3Body #serviceOrderModal>.serviceOrderSheetV3,
  .v3Body #equipmentPassportModal>.equipmentPassportSheetV3,
  .residentV3Body .residentDetailModalV3>.residentDetailSheetV3{
    width:100%!important;max-width:100%!important;height:auto!important;min-height:0!important;
    max-height:calc(100dvh - max(12px,env(safe-area-inset-top)) - max(12px,env(safe-area-inset-bottom)))!important;
    border-radius:20px!important;
  }
  .v3Body .modal .sheetHead,.residentV3Body .modal .sheetHead{
    padding-left:16px!important;padding-right:10px!important;gap:8px;
  }
  .v3Body .modal .sheetHead h2,.residentV3Body .modal .sheetHead h2{font-size:20px;line-height:1.08}
  .v3Body .modal .sheetHead .close,.residentV3Body .modal .sheetHead .close{
    flex-basis:42px;min-width:42px;max-width:42px;width:42px;height:42px;border-radius:13px;font-size:21px
  }
  .v3Body .modal .toolbar,.residentV3Body .modal .toolbar{display:flex;gap:7px}
  .v3Body .modal .toolbar>.btn,.residentV3Body .modal .toolbar>.btn{flex:1 1 150px}
  .v3Body .modal .ownerRowActions,.residentV3Body .modal .ownerRowActions{min-width:0}
  .v3Body .objectHeroV3,.v3Body .equipmentPassportHeroV3,.v3Body .serviceOrderHeroV3{min-width:0;max-width:100%}
  .v3Body .objectHeroV3>div,.v3Body .equipmentPassportHeroV3>div,.v3Body .serviceOrderHeroV3>div{min-width:0}
  .v3Body .objectHeroV3 h2,.v3Body .equipmentPassportHeroV3 h2,.v3Body .serviceOrderHeroV3 h2{overflow-wrap:anywhere}
  .notifyBtn{width:44px;height:44px;border-radius:14px}
  .notifyGlyphV3,.notifyGlyphV3 svg{width:21px;height:21px}
}

@media(max-width:430px){
  .v3Body .modal.open,.residentV3Body .modal.open{padding-left:4px;padding-right:4px}
  .v3Body .modal .sheetHead h2,.residentV3Body .modal .sheetHead h2{font-size:19px}
  .v3Body .modal .btn,.residentV3Body .modal .btn{font-size:14px}
}


/* Page-level collision prevention found during RC3.5 sweep. */
.moduleIntroV3>* ,.dashboardIntro>* ,.sectionHead>* ,.topbarHeading,.userIdentity{min-width:0}
.moduleIntroV3 .title,.dashboardIntro .title,.topbarHeading h1{max-width:100%;overflow-wrap:anywhere}
.moduleActionsV3,.dashboardActions{min-width:0;flex-wrap:wrap}
.moduleActionsV3 .btn,.dashboardActions .btn{max-width:100%;white-space:normal;text-align:center}
.directoryMobileCardV3,.serviceMobileCardV3,.equipmentMobileCardV3,.requestMobileCard,.residentRequestCardV3,.objectCardV3{min-width:0;max-width:100%;overflow:hidden}
.directoryMobileCardV3 b,.serviceMobileCardV3 b,.equipmentMobileCardV3 b,.requestMobileCard b,.residentRequestCardV3 h3,.objectCardV3 h3{overflow-wrap:anywhere}

@media(max-width:520px){
  .moduleActionsV3,.residentActionsV3{grid-template-columns:1fr!important;display:grid!important}
  .moduleActionsV3 .btn,.residentActionsV3 .btn{width:100%!important}
  .topbarHeading{min-width:0!important;max-width:48vw}
  .v3Topbar .notifyWrap,.residentTopbarV3 .notifyWrap{flex:0 0 auto}
}

/* ==========================================================
   v3.0.0-RC3.6 — Resident modal stability + smart price preview
   ========================================================== */
body.modalOpen{overflow:hidden;overscroll-behavior:none}
.residentSmartEstimateV3{transition:opacity .16s ease,border-color .16s ease,box-shadow .16s ease}
.smartPriceThinkingV3{margin-top:10px;padding:11px 12px;border:1px solid #E8E3DB;border-radius:12px;background:#FBFAF8;color:#6B6156;font-size:8.5px;line-height:1.45}
.smartPriceThinkingV3>span{display:inline-block;width:5px;height:5px;border-radius:50%;background:#B07D22;margin-right:3px;animation:smartPricePulse 1s ease-in-out infinite}
.smartPriceThinkingV3>span:nth-child(2){animation-delay:.15s}.smartPriceThinkingV3>span:nth-child(3){animation-delay:.3s}
@keyframes smartPricePulse{0%,100%{opacity:.25;transform:translateY(0)}50%{opacity:1;transform:translateY(-2px)}}
.smartPriceMatchedV3{display:grid;gap:6px;margin-top:10px}
.smartPriceMatchedV3>small{color:#8A7F74;font-size:7.5px;font-weight:800;text-transform:uppercase;letter-spacing:.055em}
.smartPriceMatchedV3>span{display:grid;gap:3px;padding:9px 10px;border:1px solid #E1DBD2;border-radius:11px;background:#E9F0EC;color:#4A423B;font-size:8.5px;font-weight:800;line-height:1.35}
.smartPriceMatchedV3>span em{font-size:7.5px;font-style:normal;font-weight:500;color:#6B6156}

@media(max-width:820px){
  /* One scroll owner per resident modal. This removes nested-scroll fights on iOS. */
  .residentV3Body .residentFormModalV3.open,
  .residentV3Body .residentDetailModalV3.open{align-items:flex-end;overflow:hidden!important}
  .residentV3Body .residentFormModalV3>.residentFormSheetV3,
  .residentV3Body .residentDetailModalV3>.residentDetailSheetV3{
    height:calc(100dvh - max(12px,env(safe-area-inset-top)) - max(8px,env(safe-area-inset-bottom)))!important;
    max-height:calc(100dvh - max(12px,env(safe-area-inset-top)) - max(8px,env(safe-area-inset-bottom)))!important;
    display:flex!important;flex-direction:column!important;overflow:hidden!important;padding:0!important;
    overscroll-behavior:none;border-radius:20px 20px 0 0!important;
  }
  .residentV3Body .residentFormModalV3>.residentFormSheetV3>.sheetHead,
  .residentV3Body .residentDetailModalV3>.residentDetailSheetV3>.sheetHead{
    position:relative!important;top:auto!important;z-index:5;flex:0 0 auto!important;margin:0!important;
    padding-top:14px!important;padding-bottom:12px!important;background:rgba(255,255,255,.985);backdrop-filter:blur(14px);
    border-bottom:1px solid #E8E3DB;
  }
  .residentV3Body .residentFormModalV3>.residentFormSheetV3>form,
  .residentV3Body .residentDetailModalV3>.residentDetailSheetV3>#reqDetail,
  .residentV3Body .residentDetailModalV3>.residentDetailSheetV3>#residentServiceOrderDetail{
    flex:1 1 auto!important;min-height:0!important;max-height:none!important;
    overflow-y:auto!important;overflow-x:hidden!important;-webkit-overflow-scrolling:touch;
    overscroll-behavior-y:contain;touch-action:pan-y;
    padding-bottom:calc(28px + env(safe-area-inset-bottom))!important;
    scroll-padding-bottom:calc(92px + env(safe-area-inset-bottom));
  }
  .residentV3Body .residentFormModalV3>.residentFormSheetV3>form{padding-top:14px!important;padding-left:16px!important;padding-right:16px!important}
  .residentV3Body .residentDetailModalV3>.residentDetailSheetV3>#reqDetail,
  .residentV3Body .residentDetailModalV3>.residentDetailSheetV3>#residentServiceOrderDetail{padding-left:14px!important;padding-right:14px!important;padding-top:12px!important}
  .residentV3Body .residentFormModalV3 .close,
  .residentV3Body .residentDetailModalV3 .close{touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}
  .residentSmartEstimateV3{margin-top:2px!important;margin-bottom:8px!important}
  .smartPriceMatchedV3>span{font-size:9px}
}


/* =========================================================
   v3.0.0-RC3.7 — STAFF SPECIALTY / PROPERTY SELECTORS
   Compact premium checkbox treatment for desktop + mobile.
   Scoped to the staff editor so form inputs elsewhere keep
   their existing geometry and behavior.
   ========================================================= */
#staffPropertyChecks,#specChecks{gap:10px 12px}
#staffPropertyChecks .staffChoiceCardV37,
#specChecks .staffChoiceCardV37{
  min-height:58px;
  padding:12px 14px!important;
  margin:0;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  border:1px solid #E1DBD2;
  border-radius:14px;
  background:#fff;
  cursor:pointer;
  user-select:none;
  -webkit-user-select:none;
  transition:border-color .16s ease,background .16s ease,box-shadow .16s ease,transform .12s ease;
}
#staffPropertyChecks .staffChoiceCardV37:hover,
#specChecks .staffChoiceCardV37:hover{
  border-color:#9DB2C4;
  background:#F1ECE4;
  box-shadow:0 5px 16px rgba(16,24,40,.035);
}
#staffPropertyChecks .staffChoiceCardV37:active,
#specChecks .staffChoiceCardV37:active{transform:scale(.995)}
#staffPropertyChecks .staffChoiceLabelV37,
#specChecks .staffChoiceLabelV37{
  min-width:0;
  color:#221E1A;
  font-size:10px;
  font-weight:850;
  line-height:1.3;
  overflow-wrap:anywhere;
}
#staffPropertyChecks input.staffChoiceInputV37,
#specChecks input.staffChoiceInputV37{
  -webkit-appearance:none!important;
  appearance:none!important;
  width:20px!important;
  height:20px!important;
  min-width:20px!important;
  min-height:20px!important;
  max-width:20px!important;
  padding:0!important;
  margin:0!important;
  flex:0 0 20px;
  border:1.5px solid #9DB2C4!important;
  border-radius:6px!important;
  background:#fff!important;
  box-shadow:none!important;
  outline:none;
  cursor:pointer;
  vertical-align:middle;
  transition:background-color .14s ease,border-color .14s ease,box-shadow .14s ease,transform .1s ease;
}
#staffPropertyChecks input.staffChoiceInputV37:checked,
#specChecks input.staffChoiceInputV37:checked{
  border-color:#3B5C7A!important;
  background-color:#3B5C7A!important;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3E%3Cpath d='M3 7.2 5.7 10 11 4.5' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  background-size:14px 14px!important;
}
#staffPropertyChecks input.staffChoiceInputV37:focus-visible,
#specChecks input.staffChoiceInputV37:focus-visible{
  border-color:#3B5C7A!important;
  box-shadow:0 0 0 3px rgba(22,135,248,.14)!important;
}
#staffPropertyChecks .staffChoiceCardV37:has(input:checked),
#specChecks .staffChoiceCardV37:has(input:checked){
  border-color:#9DB2C4;
  background:#fff;
}
@media(max-width:640px){
  #staffPropertyChecks,#specChecks{grid-template-columns:1fr;gap:8px}
  #staffPropertyChecks .staffChoiceCardV37,
  #specChecks .staffChoiceCardV37{min-height:54px;padding:11px 13px!important;border-radius:13px}
  #staffPropertyChecks .staffChoiceLabelV37,
  #specChecks .staffChoiceLabelV37{font-size:11px}
  #staffPropertyChecks input.staffChoiceInputV37,
  #specChecks input.staffChoiceInputV37{width:21px!important;height:21px!important;min-width:21px!important;min-height:21px!important;max-width:21px!important;flex-basis:21px}
}

/* ==========================================================
   v3.0.0-RC3.8 — PRODUCT LANDING + AUTH PAGE SCROLL FIX
   ========================================================== */
/* Public auth pages are documents, not the fixed desktop app shell. */
html.authHtml{height:auto!important;min-height:100%;overflow-x:hidden!important;overflow-y:auto!important;scroll-behavior:smooth}
html.authHtml body.authV3{height:auto!important;min-height:100vh!important;overflow-x:hidden!important;overflow-y:visible!important;overscroll-behavior-y:auto}
html.authHtml body.authV3.modalOpen{overflow:hidden!important}

.productLandingV4{background:
  radial-gradient(circle at 7% 3%,rgba(176,125,34,.11),transparent 27%),
  radial-gradient(circle at 92% 22%,rgba(71,85,105,.055),transparent 28%),
  linear-gradient(180deg,#FBFAF8 0%,#E4EDF5 100%)!important}
.productLandingV4 .authWrap{max-width:1180px;padding:24px 24px 34px}
.productTopV4{display:flex;align-items:center;justify-content:space-between;gap:18px}
.productStatusV4{display:inline-flex;align-items:center;gap:8px;border:1px solid #9DB2C4;background:rgba(255,255,255,.72);backdrop-filter:blur(12px);border-radius:999px;padding:7px 11px;color:#3B5C7A;font-size:9px;font-weight:850;letter-spacing:.01em;white-space:nowrap}
.productStatusV4 i{width:7px;height:7px;border-radius:50%;background:#B07D22;box-shadow:0 0 0 4px rgba(10,163,106,.10)}

.productHeroV4{display:grid!important;grid-template-columns:minmax(0,1.5fr) minmax(280px,.72fr);align-items:end;gap:48px;padding:52px 0 28px!important}
.productHeroCopyV4{min-width:0}
.productHeroV4 h1{font-size:clamp(48px,6vw,76px)!important;line-height:.96!important;letter-spacing:-.067em!important;max-width:760px!important;margin:11px 0 17px!important}
.productHeroV4 p{font-size:16px!important;line-height:1.53!important;max-width:700px!important;margin:0;color:#8A7F74!important}
.productPillsV4{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin-top:20px}
.productPillsV4 span{display:inline-flex;align-items:center;gap:7px;border:1px solid #9DB2C4;background:rgba(255,255,255,.72);border-radius:999px;padding:7px 10px;color:#4A423B;font-size:9px;font-weight:820;white-space:nowrap}
.productPillsV4 span:before{content:'';width:5px;height:5px;border-radius:50%;background:#2F6F58}

.productFlowV4{align-self:stretch;display:grid;align-content:end;gap:7px;padding:15px;border:1px solid #9DB2C4;border-radius:20px;background:rgba(255,255,255,.76);box-shadow:0 18px 55px rgba(26,23,20,.055);backdrop-filter:blur(16px)}
.productFlowHeadV4{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:1px 3px 7px}
.productFlowHeadV4 span{display:flex;align-items:center;gap:7px;font-size:9px;font-weight:900;color:#4A423B;text-transform:uppercase;letter-spacing:.055em}.productFlowHeadV4 span i{width:6px;height:6px;border-radius:50%;background:#B07D22}
.productFlowHeadV4 small{font-size:8px;color:#A79B8B;font-weight:750}
.productFlowStepV4{display:grid;grid-template-columns:30px minmax(0,1fr) 16px;align-items:center;gap:10px;padding:10px;border:1px solid #9DB2C4;background:#fff;border-radius:13px}
.productFlowStepV4>b{width:30px;height:30px;display:grid;place-items:center;border-radius:10px;background:#E9F0EC;color:#2F6F58;font-size:9px}
.productFlowStepV4 strong,.productFlowStepV4 small{display:block}.productFlowStepV4 strong{font-size:10.5px;color:#221E1A}.productFlowStepV4 small{font-size:8px;color:#3B5C7A;margin-top:2px;line-height:1.3}.productFlowStepV4 em{font-size:12px;color:#3B5C7A;font-style:normal;font-weight:900;text-align:center}
.productFlowStepV4:last-child em{color:#B07D22}

.productAuthGridV4{grid-template-columns:1.05fr .95fr!important;gap:16px!important;align-items:stretch}
.productLandingV4 .authCard{padding:20px;border-radius:20px;background:rgba(255,255,255,.94)}
.productLandingV4 .authCard h2{font-size:25px;letter-spacing:-.035em;margin:3px 0 10px}
.productLandingV4 .authCardLeadV3{font-size:10.5px;margin:0 0 14px;line-height:1.5}
.productLandingV4 .field{margin-bottom:10px}.productLandingV4 .field label{font-size:9px;margin-bottom:5px}.productLandingV4 .field input{min-height:43px;border-radius:12px;padding:0 13px}
.productLandingV4 .authSubmitV3{margin-top:2px;min-height:45px;border-radius:12px;font-size:11px}
.productAccessCardV4{display:flex;flex-direction:column}
.productAccessCardV4>.muted{font-size:11px;line-height:1.52;margin:1px 0 16px;max-width:430px}
.productAccessBtnV4{display:flex!important;align-items:center;justify-content:space-between!important;min-height:45px;border-radius:12px;margin-top:auto;padding-left:14px!important;padding-right:13px!important}
.productAccessNoteV4{display:grid;grid-template-columns:22px minmax(0,1fr);gap:8px;align-items:start;margin-top:11px;padding:10px;border-radius:12px;background:#FBFAF8;border:1px solid #E8E3DB}
.productAccessNoteV4>span{width:22px;height:22px;display:grid;place-items:center;border-radius:8px;background:#E9F0EC;color:#2F6F58;font-size:9px;font-weight:900}.productAccessNoteV4 p{margin:1px 0 0;color:#6B6156;font-size:8.5px;line-height:1.42}
.productTrustV4{padding:10px 3px 0!important}
.productFooterV4{display:flex;justify-content:space-between;gap:16px;margin-top:14px;padding:15px 3px 0;border-top:1px solid rgba(218,225,233,.78);font-size:8px;font-weight:750;color:#A79B8B}.productFooterV4 span:first-child{color:#8A7F74;font-weight:900}

/* Keep the sign-in action comfortably reachable on shorter laptop screens. */
@media(min-width:821px) and (max-height:900px){
  .productLandingV4 .authWrap{padding-top:18px;padding-bottom:24px}
  .productHeroV4{padding:30px 0 20px!important;gap:38px}
  .productHeroV4 h1{font-size:clamp(44px,5.4vw,66px)!important;margin-bottom:13px!important}
  .productHeroV4 p{font-size:14px!important}.productPillsV4{margin-top:14px}
  .productFlowStepV4{padding:8px}.productLandingV4 .authCard{padding:17px}.productLandingV4 .authCard h2{font-size:23px}
  .productLandingV4 .field{margin-bottom:8px}.productLandingV4 .field input{min-height:40px}
  .productLandingV4 .authSubmitV3,.productAccessBtnV4{min-height:42px}
  .productAccessCardV4>.muted{margin-bottom:12px}.productAccessNoteV4{padding:8px;margin-top:8px}
  .productTrustV4{padding-top:7px!important}.productFooterV4{margin-top:9px;padding-top:10px}
}

@media(max-width:820px){
  html.authHtml{scroll-behavior:auto}
  .productLandingV4 .authWrap{padding:17px 15px max(38px,env(safe-area-inset-bottom))}
  .productStatusV4{font-size:8px;padding:6px 9px}
  .productHeroV4{display:block!important;padding:38px 0 20px!important}
  .productHeroV4 h1{font-size:clamp(40px,12vw,56px)!important;line-height:.98!important;max-width:620px!important;margin:9px 0 14px!important}
  .productHeroV4 p{font-size:14px!important;line-height:1.5!important}
  .productPillsV4{margin-top:15px;gap:6px}.productPillsV4 span{font-size:8px;padding:6px 9px}
  .productFlowV4{display:none}
  .productAuthGridV4{grid-template-columns:1fr!important;gap:12px!important}
  .productLandingV4 .authCard{padding:17px}.productLandingV4 .authCard h2{font-size:24px}
  .productLandingV4 .field input{min-height:45px}
  .productLandingV4 .authSubmitV3,.productAccessBtnV4{min-height:46px}
  .productTrustV4{padding-top:8px!important;gap:7px!important}.productFooterV4{margin-top:12px;padding-top:12px;flex-direction:column;gap:4px}
}
@media(max-width:520px){
  .productTopV4 .authBrandV3{font-size:14px}.productTopV4 .authBrandV3 .brandMark{width:34px;height:34px;border-radius:11px}
  .productStatusV4 span{display:none}.productStatusV4{width:34px;height:34px;justify-content:center;padding:0}.productStatusV4 i{margin:0}
  .productHeroV4{padding-top:31px!important}.productHeroV4 h1{font-size:40px!important;letter-spacing:-.06em!important}.productHeroV4 p{font-size:13px!important}
  .productPillsV4{display:grid;grid-template-columns:1fr 1fr}.productPillsV4 span:last-child{grid-column:1/-1}
}

/* Registration uses the same public-page scrolling model. */
.authHtml .registerV3 .authTop{display:flex;align-items:center;justify-content:space-between;gap:12px}

/* RC4 · system Web Push / PWA */
.notifySettingsV3{flex-wrap:wrap}
.notifySettingBtn.hidden{display:none!important}
.iosInstallPrompt .soundPromptIcon{background:#F1ECE4;color:#1A1714;font-weight:900}
@media(max-width:620px){.notifySettingsV3 .notifySettingBtn{min-width:82px}.iosInstallPrompt{bottom:86px}}
\n\n/* ==========================================================
   v3.0.0-RC4.4 — iOS/PWA notification touch hardening
   ========================================================== */
.notifyWrap{z-index:220;pointer-events:auto!important;isolation:isolate}
.notifyBtn{position:relative;z-index:222;pointer-events:auto!important;touch-action:manipulation;-webkit-tap-highlight-color:rgba(10,163,106,.12);user-select:none;-webkit-user-select:none}
.notifyPanel{z-index:221;pointer-events:auto!important}
.notifyPanel.open{pointer-events:auto!important}
.notifySettingsV3,.notifyList,.notifyHeadV3{pointer-events:auto!important}
.notifySettingBtn,.notifyItem,.notifyHeadV3 button{pointer-events:auto!important;touch-action:manipulation}
@media(max-width:820px){
  .v3Topbar,.residentTopbarV3{position:relative;z-index:210;overflow:visible!important}
  .v3Topbar .userBox,.residentTopbarV3 .userBox{position:relative;z-index:220;overflow:visible!important}
  .v3Topbar .notifyWrap,.residentTopbarV3 .notifyWrap{position:relative;z-index:230;display:flex;align-items:center}
  .v3Topbar .notifyBtn,.residentTopbarV3 .notifyBtn{min-width:44px;min-height:44px;display:grid!important;visibility:visible!important;opacity:1!important}
  .notifyPanelV3{z-index:500!important;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
}
@media(max-width:620px){
  .notifyPanelV3{left:8px!important;right:8px!important;bottom:calc(76px + env(safe-area-inset-bottom))!important;top:auto!important;max-height:min(72dvh,620px)!important}
}


/* ==========================================================
   v3.0.0-RC4.4 — iOS notification center portal
   ========================================================== */
.notifyWrap{position:relative!important;z-index:1001!important;pointer-events:auto!important}
.notifyBtn{z-index:1002!important;pointer-events:auto!important;touch-action:manipulation!important;-webkit-touch-callout:none}
.notifyPanelPortalV4{
  position:fixed!important;
  z-index:2147482000!important;
  top:calc(env(safe-area-inset-top) + 72px)!important;
  right:12px!important;
  left:auto!important;
  bottom:auto!important;
  width:min(430px,calc(100vw - 24px))!important;
  max-height:calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom) - 92px)!important;
  overflow:hidden!important;
  transform:translateZ(0);
  -webkit-transform:translateZ(0);
  isolation:isolate;
}
.notifyPanelPortalV4.open{display:block!important;pointer-events:auto!important}
.notifyHeadActionsV4{display:flex;align-items:center;gap:9px}
.notifyCloseBtnV4{width:36px;height:36px;border:0;border-radius:11px;background:#F1ECE4;color:#6B6156;font-size:24px;line-height:1;display:grid;place-items:center;touch-action:manipulation}
.notifyCloseBtnV4:active{transform:scale(.96)}
html.notifyCenterOpen .requestAlertModal{pointer-events:none!important}
@media(max-width:820px){
  .notifyPanelPortalV4{
    top:calc(env(safe-area-inset-top) + 76px)!important;
    left:8px!important;
    right:8px!important;
    bottom:calc(env(safe-area-inset-bottom) + 76px)!important;
    width:auto!important;
    max-height:none!important;
    border-radius:22px!important;
  }
  .notifyPanelPortalV4 .notifyList{max-height:calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom) - 225px)!important;-webkit-overflow-scrolling:touch}
}


/* ==========================================================
   v3.0.0-RC4.5 — iPhone bell / request-alert isolation
   ========================================================== */
@media(max-width:820px){
  /* The new-request backdrop must never cover the 68px mobile topbar. */
  .requestAlertModal.open{top:68px!important;bottom:0!important;left:0!important;right:0!important}
  .v3Topbar,.residentTopbarV3{position:relative!important;z-index:2147481000!important;pointer-events:auto!important}
  .v3Topbar .userBox,.residentTopbarV3 .userBox,.notifyWrap,.notifyBtn{pointer-events:auto!important}
}

/* RC4.6.1: explicit issue-photo uploader in staff request card */
.requestIssueUploadV46{margin-top:16px;padding:14px 16px;border:1px solid #9DB2C4;border-radius:16px;background:#E4EDF5;display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}
.requestIssueUploadV46>div:first-child{display:grid;gap:4px}.requestIssueUploadV46 small{color:#8A7F74}.requestIssueUploadActionsV46{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.requestIssueUploadActionsV46 input[type=file]{max-width:330px}
@media(max-width:760px){.requestIssueUploadV46{align-items:stretch}.requestIssueUploadActionsV46{display:grid;grid-template-columns:1fr}.requestIssueUploadActionsV46 input[type=file]{max-width:100%;width:100%}.requestIssueUploadActionsV46 .btn{width:100%}}

/* ==========================================================
   RC4.6.2 — порядок модальных окон и мобильная шапка
   ========================================================== */

/* 1. Форма, открытая ПОВЕРХ карточки, должна быть впереди.
   Раньше у всех модальных окон был один слой (z-index:60), и побеждало то,
   что стоит ниже в разметке. Из-за этого паспорт оборудования оставался
   поверх форм «Создать заявку» и «Редактировать оборудование».
   Карточки-просмотры (объект, заявка, паспорт, техдокументация, проверка
   жильца) остаются на слое 60; формы и действия поднимаются на 72,
   подтверждение удаления — на 80, чтобы всегда быть выше формы. */
#propertyModal,
#serviceRequestModal,
#staffModal,
#residentEditModal,
#requestOwnerEditModal,
#serviceOrderOwnerEditModal,
#equipmentModal,
#equipmentImportModal,
#maintenanceImportModal,
#priceModal,
#priceImportModal,
#addonServiceModal,
#workActModal,
#serviceActModal,
#checkPlanModal,
#checkCompleteModal{z-index:72}

#ownerDeleteModal{z-index:80}

/* 2. Мобильная шапка на телефоне поднята почти до максимума ради
   колокольчика (правило RC4.5 ниже по файлу). Пока открыто модальное окно,
   она должна уходить под него — иначе заголовок страницы и колокольчик
   накладываются на шапку модального окна. */
@media(max-width:820px){
  body.modalOpen .v3Topbar,
  body.modalOpen .residentTopbarV3{z-index:30!important}
}

/* ==========================================================
   RC6.5 — регламентные проверки оборудования
   ========================================================== */
.checksWrapV3 .sectionHead{margin:18px 2px 8px}
.checksListV3{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px}
.checkCardV3{padding:14px 15px;display:grid;gap:6px;border-left:4px solid #D9D2C7}
.checkCardV3.overdue{border-left-color:#A63A2B}.checkCardV3.today{border-left-color:#C79337}.checkCardV3.soon{border-left-color:#3B5C7A}
.checkCardV3 b{font-size:13px;line-height:1.3}.checkCardV3 p{margin:0;font-size:11px;color:#4A423B}.checkCardV3 small{font-size:10px}
.checkCardHeadV3{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.checkCardV3 .toolbar{margin-top:4px;display:flex;gap:6px;flex-wrap:wrap}
.pill.warnPill{background:#FBEFD9;color:#8A5F13}
.checksStripV3{margin-bottom:14px}.checksStripV3 .checksListV3{margin-top:10px}
.checkPlanRowV3{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;padding:10px 0;border-bottom:1px solid #E8E3DB}
.checkPlanRowV3:last-child{border-bottom:0}.checkPlanRowV3.inactive{opacity:.55}
.checkPlanRowV3 b{font-size:12px}.checkPlanRowV3 small{line-height:1.5}
.checkPlanActionsV3{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;flex:0 0 auto}
.checkIntervalV3{display:flex;align-items:center;gap:8px}.checkIntervalV3 span{color:#8A7F74;font-size:12px;white-space:nowrap}
.checkIntervalV3 input{width:70px;flex:0 0 70px}.checkIntervalV3 select{flex:1 1 auto}
.checkCompleteSheetV3{max-width:680px}
.checkCompleteToolbarV3{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:2px 0 10px}
.checkItemsV3{display:grid;gap:8px;margin-bottom:14px}
.checkItemV3{border:1px solid #E8E3DB;border-radius:12px;padding:10px 12px;display:grid;grid-template-columns:1fr auto;gap:8px 10px;align-items:center;background:#fff}
.checkItemV3.hasRemark{border-color:#EBD9B3;background:#FBEFD9}
.checkItemMainV3{display:flex;gap:10px;align-items:flex-start;font-size:13px;line-height:1.35;cursor:pointer;margin:0}
.checkItemMainV3 input{width:20px;height:20px;min-height:20px;flex:0 0 20px;margin-top:1px;accent-color:#B07D22}
.checkItemRemarkBtnV3{border:1px solid #EBD9B3;background:#fff;color:#8A5F13;border-radius:9px;padding:6px 9px;font-size:11px;font-weight:800;cursor:pointer;white-space:nowrap}
.checkItemV3 .chkRemark{grid-column:1/-1;min-height:56px}
.checklistResultV3{display:grid;gap:4px;margin-top:8px;padding:8px 10px;border-radius:10px;background:#FBFAF8;font-size:11px}
.checklistResultV3>div{display:grid;grid-template-columns:18px 1fr;gap:4px 8px;align-items:start}
.checklistResultV3 span{font-weight:900}.checklistResultV3 .ok span{color:#2F6F58}.checklistResultV3 .remark span{color:#8A5F13}.checklistResultV3 .skip{opacity:.55}
.checklistResultV3 em{font-style:normal}.checklistResultV3 small{grid-column:2;color:#8A5F13}
.navBadgeV3{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;margin-left:6px;border-radius:999px;background:#A63A2B;color:#fff;font-size:9px;font-weight:900}
@media(max-width:760px){.checkItemV3{grid-template-columns:1fr}.checkItemRemarkBtnV3{justify-self:start}.checkPlanRowV3{flex-direction:column}.checkPlanActionsV3{justify-content:flex-start}}
.v3Body .formSheetV3 .checkItemMainV3{font-size:13px;font-weight:600;color:#1A1714}
.v3Body .formSheetV3 .checkItemMainV3 input{min-height:20px}

/* v28: объявления по дому */
.annListV3{display:flex;flex-direction:column;gap:12px}
.annItemV3{display:flex;flex-direction:column;gap:6px}
.annItemHeadV3{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.annBodyTextV3{white-space:pre-line;color:var(--muted,#8A7F74);font-size:13px;line-height:1.5;margin:2px 0 0}
.annItemActionsV3{display:flex;gap:8px;margin-top:6px}
.annItemActionsV3:empty{display:none}

/* =========================================================
   v4.0 — КОНЦЕПТ 03.09.2026: тёплый графит + золото, Onest + JetBrains Mono
   Палитра переведена по всему файлу выше; здесь — форма, шрифт и движение.
   ========================================================= */
:root{
  --bg:#FBFAF8;--card:#FFFFFF;--ink:#1A1714;--muted:#8A7F74;--line:#E8E3DB;
  --accent:#B07D22;--accent-2:#C79337;--green:#2F6F58;--amber:#8A5F13;--red:#A63A2B;--blue:#3B5C7A;
  --nav:#221E1A;--nav-2:#2A251F;--gold-text:#8A5F13;
  --shadow:0 10px 30px rgba(26,23,20,.06);--shadow-lg:0 24px 70px rgba(26,23,20,.12);
  --v3-shadow:0 18px 55px rgba(26,23,20,.09);--v3-ease:cubic-bezier(.22,.61,.36,1);
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
}
html,body{font-family:'Onest','Golos Text',system-ui,-apple-system,sans-serif!important;-webkit-font-smoothing:antialiased;letter-spacing:0!important;font-feature-settings:normal!important}
body{background:var(--bg)!important;color:var(--ink)!important}
h1,h2,h3,.title,.topbarHeading h1{letter-spacing:-.02em!important;font-weight:700!important}
b,strong{font-weight:600}
a{color:var(--gold-text)}

/* ---- Рельс навигации ---- */
.v3Shell .sidebar,.sidebar{background:#221E1A!important;box-shadow:none!important;border-right:0!important}
.brandMark{background:#B07D22!important;box-shadow:none!important;border-radius:8px!important;width:32px!important;height:32px!important;color:#fff!important}
.v3Brand{font-size:14px!important;font-weight:600!important;letter-spacing:-.01em!important;color:#fff}
.v3Shell .sidebarRole,.sidebarRole{color:#7E7368!important;font-size:11px!important;margin:2px 8px 22px 50px!important}
.navSectionLabel{color:#7E7368!important;font-size:10px!important;letter-spacing:.09em!important;font-weight:600!important;margin:20px 12px 6px!important}
.v3Nav button{color:#B8AC9C!important;font-weight:500!important;font-size:14px!important;border-radius:9px!important;min-height:40px;padding:10px 12px!important;transition:background .14s var(--v3-ease),color .14s var(--v3-ease)}
.v3Nav button .ico{color:#8C8072!important;font-size:15px}
.v3Nav button:hover{background:#2A251F!important;color:#E9E2D7!important;transform:none!important}
.v3Nav button.active{background:#332D26!important;color:#fff!important;font-weight:600!important;box-shadow:none!important}
.v3Nav button.active .ico{color:#C79337!important}
.navBadgeV3{font-family:var(--mono)!important;font-weight:500!important;background:transparent!important;color:#C79337!important;font-size:12px!important;padding:0!important;min-width:0!important}

/* ---- Шапка ---- */
.v3Topbar.topbar,.topbar{background:#FBFAF8!important;backdrop-filter:none!important;border-bottom:1px solid #E8E3DB!important;height:64px!important;box-shadow:none!important}
.topbarHeading h1{font-size:19px!important}
.topbarHeading small{color:#A79B8B!important;font-size:12px!important;font-weight:400!important;margin-top:2px!important}
.userBox .avatar,.avatar{background:#221E1A!important;color:#C79337!important;font-weight:600!important}
.userIdentity b{font-weight:600!important}
.search,.topbarSearch,.globalSearch input,input.searchInput{border-radius:9px!important;border:1px solid #E1DBD2!important;background:#fff!important}

/* ---- Карточки и поверхности ---- */
.card,.v3Card,.dashboardCard,.checkCardV3,.ticket,.ticketList>*,.annItemV3{border-radius:14px!important;border:1px solid #E8E3DB!important;box-shadow:none!important;background:#fff}
.eyebrow{color:#8A7F74!important;letter-spacing:.07em!important;font-size:12px!important;font-weight:400!important;text-transform:uppercase}
.dashboardLead,.muted{color:#6B6156!important}
.empty{border:1px dashed #D9D2C7!important;border-radius:14px!important;color:#8A7F74!important;background:#fff!important}

/* ---- Кнопки ---- */
.btn{border-radius:10px!important;font-weight:600!important;background:var(--accent);color:#fff;letter-spacing:0!important;transition:transform .12s var(--v3-ease),background .14s var(--v3-ease)}
.btn:hover{background:#9C6E1D}
.btn:active{transform:scale(.965)}
.btn.light{background:#fff!important;color:#1A1714!important;border:1px solid #D9D2C7!important}
.btn.light:hover{background:#F1ECE4!important}
.btn.green{background:#2F6F58!important;color:#fff!important}
.btn.red,.btn.red.light{background:#fff!important;color:#A63A2B!important;border:1px solid #EBD7D3!important}
.btn.sm{border-radius:8px!important;font-size:13px!important}
.textBtn{color:var(--gold-text)!important;font-weight:500!important}

/* ---- Плашки статусов ---- */
.pill,.badge,.requestStatus,.requestPriority,.serviceStatusV3,.equipmentConditionBadge,.checkDueBadgeV3,.requestTypeTag,.requestSourceMark,.tier{border-radius:999px!important;font-weight:500!important;font-size:12px!important;letter-spacing:0!important;text-transform:none!important}
.pill.warnPill,.pill.warn{background:#FBEFD9!important;color:#8A5F13!important}

/* ---- Цифры — моноширинные ---- */
.v3Stat em,.v3Stat b,.kpiValue,.statValue,.residentKpiGridV3 b,.requestNumber,.reqNum,.ticketNumber,.orderNumber,td.num,.money,.priceValue,.estimateRow b,.navBadgeV3,.notifyBadge,.count,.checkDueBadgeV3,[data-mono]{font-family:var(--mono)!important;font-weight:500!important;letter-spacing:-.01em!important}

/* ---- Формы ---- */
input,select,textarea{font-family:inherit!important;border-radius:10px!important;border:1px solid #E1DBD2!important;background:#fff!important;color:#1A1714!important;font-size:14px!important;transition:border-color .14s var(--v3-ease),box-shadow .14s var(--v3-ease)}
input:focus,select:focus,textarea:focus{border-color:#B07D22!important;box-shadow:0 0 0 3px rgba(176,125,34,.12)!important;outline:none!important}
.field label{color:#6B6156!important;font-size:12px!important;font-weight:500!important;letter-spacing:0!important;text-transform:none!important}
.formSheetV3 .btn.full{height:50px;font-size:15px!important}

/* ---- Модальные окна ---- */
.sheet{border-radius:16px!important;box-shadow:0 30px 80px rgba(26,23,20,.22)!important;border:0!important}
.modal{background:rgba(26,23,20,.42)!important;backdrop-filter:blur(2px)}
.sheetHead h2{font-size:20px!important}
.sheet .close{border-radius:8px!important;background:#F1ECE4!important;color:#4A423B!important}

/* ---- Таблицы ---- */
table th{color:#8A7F74!important;font-size:11px!important;letter-spacing:.07em!important;text-transform:uppercase!important;font-weight:500!important;background:#FBFAF8!important;border-bottom:1px solid #E8E3DB!important}
table td{border-bottom:1px solid #F1ECE4!important;font-size:14px}
table tr:hover td{background:#FBFAF8}

/* ---- Мобильная панель ---- */
.mobileNav,.mobileTabbar,.bottomNav,.residentTabbarV3{background:#fff!important;border-top:1px solid #E8E3DB!important;box-shadow:none!important}
.mobileNav button.active,.mobileTabbar button.active,.bottomNav button.active{color:#B07D22!important}
.mobileNav button,.mobileTabbar button,.bottomNav button{color:#A79B8B!important;font-size:11px!important}
.mobileMoreMenu{border-radius:14px!important;border:1px solid #E8E3DB!important;box-shadow:0 18px 55px rgba(26,23,20,.14)!important}

/* ---- Тёмные карточки (объявления, проверки) ---- */
.annCardV3{background:#221E1A!important;border:0!important;border-radius:16px!important}
.annCardV3 .annTitleV3{color:#fff!important}.annCardV3 .annMetaV3{color:#A79B8B!important}

/* =========================================================
   ДВИЖЕНИЕ — восемь движений из концепта. Одна кривая, 120–260 мс.
   ========================================================= */
@keyframes v4Rise{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
@keyframes v4Push{0%{opacity:0;transform:translateY(-16px) scale(.97)}70%{opacity:1;transform:translateY(2px) scale(1)}100%{transform:none}}
@keyframes v4Shimmer{from{background-position:-260px 0}to{background-position:260px 0}}
@keyframes v4SheetUp{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:none}}
@keyframes v4Fade{from{opacity:0}to{opacity:1}}
.page.active{animation:v4Fade .16s var(--v3-ease)}
.ticketList>*,.checksWrapV3>*,.annListV3>*,.dashboardGrid>*,.residentKpiGridV3>*{animation:v4Rise .18s var(--v3-ease) both}
.ticketList>*:nth-child(2),.checksWrapV3>*:nth-child(2),.annListV3>*:nth-child(2),.dashboardGrid>*:nth-child(2),.residentKpiGridV3>*:nth-child(2){animation-delay:.06s}
.ticketList>*:nth-child(3),.checksWrapV3>*:nth-child(3),.annListV3>*:nth-child(3),.dashboardGrid>*:nth-child(3),.residentKpiGridV3>*:nth-child(3){animation-delay:.12s}
.ticketList>*:nth-child(4),.checksWrapV3>*:nth-child(4),.annListV3>*:nth-child(4),.dashboardGrid>*:nth-child(4),.residentKpiGridV3>*:nth-child(4){animation-delay:.18s}
.annCardV3{animation:v4Push .26s cubic-bezier(.22,.9,.34,1) both}
.modal.open .sheet{animation:v4SheetUp .24s var(--v3-ease)}
.skel,.skeleton{background:linear-gradient(90deg,#F1ECE4 0%,#E6DFD4 42%,#F1ECE4 84%)!important;background-size:260px 100%!important;animation:v4Shimmer 1.5s linear infinite}
/* аварийная заявка — без движения, сразу */
.ticketList>.emergency,.ticketList>.priority-emergency,.requestAlertModal.emergency .sheet{animation:none!important}
@media (prefers-reduced-motion:reduce){
  .page.active,.ticketList>*,.checksWrapV3>*,.annListV3>*,.dashboardGrid>*,.residentKpiGridV3>*,.annCardV3,.modal.open .sheet,.skel,.skeleton,.btn{animation:none!important;transition:none!important}
}

/* ---- уточнения после первого прогона ---- */
.topbar:after{display:none!important}
.residentTopbarV3{border-bottom:1px solid #E8E3DB!important}
.v3Shell .btn{background:var(--accent)!important}
.v3Shell .btn.light{background:#fff!important}
.v3Shell .btn.green{background:#2F6F58!important}
.v3Shell .btn.red{background:#fff!important}
.topbarSearch input,.requestSearch input,.searchRow input{border:0!important;box-shadow:none!important;background:transparent!important;font-size:14px!important}
.topbarSearch{border-radius:9px!important;background:#fff!important}
.topbarSearch:focus-within{border-color:#B07D22!important;box-shadow:0 0 0 3px rgba(176,125,34,.10)!important}
.topbarSearch input::placeholder,input::placeholder,textarea::placeholder{color:#A79B8B!important}
.materialVariant.selected{box-shadow:0 0 0 2px rgba(176,125,34,.12)!important}
.v3Body .formSheetV3 input:focus,.v3Body .formSheetV3 select:focus,.v3Body .formSheetV3 textarea:focus{border-color:#B07D22!important;box-shadow:0 0 0 3px rgba(176,125,34,.12)!important}
.requestQuickTabs button.active{color:#1A1714!important;border-bottom-color:#B07D22!important}
.requestQuickTabs button span{font-family:var(--mono)!important;font-weight:500!important}
.residentKpiV3:hover,.residentKpiV3.active{border-color:#B07D22!important;box-shadow:none!important}
.v3Stat.active,.v3Stat:hover{border-color:#B07D22!important}

/* ---- v4.1: правки после живой проверки 03.09 ---- */
/* нейтральная плашка приоритета — тёплая, а не голубая */
.requestStatus.gray,.requestPriority.gray{background:#F1ECE4!important;color:#6B6156!important}
/* декоративный «пузырь» в плитках — движение и цвет без смысла, убираем */
.v3Stat.stat:before{display:none!important}
/* график: две серии — графит и золото (синий зарезервирован под «информацию») */
.trendPath.requests{stroke:#221E1A!important}
.trendLegend i.req{background:#221E1A!important}
.trendArea.requests{fill:rgba(34,30,26,.06)!important}
.trendArea.services{fill:rgba(176,125,34,.08)!important}

/* ===== v5 (03.09.2026): ступень 2 — каркас под концепт: KPI-полоски, объявления с предпросмотром жильца ===== */
.kpiStripV5{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 16px}
.kpiV5{position:relative;display:flex;flex-direction:column;gap:4px;align-items:flex-start;text-align:left;padding:14px 16px 13px;border-radius:14px;border:1px solid #E8E3DB;background:#fff;color:#1A1714;cursor:pointer;font:inherit;transition:transform .18s var(--v3-ease,cubic-bezier(.22,.61,.36,1)),box-shadow .18s var(--v3-ease,cubic-bezier(.22,.61,.36,1)),border-color .18s;animation:v4Rise .22s var(--v3-ease,cubic-bezier(.22,.61,.36,1)) both}
.kpiV5:nth-child(2){animation-delay:.05s}.kpiV5:nth-child(3){animation-delay:.1s}.kpiV5:nth-child(4){animation-delay:.15s}
.kpiV5:not(.static):hover{transform:translateY(-2px);box-shadow:0 14px 30px -18px rgba(26,23,20,.28);border-color:#D9D2C7}
.kpiV5.static{cursor:default}
.kpiV5 small{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#8A7F74;font-weight:600}
.kpiV5 b{font-family:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;font-size:28px;line-height:1.05;font-weight:500;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.kpiV5 em{font-style:normal;font-size:12px;color:#A79B8B;line-height:1.35}
.kpiV5.gold b{color:#8A5F13}
.kpiV5.warn b{color:#A63A2B}
.kpiV5.warn:not(.zero){background:#FBF3F1;border-color:#F0D9D4}
.kpiV5.zero b{color:#B8AC9C}
.kpiV5.zero.warn{background:#fff;border-color:#E8E3DB}
.kpiV5.active{border-color:#B07D22;box-shadow:0 0 0 3px rgba(176,125,34,.14)}
.kpiV5.active:after{content:"";position:absolute;left:16px;right:16px;bottom:0;height:2px;border-radius:2px 2px 0 0;background:#B07D22}
@media (max-width:1100px){.kpiStripV5{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:520px){.kpiStripV5{gap:8px}.kpiV5{padding:12px 12px 11px}.kpiV5 b{font-size:24px}.kpiV5 em{display:none}}

/* объявления: две колонки */
.annLayoutV5{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px;align-items:start}
.annSideV5{position:sticky;top:84px;display:flex;flex-direction:column;gap:12px}
.annSideCardV5{padding:16px 16px 18px;border-radius:14px!important;border:1px solid #E8E3DB!important;box-shadow:none!important;background:#fff}
.annSideTitleV5{font-size:16px;font-weight:700;letter-spacing:-.01em;margin:4px 0 12px}
.annPhoneV5{background:#FBFAF8;border:1px solid #E8E3DB;border-radius:16px;padding:12px}
.annPhoneHeadV5{font-size:12px;font-weight:600;color:#8A7F74;letter-spacing:.04em;margin:0 2px 10px}
.annPreviewHostV5{display:flex;flex-direction:column;gap:8px}
.annPreviewHostV5 .annCardV3{background:#221E1A;border-radius:14px;padding:14px;display:flex;gap:12px;align-items:flex-start;animation:v4Rise .22s var(--v3-ease,cubic-bezier(.22,.61,.36,1)) both}
.annPreviewHostV5 .annIcoV3{flex-shrink:0;margin-top:1px}
.annPreviewHostV5 .annTitleV3{font-size:14px;font-weight:600;color:#fff;line-height:1.35}
.annPreviewHostV5 .annMetaV3{font-size:12px;color:#A79B8B;line-height:1.45;margin-top:3px}
.annPreviewHostV5 .annBodyV3{font-size:12px;color:#CFC4B4;line-height:1.5;margin-top:6px;white-space:pre-line;max-height:120px;overflow:hidden}
.annPreviewEmptyV5{font-size:13px;color:#8A7F74;line-height:1.5;padding:14px 12px;border:1px dashed #D9D2C7;border-radius:12px;text-align:center}
.annPreviewMoreV5{font-size:12px;color:#8A7F74;text-align:center;padding:4px 0 0}
.annFlowV5{display:flex;flex-direction:column;gap:0;margin-top:8px}
.annFlowV5>div{display:flex;gap:12px;align-items:flex-start;padding:10px 0;border-bottom:1px solid #F1ECE4}
.annFlowV5>div:last-child{border-bottom:0;padding-bottom:0}
.annFlowV5 i{flex:none;width:9px;height:9px;border-radius:50%;background:#B07D22;margin-top:5px}
.annFlowV5 b{display:block;font-size:13px;font-weight:600;color:#1A1714}
.annFlowV5 span{display:block;font-size:12px;color:#8A7F74;line-height:1.45;margin-top:2px}
/* карточки списка: рейка статуса слева */
.annItemV3{position:relative;padding-left:18px!important;overflow:hidden}
.annItemV3:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:#D9D2C7}
.annItemV3.tone-live:before{background:#B07D22}
.annItemV3.tone-plan:before{background:#221E1A}
.annItemV3.tone-off{opacity:.72}
.annItemV3.tone-off:hover{opacity:1}
/* предпросмотр в форме */
.annFormPreviewV5{margin:6px 0 14px;padding:12px;border-radius:14px;background:#FBFAF8;border:1px solid #E8E3DB}
.annFormPreviewLabelV5{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#8A7F74;font-weight:600;margin:0 2px 8px}
@media (max-width:1100px){.annLayoutV5{grid-template-columns:1fr}.annSideV5{position:static;display:grid;grid-template-columns:1fr 1fr}}
@media (max-width:720px){.annSideV5{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){.kpiV5,.annPreviewHostV5 .annCardV3{animation:none!important;transition:none!important}}
.annFormPreviewV5 .annCardV3{animation:none!important}

/* ===== v6 (04.09.2026): ступень 3 — жильцы: сводка, ожидание, срок хранения скана ===== */
.agingNoticeV6{display:flex;align-items:center;gap:14px;padding:14px 18px;border-radius:14px;background:#FBEFD9;border:1px solid #F0DFBE;margin:0 0 14px;font-size:14px;color:#6B5320;animation:v4Rise .2s var(--v3-ease,cubic-bezier(.22,.61,.36,1)) both}
.agingNoticeV6.hidden{display:none}
.agingNoticeV6 b{display:block;font-size:15px;font-weight:600;color:#3F3117}
.agingNoticeV6 span{display:block;line-height:1.5}
.agingNoticeV6>div{flex:1}
.agingDotV6{flex:none;width:10px;height:10px;border-radius:50%;background:#B07D22;box-shadow:0 0 0 0 rgba(176,125,34,.5);animation:agingPulseV6 2.6s var(--v3-ease,cubic-bezier(.22,.61,.36,1)) infinite}
@keyframes agingPulseV6{0%{box-shadow:0 0 0 0 rgba(176,125,34,.5)}70%{box-shadow:0 0 0 10px rgba(176,125,34,0)}100%{box-shadow:0 0 0 0 rgba(176,125,34,0)}}
.agingNoticeV6 .btn{flex:none}
.waitMetaV6{display:block;font-size:12px;color:#8A7F74;margin-top:4px;font-family:'JetBrains Mono',ui-monospace,monospace}
.waitMetaV6.isStale{color:#A63A2B;font-weight:500}
.retentionNoteV6{margin-top:14px;padding:16px 18px;border-radius:14px;background:#FBFAF8;border:1px solid #E8E3DB}
.retentionHeadV6{display:flex;align-items:baseline;gap:10px;margin-bottom:6px}
.retentionDaysV6{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:18px;font-weight:500;color:#8A5F13;letter-spacing:-.01em}
.retentionHeadV6 b{font-size:14px;font-weight:600;color:#1A1714}
.retentionNoteV6 p{font-size:13px;color:#6B6156;line-height:1.55;margin:0}
#residentsKpi{margin-bottom:14px}
@media (max-width:640px){.agingNoticeV6{flex-wrap:wrap;gap:10px}.agingNoticeV6 .btn{width:100%}}
@media (prefers-reduced-motion:reduce){.agingNoticeV6,.agingDotV6{animation:none!important}}

/* ==== v7: сводка «Сегодня» на обзоре ==== */
.attentionV7{background:#FFFFFF;border:1px solid #E8E3DB;border-radius:18px;padding:20px 22px 14px;margin-bottom:18px;position:relative;overflow:hidden}
.attentionV7.hidden{display:none}
.attentionV7::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:#E1DBD2}
.attentionV7.toneAlert::before{background:#A63A2B}
.attentionV7.toneWarn::before{background:#B07D22}
.attentionV7.toneOk::before{background:#2F6F58}
.attentionHeadV7{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:12px}
.attentionHeadV7 h2{font-size:20px;font-weight:600;color:#1A1714;margin:2px 0 0;letter-spacing:-.01em}
.attentionDateV7{font-size:13px;color:#8A7F74;text-transform:lowercase;white-space:nowrap}
.attentionListV7{display:flex;flex-direction:column}
.attentionRowV7{display:flex;align-items:center;gap:14px;width:100%;text-align:left;background:transparent;border:0;border-top:1px solid #F1ECE4;padding:13px 4px;cursor:pointer;transition:background .16s cubic-bezier(.22,.61,.36,1)}
.attentionRowV7:first-child{border-top:0}
.attentionRowV7:hover{background:#FBFAF8}
.attentionMarkV7{width:8px;height:8px;border-radius:50%;flex:0 0 8px;background:#B8AC9C}
.attentionRowV7.alert .attentionMarkV7{background:#A63A2B;animation:attentionPulseV7 2.4s ease-in-out infinite}
.attentionRowV7.warn .attentionMarkV7{background:#B07D22}
@keyframes attentionPulseV7{0%,100%{box-shadow:0 0 0 0 rgba(166,58,43,.32)}50%{box-shadow:0 0 0 6px rgba(166,58,43,0)}}
.attentionNumV7{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:26px;font-weight:500;line-height:1;color:#2C2722;min-width:44px;letter-spacing:-.02em}
.attentionRowV7.alert .attentionNumV7{color:#A63A2B}
.attentionTextV7{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.attentionTextV7 b{font-size:14.5px;font-weight:500;color:#1A1714}
.attentionTextV7 small{font-size:12.5px;color:#8A7F74}
.attentionGoV7{font-size:13px;color:#8A5F13;white-space:nowrap;display:flex;align-items:center;gap:5px;opacity:.85;transition:opacity .16s,transform .16s cubic-bezier(.22,.61,.36,1)}
.attentionGoV7 i{font-style:normal;font-size:16px}
.attentionRowV7:hover .attentionGoV7{opacity:1;transform:translateX(2px)}
.attentionOkV7{display:flex;align-items:center;gap:14px;padding:6px 4px 14px}
.attentionOkV7>span{width:34px;height:34px;border-radius:50%;background:#E9F0EC;color:#2F6F58;display:flex;align-items:center;justify-content:center;font-size:16px;flex:0 0 34px}
.attentionOkV7 b{display:block;font-size:14.5px;font-weight:500;color:#1A1714}
.attentionOkV7 small{font-size:12.5px;color:#6B6156}
.waitMetaV6.atResident{color:#8A7F74}
@media (max-width:640px){
  .attentionV7{padding:18px 16px 10px;border-radius:16px}
  .attentionHeadV7{align-items:flex-start;flex-direction:column;gap:2px}
  .attentionRowV7{gap:10px;padding:12px 2px;flex-wrap:wrap}
  .attentionNumV7{font-size:22px;min-width:36px}
  .attentionTextV7{flex:1 1 60%}
  .attentionGoV7{flex:0 0 auto;margin-left:auto}
}
@media (prefers-reduced-motion:reduce){.attentionRowV7 .attentionMarkV7{animation:none!important}.attentionGoV7{transition:none!important}}
.attentionMoreV7{font-size:12.5px;color:#8A7F74;padding:10px 4px 4px;border-top:1px solid #F1ECE4}

/* ==== v8: нагрузка исполнителей, сводка проверок ==== */
.loadV8{display:inline-flex;flex-direction:column;gap:1px;line-height:1.25}
.loadV8 b{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:14px;font-weight:500;color:#2C2722}
.loadV8.isOverdue b{color:#A63A2B}
.loadV8 small{font-size:11.5px;color:#A63A2B}
.loadFreeV8{font-size:12.5px;color:#2F6F58;background:#E9F0EC;border-radius:20px;padding:3px 10px;display:inline-block}
.loadMutedV8{color:#B8AC9C}
#checksKpi{margin-bottom:16px}
#checksKpi .kpiV5{cursor:default}
@media (min-width:1180px){.equipmentSummaryV3{grid-template-columns:repeat(5,minmax(0,1fr))}}

/* ==== v9: кабинет жильца — актуальные объявления и ход работы ==== */
.annNowV9{display:inline-block;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#C79337;margin-bottom:5px;font-weight:600}
.annSoonV9{background:#FFFFFF;border:1px solid #E8E3DB;border-radius:14px;padding:13px 16px;margin-top:10px}
.annSoonV9 b{display:block;font-size:13px;font-weight:600;color:#1A1714;margin-bottom:7px}
.annSoonV9 span{display:flex;align-items:center;gap:9px;font-size:13px;color:#6B6156;padding:3px 0;line-height:1.4}
.annSoonV9 span i{width:6px;height:6px;border-radius:50%;background:#B07D22;flex:0 0 6px}
.reqProgressV9{display:flex;align-items:flex-start;gap:2px;margin:14px 0 4px}
.reqProgressV9.isCancelled{display:block;font-size:12.5px;color:#A63A2B;background:#F6E7E4;border-radius:10px;padding:8px 12px;margin:12px 0 4px}
.reqStepV9{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:6px;position:relative}
.reqStepV9 i{width:9px;height:9px;border-radius:50%;background:#E1DBD2;position:relative;z-index:1;transition:background .2s cubic-bezier(.22,.61,.36,1)}
.reqStepV9::before{content:'';position:absolute;top:4px;left:-50%;width:100%;height:1px;background:#E8E3DB}
.reqStepV9:first-child::before{display:none}
.reqStepV9 small{font-size:10.5px;color:#A79B8B;text-align:center;line-height:1.25;letter-spacing:.01em}
.reqStepV9.isDone i{background:#B07D22}
.reqStepV9.isDone::before{background:#DCC49A}
.reqStepV9.isDone small{color:#8A7F74}
.reqStepV9.isNow i{background:#B07D22;box-shadow:0 0 0 4px rgba(176,125,34,.16)}
.reqStepV9.isNow small{color:#8A5F13;font-weight:600}
@media (prefers-reduced-motion:reduce){.reqStepV9 i{transition:none!important}}

/* ==== v10: аналитика на обзоре ==== */
.analyticsV10{padding:22px 24px;margin-bottom:18px}
.analyticsHeadV10{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.analyticsHeadV10 h2{font-size:20px;font-weight:600;color:#1A1714;margin:2px 0 0;letter-spacing:-.01em}
.analyticsPeriodV10{display:inline-flex;background:#F1ECE4;border-radius:10px;padding:3px;gap:2px}
.analyticsPeriodV10 button{appearance:none;border:0;background:transparent;font:inherit;font-size:13px;color:#6B6156;padding:6px 14px;border-radius:8px;cursor:pointer;transition:background .16s cubic-bezier(.22,.61,.36,1),color .16s}
.analyticsPeriodV10 button:hover{color:#2C2722}
.analyticsPeriodV10 button.active{background:#2C2722;color:#fff}
.analyticsKpiV10{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;background:#E8E3DB;border:1px solid #E8E3DB;border-radius:14px;overflow:hidden;margin-bottom:18px}
.analyticsKpiV10>div{background:#fff;padding:14px 16px}
.analyticsKpiV10 small{display:block;font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:#8A7F74;margin-bottom:6px}
.analyticsKpiV10 b{display:block;font-family:'JetBrains Mono',ui-monospace,monospace;font-size:26px;font-weight:500;color:#1A1714;line-height:1.05;letter-spacing:-.02em}
.analyticsKpiV10 em{display:block;font-style:normal;font-size:12px;color:#8A7F74;margin-top:5px}
.analyticsKpiV10 .isAlert b{color:#A63A2B}
.analyticsKpiV10 .isAlert em{color:#A63A2B}
.analyticsChartsV10{display:grid;grid-template-columns:1.35fr 1fr;gap:18px;margin-bottom:18px}
.analyticsBlockV10{border:1px solid #E8E3DB;border-radius:14px;padding:16px 18px;background:#FBFAF8}
.analyticsBlockHeadV10{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.analyticsBlockHeadV10 b{font-size:14px;font-weight:600;color:#1A1714}
.analyticsLegendV10{display:flex;align-items:center;gap:6px;font-size:12px;color:#8A7F74}
.analyticsLegendV10 i{width:8px;height:8px;border-radius:2px;display:inline-block;margin-left:6px}
.analyticsLegendV10 i.ok{background:#B07D22}
.analyticsLegendV10 i.bad{background:#A63A2B}
.analyticsHintV10{font-size:12px;color:#8A7F74}
.analyticsBarsV10{display:flex;align-items:flex-end;gap:10px;height:170px}
.barColV10{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:6px;height:100%}
.barValV10{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:12px;color:#6B6156;min-height:14px}
.barStackV10{width:100%;max-width:46px;background:#B07D22;border-radius:5px 5px 0 0;position:relative;display:block;min-height:2px;transition:height .28s cubic-bezier(.22,.61,.36,1)}
.barLateV10{position:absolute;left:0;right:0;top:0;background:#A63A2B;border-radius:5px 5px 0 0;display:block}
.barColV10 small{font-size:11px;color:#8A7F74;white-space:nowrap}
.analyticsHousesV10{display:flex;flex-direction:column;gap:11px}
.houseRowV10{display:grid;grid-template-columns:minmax(0,1fr) 96px 28px;align-items:center;gap:10px}
.houseNameV10{font-size:13px;color:#3B342C;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.houseBarV10{height:7px;background:#F1ECE4;border-radius:4px;overflow:hidden}
.houseBarV10 i{display:block;height:100%;background:#B07D22;border-radius:4px;transition:width .28s cubic-bezier(.22,.61,.36,1)}
.houseRowV10 b{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:13px;color:#2C2722;text-align:right}
.loadTableV10{width:100%;border-collapse:collapse}
.loadTableV10 th{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#8A7F74;text-align:left;font-weight:500;padding:0 10px 9px 0}
.loadTableV10 td{padding:9px 10px 9px 0;border-top:1px solid #E8E3DB;font-size:13.5px;color:#2C2722}
.loadTableV10 td b{font-weight:500}
.loadTableV10 .numV10{font-family:'JetBrains Mono',ui-monospace,monospace}
.loadTableV10 .numV10.isLate{color:#A63A2B}
.loadBarV10{display:block;height:7px;background:#F1ECE4;border-radius:4px;overflow:hidden;min-width:80px}
.loadBarV10 i{display:block;height:100%;background:#B07D22;border-radius:4px}
@media (max-width:1100px){.analyticsChartsV10{grid-template-columns:1fr}.analyticsKpiV10{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){
  .analyticsV10{padding:18px 16px}
  .analyticsKpiV10{grid-template-columns:1fr}
  .analyticsBarsV10{height:140px;gap:6px}
  .barColV10 small{font-size:10px}
  .loadTableV10 thead{display:none}
  .loadTableV10 tr{display:grid;grid-template-columns:1fr auto;gap:2px 10px;border-top:1px solid #E8E3DB;padding:10px 0}
  .loadTableV10 td{border:0;padding:0}
  .loadTableV10 td:nth-child(2){color:#8A7F74;font-size:12px}
  .loadTableV10 td:nth-child(6){grid-column:1/-1;margin-top:6px}
}
@media (prefers-reduced-motion:reduce){.barStackV10,.houseBarV10 i{transition:none!important}}

/* ==== v11: календарь регламентов ==== */
.checkCalWrapV11{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:18px;margin-bottom:20px}
.checkCalV11{background:#fff;border:1px solid #E8E3DB;border-radius:16px;padding:18px 20px}
.checkCalHeadV11{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px}
.checkCalHeadV11>b{font-size:15px;font-weight:600;color:#1A1714}
.checkCalNavV11{display:flex;align-items:center;gap:6px}
.checkCalNavV11 span{font-size:13.5px;color:#3B342C;min-width:130px;text-align:center;text-transform:capitalize}
.checkCalNavV11 button{appearance:none;border:1px solid #E8E3DB;background:#fff;width:28px;height:28px;border-radius:8px;color:#6B6156;cursor:pointer;font-size:15px;line-height:1;transition:background .16s cubic-bezier(.22,.61,.36,1)}
.checkCalNavV11 button:hover{background:#F1ECE4}
.checkCalGridV11{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:1px;background:#EDE8E0;border:1px solid #EDE8E0;border-radius:12px;overflow:hidden}
.calHeadRowV11{grid-column:1/-1;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:1px;background:#EDE8E0}
.calHeadRowV11 span{background:#FBFAF8;padding:8px 10px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#8A7F74}
.calCellV11{background:#fff;min-height:88px;padding:7px 8px;display:flex;flex-direction:column;gap:4px}
.calCellV11.isOther{background:#FBFAF8}
.calCellV11.isOther .calDayV11{color:#C3B9AB}
.calDayV11{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:12px;color:#6B6156;line-height:1.4}
.calCellV11.isToday .calDayV11{background:#B07D22;color:#fff;border-radius:50%;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;font-size:11px}
.calChipV11{appearance:none;border:0;text-align:left;width:100%;background:#FBEFD9;border-left:2px solid #B07D22;border-radius:5px;padding:4px 6px;cursor:pointer;display:block;transition:background .16s cubic-bezier(.22,.61,.36,1)}
.calChipV11:hover{background:#F6E5C4}
.calChipV11 b{display:block;font-size:11px;font-weight:500;color:#3B342C;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.calChipV11 small{display:block;font-size:10px;color:#8A7F74;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.calChipV11.isOverdue{background:#F6E7E4;border-left-color:#A63A2B}
.calChipV11.isOverdue:hover{background:#F0D9D4}
.calChipV11.isToday{background:#E9F0EC;border-left-color:#2F6F58}
.calMoreV11{font-size:10.5px;color:#8A7F74;padding-left:2px}
.checkCalSideV11{display:flex;flex-direction:column;gap:14px}
.checkSoonV11{background:#fff;border:1px solid #E8E3DB;border-radius:16px;padding:16px 18px}
.checkSoonHeadV11{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:10px}
.checkSoonHeadV11 b{font-size:14px;font-weight:600;color:#1A1714}
.checkSoonHeadV11 span{font-size:12px;color:#8A7F74}
.soonRowV11{appearance:none;border:0;background:transparent;width:100%;text-align:left;display:flex;gap:12px;padding:10px 2px;border-top:1px solid #F1ECE4;cursor:pointer;transition:background .16s cubic-bezier(.22,.61,.36,1)}
.soonRowV11:first-of-type{border-top:0}
.soonRowV11:hover{background:#FBFAF8}
.soonDateV11{display:flex;flex-direction:column;align-items:center;min-width:32px}
.soonDateV11 b{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:17px;font-weight:500;color:#2C2722;line-height:1}
.soonDateV11 small{font-size:9.5px;letter-spacing:.06em;color:#A79B8B}
.soonBodyV11{min-width:0}
.soonBodyV11 b{display:block;font-size:13px;font-weight:500;color:#1A1714;line-height:1.3}
.soonBodyV11 small{display:block;font-size:11.5px;color:#8A7F74;margin-top:2px;overflow:hidden;text-overflow:ellipsis}
.soonNowV11{display:inline-block;font-style:normal;font-size:11px;color:#8A5F13;background:#FBEFD9;border-radius:20px;padding:2px 8px;margin-top:5px}
.checkOverdueV11 b{display:block;font-size:13.5px;font-weight:600;margin-bottom:4px}
.checkOverdueV11 span{font-size:12.5px;line-height:1.5;display:block}
.checkOverdueOkV11{background:#E9F0EC;border-radius:14px;padding:14px 16px;color:#2F6F58}
.checkOverdueOkV11 span{color:#3B6B58}
.checkOverdueBadV11{background:#F6E7E4;border-radius:14px;padding:14px 16px;color:#A63A2B}
.checkOverdueBadV11 span{color:#8B4034}
@media (max-width:1100px){.checkCalWrapV11{grid-template-columns:1fr}}
@media (max-width:640px){
  .checkCalV11{padding:14px 12px}
  .calCellV11{min-height:62px;padding:5px 4px}
  .calChipV11 small{display:none}
  .calHeadRowV11 span{padding:6px 4px;font-size:10px}
  .checkCalNavV11 span{min-width:100px;font-size:12.5px}
}

/* ==== v12: заявка и проверка жильца — боковая панель ==== */
@media (min-width:1200px){
  #requestModal.open,#residentVerificationModal.open{
    background:transparent!important;backdrop-filter:none!important;
    justify-content:flex-end;align-items:stretch;padding:0;pointer-events:none
  }
  #requestModal.open .sheet,#residentVerificationModal.open .sheet{
    pointer-events:auto;width:min(580px,44vw)!important;max-width:none;
    height:100vh;max-height:100vh;border-radius:20px 0 0 20px;margin:0;
    box-shadow:-26px 0 64px rgba(26,23,20,.16);
    animation:sidePanelInV12 .24s var(--v3-ease)
  }
  body.sidePanelV12 .topbar{padding-right:22px}
  @keyframes sidePanelInV12{from{transform:translateX(26px);opacity:.4}to{transform:none;opacity:1}}
}
@media (prefers-reduced-motion:reduce){
  #requestModal.open .sheet,#residentVerificationModal.open .sheet{animation:none!important}
}
@media (min-width:1200px){
  body.sidePanelV12 .topbarSearch{display:none}
  body.sidePanelV12 .topbarHeading small{display:none}
  #requestModal.open .requestDetailGridV3{grid-template-columns:1fr!important}
  #requestModal.open .requestDetailAsideV3{position:static;grid-row:1;grid-template-columns:1fr}
  #requestModal.open .requestInfoMetaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  #requestModal.open .requestMediaV3 .thumbGrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  #requestModal.open .requestOwnerV3 .ownerRowActions{grid-template-columns:1fr}
  #requestModal.open .requestSheetV3.sheet,#residentVerificationModal.open .sheet{padding:0}
  #requestModal.open .requestDetailV3{padding:0 18px 26px}
  #residentVerificationModal.open .sheet .fields,#residentVerificationModal.open .sheet .kv{grid-template-columns:1fr}
  #residentVerificationModal.open .sheet{overflow:auto;padding:20px}
  #requestModal.open .requestDetailTabsV3{margin:0 -18px 14px;padding:0 18px}
}

/* ==== v13: регистрация жильца — чипы статуса и пояснения ==== */
.ownChipsV13{display:flex;flex-wrap:wrap;gap:8px;margin-top:2px}
.ownChipsV13 button{appearance:none;border:1px solid #E1DBD2;background:#fff;color:#4A423B;font:inherit;font-size:14px;padding:9px 16px;border-radius:11px;cursor:pointer;transition:background .16s cubic-bezier(.22,.61,.36,1),border-color .16s,color .16s}
.ownChipsV13 button:hover{border-color:#B8AC9C;background:#FBFAF8}
.ownChipsV13 button.active{background:#2C2722;border-color:#2C2722;color:#fff}
.regNoteV13{display:block;margin:16px 0 18px;padding:14px 16px;border-radius:14px;background:#FBFAF8;border:1px solid #E8E3DB}
.regNoteV13 b{display:block;font-size:14px;font-weight:600;color:#1A1714;margin-bottom:5px}
.regNoteV13 span{display:block;font-size:13px;line-height:1.55;color:#6B6156}
.regFootV13{margin:14px 2px 0;font-size:12.5px;line-height:1.55;color:#8A7F74}
.registerStepsV3 span.active{color:#8A5F13;font-weight:600}
.residencyV13{display:inline-block;font-style:normal;font-size:11px;color:#6B6156;background:#F1ECE4;border-radius:20px;padding:2px 9px;margin-top:5px}
.planNoteV13{margin-top:12px;padding:13px 15px;border-radius:13px;background:#FBFAF8;border:1px solid #E8E3DB}
.planNoteV13 b{display:block;font-size:12.5px;font-weight:600;color:#1A1714;margin-bottom:4px}
.planNoteV13 span{display:block;font-size:12.5px;line-height:1.55;color:#6B6156}

/* ==========================================================
   v14 (3.0.0-RC6.15) — кабинет на телефоне и на десктопе:
   шапка заявки, нагрузка исполнителей, активность по объектам,
   шапка кабинета, safe-area в PWA.
   ========================================================== */

/* --- 1. Карточка заявки: шапка растёт под заголовок, вкладки идут за ней ---
   Высоту шапки меряет syncRequestHeadMetrics() и кладёт в --reqHeadH, поэтому
   sticky-вкладки больше не привязаны к зашитым 69/64/63 px. */
.requestSheetV3.sheet{--reqHeadH:69px;--reqTabsH:38px}
.requestSheetHeadV3{z-index:30}
.requestSheetHeadV3 h2{white-space:normal;overflow-wrap:anywhere;word-break:normal}
.requestDetailTabsV3{top:calc(var(--reqHeadH) - var(--reqSheetPadT) - 1px)!important;z-index:12}
.requestSectionV3{scroll-margin-top:calc(var(--reqHeadH) + var(--reqTabsH) + 14px)}
.requestDetailAsideV3{top:calc(var(--reqHeadH) + var(--reqTabsH) + 12px)}
.requestInfoV3.card{scroll-margin-top:calc(var(--reqHeadH) + var(--reqTabsH) + 14px)}

/* Полный заголовок в начале «Информации» — нужен там, где в шапке он обрезан. */
.requestFullTitleV14{display:none}

/* Состояния загрузки карточки: спиннер с подписью и явная ошибка с повтором. */
.requestLoadingV14{display:flex;align-items:center;gap:12px;padding:34px 4px;color:#6B6156}
.requestLoadingV14 b{font-size:13px;font-weight:600;color:#4A423B}
.requestLoadErrorV14{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  margin:22px 0;padding:16px 18px;border:1px solid #E2B3AB;border-radius:14px;background:#F6E7E4}
.requestLoadErrorV14 b{display:block;font-size:13px;font-weight:600;color:#A63A2B}
.requestLoadErrorV14 small{display:block;margin-top:4px;font-size:12px;line-height:1.45;color:#8A4133}
.thumbGridLoadingV14{pointer-events:none}
.thumbSkelV14{display:block;height:94px;border-radius:12px;
  background:linear-gradient(90deg,#F1ECE4,#FBFAF8,#F1ECE4);background-size:220% 100%;animation:shimmer 1.3s infinite}

@media(max-width:820px){
  /* На телефоне шапка не может занимать пол-экрана: заголовок — две строки с
     многоточием, полный текст показан первым блоком во вкладке «Информация». */
  .requestSheetHeadV3 h2{
    font-size:15px;line-height:1.3;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden
  }
  .requestFullTitleV14{
    display:block;margin:12px 0 0;padding:11px 12px;border-radius:12px;
    background:#FBFAF8;border:1px solid #E8E3DB;
    font-size:12.5px;line-height:1.45;font-weight:600;color:#1A1714;overflow-wrap:anywhere
  }
  /* iOS: backdrop-filter на липкой полосе вкладок даёт артефакты наложения —
     здесь достаточно плотного фона. */
  .requestDetailTabsV3{background:#FBFAF8;backdrop-filter:none}
  .requestSheetHeadV3{background:#fff;backdrop-filter:none}
  .thumbSkelV14{height:112px}
}

/* --- 2. «Нагрузка исполнителей»: на узком экране карточки вместо таблицы ---
   Глобальное правило table{min-width:760px} распространялось и на эту таблицу:
   ниже 760 px она распирала страницу и давала горизонтальную прокрутку. */
.loadTableV10{min-width:0}
.loadCardsV14{display:none}
@media(max-width:820px){
  .loadTableV10{display:none}
  .loadCardsV14{display:grid;gap:0}
  .loadCardV14{padding:12px 0;border-top:1px solid #E8E3DB;min-width:0}
  .loadCardV14:first-child{border-top:0;padding-top:2px}
  .loadCardHeadV14{display:flex;align-items:baseline;justify-content:space-between;gap:10px;min-width:0}
  .loadCardHeadV14 b{font-size:14px;font-weight:600;color:#1A1714;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .loadCardHeadV14 span{flex:0 1 auto;font-size:12px;color:#8A7F74;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .loadCardMetaV14{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:5px;font-size:12.5px;color:#6B6156}
  .loadCardMetaV14 i{font-style:normal;color:#C9C1B6}
  .loadCardMetaV14 .isLate{color:#A63A2B}
  .loadCardV14 .loadBarV10{margin-top:9px;min-width:0;width:100%}
  .analyticsBlockV10{min-width:0;overflow:hidden}
  .analyticsLoadV10{min-width:0;overflow:hidden}
}

/* --- 3. «Активность по объектам»: число остаётся в экране --- */
.dashObjectRow{overflow:hidden}
.dashObjectMetric{min-width:0}
.dashObjectMetric b,.dashObjectMetric small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:480px){
  .dashObjectRow{grid-template-columns:30px minmax(0,1fr) auto 10px;gap:8px}
  .dashObjectMetric small{font-size:7.5px}
  .dashChevron{justify-self:end}
}

/* --- 3b. Открытая модалка выше шапки кабинета ---
   На узком экране .v3Topbar получает z-index:210 (хардненинг тач-зоны
   колокольчика в RC4.4), а .modal живёт на z-index:60. Из-за этого шапка
   кабинета закрашивала верх полноэкранной карточки заявки: «Заявка #NN» и
   первые строки заголовка уходили под неё, а полоса вкладок оказывалась
   вплотную к обрезанному заголовку. Пока открыта модалка — шапка ниже неё. */
@media(max-width:820px){
  body.modalOpen .v3Topbar,body.modalOpen .residentTopbarV3{z-index:5}
}

/* --- 4. Safe-area сверху: в PWA шапка не уезжает под статус-бар --- */
@media(max-width:820px){
  .v3Topbar.topbar,.residentTopbarV3.topbar,.topbar{
    padding-top:env(safe-area-inset-top);
    height:calc(64px + env(safe-area-inset-top))!important;
    box-sizing:border-box
  }
  .mobileAccountMenu{top:calc(62px + env(safe-area-inset-top))}
  /* Полноэкранные модалки тоже начинаются ниже статус-бара. */
  .requestSheetV3.sheet,.residentDetailSheetV3.sheet{height:100dvh;max-height:100dvh}
  .requestSheetHeadV3{padding-top:calc(15px + env(safe-area-inset-top))}
}

/* --- 5. Шапка кабинета на узком экране: только колокольчик и аватар ---
   «Пароль» и «Выйти» переехали в меню аватара (UK.mountMobileAccountMenu). */
@media(max-width:820px){
  .userBox>.btn,.userBox>.btn.logoutBtn,.userBox>.btn.passwordBtn{display:none!important}
  .userBox>.btn:after{content:none!important}
  .userBox{gap:8px;flex:0 0 auto;min-width:0}
  .v3Topbar .avatar,.residentTopbarV3 .avatar{cursor:pointer}
}
.mobileAccountPasswordBtn{color:#4A423B!important}
.mobileAccountPasswordBtn:hover,.mobileAccountPasswordBtn:focus-visible{background:#E9F0EC!important;color:#2F6F58!important}

@media (prefers-reduced-motion:reduce){.thumbSkelV14{animation:none!important}}

/* ==========================================================
   v15 (3.0.0-RC6.16) — вторая партия правок кабинета:
   липкий блок карточки заявки, вкладки услуг, чекбоксы прайса,
   внутренние отступы шапки карточки на десктопе, аватар в шапке.
   ========================================================== */

/* --- 6. Карточка заявки: шапка и вкладки — один непрерывный липкий блок ---
   Липкие смещения внутри .requestSheetV3 считаются от content-box листа, а на
   телефоне у листа есть собственный padding-top:17px (.modal>.sheet.wide).
   Шапка это учитывала (top:-17px), а вкладки — нет: они прилипали на 17 px
   ниже низа шапки, и в эту щель было видно проходящий контент («Отправить»).
   Теперь вкладки встают ровно на низ шапки: из высоты шапки вычитается
   padding-top листа, плюс 1 px перекрытия на дробные высоты. Шапка выше по
   z-index (30 против 12), поэтому перекрытие уходит под неё, а не наружу. */
.requestSheetV3.sheet{--reqSheetPadT:0px}
@media(max-width:820px){
  .requestModalV3>.requestSheetV3.sheet{--reqSheetPadT:17px}
}
/* Полоса вкладок непрозрачна на всех ширинах: сквозь неё ничего не просвечивает.
   Боковые 14 px паддинга листа закрываются тем же фоном, без сдвига раскладки. */
.requestDetailTabsV3{
  background:#FBFAF8!important;backdrop-filter:none!important;
  box-shadow:-22px 0 0 #FBFAF8,22px 0 0 #FBFAF8
}

/* --- 7. Вкладки «Заказы / Прайс допуслуг» — как везде в кабинете ---
   .serviceTabsV3 переопределял только цвет текста и нижнюю границу, а фон,
   радиус и рамку активной кнопки продолжал задавать пилюльный .serviceTabs
   (.serviceTabs button.active специфичнее, чем .serviceTabsV3 button).
   Получалась чёрная пилюля с золотой чертой и зелёным текстом. Набор вкладок
   приведён к тому же виду, что .requestQuickTabs и .requestDetailTabsV3:
   обычный текст, подчёркивание у активной. */
.serviceTabs.serviceTabsV3{
  display:flex;align-items:center;gap:5px;
  margin:0 0 12px;padding:0 2px;
  border-bottom:1px solid #E8E3DB
}
.serviceTabs.serviceTabsV3 button,
.serviceTabs.serviceTabsV3 button.active{
  position:relative;
  border:0;border-radius:0;
  background:transparent;
  padding:10px 11px 12px;
  color:#6B6156;font-size:10px;font-weight:750;
  cursor:pointer
}
.serviceTabs.serviceTabsV3 button:after{
  content:"";position:absolute;left:10px;right:10px;bottom:-1px;
  height:2px;border-radius:4px;background:transparent
}
.serviceTabs.serviceTabsV3 button:hover{color:#2F6F58}
.serviceTabs.serviceTabsV3 button.active{color:#1A1714}
/* Подчёркивание того же цвета, что у активной вкладки в списке заявок. */
.serviceTabs.serviceTabsV3 button.active:after{background:#2F6F58}

/* --- 8. Чекбоксы: нормальный размер, подпись справа, одна строка ---
   label.check лежит в .field, а .field input задаёт width:100% и padding:12px
   (на телефоне ещё min-height:48px) — чекбокс раздувался в квадрат ~60×60,
   а подпись сваливалась на строку под ним. Приводим .check к тому же виду,
   что .checkLine у «Зафиксировать как финальные затраты». */
.check{
  display:flex;align-items:center;gap:9px;
  min-width:0;font-weight:700;font-size:12px;line-height:1.35;cursor:pointer
}
.field .check input[type=checkbox],
.check input[type=checkbox]{
  width:18px!important;min-width:18px;height:18px!important;min-height:18px!important;
  flex:0 0 18px;margin:0;padding:0!important;border-radius:5px!important;
  accent-color:#2F6F58
}
/* Список объектов в «Новой услуге» — по одному объекту на строку, вся строка
   нажимается: раньше это была двухколоночная сетка с гигантскими квадратами. */
.checkListV15{display:grid;gap:0}
.checkListV15 .check{
  padding:11px 2px;border-top:1px solid #E8E3DB;
  font-weight:600;touch-action:manipulation
}
.checkListV15 .check:first-child{border-top:0}
.checkListV15 .check:hover{color:#2F6F58}
@media(max-width:820px){
  .checkListV15 .check{min-height:44px;font-size:14px}
}

/* --- 9. Десктоп: у шапки карточки заявки есть внутренние отступы ---
   .v3Body .sheetHead тянет margin:-22px -22px 18px, чтобы погасить padding
   листа. У .requestSheetV3 своего padding нет (padding:0), поэтому в боковой
   панели шапка выезжала за лист на 22 px с каждой стороны: «ЗАЯВКА #50» и
   заголовок прижимались к левому краю, «×» — в правый угол. Гасим вылет и
   выдаём шапке тот же внутренний отступ, что у тела карточки ниже (18 px). */
@media (min-width:1200px){
  #requestModal.open .requestSheetHeadV3{
    margin:0 0 14px!important;
    padding:18px 18px 14px!important
  }
  #requestModal.open .requestSheetHeadV3 h2{margin:3px 0 0}
}
/* Та же правка для обычной центрированной модалки (821–1199 px). */
@media (min-width:821px) and (max-width:1199px){
  .requestModalV3>.requestSheetV3>.requestSheetHeadV3{
    margin:0 0 14px!important;
    padding:18px 22px 14px!important
  }
}

/* --- 10. Аватар в шапке — круг, который нельзя сплющить ---
   .userBox — флекс-контейнер; у .avatar был только width, без flex-basis и с
   flex-shrink:1. Длинное имя владельца плюс кнопки «Пароль»/«Выйти» сжимали
   круг в узкий овал. Фиксируем размер по обеим осям. */
/* Размер круга не меняется — 36 px, как и было на всех ширинах: правка только
   запрещает флексу его сжимать. */
.v3Topbar .avatar,.residentTopbarV3 .avatar{
  flex:0 0 36px;
  width:36px;min-width:36px;max-width:36px;
  height:36px;min-height:36px;max-height:36px;
  aspect-ratio:1/1;border-radius:50%;
  box-sizing:border-box;padding:0;overflow:hidden;
  display:grid;place-items:center
}
/* Любой другой аватар в .userBox тоже не сплющивается, размер не переопределяем. */
.userBox .avatar{flex-shrink:0;flex-grow:0;aspect-ratio:1/1;border-radius:50%}
/* Место под аватар отнимается у имени и роли, а не у круга. */
.v3Topbar .userIdentity,.residentTopbarV3 .userIdentity{min-width:0;flex:0 1 auto}
.v3Topbar .userIdentity b,.residentTopbarV3 .userIdentity b,
.v3Topbar .userIdentity .muted,.residentTopbarV3 .userIdentity .muted{
  display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}

/* ==========================================================
   v16 (3.0.0-RC6.17) — панель «Разовая проверка регистрации»:
   панель не шире экрана, сетка сворачивается в одну колонку,
   шапка с тем же внутренним отступом, что у карточки заявки.
   ========================================================== */

/* --- 11. Панель проверки регистрации не вылезает за экран ---
   .verificationGrid задавал колонки как minmax(330px,.9fr) minmax(420px,1.35fr),
   то есть жёсткий минимум 330+420+16 = 766 px. Сворачивалась сетка по
   @media(max-width:900px) — по ширине ОКНА, а не панели. В боковой панели
   (min-width:1200px) окно широкое, медиазапрос не срабатывал, а панели
   достаётся всего 523–540 px под контент. Плюс правило боковой панели снимало
   ограничение шириной экрана (max-width:none).
   Итог: содержимое распирало лист на 766 px, лист получал горизонтальную
   прокрутку, и когда браузер подтягивал в видимую область просмотр документа
   (openResidentVerification сразу открывает первый документ), лист уезжал
   вправо на ~200 px. Слева обрезались надзаголовок, ФИО и сетка данных —
   «…ЗАЯ ПРОВЕРКА РЕГИСТРАЦИИ», «…й Жилец Тестович», «…ЫЛЬЦА».

   Лечим причину: колонки умеют сжиматься, сетка сворачивается по ширине
   САМОЙ панели, а не окна. */
.verificationGrid{grid-template-columns:minmax(0,.9fr) minmax(0,1.35fr)}
.verificationSheet{container-type:inline-size}
@container (max-width:820px){
  .verificationGrid{grid-template-columns:1fr}
  .verificationViewer{min-height:420px;height:55vh}
  .verificationSecurityNote{display:block}
  .verificationSecurityNote span{display:block;text-align:left;margin-top:4px}
}
@container (max-width:560px){
  .verificationData,.verificationChecklist{grid-template-columns:1fr}
  .verificationViewer{min-height:340px;height:48vh}
  .verificationDecisionBar .btn{width:100%;justify-content:center}
}

/* Панель никогда не прокручивается вбок: на телефоне шапка по-прежнему
   выходит на 8 px за лист старым margin:-22px при padding листа 14px —
   отступы не трогаем (это вёрстка из партии 1), но увести панель вбок
   этим 8 px больше нельзя. */
#residentVerificationModal .sheet,#residentVerificationModal.open .sheet{overflow-x:hidden}

@media (min-width:1200px){
  /* Лист панели: не шире отведённого места и не уже нуля. 100% (не 100vw) —
     чтобы не прибавлять ширину полосы прокрутки. */
  #residentVerificationModal.open .sheet{
    max-width:min(100%,100vw)!important;min-width:0!important
  }
  /* Фолбэк на случай, если @container не поддержан: в боковой панели
     две колонки не поместятся никогда. */
  #residentVerificationModal.open .verificationGrid{grid-template-columns:1fr}
  #residentVerificationModal.open .verificationViewer{min-height:420px;height:55vh}
  #residentVerificationModal.open .verificationSecurityNote{display:block}
  #residentVerificationModal.open .verificationSecurityNote span{display:block;text-align:left;margin-top:4px}
  /* Шапка панели — тот же внутренний отступ, что у тела (20 px), и она не
     вылезает за лист: .v3Body .sheetHead гасит padding:22px, а у листа здесь
     padding:20px, из-за чего шапка торчала на 2 px с каждой стороны. */
  #residentVerificationModal.open .sheetHead{
    margin:-20px -20px 16px!important;
    padding:18px 20px 14px!important
  }
  #residentVerificationModal.open .sheetHead h2{margin:3px 0 0}
  #residentVerificationModal.open .verificationSheet .sheetHead>div{min-width:0}
  #residentVerificationModal.open .verificationSheet .sheetHead h2,
  #residentVerificationModal.open .verificationSheet .sheetHead .eyebrow,
  #residentVerificationModal.open .verificationSheet .sheetHead .muted{overflow-wrap:anywhere}
}

/* ==========================================================
   v17 (3.0.0-RC6.18) — партия 4: своя модалка подтверждения,
   ширина правой колонки карточки заявки жильца и липкие шапки
   на телефоне.
   ========================================================== */

/* --- 12. Подтверждение действия вместо window.confirm() ---
   Нативный confirm() блокирует поток, не стилизуется и в PWA показывает
   адрес сервиса. Разметку собирает UK.confirm() (app.js), здесь только вид:
   те же скругления, шрифты и кнопки, что у остальных модалок кабинета. */
.ukConfirmLayer{position:fixed;inset:0;z-index:1200;display:none}
.ukConfirmLayer.open{display:grid;place-items:center;padding:18px}
.ukConfirmBackdrop{position:absolute;inset:0;background:rgba(10,22,37,.48);backdrop-filter:blur(6px)}
.ukConfirmSheet{
  position:relative;z-index:1;width:min(420px,100%);box-sizing:border-box;
  padding:22px;border:1px solid rgba(222,228,235,.95);border-radius:18px;
  background:#fff;box-shadow:0 30px 90px rgba(26,23,20,.22);
  text-align:left;min-width:0
}
.ukConfirmSheet h2{
  margin:0;font-size:18px;line-height:1.2;letter-spacing:-.035em;color:#1A1714;
  overflow-wrap:break-word;word-break:normal
}
.ukConfirmText{
  margin:10px 0 0;font-size:13.5px;line-height:1.5;color:#4A423B;
  white-space:pre-line;overflow-wrap:break-word;word-break:normal
}
.ukConfirmActions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px;margin-top:20px}
.ukConfirmActions .btn{min-width:120px;justify-content:center;white-space:normal;line-height:1.25}
.ukConfirmSheet button:focus-visible{outline:2px solid #C79337;outline-offset:2px}
@media(max-width:560px){
  .ukConfirmLayer.open{place-items:end center;padding:0}
  .ukConfirmSheet{
    width:100%;border-radius:22px 22px 0 0;
    padding:20px 16px calc(20px + env(safe-area-inset-bottom))
  }
  .ukConfirmActions{flex-direction:column-reverse}
  .ukConfirmActions .btn{width:100%;min-height:48px}
}

/* --- 13. Правая колонка карточки заявки жильца не сжимается ---
   От 1200 px карточка заявки открывается боковой панелью шириной
   min(580px,44vw) (см. v12). Внутри неё .grid2 всё равно держал две колонки —
   на каждую карточку оставалось ~253 px, а `overflow-wrap:anywhere` (п. 4,
   заменён на break-word) позволял считать min-content значения одной буквой.
   Колонка схлопывалась, и «Электроснабжение» рвалось на четыре строки.

   Лечим обе причины: в боковой панели карточки встают одна под другой — так
   же, как .requestDetailGridV3 в кабинете сотрудника, — а подпись в .kv
   занимает ровно свою ширину и отдаёт остаток значению. */
@media (min-width:1200px){
  .residentV3Body #requestModal.open .grid2{grid-template-columns:1fr}
}
.residentV3Body .residentDetailModalV3 .grid2>.card>.kv{
  grid-template-columns:auto minmax(0,1fr);
  gap:8px 12px
}
@media(max-width:560px){
  .residentV3Body .residentDetailModalV3 .grid2>.card>.kv{grid-template-columns:1fr}
}

/* --- 14. Липкая шапка на телефоне заканчивается ровно на краю листа ---
   `.v3Body .sheetHead` тянет `margin:-22px -22px 18px`, чтобы погасить
   padding:22px десктопного листа. На ≤560 px лист получает padding:17px 14px
   (см. п. «.modal:not(.requestAlertModal)>.sheet»), и те же -22px уводили
   шапку карточки заявки и панели проверки регистрации на 8 px за каждый край.
   Гасим ровно тот padding, который у листа есть здесь. */
@media(max-width:820px){
  /* 561–820 px: у листа карточки заявки padding:0 (тело .requestDetailV3
     отступает само), поэтому гасить нечего — шапка торчала на все 22 px и
     давала листу горизонтальную прокрутку. */
  .v3Body .modal>.sheet>.requestSheetHeadV3{
    margin-left:0!important;margin-right:0!important
  }
}
@media(max-width:560px){
  /* ≤560 px оба листа получают padding:17px 14px от общего правила
     `.modal:not(.requestAlertModal)>.sheet` — гасим ровно его. */
  .v3Body .modal>.sheet>.requestSheetHeadV3,
  #residentVerificationModal>.sheet>.sheetHead{
    margin-left:-14px!important;margin-right:-14px!important
  }
}

/* ==========================================================
   v18 (3.0.0-RC6.19) — партия 5: липкая шапка остальных
   модалок кабинета сотрудника заканчивается на краю листа.
   ========================================================== */

/* --- 15. Та же липкая шапка у остальных модалок кабинета сотрудника ---
   Правка п. 14 выровняла по краю листа только карточку заявки и панель
   проверки регистрации. Остальные 13 окон сотрудника («Объект», «Заказ
   услуги» и его правка владельцем, «Акт / смета», «Акт оказанных услуг»,
   «Карточка жильца», «Редактировать заявку», «Паспорт оборудования»,
   «AI-техдокументация», три окна импорта, окно удаления владельцем) жили
   с тем же вылетом: `.v3Body .sheetHead` тянет `margin:-22px` под
   десктопный `padding:22px` листа, а на телефоне лист получает
   `padding:17px 14px` — шапка уходила на 8 px за каждый край и давала
   листу горизонтальную прокрутку.

   Вместо 13 копий одной правки — одно правило на ровно ту же выборку
   листов, которой этот `padding:17px 14px` и выдаётся (см. правило
   `.modal:not(.requestAlertModal)>.sheet` в блоке ≤560 px). Поэтому
   значение гасится тем же числом и не разъедется, если padding поменяют.

   Исключения намеренные:
   • `.formSheetV3` — у форм с партии 1 свой режим (лист `padding:0`,
     шапка `margin:0`, тело формы — единственный скроллер);
   • `.residentV3Body` — в кабинете жителя шапка модалок обнуляется своим
     правилом, и её трогать нельзя;
   • `.requestAlertModal` — этот лист боковой padding не получает. */
@media(max-width:560px){
  .v3Body:not(.residentV3Body) .modal:not(.requestAlertModal)>.sheet:not(.formSheetV3)>.sheetHead{
    margin-left:-14px!important;margin-right:-14px!important
  }
}
/* 561–820 px у этих листов боковой padding остаётся десктопным (22 px), и
   -22px гасит его ровно — правка не нужна. Единственное исключение — лист
   импорта плановых дат: он сам сужает боковой padding до 14 px (плюс
   safe-area), поэтому шапка торчала на 8 px и здесь. Гасим ровно его
   padding, тем же выражением. */
@media(min-width:561px) and (max-width:820px){
  .v3Body .modal>.maintenanceImportSheetV3>.sheetHead{
    margin-left:calc(-1 * max(14px,env(safe-area-inset-left)))!important;
    margin-right:calc(-1 * max(14px,env(safe-area-inset-right)))!important
  }
}

/* RC6.21 · Вложение, файл которого удалён по сроку хранения (v24 file_deleted_at).
   Показывается вместо миниатюры, ссылки на скачивание нет — бэкенд отдаёт 410. */
.deletedFilesV17{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:6px}
.deletedFilesV17 li{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;padding:9px 11px;border:1px dashed #D9D2C7;border-radius:12px;background:#FBFAF8}
.deletedFilesV17 li b{font-size:9px;color:#6B6156;word-break:break-all}
.deletedFilesV17 li small{font-size:7.5px;color:#A79B8B;font-weight:700}

/* ==========================================================
   v19 (3.0.0-RC6.22) — десктоп: липкой полосе вкладок карточки
   заявки вернули матовый фон.
   ========================================================== */

/* --- 16. Матовое стекло под вкладками «Информация · Выполнение · …» ---
   Полоса вкладок карточки заявки изначально была матовым стеклом
   (`background:rgba(248,250,251,.96);backdrop-filter:blur(12px)`) — под пару
   к липкой шапке над ней, у которой стекло своё
   (`rgba(255,255,255,.96)` + `blur(16px)`) и никуда не девалось.

   В RC6.16 (п. 6) чинили телефон: между шапкой и вкладками была щель, сквозь
   которую проезжал контент, и заодно полосу сделали НЕПРОЗРАЧНОЙ — правилом
   `background:#FBFAF8!important;backdrop-filter:none!important` БЕЗ
   медиазапроса. На телефоне это было нужно (iOS даёт артефакты наложения на
   липком `backdrop-filter`, см. п. ≤820 px выше), но правило действовало на
   всех ширинах и погасило стекло и на десктопе: под шапкой-стеклом шла
   плоская плашка, контент под ней обрезался резкой линией.

   Возвращаем стекло от 821 px — ровно там, где не действует блок ≤820 px
   с `backdrop-filter:none` для телефона. Тон оставляем сегодняшний, #FBFAF8
   (фон листа `.requestSheetV3`), а не исходный холодный #F8FAFB: в RC6.16
   полосу заодно подогнали по цвету к листу, и это к потере стекла отношения
   не имеет — меняем только прозрачность и размытие, оттенок тот же.
   Непрозрачность .96 — та же, что была до RC6.16 и что сейчас у шапки, так
   что два липких слоя читаются как один материал.

   Раскладка не трогается: ни одно свойство здесь не влияет на поток —
   ни `top`, ни `margin`, ни `padding`, ни высота. `box-shadow` гасим: его
   две непрозрачные плашки по ±22 px нужны там, где полоса уже листа (телефон,
   отрицательные поля -13 px против padding листа 14 px). На десктопе полоса и
   так идёт от края до края листа (`margin:0 -22px` под `.requestDetailV3
   padding:0 22px`), плашки уезжают за лист и обрезаются его `overflow:auto` —
   то есть на десктопе это мёртвое свойство, но непрозрачное, и оставлять его
   рядом со стеклом незачем. */
@media (min-width:821px){
  .requestDetailTabsV3{
    background:rgba(251,250,248,.96)!important;
    backdrop-filter:blur(12px)!important;
    box-shadow:none!important
  }
}
/* Демо-контур (config.js demoMode): значок «Демо» и кнопки «Войти как …» */
.demoBadge{display:inline-flex;align-items:center;flex:0 0 auto;padding:3px 9px;border-radius:999px;background:var(--amber);color:#fff;font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;margin-left:8px}
.demoLoginV1{margin:0 0 16px}.demoLoginGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}
@media(max-width:420px){.demoLoginGrid{grid-template-columns:1fr}}
