/* =====================================================================
   FMS Design System · components.css
   Reusable building blocks. Reads tokens.css only.
   Index: 1 Base · 2 Application shell (sidebar, topbar) · 3 Search · 4 Bell & user menu
          5 Card / panel · 6 KPI card · 7 Table · 8 Badges & pills · 9 Buttons
          10 Empty state · 11 Lists (activity, legend) · 12 Gate (sign-in / loading)
          13 v1.1 additions (2026-10-05): forms, modal, tabs, pager, menu, toast, back link,
             danger button, pill tones, toolbar, key/value list, notices, layout helpers
   v1.1 is strictly additive: sections 1-12 are unchanged; every value reads from tokens.css.
   ===================================================================== */

/* ---------- 1 · Base ---------- */
*{box-sizing:border-box;}
html,body{margin:0;padding:0;height:100%;}
body{font-family:var(--sans);font-size:var(--fs-base);background:var(--page);color:var(--text);line-height:var(--lh-base);}
a{color:inherit;}
[hidden]{display:none !important;}
:focus-visible{outline:var(--focus-outline);outline-offset:2px;}
.app{display:flex;min-height:100vh;}

/* ---------- 2 · Application shell ---------- */
/* Sidebar */
.sidebar{
  position:fixed;inset:0 auto 0 0;width:var(--sidebar-w);z-index:70;
  background:linear-gradient(180deg,var(--sidebar-bg) 0%,var(--sidebar-bg-2) 100%);
  color:var(--sidebar-text);display:flex;flex-direction:column;
  transition:transform var(--dur) ease;
}
.sb-brand{padding:var(--sp-7) 38px var(--sp-5);display:flex;flex-direction:column;align-items:center;}
.sb-brand img{width:100%;max-width:160px;height:auto;display:block;}
.sb-rule{height:1px;background:var(--sidebar-rule);margin:var(--sp-2) 30px var(--sp-4);}
.sb-nav{flex:1;overflow-y:auto;padding:0 0 var(--sp-3);display:flex;flex-direction:column;}
.sb-link{
  position:relative;display:flex;align-items:center;gap:var(--sp-4);height:50px;padding:0 var(--sp-6) 0 30px;
  color:var(--sidebar-text);text-decoration:none;font-size:var(--fs-md);font-weight:var(--fw-medium);
  border-left:3px solid transparent;cursor:pointer;
  transition:background var(--dur-fast) ease,color var(--dur-fast) ease;
}
.sb-link svg{width:22px;height:22px;flex-shrink:0;opacity:.92;}
.sb-link:hover{background:var(--sidebar-hover);color:var(--on-navy);}
.sb-link:focus-visible{outline:var(--focus-outline);outline-offset:-2px;}
.sb-link.is-active{background:var(--sidebar-active);border-left-color:var(--gold);color:var(--on-navy);}
.sb-link.is-active svg{color:var(--gold-light);}
.sb-soon{margin-left:auto;font-size:var(--fs-2xs);letter-spacing:.8px;text-transform:uppercase;color:var(--on-navy-faint);font-weight:var(--fw-bold);}
.sb-divider{height:1px;background:var(--sidebar-rule);margin:var(--sp-4) 30px;}
.sb-group-btn{
  display:flex;align-items:center;justify-content:space-between;width:100%;
  background:none;border:0;color:var(--sidebar-text);font:inherit;font-size:var(--fs-md);font-weight:var(--fw-medium);
  padding:10px var(--sp-6) 10px 30px;cursor:pointer;text-align:left;
}
.sb-group-btn:hover{color:var(--on-navy);}
.sb-group-btn svg{width:18px;height:18px;transition:transform .15s ease;opacity:.8;}
.sb-group-btn[aria-expanded="false"] svg{transform:rotate(-90deg);}
.sb-group{padding-bottom:var(--sp-1);}
.sb-group .sb-link{height:44px;padding-left:36px;font-size:15px;color:#AEB8C6;}
.sb-foot{padding:var(--sp-5) 30px 30px;}
.sb-foot .bar{width:44px;height:2px;background:var(--gold);margin-bottom:var(--sp-4);}
.sb-foot p{margin:0;font-size:11.5px;letter-spacing:4.6px;line-height:2.15;color:var(--on-navy-faint);font-weight:var(--fw-semibold);text-transform:uppercase;}

/* Main column + topbar */
.main{flex:1;min-width:0;margin-left:var(--sidebar-w);display:flex;flex-direction:column;min-height:100vh;transition:margin-left var(--dur) ease;}
.topbar{
  position:sticky;top:0;z-index:50;height:var(--topbar-h);display:flex;align-items:center;gap:var(--sp-4);
  padding:0 clamp(16px,2.4vw,40px) 0 14px;background:rgba(255,255,255,.94);backdrop-filter:blur(6px);
  border-bottom:var(--border);
}
.tb-toggle{width:34px;height:34px;border:0;background:none;border-radius:8px;color:var(--slate);display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;}
.tb-toggle:hover{background:var(--surface-sunken);color:var(--navy);}
.tb-toggle svg{width:20px;height:20px;transition:transform var(--dur) ease;}
.tb-env{font-size:11px;font-weight:var(--fw-heavy);letter-spacing:1.4px;color:var(--gold-deep);background:var(--gold-bg);border:1px solid var(--gold-light);border-radius:var(--radius-pill);padding:4px 11px;white-space:nowrap;}
.fms-topbar-right{margin-left:auto;display:flex;align-items:center;gap:18px;flex-shrink:0;}
.view{width:100%;max-width:var(--content-max);margin:0 auto;padding:var(--sp-7) var(--gutter) var(--sp-9);}

/* Collapsed + small-screen sidebar */
body.sb-collapsed .sidebar{transform:translateX(-100%);}
body.sb-collapsed .main{margin-left:0;}
body.sb-collapsed .tb-toggle svg{transform:rotate(180deg);}
.sb-scrim{display:none;}
@media (max-width:980px){
  .sidebar{transform:translateX(-100%);box-shadow:none;}
  .main{margin-left:0;}
  body.sb-open .sidebar{transform:none;box-shadow:0 0 40px rgba(0,0,0,.35);}
  body.sb-open .sb-scrim{display:block;position:fixed;inset:0;background:rgba(14,30,50,.45);z-index:65;}
  .tb-env{display:none;}
}

/* ---------- 3 · Search ---------- */
.fms-search{position:relative;flex:1 1 auto;min-width:0;}
.topbar .fms-search{max-width:640px;}
.fms-search-box{
  display:flex;align-items:center;gap:10px;height:46px;padding:0 14px;
  background:var(--surface);border:var(--border);border-radius:var(--radius-md);
  color:var(--muted);transition:border-color var(--dur-fast) ease,box-shadow var(--dur-fast) ease,background var(--dur-fast) ease;
}
.topbar .fms-search-box{height:44px;background:var(--surface-sunken);border-color:transparent;}
.topbar .fms-search-box:focus-within{background:var(--surface);}
.fms-search-box:focus-within{border-color:var(--gold);box-shadow:var(--focus-ring);}
.fms-search-box svg{width:19px;height:19px;flex-shrink:0;}
.fms-search-box input{flex:1;min-width:0;border:0;outline:0;background:transparent;font:inherit;font-size:15px;color:var(--text);}
.fms-search-box input::placeholder{color:var(--muted);}
.fms-kbd{font:var(--fw-semibold) 11.5px var(--sans);color:var(--muted);background:var(--surface);border:var(--border);border-radius:6px;padding:3px 7px;white-space:nowrap;}
.fms-search-results{
  position:absolute;top:calc(100% + 8px);left:0;right:0;z-index:60;
  background:var(--surface);border:var(--border);border-radius:var(--radius-md);
  box-shadow:var(--shadow-overlay);max-height:440px;overflow:auto;padding:6px;
}
.fms-sr-group{font-size:11.5px;font-weight:var(--fw-bold);letter-spacing:1px;text-transform:uppercase;color:var(--muted);padding:10px 12px 6px;}
.fms-sr-item{display:flex;align-items:center;gap:12px;padding:9px 12px;border-radius:var(--radius-sm);cursor:pointer;}
.fms-sr-item.is-active,.fms-sr-item:hover{background:var(--surface-subtle);}
.fms-sr-ico{width:32px;height:32px;border-radius:50%;background:var(--gold-bg);color:var(--gold-deep);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.fms-sr-ico svg{width:16px;height:16px;}
.fms-sr-text{min-width:0;}
.fms-sr-title{font-size:var(--fs-base);font-weight:var(--fw-semibold);color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.fms-sr-sub{font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.fms-sr-empty{padding:18px 14px;font-size:14px;color:var(--muted);text-align:center;}

/* ---------- 4 · Bell & user menu ---------- */
.bell{position:relative;}
.bell-btn{position:relative;width:40px;height:40px;border:0;background:none;border-radius:50%;color:var(--navy);display:flex;align-items:center;justify-content:center;cursor:pointer;}
.bell-btn:hover{background:var(--surface-sunken);}
.bell-btn svg{width:22px;height:22px;}
.bell-badge{position:absolute;top:1px;right:0;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--gold);color:#fff;font-size:var(--fs-2xs);font-weight:var(--fw-heavy);line-height:1;display:flex;align-items:center;justify-content:center;border:2px solid #fff;box-sizing:border-box;}
.bell-dd{position:absolute;right:-10px;top:calc(100% + 10px);width:360px;max-width:86vw;background:var(--surface);border:var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-overlay);z-index:80;overflow:hidden;}
.bell-dd h3{margin:0;padding:14px var(--sp-4);font-family:var(--serif);font-size:var(--fs-md);color:var(--navy);border-bottom:var(--border);}
.bell-list{max-height:380px;overflow:auto;}
.bell-item{padding:12px var(--sp-4);border-bottom:1px solid var(--line-soft);font-size:13.5px;}
.bell-item:last-child{border-bottom:0;}
.bell-item.unread{background:var(--gold-bg);}
.bell-item .t{font-weight:var(--fw-semibold);color:var(--text);}
.bell-item .m{color:var(--muted);margin-top:2px;}
.bell-item .w{color:var(--muted);font-size:var(--fs-xs);margin-top:4px;}
.bell-empty{padding:26px var(--sp-4);text-align:center;color:var(--muted);font-size:14px;}

.user-wrap{position:relative;}
.user-btn{display:flex;align-items:center;gap:12px;border:0;background:none;cursor:pointer;padding:4px 6px;border-radius:var(--radius-md);font:inherit;text-align:left;}
.user-btn:hover{background:var(--surface-sunken);}
.user-btn svg{width:16px;height:16px;color:var(--muted);}
.fms-avatar{
  width:40px;height:40px;border-radius:50%;background:var(--navy);color:var(--on-navy);
  display:flex;align-items:center;justify-content:center;font-weight:var(--fw-bold);font-size:14px;letter-spacing:.5px;
  box-shadow:0 0 0 2px var(--surface),0 0 0 3px var(--gold-light);
}
.fms-user-meta{min-width:0;}
.fms-user-name{font-weight:var(--fw-bold);font-size:var(--fs-base);color:var(--navy);line-height:1.2;}
.fms-user-role{font-size:12.5px;color:var(--muted);line-height:1.2;}
.user-menu{position:absolute;right:0;top:calc(100% + 10px);min-width:230px;background:var(--surface);border:var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-overlay);z-index:80;padding:6px;}
.user-menu .who{padding:10px 12px 8px;border-bottom:var(--border);margin-bottom:6px;}
.user-menu .who b{display:block;color:var(--navy);font-size:14px;}
.user-menu .who span{font-size:12.5px;color:var(--muted);word-break:break-all;}
.user-menu a,.user-menu button{display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;border:0;background:none;border-radius:8px;font:inherit;font-size:14px;color:var(--text);text-decoration:none;cursor:pointer;text-align:left;}
.user-menu a:hover,.user-menu button:hover{background:var(--surface-subtle);}
.user-menu svg{width:17px;height:17px;color:var(--slate);}

/* ---------- 5 · Card / panel ---------- */
.fms-panel{
  background:var(--surface);border:var(--border);border-radius:var(--radius-lg);
  padding:var(--card-pad) var(--card-pad-x);box-shadow:var(--shadow-rest);display:flex;flex-direction:column;min-width:0;
}
.fms-panel-head{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);margin-bottom:var(--card-head-gap);min-height:28px;flex-shrink:0;}
.fms-panel-head h2{margin:0;font-family:var(--serif);font-size:var(--fs-h3);line-height:1.2;font-weight:var(--fw-bold);color:var(--navy);}
.fms-panel-head a{font-size:var(--fs-sm);color:var(--navy);text-decoration:none;font-weight:var(--fw-semibold);display:inline-flex;align-items:center;gap:2px;cursor:pointer;white-space:nowrap;}
.fms-panel-head a:hover{color:var(--gold-deep);}
.fms-panel-head a svg{width:15px;height:15px;}
.fms-panel-body{flex:1;display:flex;flex-direction:column;min-height:0;}
.fms-loading{color:var(--muted);font-size:14px;padding:var(--sp-6) 0;text-align:center;flex:1;}

/* ---------- 6 · KPI card (also the generic clickable card) ---------- */
.fms-card{
  position:relative;display:flex;align-items:center;gap:var(--sp-4);min-height:116px;
  background:var(--surface);border:var(--border);border-radius:var(--radius-lg);
  padding:var(--sp-5) 46px var(--sp-5) 22px;box-shadow:var(--shadow-rest);
  transition:box-shadow var(--dur) ease,border-color var(--dur) ease,transform var(--dur) ease;
}
.fms-card[data-nav]{cursor:pointer;}
.fms-card[data-nav]:hover{box-shadow:var(--shadow-hover);border-color:var(--gold-light);transform:translateY(-1px);}
.fms-card[data-nav]:focus-visible{outline:var(--focus-outline);outline-offset:2px;}
.fms-chevron{position:absolute;top:50%;right:var(--sp-4);transform:translateY(-50%);color:var(--muted);opacity:.6;display:flex;}
.fms-chevron svg{width:20px;height:20px;}
.fms-card[data-nav]:hover .fms-chevron{color:var(--gold-deep);opacity:1;}
.fms-icon-circle{width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.fms-icon-circle svg{width:26px;height:26px;}
.fms-stat-body{min-width:0;}
.fms-stat-label{font-size:var(--fs-base);color:var(--slate);font-weight:var(--fw-semibold);}
.fms-stat-value{font-family:var(--serif);font-weight:var(--fw-bold);color:var(--navy);font-size:var(--fs-kpi);line-height:var(--lh-tight);margin-top:2px;}
.fms-stat-delta{font-size:var(--fs-sm);color:var(--green);margin-top:6px;font-weight:var(--fw-semibold);min-height:19px;}
.fms-stat-delta.neutral{color:var(--muted);font-weight:var(--fw-medium);}

/* ---------- 7 · Table ---------- */
.fms-table-wrap{overflow-x:auto;}
table.fms-table{width:100%;border-collapse:collapse;font-size:var(--fs-base);}
table.fms-table th{
  text-align:left;color:var(--muted);font-weight:var(--fw-semibold);font-size:var(--fs-sm);
  padding:var(--sp-2) 10px;border-bottom:var(--border);white-space:nowrap;background:var(--surface-subtle);
}
table.fms-table td{padding:13px 10px;border-bottom:1px solid var(--line-soft);vertical-align:middle;}
table.fms-table tr:last-child td{border-bottom:none;}
table.fms-table tr[data-nav]{cursor:pointer;transition:background var(--dur-fast) ease;}
table.fms-table tr[data-nav]:hover{background:var(--surface-subtle);}
table.fms-table td.c-dot{width:26px;padding-right:0;}
.fms-item-ref{color:var(--muted);font-size:12.5px;margin-left:6px;}

/* ---------- 8 · Badges, pills, status dots ---------- */
.fms-dot{width:9px;height:9px;border-radius:50%;display:inline-block;}
.fms-dot.red{background:var(--red);}
.fms-dot.amber{background:var(--amber);}
.fms-dot.gray{background:var(--neutral-dot);}
.fms-pill{display:inline-block;padding:3px 12px;border-radius:var(--radius-pill);font-size:12.5px;font-weight:var(--fw-semibold);white-space:nowrap;}
.fms-pill.task{background:var(--blue-bg);color:var(--blue);}
.fms-pill.case{background:var(--gold-bg);color:var(--gold-deep);}
.st{display:inline-block;padding:2px 9px;border-radius:12px;font-size:var(--fs-xs);font-weight:var(--fw-bold);white-space:nowrap;}
.st.ok{background:var(--green-bg);color:var(--green);}
.st.no{background:var(--red-bg);color:var(--red);}
.st.warn{background:var(--amber-bg);color:var(--amber);}
.st.na{background:var(--surface-sunken);color:var(--muted);}
.tag-soon{display:inline-block;font-size:11px;font-weight:var(--fw-heavy);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--gold-deep);background:var(--gold-bg);border:1px solid var(--gold-light);border-radius:var(--radius-pill);padding:3px 10px;margin-bottom:var(--sp-3);}

/* ---------- 9 · Buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:var(--sp-2);height:42px;padding:0 18px;border-radius:10px;border:1px solid var(--navy);background:var(--navy);color:var(--on-navy);font:inherit;font-weight:var(--fw-semibold);font-size:var(--fs-base);text-decoration:none;cursor:pointer;transition:background var(--dur-fast) ease,border-color var(--dur-fast) ease;}
.btn:hover{background:var(--navy-2);}
.btn.ghost{background:var(--surface);color:var(--navy);border-color:var(--line);}
.btn.ghost:hover{border-color:var(--gold);}
.btn svg{width:17px;height:17px;}

/* ---------- 10 · Empty state ---------- */
.fms-empty-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px;padding:var(--sp-6) 14px;min-height:150px;}
.fms-empty-state .fms-empty-icon{width:54px;height:54px;border-radius:50%;background:var(--surface-sunken);color:var(--muted);display:flex;align-items:center;justify-content:center;margin-bottom:var(--sp-2);}
.fms-empty-state .fms-empty-icon svg{width:25px;height:25px;}
.fms-empty-state .t{font-size:var(--fs-md);font-weight:var(--fw-semibold);color:var(--text);}
.fms-empty-state .s{font-size:13.5px;color:var(--muted);}

