/* =============================================================
   Apartment Building Management Software
   Design: Modern SaaS · Clean · Light · Professional
   Font: Inter · Accent: Indigo · Background: White
============================================================= */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');

:root {
  --white:       #ffffff;
  --bg:          #f8fafc;
  --surface:     #ffffff;
  --surface-2:   #f1f5f9;
  --surface-3:   #e8f0fe;
  --ink:         #0f172a;
  --ink-2:       #1e293b;
  --ink-soft:    #475569;
  --ink-mute:    #94a3b8;
  --line:        #e2e8f0;
  --line-soft:   #f1f5f9;
  --accent:      #4f46e5;
  --accent-dark: #4338ca;
  --accent-soft: #eef2ff;
  --accent-mid:  #c7d2fe;
  --good:        #16a34a;
  --good-soft:   #f0fdf4;
  --good-mid:    #bbf7d0;
  --warn:        #d97706;
  --warn-soft:   #fffbeb;
  --bad:         #dc2626;
  --bad-soft:    #fef2f2;
  --bad-mid:     #fecaca;
  --font:        'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --mono:        ui-monospace, 'Fira Code', Menlo, monospace;
  --radius-sm:   6px;
  --radius:      8px;
  --radius-lg:   12px;
  --radius-xl:   16px;
  --shadow-sm:   0 1px 2px rgba(0,0,0,.05);
  --shadow:      0 1px 3px rgba(0,0,0,.06), 0 4px 16px rgba(0,0,0,.04);
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:15px;-webkit-text-size-adjust:100%}
body{font-family:var(--font);background:var(--bg);color:var(--ink);
     -webkit-font-smoothing:antialiased;font-size:14px;line-height:1.6;min-height:100vh}

a{color:var(--accent);text-decoration:none;transition:color .15s}
a:hover{color:var(--accent-dark);text-decoration:underline}

h1,h2,h3,h4{font-family:var(--font);font-weight:700;letter-spacing:-.02em;
             line-height:1.2;color:var(--ink);margin:0 0 8px}
h1{font-size:24px}
h2{font-size:20px}
h3{font-size:14px;font-weight:600;color:var(--ink-2)}
p{margin:0 0 10px;color:var(--ink-soft);font-size:14px}

code,pre{font-family:var(--mono);font-size:12.5px;background:var(--surface-2);
          border:1px solid var(--line);border-radius:4px;padding:1px 6px;color:var(--ink-2)}
::selection{background:var(--accent-soft);color:var(--accent)}
strong{font-weight:600;color:var(--ink)}
hr{border:none;border-top:1px solid var(--line);margin:20px 0}

/* Layout */
.layout{display:grid;grid-template-columns:240px 1fr;min-height:100vh}

/* Sidebar */
.sidebar{background:var(--ink);position:sticky;top:0;height:100vh;overflow-y:auto;
          display:flex;flex-direction:column}
.sidebar::-webkit-scrollbar{width:3px}
.sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.1);border-radius:4px}

.sidebar .brand{padding:18px 18px 14px;border-bottom:1px solid rgba(255,255,255,.07);
                 margin-bottom:6px;flex-shrink:0}
.sidebar .brand-mark{font-size:17px;font-weight:800;color:#fff;letter-spacing:-.03em;
                      display:flex;align-items:center;gap:9px}
.sidebar .brand-mark::before{content:'🏠';font-size:20px}
.sidebar .brand-tag{display:block;font-size:10px;color:rgba(255,255,255,.3);
                     letter-spacing:.05em;margin-top:3px;font-weight:400}

.sidebar .nav-group{padding:16px 18px 5px;font-size:10.5px;font-weight:700;
                     text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.5)}

.sidebar nav a{display:flex;align-items:center;justify-content:space-between;
                gap:8px;padding:9px 18px;color:rgba(255,255,255,.82);
                font-size:14px;font-weight:500;text-decoration:none;transition:all .12s;
                position:relative}
