/* ═══ 管理端 · 账号 /admin/users + /admin/users/:id ═══
   只放这两屏独有的规则。共用的在 base.css / components.css / screens.css。
   颜色一律取令牌；这一份里出现任何 #hex 都是 bug（tools/selfcheck.py 会查）。

   两条这一屏特有的视觉约束：
   ① **账号状态不借严重度的红。** 红是「现在就去看」独占的语义色，一个号被停用
      不是一次告警。三种状态靠「形状 + 墨色深浅 + 文字」三重编码（WCAG 1.4.1）。
   ② **这一份里不出现 dashed。** 虚线锁给「时候未到」（未标注 / 还在积累），
      这一屏没有那一类；「还没登录过」是一件已经查清楚的事实，不是一个空。 */

/* ── 整屏三段：头（提示条 + 工具条）/ 主体 / 底部报账 ── */
.au-page { flex: 1; min-height: 0; display: flex; flex-direction: column; }
.au-head { padding: 14px 18px 0; flex-shrink: 0;                       /* GAP pad-18 */
           display: flex; flex-direction: column; gap: 10px; }         /* GAP head-gap-10 */
.au-body { flex: 1; min-height: 0; display: flex; flex-direction: column;
           padding: 14px 18px 18px; gap: 10px; }                       /* GAP pad-18 */

.au-toolbar { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; } /* GAP toolbar-gap-9 */
.au-seg { display: inline-flex; align-items: center; gap: var(--space-1); }
.au-spacer { flex: 1; }

/* 已激活筛选：徽章不许直接进控件排，所以走 28px 控件几何，只借徽章的配色。 */
.au-filtchip { background: var(--c-accent-wash); border-color: var(--c-accent-base);
               color: var(--c-accent-text); cursor: default; }
.au-filtchip .x { border: 0; background: none; padding: 0; cursor: pointer; color: inherit;
                  min-width: var(--a11y-floor-target-min); height: 28px;  /* GAP chip-h-28 */
                  display: inline-flex; align-items: center; justify-content: center; }
.au-filtchip .x svg { width: 12px; height: 12px; }
.au-activefilters { display: flex; gap: var(--space-2); justify-content: center; flex-wrap: wrap; }

/* ── 二档：就地插、3px 灰左条 + 断线图标、有形无色 ── */
.au-notice { display: flex; align-items: flex-start; gap: var(--space-2);
             padding: var(--space-2) var(--space-3);
             border-left: 3px solid var(--c-neutral-200);              /* GAP bar-3 */
             background: var(--c-neutral-25); border-radius: 0 var(--radius-md) var(--radius-md) 0;
             font-size: var(--size-base); color: var(--c-neutral-600);
             line-height: var(--leading-snug); }
.au-notice > svg { flex-shrink: 0; margin-top: 2px; color: var(--c-neutral-500); }

/* ── 三档：连容器都没有，原位一行字 + 一个「再试」，不用红 ── */
.au-fail { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap;
           margin: var(--space-2) 0 0; font-size: var(--size-base); color: var(--c-neutral-900); }
.au-fail > svg { color: var(--c-neutral-600); flex-shrink: 0; }
.au-rid { font-size: var(--size-11); color: var(--c-neutral-500); }
.au-failslot:empty { display: none; }

/* ── 表 ── */
.au-scroll { flex: 1; min-height: 0; overflow: auto;
             border: 1px solid var(--c-neutral-100); border-radius: var(--radius-10);
             background: var(--c-neutral-0); }
/* ⚠️ 必须写成 table.t.au-t：components.css 的 `table.t` 是 (0,1,1)，
   只写 .au-t 是 (0,1,0)，会被它的 min-width:720px 压过去——表就不横向滚动了，
   列被挤扁，正是「容器窄了绝不挤压列」那条硬规则要防的事。 */
table.t.au-t { min-width: 1180px; }                                    /* GAP au-minw */
table.t.au-t th, table.t.au-t td { padding: 8px 10px; }                /* GAP row-pad */
table.t.au-t th { font-size: var(--size-xs); }
/* hover 只换底色：不改尺寸、不改字重、不加位移阴影。每分钟有新数据到达，
   鼠标扫过时列表不能抖。 */
table.t.au-t tbody tr { transition: none; }
table.t.au-t tbody tr:focus-visible { outline: 2px solid var(--a11y-floor-focus-color);
                                      outline-offset: -2px; }

.au-login { font-size: var(--size-md); color: var(--c-neutral-900); text-decoration: none; }
.au-login:hover { text-decoration: underline; }
.au-mail { color: var(--c-neutral-600); }
.au-created { line-height: var(--leading-snug); }
.au-sub { font-size: var(--size-11); color: var(--c-neutral-500); }
.au-role { font-size: var(--size-sm); color: var(--c-neutral-600); }
.au-count { display: inline-flex; align-items: baseline; gap: 2px; }

/* 「还没登录过」：一件没发生过的事，不是一个缺失的值——所以既不给斜纹也不给虚线框，
   就是一句压低的实话。 */
.au-never { font-size: var(--size-sm); color: var(--c-neutral-500); }
/* 「还在用初始密码」这类要人去跟进的事实：提到主墨色，不给颜色也不加图标。 */
.au-flag { color: var(--c-neutral-900); font-weight: 500; }