/* ---------- 11 · Lists: activity feed, legends ---------- */
.fms-activity-item{display:flex;gap:14px;padding:13px var(--sp-1);border-bottom:1px solid var(--line-soft);transition:background var(--dur-fast) ease;}
.fms-activity-item:last-child{border-bottom:none;}
.fms-activity-item[data-nav]{cursor:pointer;border-radius:8px;}
.fms-activity-item[data-nav]:hover{background:var(--surface-subtle);}
.fms-activity-icon{width:26px;height:26px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:var(--navy);margin-top:1px;}
.fms-activity-icon svg{width:22px;height:22px;}
.fms-activity-main{min-width:0;flex:1;}
.fms-activity-title{font-size:var(--fs-base);font-weight:var(--fw-semibold);color:var(--text);}
.fms-activity-sub{font-size:var(--fs-sm);color:var(--muted);margin-top:2px;}
.fms-activity-time{font-size:12.5px;color:var(--muted);white-space:nowrap;margin-left:auto;padding-left:10px;align-self:flex-start;margin-top:2px;}

.fms-legend{display:flex;flex-direction:column;gap:var(--sp-4);flex:1;min-width:150px;}
.fms-legend-item{display:flex;justify-content:space-between;align-items:center;font-size:15.5px;}
.fms-legend-left{display:flex;align-items:center;gap:11px;color:var(--text);font-weight:var(--fw-medium);}
.fms-legend-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0;}
.fms-legend-count{font-weight:var(--fw-bold);font-size:var(--fs-lg);color:var(--navy);font-family:var(--serif);}

