---
description: Nexus 前端规范 — Tailwind v4 + Alpine.js；api.js JWT；禁止 XSS
globs: web/app/**
alwaysApply: false
---

# Nexus 前端 (Tailwind + Alpine.js)

## 页面结构

- 业务页先引入：`/app/api.js` → `/app/layout.js`（侧栏、搜索、移动端 overlay）
- 15 个 HTML 页面同级放在 `web/app/`，保持导航一致

## API 调用

- 一律 `apiFetch()` / `apiHeadersJSON()`，禁止手写裸 `fetch` 漏 Authorization
- Token 存 `localStorage`：`access_token`、`refresh_token`、`token_expires`
- 到期前 2 分钟自动 refresh；401 重试一次后 `_logout()`
- 8 小时无活动会话超时（与后端 JWT `updated_at` 对齐）

## WebSocket

- 仪表盘 `/ws/alerts?token=...`（JWT 查询参数，ADR-011）
- 收到 `alert` / `recovery` 刷新 stats，勿阻塞 UI 线程

## 安全（XSS）

- 禁止 `${userInput}` 直接插入 `innerHTML` 或 Alpine `x-html`
- 用户/服务器名等用 `textContent` 或 Alpine 文本绑定

## WebSSH

- `terminal.html`：xterm.js + Koko 协议；resize 随窗口
- 关闭码 4003 = 凭据/授权失败

## 验收

改 UI 后浏览器实机验证：Console 无报错、Network 无 404/500、登录→核心流程可走通。