.sidebar nav a:hover{color:#fff;background:rgba(255,255,255,.08);text-decoration:none}
.sidebar nav a.active{color:#fff;background:rgba(79,70,229,.38);font-weight:600}
.sidebar nav a.active::before{content:'';position:absolute;left:0;top:5px;bottom:5px;
                                width:3px;background:var(--accent);border-radius:0 3px 3px 0}

/* Red count bubble on nav links */
.sidebar nav a .nav-badge{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:18px;height:18px;padding:0 5px;
  background:#ef4444;color:#fff;
  font-size:11px;font-weight:700;line-height:1;
  border-radius:9px;flex-shrink:0;
}
.sidebar nav a.active .nav-badge{background:#fff;color:#ef4444;}

.sidebar .footer-mini{margin-top:auto;padding:14px 18px;font-size:11px;
                        color:rgba(255,255,255,.22);border-top:1px solid rgba(255,255,255,.06)}

/* Main */
.main{min-width:0;background:var(--bg)}

.topbar{display:flex;align-items:center;justify-content:space-between;padding:0 28px;
         height:54px;background:var(--white);border-bottom:1px solid var(--line);
         position:sticky;top:0;z-index:20;gap:16px}
.topbar .crumbs{font-size:13px;color:var(--ink-mute);display:flex;align-items:center;gap:5px}
.topbar .crumbs a{color:var(--ink-soft);font-weight:450;text-decoration:none}
.topbar .crumbs a:hover{color:var(--accent)}
.topbar .crumbs span{color:var(--ink);font-weight:600}
.topbar .crumbs .sep{color:var(--line);font-size:16px}

.user-chip{display:flex;align-items:center;gap:8px;padding:4px 12px 4px 4px;
            border:1px solid var(--line);border-radius:999px;background:var(--white);
            font-size:13px;color:var(--ink-soft);transition:border-color .15s}
.user-chip:hover{border-color:var(--accent-mid)}
.user-chip .avatar{width:28px;height:28px;border-radius:50%;background:var(--accent);
                    color:#fff;display:grid;place-items:center;font-size:11px;
                    font-weight:700;flex-shrink:0}
.user-chip a{color:var(--ink-mute);font-size:12px;text-decoration:none}
.user-chip a:hover{color:var(--bad)}

.content{padding:26px 28px 80px;max-width:1260px}

/* Page head */
.page-head{display:flex;justify-content:space-between;align-items:flex-start;
            gap:16px;margin-bottom:22px;flex-wrap:wrap}
.page-head .titles{flex:1}
.page-head .titles .eyebrow{display:inline-block;font-size:11px;font-weight:700;
                              text-transform:uppercase;letter-spacing:.08em;
                              color:var(--accent);margin-bottom:5px}
.page-head .titles h1{font-size:21px;font-weight:700;color:var(--ink);
                        letter-spacing:-.025em;margin:0 0 3px}
.page-head .titles p{color:var(--ink-mute);font-size:13.5px;margin:0;max-width:520px}
.page-head .actions{display:flex;gap:8px;align-items:center;padding-top:2px}

/* Cards */
.card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius-lg);
       padding:20px 22px;margin-bottom:14px;box-shadow:var(--shadow-sm)}
.card.flush{padding:0;overflow:hidden}
.card-head{display:flex;justify-content:space-between;align-items:center;
            margin-bottom:14px;padding-bottom:11px;border-bottom:1px solid var(--line-soft)}
.card-head h3{margin:0;font-size:14px;font-weight:600;color:var(--ink)}
.card.flush .card-head{padding:14px 20px 11px}

/* Stats */
.stat-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:18px}
.stat{background:var(--white);border:1px solid var(--line);border-radius:var(--radius-lg);
       padding:16px 18px;box-shadow:var(--shadow-sm)}
.stat .label{font-size:11px;font-weight:600;color:var(--ink-mute);text-transform:uppercase;
              letter-spacing:.07em;margin-bottom:8px;display:block}
.stat .num{font-size:26px;font-weight:700;color:var(--ink);letter-spacing:-.03em;
            line-height:1;display:block;margin-bottom:4px;font-variant-numeric:tabular-nums}
.stat .delta{font-size:12px;color:var(--ink-mute)}
.stat .delta.good{color:var(--good)}
.stat .delta.bad{color:var(--bad)}

/* Tables */
table.data{width:100%;border-collapse:collapse;font-size:13.5px}
table.data th{text-align:left;padding:9px 14px;font-size:11px;font-weight:700;
               text-transform:uppercase;letter-spacing:.07em;color:var(--ink-mute);
               background:var(--surface-2);border-bottom:1px solid var(--line);white-space:nowrap}
table.data th:first-child{padding-left:18px}
table.data th:last-child{padding-right:18px}
table.data td{padding:10px 14px;border-bottom:1px solid var(--line-soft);
               color:var(--ink-soft);vertical-align:middle}