/* ---------- 12 · Gate (signed-out / loading / error) ---------- */
.gate{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;padding:var(--sp-6);
  background:radial-gradient(1200px 600px at 70% 10%,var(--navy-2) 0%,var(--sidebar-bg) 55%,var(--sidebar-bg-2) 100%);color:var(--on-navy);}
.gate-card{width:min(440px,100%);text-align:center;}
.gate-card img{width:min(300px,80%);height:auto;margin-bottom:34px;}
.gate-card h1{font-family:var(--serif);font-weight:var(--fw-bold);font-size:28px;margin:0 0 var(--sp-2);}
.gate-card p{margin:0 0 26px;color:#B8C2D0;font-size:15.5px;line-height:1.5;}
.gate-card .btn{background:var(--gold);border-color:var(--gold);color:var(--navy);height:48px;padding:0 26px;font-size:15.5px;}
.gate-card .btn:hover{background:#D5AA52;}
.gate-card .small{margin-top:26px;font-size:var(--fs-xs);letter-spacing:3px;text-transform:uppercase;color:var(--on-navy-faint);}
.gate-err{background:rgba(192,57,43,.16);border:1px solid rgba(192,57,43,.5);border-radius:10px;padding:12px 14px;font-size:13.5px;text-align:left;margin-bottom:var(--sp-5);word-break:break-word;}
.spinner{width:34px;height:34px;border-radius:50%;border:3px solid rgba(255,255,255,.2);border-top-color:var(--gold);animation:spin .9s linear infinite;margin:0 auto 22px;}
@keyframes spin{to{transform:rotate(360deg);}}

@media (prefers-reduced-motion:reduce){
  .fms-card,.sidebar,.main{transition:none;}
  .spinner{animation-duration:3s;}
}

/* =====================================================================
   13 · v1.1 additions (additive; nothing above this line was changed)
   ===================================================================== */

/* ---------- 13.1 Buttons: size + danger + disabled ---------- */
.btn.sm{height:34px;padding:0 14px;font-size:var(--fs-sm);border-radius:var(--radius-sm);}
.btn.danger{background:var(--red);border-color:var(--red);color:var(--on-navy);}
.btn.danger:hover{opacity:.9;background:var(--red);}
.btn.ghost.danger{background:var(--surface);color:var(--red);border-color:var(--line);}
.btn.ghost.danger:hover{border-color:var(--red);opacity:1;background:var(--red-bg);}
.btn[disabled],.btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed;pointer-events:none;}
.fms-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--navy);cursor:pointer;font:inherit;transition:border-color var(--dur-fast) ease,background var(--dur-fast) ease;}
.fms-icon-btn:hover{border-color:var(--gold);}
.fms-icon-btn svg{width:18px;height:18px;}
.fms-icon-btn.sm{width:34px;height:34px;border-radius:var(--radius-sm);}

