/* NetX Hub tenant portal - hand-written utility CSS (<=10KB) on top of tokens.css; no CDN. See input.css. */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--nx-bg);color:var(--nx-text);font-family:var(--nx-font-ui);font-size:15px;line-height:1.6}
a{color:var(--nx-primary)}a:hover{color:var(--nx-primary-hover)}
h1,h2,h3{font-family:var(--nx-font-display);margin:0 0 var(--nx-space-3);line-height:1.3}
h1{font-size:1.5rem}h2{font-size:1.2rem}h3{font-size:1rem}
.nx-header{background:var(--nx-header-bg);color:var(--nx-header-text);padding:var(--nx-space-3) var(--nx-space-4)}
.nx-header a{color:var(--nx-header-text);text-decoration:none}
.nx-header .brand{font-family:var(--nx-font-display);font-weight:700;font-size:1.1rem;color:var(--nx-header-text)}
.nx-header .muted{color:var(--nx-header-muted)}
.nx-nav{display:flex;flex-wrap:wrap;gap:var(--nx-space-2);margin-top:var(--nx-space-2)}
.nx-nav a{padding:6px 12px;border-radius:var(--nx-radius-pill);color:var(--nx-header-muted)}
.nx-nav a:hover{background:var(--nx-header-hover);color:var(--nx-header-text)}
.nx-nav a.active{background:var(--nx-header-active);color:#fff}
.nx-wrap{max-width:var(--nx-size-content);margin:0 auto;padding:var(--nx-space-5) var(--nx-space-4)}
.nx-row{display:flex;flex-wrap:wrap;gap:var(--nx-space-4);align-items:center;justify-content:space-between}
.nx-grid{display:grid;gap:var(--nx-space-4);grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.card{background:var(--nx-surface);border:1px solid var(--nx-border);border-radius:var(--nx-radius-lg);padding:var(--nx-space-4)}
.card .label{color:var(--nx-muted);font-size:.85rem}
.card .value{font-family:var(--nx-font-display);font-size:1.6rem;font-weight:700}
.muted{color:var(--nx-muted)}.small{font-size:.85rem}
table.nx{width:100%;border-collapse:collapse;background:var(--nx-surface);border:1px solid var(--nx-border);border-radius:var(--nx-radius-md);overflow:hidden}
table.nx th,table.nx td{padding:10px 12px;border-bottom:1px solid var(--nx-border);text-align:start;vertical-align:top}
table.nx th{background:var(--nx-surface-2);font-weight:600;font-size:.85rem;color:var(--nx-muted)}
table.nx tr:last-child td{border-bottom:0}
.badge{display:inline-block;padding:2px 10px;border-radius:var(--nx-radius-pill);font-size:.8rem;font-weight:600;background:var(--nx-surface-2);color:var(--nx-muted)}
.badge.ok{background:var(--nx-ok-soft);color:var(--nx-ok)}
.badge.warn,.badge.degraded,.badge.pending{background:var(--nx-warn-soft);color:var(--nx-warn)}
.badge.danger,.badge.error,.badge.failed,.badge.rejected{background:var(--nx-danger-soft);color:var(--nx-danger)}
.badge.primary,.badge.approved{background:var(--nx-primary-soft);color:var(--nx-primary)}
.btn{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:8px 18px;border-radius:var(--nx-radius-md);border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-text);font:inherit;font-weight:600;cursor:pointer;text-decoration:none}
.btn:hover{background:var(--nx-surface-2)}
.btn.primary{background:var(--nx-primary);border-color:var(--nx-primary);color:var(--nx-on-primary)}
.btn.primary:hover{background:var(--nx-primary-hover)}
.btn:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--nx-focus);outline-offset:2px}
form.nx label{display:block;font-weight:600;margin:var(--nx-space-3) 0 var(--nx-space-1)}
form.nx input[type=text],form.nx input[type=email],form.nx input[type=password],form.nx select,form.nx textarea{width:100%;padding:10px 12px;border:1px solid var(--nx-border);border-radius:var(--nx-radius-sm);background:var(--nx-surface);color:var(--nx-text);font:inherit}
form.nx .help{color:var(--nx-muted);font-size:.85rem}
form.nx .errorlist{color:var(--nx-danger);margin:4px 0;padding-inline-start:18px;font-size:.9rem}
.messages{list-style:none;margin:0 0 var(--nx-space-4);padding:0}
.messages li{padding:10px 14px;border-radius:var(--nx-radius-md);margin-bottom:8px;border:1px solid var(--nx-border);background:var(--nx-surface)}
.messages li.success{background:var(--nx-ok-soft);color:var(--nx-ok);border-color:transparent}
.messages li.error{background:var(--nx-danger-soft);color:var(--nx-danger);border-color:transparent}
.empty{padding:var(--nx-space-5);text-align:center;color:var(--nx-muted);border:1px dashed var(--nx-border);border-radius:var(--nx-radius-md)}
.nx-footer{padding:var(--nx-space-5) var(--nx-space-4);text-align:center;color:var(--nx-muted);font-size:.85rem}
.nx-wrap-flat{padding-top:0;padding-bottom:0}.inline{display:inline}.btn-xs{min-height:28px;padding:2px 10px}.card-narrow{max-width:32rem;margin:0 auto}.card-form{max-width:40rem}.card-link{text-decoration:none}.value-md{font-size:1.2rem}.value-sm{font-size:1rem}
.mt-4{margin-top:var(--nx-space-4)}.mb-4{margin-bottom:var(--nx-space-4)}.gap-2{gap:var(--nx-space-2)}
pre.args{margin:0;font-family:var(--nx-font-mono);font-size:.8rem;white-space:pre-wrap;word-break:break-all;color:var(--nx-muted)}
.htmx-request .htmx-indicator{opacity:1}.htmx-indicator{opacity:0;transition:opacity .2s}
@media (max-width:640px){.nx-wrap{padding:var(--nx-space-4)}table.nx th,table.nx td{padding:8px}.card .value{font-size:1.3rem}}