table.data td:first-child{padding-left:18px;color:var(--ink)}
table.data td:last-child{padding-right:18px}
table.data tbody tr:hover{background:var(--surface-2)}
table.data tbody tr:last-child td{border-bottom:none}
table.data .num{text-align:right;font-variant-numeric:tabular-nums;color:var(--ink);font-weight:500}
table.data tfoot td{border-top:1px solid var(--line);font-weight:600;color:var(--ink);
                     padding-top:11px;border-bottom:none}

/* Forms */
label{display:block;font-size:12.5px;font-weight:600;color:var(--ink-soft);
       margin-bottom:5px;letter-spacing:.01em}

input[type=text],input[type=email],input[type=password],input[type=number],
input[type=date],input[type=datetime-local],input[type=tel],input[type=url],
input[type=search],input[type=time],input:not([type]),select,textarea{
  width:100%;padding:8px 11px;border:1.5px solid var(--line);border-radius:var(--radius);
  background:var(--white);font-family:var(--font);font-size:14px;color:var(--ink);
  transition:border-color .15s,box-shadow .15s;line-height:1.5}
input[type=file]{padding:7px 0;font-size:13px;color:var(--ink-soft);
                  border:none;background:transparent}
input[type=checkbox],input[type=radio]{width:auto;accent-color:var(--accent);cursor:pointer}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);
                                         box-shadow:0 0 0 3px rgba(79,70,229,.1);background:var(--white)}
input::placeholder,textarea::placeholder{color:var(--ink-mute)}
textarea{min-height:88px;resize:vertical;line-height:1.6}

select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2394a3b8' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
        background-repeat:no-repeat;background-position:right 11px center;
        padding-right:30px;cursor:pointer}

.field{margin-bottom:15px}
.field-row{display:grid;gap:14px;margin-bottom:15px}
.field-row .field{margin-bottom:0}
.field-row.cols-2{grid-template-columns:1fr 1fr}
.field-row.cols-3{grid-template-columns:1fr 1fr 1fr}
.help{font-size:12px;color:var(--ink-mute);margin-top:4px;line-height:1.5}

/* Buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
      padding:8px 16px;border-radius:var(--radius);font-family:var(--font);font-weight:600;
      font-size:13.5px;border:1.5px solid var(--accent);background:var(--accent);color:#fff;
      cursor:pointer;transition:all .15s;text-decoration:none;white-space:nowrap;
      letter-spacing:-.01em;line-height:1}
.btn:hover{background:var(--accent-dark);border-color:var(--accent-dark);color:#fff;
            text-decoration:none;transform:translateY(-1px);
            box-shadow:0 4px 12px rgba(79,70,229,.25)}
.btn:active{transform:translateY(0);box-shadow:none}

.btn-secondary{background:var(--white);color:var(--ink-soft);border-color:var(--line)}
.btn-secondary:hover{background:var(--surface-2);border-color:var(--ink-mute);
                      color:var(--ink);box-shadow:var(--shadow-sm)}

.btn-danger{background:var(--bad);border-color:var(--bad);color:#fff}
.btn-danger:hover{background:#b91c1c;border-color:#b91c1c;
                   box-shadow:0 4px 12px rgba(220,38,38,.2)}

.btn-accent{background:var(--good);border-color:var(--good);color:#fff}
.btn-accent:hover{background:#15803d;border-color:#15803d;
                   box-shadow:0 4px 12px rgba(22,163,74,.25)}

.btn-ghost{background:transparent;border-color:transparent;color:var(--ink-soft);padding:6px 10px}
.btn-ghost:hover{background:var(--surface-2);color:var(--ink);box-shadow:none;transform:none}

.btn-sm{padding:5px 11px;font-size:12.5px}
.btn-lg{padding:11px 22px;font-size:14.5px}

/* Pills */
.pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;
       font-size:11px;font-weight:600;letter-spacing:.02em;background:var(--surface-2);
       color:var(--ink-soft);border:1px solid var(--line)}