/* ---------- 13.2 Form fields ---------- */
.fms-form-section{margin:0 0 var(--sp-6);}
.fms-form-section:last-child{margin-bottom:0;}
.fms-form-section > h3{margin:0 0 var(--sp-3);font-family:var(--serif);font-size:var(--fs-lg);font-weight:var(--fw-bold);color:var(--navy);}
.fms-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-4);}
.fms-form-grid .span-2{grid-column:1 / -1;}
.fms-field{display:flex;flex-direction:column;gap:6px;min-width:0;}
.fms-label{font-size:var(--fs-sm);font-weight:var(--fw-semibold);color:var(--slate);}
.fms-label .req{color:var(--red);margin-left:2px;}
.fms-input,.fms-select,.fms-textarea{
  width:100%;height:42px;padding:0 12px;border:1px solid var(--line);border-radius:10px;
  background:var(--surface);color:var(--text);font:inherit;font-size:var(--fs-base);
  transition:border-color var(--dur-fast) ease,box-shadow var(--dur-fast) ease;
}
.fms-textarea{height:auto;min-height:96px;padding:10px 12px;resize:vertical;line-height:var(--lh-base);}
.fms-input::placeholder,.fms-textarea::placeholder{color:var(--muted);}
.fms-input:hover,.fms-select:hover,.fms-textarea:hover{border-color:var(--gold-light);}
.fms-input:focus,.fms-select:focus,.fms-textarea:focus{outline:0;border-color:var(--gold);box-shadow:var(--focus-ring);}
.fms-input.is-invalid,.fms-select.is-invalid,.fms-textarea.is-invalid{border-color:var(--red);}
.fms-input.is-invalid:focus,.fms-select.is-invalid:focus,.fms-textarea.is-invalid:focus{box-shadow:0 0 0 3px var(--red-bg);}
.fms-input[disabled],.fms-select[disabled],.fms-textarea[disabled]{background:var(--surface-sunken);color:var(--muted);cursor:not-allowed;}
.fms-field-error{font-size:var(--fs-xs);color:var(--red);font-weight:var(--fw-medium);min-height:0;}
.fms-field-error:empty{display:none;}
.fms-field-hint{font-size:var(--fs-xs);color:var(--muted);}
.fms-counter{font-size:var(--fs-xs);color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;}
.fms-counter.is-limit{color:var(--amber);font-weight:var(--fw-semibold);}