/* ── 账号状态：形状 + 墨色深浅 + 文字，三重编码 ── */
.au-st { display: inline-flex; align-items: center; gap: 5px;          /* GAP st-gap-5 */
         font-size: var(--size-base); white-space: nowrap; }
.au-shape { width: 9px; height: 9px; flex-shrink: 0;                   /* GAP shape-9 */
            border: 1px solid currentColor; background: currentColor; }
.au-shape[data-shape="dot"] { border-radius: 50%; }
.au-shape[data-shape="half"] { border-radius: 1px;
                               background: linear-gradient(90deg, currentColor 50%, transparent 50%); }
.au-shape[data-shape="hollow"] { border-radius: 1px; background: none; }
.au-st-active { color: var(--c-neutral-900); }
.au-st-suspended { color: var(--c-neutral-600); }
.au-st-disabled { color: var(--c-neutral-500); }

/* ── 底部：已加载多少。cursor 分页，所以只报「已加载」，绝不报「共」 ── */
.au-foot { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap;
           flex-shrink: 0; font-size: var(--size-sm); color: var(--c-neutral-500); }
.au-more { color: var(--c-neutral-500); }

/* ── 详情页 ── */
.au-detailbody { overflow-y: auto; gap: var(--space-3); max-width: 900px; } /* GAP detail-maxw */
.au-card { flex-shrink: 0; }
.au-card > header h3 { font-size: var(--size-md); font-weight: 500; color: var(--c-neutral-900); }
.au-card > header > svg { color: var(--c-neutral-500); flex-shrink: 0; }
.au-idline { display: flex; align-items: center; gap: 10px; flex-wrap: wrap;  /* GAP idline-10 */
             margin-bottom: var(--space-3); }
.au-idline .au-login { font-size: var(--size-lg); font-weight: 500; }
.au-blank { color: var(--c-neutral-500); font-size: var(--size-sm); }
.au-note { margin: var(--space-3) 0 0; font-size: var(--size-11); color: var(--c-neutral-500);
           line-height: var(--leading-snug); }

.au-kicks { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column;
            gap: var(--space-2); font-size: var(--size-base); color: var(--c-neutral-900); }
.au-kicks li { line-height: var(--leading-snug); }

table.t.au-daytable, table.t.au-logintable { min-width: 0; }
table.t.au-daytable th, table.t.au-daytable td,
table.t.au-logintable th, table.t.au-logintable td { padding: 6px 10px; }  /* GAP row-pad-tight */

/* 危险区：有形无色。红留给一档断采横幅，不给这里——停用一个号不是一次告警。 */
.au-danger > header { border-bottom-color: var(--c-neutral-200); }
.au-drow { display: flex; align-items: center; gap: var(--space-3); flex-wrap: wrap;
           padding: var(--space-3) 0; border-bottom: 1px solid var(--c-neutral-100); }
.au-drow:last-of-type { border-bottom: 0; }
.au-dtext { flex: 1; min-width: 220px; display: flex; flex-direction: column; gap: 2px; }
.au-dtext b { font-size: var(--size-md); font-weight: 500; color: var(--c-neutral-900); }
.au-dtext span { font-size: var(--size-sm); color: var(--c-neutral-600);
                 line-height: var(--leading-snug); }

/* ── 弹层 ── */
.au-dlg-t { font-size: var(--size-lg); font-weight: 500; color: var(--c-neutral-900); }
.au-modal > .body { display: flex; flex-direction: column; gap: var(--space-3); }
.au-modal > .body > p { margin: 0; }

.au-reasons { display: flex; gap: var(--space-4); flex-wrap: wrap; }
.au-reason { display: inline-flex; align-items: center; gap: var(--space-2);
             min-height: var(--a11y-floor-target-used); font-size: var(--size-base);
             color: var(--c-neutral-900); cursor: pointer; }

/* 一次性密码块：那句「只显示这一次」必须在密码露出来之前被读到，所以它在最上面，
   而密码默认盖着。 */
.au-secretbox { display: flex; flex-direction: column; gap: var(--space-3); }
.au-warn { margin: 0; font-size: var(--size-base); color: var(--c-neutral-900);
           line-height: var(--leading-snug); }
.au-secret { font-family: var(--font-mono); font-size: var(--size-md); letter-spacing: .02em;
             color: var(--c-neutral-500); background: var(--c-neutral-50);
             border: 1px solid var(--c-neutral-100); border-radius: var(--radius-sm);
             padding: 2px 7px; user-select: all; }
.au-secret.on { color: var(--c-neutral-900); }
.au-secretrow { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; }
.au-copystate { margin: 0; font-size: var(--size-sm); color: var(--c-neutral-600); }
.au-copystate:empty { display: none; }
.au-guardslot:empty { display: none; }

/* ── 窄屏：纵向堆叠，一个字段都不删（宽表横向滚动） ── */
@media (max-width: 720px) {
  .au-head, .au-body { padding-left: var(--space-3); padding-right: var(--space-3); }
  .au-toolbar .au-spacer { flex-basis: 100%; height: 0; }
  .au-drow { align-items: flex-start; }
}