.pill-active,.pill-occupied,.pill-completed{background:var(--good-soft);color:var(--good);border-color:var(--good-mid)}
.pill-pending,.pill-assigned,.pill-in_progress{background:var(--warn-soft);color:var(--warn);border-color:#fde68a}
.pill-overdue,.pill-failed,.pill-bad,.pill-rejected,.pill-terminated{background:var(--bad-soft);color:var(--bad);border-color:var(--bad-mid)}
.pill-vacant{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-mid)}
.pill-emergency{background:var(--bad);color:#fff;border-color:var(--bad)}
.pill-high{background:#fff7ed;color:#c2410c;border-color:#fed7aa}
.pill-normal{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-mid)}
.pill-low{background:var(--surface-2);color:var(--ink-mute);border-color:var(--line)}
.pill-confirmed,.pill-approved{background:var(--good-soft);color:var(--good);border-color:var(--good-mid)}

.tag{display:inline-block;padding:2px 7px;background:var(--surface-2);border:1px solid var(--line);
      border-radius:var(--radius-sm);font-size:11.5px;color:var(--ink-soft);font-weight:500}

/* Flash messages */
.flash-stack{margin-bottom:16px;display:flex;flex-direction:column;gap:8px}
.flash{padding:10px 14px;border-radius:var(--radius);font-size:13.5px;border:1px solid var(--line);
        background:var(--white);color:var(--ink-soft);display:flex;align-items:center;gap:10px}
.flash-success{background:var(--good-soft);border-color:var(--good-mid);color:#166534}
.flash-success::before{content:'✓';font-weight:700;color:var(--good)}
.flash-error{background:var(--bad-soft);border-color:var(--bad-mid);color:#991b1b}
.flash-error::before{content:'⚠';font-weight:700;color:var(--bad)}
.flash-warning{background:var(--warn-soft);border-color:#fde68a;color:#92400e}
.flash-warning::before{content:'!';font-weight:700;color:var(--warn)}

/* Auth */
.auth-shell{min-height:100vh;display:grid;grid-template-columns:1fr 1fr;background:var(--bg)}
.auth-left{background:var(--ink);display:flex;flex-direction:column;
            justify-content:space-between;padding:48px 52px;position:relative;overflow:hidden}
.auth-left::before{content:'';position:absolute;inset:0;
  background:radial-gradient(ellipse at 20% 50%,rgba(79,70,229,.4),transparent 60%),
              radial-gradient(ellipse at 80% 20%,rgba(99,102,241,.2),transparent 50%);
  pointer-events:none}
.auth-left>*{position:relative;z-index:1}
.auth-left h1{font-size:38px;font-weight:800;color:#fff;line-height:1.1;
               letter-spacing:-.03em;margin:0}
.auth-left h1 span{color:#a5b4fc}
.auth-quote{font-size:14px;color:rgba(255,255,255,.5);line-height:1.65;margin-top:16px;max-width:380px}
.auth-features{display:flex;flex-direction:column;gap:11px;margin-top:36px}
.auth-feature{display:flex;align-items:center;gap:11px;color:rgba(255,255,255,.7);font-size:13.5px}
.auth-feature-icon{width:30px;height:30px;background:rgba(255,255,255,.08);border-radius:7px;
                    display:grid;place-items:center;font-size:14px;flex-shrink:0}
.auth-brand{font-size:15px;font-weight:800;color:#fff;display:flex;
             align-items:center;gap:8px;letter-spacing:-.02em}
.auth-brand::before{content:'🏠';font-size:18px}

.auth-right{display:flex;align-items:center;justify-content:center;padding:48px;background:var(--white)}
.auth-card{width:100%;max-width:370px}
.auth-card h2{font-size:24px;font-weight:800;color:var(--ink);margin-bottom:5px;letter-spacing:-.025em}
.auth-card p.lead{color:var(--ink-mute);margin:0 0 24px;font-size:14px}
.auth-card .btn{width:100%;padding:10px 16px;font-size:14px}
.auth-foot{margin-top:18px;padding-top:14px;border-top:1px solid var(--line);
            font-size:13px;color:var(--ink-mute);text-align:center}
.auth-foot a{color:var(--accent);font-weight:500}
.eyebrow{display:inline-block;font-size:11px;font-weight:700;text-transform:uppercase;
          letter-spacing:.1em;color:var(--accent);margin-bottom:8px}

@media(max-width:860px){
  .auth-shell{grid-template-columns:1fr}
  .auth-left{display:none}
  .auth-right{padding:28px 20px}
}

/* Toolbar */
.toolbar{display:flex;gap:9px;margin-bottom:16px;flex-wrap:wrap;align-items:center;
          padding:10px 14px;background:var(--white);border:1px solid var(--line);
          border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}
.toolbar input,.toolbar select{width:auto;min-width:150px;padding:7px 10px;font-size:13px}
.toolbar label{margin:0;font-size:12px;white-space:nowrap}
.toolbar .btn{padding:7px 13px;font-size:13px}

/* Empty */
.empty{padding:44px 20px;text-align:center;color:var(--ink-mute)}
.empty .empty-icon{font-size:32px;margin-bottom:10px;opacity:.45;display:block}

/* Meta grid */
.meta-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:11px;margin-bottom:18px}
.meta-grid .meta-item{background:var(--white);border:1px solid var(--line);
                        border-radius:var(--radius-lg);padding:13px 15px}
.meta-grid .meta-label{font-size:11px;font-weight:600;text-transform:uppercase;
                         letter-spacing:.07em;color:var(--ink-mute);margin-bottom:5px}
.meta-grid .meta-val{font-size:15px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.meta-grid .meta-val .pill{font-size:10px}

/* Notification bell */
.notif-btn{position:relative;display:flex;align-items:center;justify-content:center;
            width:34px;height:34px;border-radius:var(--radius);border:1.5px solid var(--line);
            background:var(--white);color:var(--ink-soft);cursor:pointer;font-size:15px;
            transition:all .15s;text-decoration:none}
.notif-btn:hover{border-color:var(--accent);color:var(--accent)}
.notif-badge{position:absolute;top:-5px;right:-5px;min-width:16px;height:16px;padding:0 4px;
              background:var(--bad);color:#fff;border-radius:999px;font-size:9px;font-weight:700;
              display:grid;place-items:center;border:2px solid var(--white)}

/* Pager */
.pager{display:flex;gap:5px;margin-top:14px}
.pager-link{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;
             padding:0 9px;border:1.5px solid var(--line);border-radius:var(--radius);font-size:13px;
             color:var(--ink-soft);background:var(--white);text-decoration:none;font-weight:500;transition:all .12s}
.pager-link:hover{border-color:var(--accent);color:var(--accent)}
.pager-link.active{background:var(--accent);border-color:var(--accent);color:#fff}

/* Misc */
.muted{color:var(--ink-mute)!important}
.right{text-align:right}
.center{text-align:center}
.row{display:flex;gap:10px;align-items:center}
.row.between{justify-content:space-between}
.spacer{flex:1}
img{max-width:100%;height:auto;display:block}

button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px}

/* Sign shell */
.sign-shell{max-width:800px;margin:36px auto;padding:0 20px}
.sign-doc{background:var(--white);border:1px solid var(--line);border-radius:var(--radius-xl);padding:36px 44px}
.signpad-wrap{border:1.5px solid var(--line);border-radius:var(--radius);padding:10px;background:var(--bg)}
canvas#signpad{width:100%;height:170px;cursor:crosshair;display:block}

/* =============================================================
   Mobile menu toggle (hamburger) — hidden on desktop, shown on mobile
============================================================= */
.menu-toggle{
  display:none; align-items:center; justify-content:center;
  width:38px; height:38px; padding:0; margin-right:4px;
  background:var(--white); border:1.5px solid var(--line);
  border-radius:var(--radius); color:var(--ink); cursor:pointer;
  flex-shrink:0; -webkit-tap-highlight-color:transparent;
}
.menu-toggle:hover{border-color:var(--accent);color:var(--accent)}
.menu-toggle svg{width:20px;height:20px;display:block}
.sidebar-backdrop{
  display:none; position:fixed; inset:0; background:rgba(15,23,42,.5);
  z-index:90; opacity:0; transition:opacity .2s;
  -webkit-tap-highlight-color:transparent;
}
.sidebar-backdrop.is-visible{display:block;opacity:1}
body.no-scroll{overflow:hidden}

/* =============================================================
   Tablet (≤ 1100px)
============================================================= */
@media(max-width:1100px){
  .stat-row{grid-template-columns:repeat(2,1fr)}
  .meta-grid{grid-template-columns:repeat(2,1fr)}
  .content{padding:22px 22px 60px}
  .topbar{padding:0 22px}
}

/* =============================================================
   Mobile (≤ 768px) — Full mobile responsive overhaul
============================================================= */
@media(max-width:768px){

  /* Base: prevent iOS auto-zoom into inputs (needs ≥16px) */
  html{font-size:16px}
  body{font-size:14px}

  /* ----- Layout: single column, sidebar becomes off-canvas drawer ----- */
  .layout{grid-template-columns:1fr;display:block}

  .sidebar{
    position:fixed; top:0; left:0; bottom:0;
    width:280px; max-width:85vw; height:100vh; height:100dvh;
    z-index:100; transform:translateX(-100%);
    transition:transform .25s ease;
    box-shadow:0 0 40px rgba(0,0,0,.25);
    overflow-y:auto; -webkit-overflow-scrolling:touch;
  }
  .sidebar.is-open{transform:translateX(0)}
  .sidebar nav a{padding:10px 18px;font-size:14.5px}
  .sidebar .nav-group{padding:14px 18px 4px}

  /* ----- Topbar: hamburger + condensed crumbs + user chip ----- */
  .menu-toggle{display:inline-flex}
  .topbar{
    padding:0 14px; height:56px; gap:10px;
    position:sticky; top:0; z-index:50;
  }
  .topbar .crumbs{
    font-size:13px; flex:1; min-width:0;
    overflow:hidden; white-space:nowrap; text-overflow:ellipsis;
  }
  /* Show only the last crumb on small screens to save space */
  .topbar .crumbs a{display:none}
  .topbar .crumbs span{font-size:14px}
  .topbar .row{gap:6px}
  .topbar .row > .muted{display:none}  /* hide role badge text */
  .user-chip{padding:3px 8px 3px 3px;font-size:12px;gap:6px}
  .user-chip > span{
    max-width:80px; overflow:hidden;
    white-space:nowrap; text-overflow:ellipsis;
  }
  .user-chip .avatar{width:26px;height:26px;font-size:10px}

  /* ----- Content area ----- */
  .content{padding:16px 14px 80px;max-width:100%}

  /* ----- Page head ----- */
  .page-head{margin-bottom:16px;gap:10px}
  .page-head .titles h1{font-size:20px}
  .page-head .titles p{font-size:13px}
  .page-head .actions{width:100%;flex-wrap:wrap}
  .page-head .actions .btn{flex:1;min-width:0}

  /* ----- Stat cards ----- */
  .stat-row{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
  .stat{padding:14px 14px}
  .stat .num{font-size:22px}
  .meta-grid{grid-template-columns:1fr 1fr;gap:9px}

  /* ----- Cards ----- */
  .card{padding:16px 16px;margin-bottom:12px;border-radius:var(--radius)}
  .card-head{flex-wrap:wrap;gap:8px}
  .card.flush .card-head{padding:12px 16px 10px}

  /* ----- Tables: horizontal scroll wrapper ----- */
  /* Wrap any .data table inside a card with horizontal scroll */
  .card table.data,
  .card.flush table.data{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;width:100%;white-space:nowrap}
  /* Free-standing tables (rare) also scroll */
  table.data{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;width:100%;white-space:nowrap}
  table.data thead,table.data tbody,table.data tfoot{display:table;width:100%;min-width:560px}
  table.data th,table.data td{padding:9px 10px;font-size:13px}
  table.data th:first-child,table.data td:first-child{padding-left:14px}
  table.data th:last-child,table.data td:last-child{padding-right:14px}

  /* ----- Forms ----- */
  .field-row.cols-2,.field-row.cols-3{grid-template-columns:1fr;gap:0}
  .field-row.cols-2 .field,.field-row.cols-3 .field{margin-bottom:14px}
  input[type=text],input[type=email],input[type=password],input[type=number],
  input[type=date],input[type=datetime-local],input[type=tel],input[type=url],
  input[type=search],input[type=time],input:not([type]),select,textarea{
    font-size:16px;  /* iOS — block auto-zoom */
    padding:10px 12px;
  }

  /* ----- Buttons ----- */
  .btn{padding:9px 14px;font-size:14px}
  .btn-sm{padding:6px 11px;font-size:12.5px}

  /* ----- Toolbar (search + filters) ----- */
  .toolbar{padding:10px;gap:8px}
  .toolbar input,.toolbar select{width:100%;min-width:0;flex:1 1 100%}
  .toolbar .btn{flex:1 1 auto}
  .toolbar label{width:100%}

  /* ----- Inline grids (dashboard 2-column layouts written via style attr) ----- */
  /* Many pages use inline grid-template-columns like "1.4fr 1fr" or "1fr 1.5fr".
     This selector overrides any inline grid-template-columns on a div inside .content. */
  .content > div[style*="grid-template-columns"],
  .content div[style*="grid-template-columns"]{
    grid-template-columns:1fr !important;
    gap:14px !important;
  }

  /* ----- Sign / auth shell ----- */
  .sign-shell{margin:18px auto;padding:0 12px}
  .sign-doc{padding:22px 18px}
  canvas#signpad{height:160px}

  /* ----- Page head action buttons full width helper ----- */
  .page-head .actions a.btn,.page-head .actions button.btn{font-size:13.5px}

  /* ----- Flash messages slightly tighter ----- */
  .flash{padding:9px 12px;font-size:13px}

  /* ----- Pager wraps ----- */
  .pager{flex-wrap:wrap}
}

/* =============================================================
   Small mobile (≤ 480px)
============================================================= */
@media(max-width:480px){
  .stat-row{grid-template-columns:1fr;gap:10px}
  .meta-grid{grid-template-columns:1fr}
  .page-head{flex-direction:column;align-items:stretch}
  .page-head .titles h1{font-size:19px}
  .page-head .actions{margin-top:4px}
  .topbar{padding:0 12px}
  .content{padding:14px 12px 80px}
  .card{padding:14px}
  .auth-right{padding:24px 18px}
  .auth-card h2{font-size:22px}

  /* user chip becomes minimal — show avatar + logout only */
  .user-chip > span{display:none}
  .user-chip{padding:3px 10px 3px 3px}

  /* table cells condense further */
  table.data th,table.data td{padding:8px 9px;font-size:12.5px}
}

/* =============================================================
   Tabs (used by Users, Utilities, Tenant Requests, etc.)
============================================================= */
.tabs{
  display:flex;
  gap:2px;
  margin-bottom:18px;
  border-bottom:1px solid var(--line, #e5e7eb);
  flex-wrap:wrap;
}
.tabs .tab{
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:10px 18px;
  font-size:14px;
  font-weight:500;
  color:var(--ink-mute, #64748b);
  background:transparent;
  border:1px solid transparent;
  border-bottom:0;
  border-radius:8px 8px 0 0;
  text-decoration:none;
  margin-bottom:-1px;
  transition:color 0.12s, background 0.12s;
  white-space:nowrap;
}
.tabs .tab:hover{
  color:var(--ink, #0f172a);
  background:var(--surface, #f8fafc);
}
.tabs .tab.active{
  color:var(--ink, #0f172a);
  background:#fff;
  border-color:var(--line, #e5e7eb);
  border-bottom-color:#fff;
  font-weight:600;
}
@media (max-width: 600px) {
  .tabs .tab{ padding:9px 12px; font-size:13px; }
}

/* =============================================================
   Print
============================================================= */
@media print{
  .sidebar,.topbar,.menu-toggle,.sidebar-backdrop{display:none!important}
  .layout{display:block}
  .content{padding:0;max-width:100%}
  .card{box-shadow:none;border:1px solid #ddd;break-inside:avoid}
}
/* =============================================================
   Global mobile hardening (≤768px) — applies app-wide
   Conservative, additive: prevents overflow & cramped UI on
   every page without changing desktop layout.
============================================================= */
@media(max-width:768px){
  /* Never let a page scroll sideways */
  html,body{max-width:100%;overflow-x:hidden}

  /* Media & code never overflow their container */
  .content img,.content video,.content canvas{max-width:100%;height:auto}
  .content pre,.content code{white-space:pre-wrap;word-break:break-word}
  .content table:not(.data){display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}

  /* Flex/utility rows wrap instead of squashing or overflowing */
  .row,.row.between,.btn-group,.actions,.filters,.toolbar,.card-head,
  .form-actions,.btn-row,.inline-actions{flex-wrap:wrap}
  .row.between{gap:10px}

  /* Button groups & form actions go full-width & tappable */
  .form-actions .btn,.btn-row .btn{flex:1 1 auto}
  .btn{min-height:42px}                 /* comfortable tap target */
  a.btn,button.btn{touch-action:manipulation}

  /* Any 2/3/4-column helper grid collapses */
  .grid-2,.grid-3,.grid-4,.cols-2,.cols-3,.cols-4,
  .two-col,.three-col,.split{grid-template-columns:1fr !important;display:grid}

  /* Definition / detail pair grids stack */
  .detail-grid,.kv-grid,.summary-grid,.meta-grid,.info-grid{
    grid-template-columns:1fr !important}

  /* Modals / dialogs fit the screen */
  .modal,.modal-box,.dialog,.modal-content,.popover{
    max-width:94vw !important;width:94vw !important;
    max-height:88vh;overflow-y:auto}

  /* Long words / emails / urls don't blow out cards */
  .card,.stat,.tile{overflow-wrap:anywhere}

  /* Sign / signature pages */
  .sign-shell,.sign-doc{max-width:100%}
}
@media(max-width:480px){
  .content{padding-left:12px;padding-right:12px}
  .btn{width:auto}
  .modal,.modal-box,.dialog{max-width:96vw !important;width:96vw !important}
}

/* =============================================================
   .mcards — opt-in: any .data table becomes labeled cards on
   mobile (value shown next to its column name). Add class
   "mcards" to the <table> and data-label="Col" to each <td>.
============================================================= */
@media(max-width:768px){
  table.data.mcards{display:block;overflow:visible;white-space:normal;min-width:0}
  table.data.mcards thead{display:none}
  table.data.mcards tbody{display:block;width:100%;min-width:0}
  table.data.mcards tr{display:block;background:var(--white,#fff);
    border:1px solid var(--line);border-radius:var(--radius);
    padding:6px 14px;margin:10px 0}
  table.data.mcards td{display:flex;justify-content:space-between;
    align-items:flex-start;gap:16px;text-align:right;padding:9px 0 !important;
    border:none !important;border-bottom:1px solid var(--line-soft) !important;
    font-size:13.5px;white-space:normal;min-width:0}
  table.data.mcards tr td:last-child{border-bottom:none !important}
  table.data.mcards td::before{content:attr(data-label);text-align:left;
    flex:0 0 38%;font-size:11px;font-weight:700;letter-spacing:.04em;
    text-transform:uppercase;color:var(--ink-mute)}
  table.data.mcards td[data-label=""]::before{content:none}
  table.data.mcards td > *{min-width:0}
  /* action cell: keep buttons on one wrapping row, not stacked */
  table.data.mcards td[data-label=""]{justify-content:flex-end;
    flex-wrap:wrap;gap:8px;padding-top:12px !important}
  table.data.mcards td[data-label=""] form{display:inline}
  table.data.mcards td[data-label=""] .btn{width:auto;min-height:36px;
    display:inline-flex;align-items:center}
  /* nested action wrapper (e.g. <div class="row"> of buttons) */
  table.data.mcards td[data-label=""] .row{display:flex;flex-wrap:wrap;
    justify-content:flex-end;gap:8px;width:100%;margin:0}
  /* embedded inline forms in a cell go full-width & usable */
  table.data.mcards td[data-label] form.row{flex-wrap:wrap;width:100%}
  table.data.mcards td[data-label] form.row select,
  table.data.mcards td[data-label] form.row input{flex:1 1 100%;
    width:100% !important;font-size:16px !important;padding:9px 12px !important}
  table.data.mcards td[data-label] form.row .btn{flex:1 1 100%;width:100%}
}

/* =============================================================
   .mtable — opt-in: keep a TRUE table on mobile (columns &
   headers stay aligned) with horizontal scroll. Wrap the
   <table class="data mtable"> in <div class="tscroll">.
   This overrides the generic mobile table rule above.
============================================================= */
.tscroll{overflow-x:auto;-webkit-overflow-scrolling:touch;
  border-radius:var(--radius);max-width:100%}
@media(max-width:768px){
  .tscroll table.data.mtable{display:table !important;width:auto !important;
    min-width:100% !important;white-space:nowrap;border-collapse:collapse}
  .tscroll table.data.mtable thead{display:table-header-group !important;
    min-width:0 !important}
  .tscroll table.data.mtable tbody{display:table-row-group !important;
    min-width:0 !important}
  .tscroll table.data.mtable tfoot{display:table-footer-group !important}
  .tscroll table.data.mtable tr{display:table-row !important}
  .tscroll table.data.mtable th,
  .tscroll table.data.mtable td{display:table-cell !important;
    white-space:nowrap;font-size:13px;padding:9px 12px !important;
    vertical-align:middle;border-bottom:1px solid var(--line-soft)}
  .tscroll table.data.mtable th:first-child,
  .tscroll table.data.mtable td:first-child{padding-left:14px !important}
  .tscroll table.data.mtable th:last-child,
  .tscroll table.data.mtable td:last-child{padding-right:14px !important}
  /* inline controls stay compact (don't blow up the row height) */
  .tscroll table.data.mtable td form.row{display:flex;flex-wrap:nowrap;
    gap:6px;align-items:center;margin:0}
  .tscroll table.data.mtable td form.row select,
  .tscroll table.data.mtable td form.row input{width:auto !important;
    font-size:13px !important;padding:5px 8px !important}
  .tscroll table.data.mtable td .row{display:flex;flex-wrap:nowrap;
    gap:6px;align-items:center;justify-content:flex-end;margin:0}
  .tscroll table.data.mtable td .btn{white-space:nowrap}
}