/* ---------- 13.3 Modal / dialog ---------- */
.fms-modal-backdrop{position:fixed;inset:0;z-index:150;background:rgba(14,30,50,.45);display:flex;align-items:flex-start;justify-content:center;padding:6vh var(--sp-4) var(--sp-4);overflow-y:auto;}
.fms-modal{width:min(760px,100%);background:var(--surface);border:var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-overlay);display:flex;flex-direction:column;max-height:88vh;}
.fms-modal.sm{width:min(460px,100%);}
.fms-modal-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-5) var(--sp-6);border-bottom:var(--border);flex-shrink:0;}
.fms-modal-head h2{margin:0;font-family:var(--serif);font-size:var(--fs-h3);font-weight:var(--fw-bold);color:var(--navy);}
.fms-modal-body{padding:var(--sp-6);overflow-y:auto;min-height:0;}
.fms-modal-body p{margin:0 0 var(--sp-3);color:var(--slate);line-height:var(--lh-relaxed);}
.fms-modal-foot{display:flex;justify-content:flex-end;align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-6);border-top:var(--border);flex-shrink:0;flex-wrap:wrap;}
.fms-modal-foot .grow{margin-right:auto;font-size:var(--fs-sm);color:var(--muted);}
body.fms-modal-open{overflow:hidden;}

/* ---------- 13.4 Tabs ---------- */
.fms-tabs{display:flex;gap:var(--sp-6);border-bottom:var(--border);margin-bottom:var(--grid-gap);overflow-x:auto;}
.fms-tab{appearance:none;background:none;border:0;border-bottom:2px solid transparent;margin-bottom:-1px;padding:var(--sp-3) 2px;font:inherit;font-size:var(--fs-md);font-weight:var(--fw-semibold);color:var(--muted);cursor:pointer;white-space:nowrap;transition:color var(--dur-fast) ease,border-color var(--dur-fast) ease;}
.fms-tab:hover{color:var(--navy);}
.fms-tab[aria-selected="true"]{color:var(--navy);border-bottom-color:var(--gold);}
.fms-tab .n{display:inline-block;margin-left:6px;padding:0 8px;border-radius:var(--radius-pill);background:var(--surface-sunken);color:var(--slate);font-size:var(--fs-xs);font-weight:var(--fw-bold);}
.fms-tab[aria-selected="true"] .n{background:var(--gold-bg);color:var(--gold-deep);}

/* ---------- 13.5 Pagination ---------- */
.fms-pager{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);flex-wrap:wrap;padding-top:var(--sp-4);margin-top:var(--sp-2);border-top:1px solid var(--line-soft);}
.fms-pager-info{font-size:var(--fs-sm);color:var(--muted);font-variant-numeric:tabular-nums;}
.fms-pager-btns{display:flex;gap:var(--sp-2);}

/* ---------- 13.6 Menu "⋯" ---------- */
.fms-menu{position:relative;display:inline-block;}
.fms-menu-list{position:absolute;right:0;top:calc(100% + 8px);min-width:210px;background:var(--surface);border:var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-overlay);z-index:80;padding:6px;}
.fms-menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;border:0;background:none;border-radius:8px;font:inherit;font-size:14px;color:var(--text);cursor:pointer;text-align:left;}
.fms-menu-item:hover{background:var(--surface-subtle);}
.fms-menu-item svg{width:17px;height:17px;color:var(--slate);}
.fms-menu-item.danger{color:var(--red);}
.fms-menu-item.danger svg{color:var(--red);}
.fms-menu-item.danger:hover{background:var(--red-bg);}
.fms-menu-sep{height:1px;background:var(--line-soft);margin:6px 4px;}

/* ---------- 13.7 Toast ---------- */
.fms-toast-host{position:fixed;right:var(--sp-5);bottom:var(--sp-5);z-index:300;display:flex;flex-direction:column;gap:var(--sp-2);align-items:flex-end;pointer-events:none;max-width:calc(100vw - 2 * var(--sp-5));}
.fms-toast{pointer-events:auto;display:flex;align-items:flex-start;gap:var(--sp-3);max-width:460px;padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-md);background:var(--navy);color:var(--on-navy);box-shadow:var(--shadow-overlay);font-size:var(--fs-base);line-height:var(--lh-base);}
.fms-toast svg{width:18px;height:18px;flex-shrink:0;margin-top:2px;}
.fms-toast.ok{background:var(--green-bg);color:var(--green);border:1px solid var(--green);}
.fms-toast.err{background:var(--red-bg);color:var(--red);border:1px solid var(--red);}

/* ---------- 13.8 Back link / breadcrumb ---------- */
.fms-back{display:inline-flex;align-items:center;gap:var(--sp-1);margin:0 0 var(--sp-4);padding:0;border:0;background:none;font:inherit;font-size:var(--fs-sm);font-weight:var(--fw-semibold);color:var(--navy);text-decoration:none;cursor:pointer;}
.fms-back:hover{color:var(--gold-deep);}
.fms-back svg{width:16px;height:16px;}

/* ---------- 13.9 Pill tones (status) ---------- */
.fms-pill.ok{background:var(--green-bg);color:var(--green);}
.fms-pill.warn{background:var(--amber-bg);color:var(--amber);}
.fms-pill.no{background:var(--red-bg);color:var(--red);}
.fms-pill.na{background:var(--surface-sunken);color:var(--muted);}
.fms-pill.sm{padding:2px 10px;font-size:var(--fs-xs);}

/* ---------- 13.10 Toolbar, avatar sizes, table helpers ---------- */
.fms-toolbar{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-4);}
.fms-toolbar .fms-search-box{flex:1 1 280px;min-width:0;max-width:520px;}
.fms-toolbar .fms-search-box{height:42px;}
.fms-toolbar .fms-select{width:auto;min-width:170px;}
.fms-avatar.sm{width:36px;height:36px;font-size:12.5px;box-shadow:none;flex-shrink:0;}
.fms-avatar.lg{width:68px;height:68px;font-size:22px;font-family:var(--serif);flex-shrink:0;}
.fms-cell-person{display:flex;align-items:center;gap:var(--sp-3);min-width:0;}
.fms-cell-main{font-weight:var(--fw-semibold);color:var(--text);}
.fms-cell-sub{font-size:var(--fs-sm);color:var(--muted);}
table.fms-table td.num,table.fms-table th.num{text-align:right;font-variant-numeric:tabular-nums;}
table.fms-table .fms-chevron-cell{width:28px;color:var(--muted);}
table.fms-table .fms-chevron-cell svg{width:18px;height:18px;display:block;}
table.fms-table tr[data-nav]:focus-visible{outline:var(--focus-outline);outline-offset:-2px;}

/* ---------- 13.11 Key / value list ---------- */
.fms-dl{display:grid;grid-template-columns:minmax(110px,36%) minmax(0,1fr);gap:var(--sp-3) var(--sp-4);margin:0;}
.fms-dl dt{font-size:var(--fs-sm);color:var(--muted);font-weight:var(--fw-semibold);}
.fms-dl dd{margin:0;color:var(--text);overflow-wrap:anywhere;}
.fms-dl dd a{color:var(--navy);text-decoration:none;font-weight:var(--fw-semibold);}
.fms-dl dd a:hover{color:var(--gold-deep);}

/* ---------- 13.12 Notice (inline message) ---------- */
.fms-notice{display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-md);font-size:var(--fs-base);line-height:var(--lh-base);margin-bottom:var(--sp-4);}
.fms-notice svg{width:18px;height:18px;flex-shrink:0;margin-top:2px;}
.fms-notice.warn{background:var(--amber-bg);color:var(--amber);}
.fms-notice.err{background:var(--red-bg);color:var(--red);}
.fms-notice.info{background:var(--blue-bg);color:var(--blue);}

/* ---------- 13.13 Layout helpers ---------- */
.fms-stats.cols-3{grid-template-columns:repeat(3,minmax(0,1fr));}
.fms-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:var(--sp-3);}
.fms-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--grid-gap);align-items:start;}
.fms-grid-2 > .span-2{grid-column:1 / -1;}
.fms-page-head{display:flex;align-items:center;gap:var(--sp-5);flex-wrap:wrap;margin-bottom:var(--sp-5);}
.fms-page-head .grow{flex:1;min-width:0;}
.fms-page-head h1{margin:0;font-family:var(--serif);font-weight:var(--fw-bold);color:var(--navy);font-size:var(--fs-h2);line-height:var(--lh-tight);overflow-wrap:anywhere;}
.fms-page-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2) var(--sp-4);margin-top:var(--sp-2);font-size:var(--fs-base);color:var(--slate);}
.fms-page-meta a{color:var(--slate);text-decoration:none;}
.fms-page-meta a:hover{color:var(--gold-deep);}
.fms-page-title{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;}
.fms-meta-item{display:inline-flex;align-items:center;gap:6px;}
.fms-page-meta svg{width:16px;height:16px;color:var(--muted);flex-shrink:0;}
.fms-page-meta .fms-meta-item > span{display:inline-flex;}
.fms-page-actions{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;}
.fms-actions-right{display:flex;align-items:center;gap:var(--sp-3);margin-left:auto;}

@media (max-width:1180px){
  .fms-stats.cols-3{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:900px){
  .fms-grid-2{grid-template-columns:minmax(0,1fr);}
  .fms-form-grid{grid-template-columns:minmax(0,1fr);}
  .fms-dl{grid-template-columns:minmax(0,1fr);gap:2px;}
  .fms-dl dd{margin-bottom:var(--sp-2);}
}
@media (max-width:640px){
  .fms-page-head{align-items:flex-start;gap:var(--sp-4);}
  .fms-page-head .grow{flex:1 1 calc(100% - 100px);}
  .fms-page-actions{width:100%;}
  .fms-stats.cols-3{grid-template-columns:minmax(0,1fr);}
  .fms-toolbar .fms-select{width:100%;}
  .fms-modal-backdrop{padding-top:var(--sp-3);}
}
@media (prefers-reduced-motion:reduce){
  .fms-input,.fms-select,.fms-textarea,.fms-tab,.fms-icon-btn{transition:none;}
}
