Sort order: EXEMPT \u2192 TASK \u2192 HD \u2192 KILL \u2192 RATIO \u2192 DRATIO \u2192 TRAFFIC
Each rule shown as natural language sentence with applicable condition
TASK shows only enabled requirements
Regardless of card drag order, summary always displays in fixed sequence
Each requirement has an el-switch; disabled items grey out and input is locked
Sites can pick only the conditions they need (e.g. upload+download only)
More accurate than '\u964d\u7ea7\u81f3Peasant': user is demoted regardless of rank, then killed after 7 days
Template dialog: '\u7f13\u52117\u5929' instead of '\u964d\u7ea7'
- Low ratio \u2192 demote to Peasant \u2192 kill after 7 days, not immediate kill
- Orange arrow + '\u964d\u7ea7\u81f3Peasant' label instead of red '\u5c01\u53f7/\u5220\u9664\u8d26\u53f7'
- Card body shows full explanation: \u4f4e\u4e8e\u6b64\u5206\u4eab\u7387\u5219\u964d\u7ea7\u81f3Peasant\uff0c7\u5929\u540e\u5c01\u53f7/\u5220\u9664\u8d26\u53f7
- Template dialog also shows '\u964d\u7ea7' label for RATIO/DRATIO presets
- 10 standard PT ranks: Peasant(0) \u2192 Nexus Master(9)
- Dropdown shows \u201c3. Elite User\u201d format with level and name
- Card header and template dialog also show level numbers
- Default preset: Elite User for perm, Power User for seal
- Opposite of kill rules: protects users instead of deleting them
- permRank: users at/above this rank permanently immune from all cleanups
- sealExemptRank: users at/above this rank won't be killed when sealed
- Green left border + green '\u4fdd\u53f7' label to visually distinguish from kill rules
- Template: Elite User for perm, Power User for seal exemption
- LOGIN type duplicated with KILL (both use days_since_last_login)
- KILL label: \u5c01\u53f7\u89c4\u5219 \u2192 \u6d3b\u8dc3\u5ea6 (action is always \u5c01\u53f7/\u5220\u9664\u8d26\u53f7, type now describes monitoring category)
- Replace editable name/metric/condition/unit with plain text in card header
- Card header shows: [type] [metric label] [condition label] [threshold][unit] \u2192 \u5c01\u53f7
- Type change auto-updates metric/condition/unit via typeDefaults mapping
- Card body only shows: threshold, applicable, description
- Fix edit title to show site name instead of raw siteType
- Remove unused styles and functions
- WARN is auto-detected by RiskCheckEngine (riskPct > 80), not configured in rules
- Each rule simply defines: type + metric + condition + threshold + unit -> 封号
- Card always shows red left border and red '封号' arrow, no action selector
- Presets reduced to 7 kill-only templates, no WARN presets
- Replace complex type system (DEMOTE/TASK) with simple KILL/WARN action model
- Each rule now has: type (monitoring category) + action (KILL=封号 / WARN=告警)
- Type options: KILL/TRAFFIC/LOGIN/HD/RATIO (no DEMOTE/TASK)
- Card left border color by action: red=KILL, orange=WARN
- 12 preset templates with alert-based rules (60-day no-traffic warn, 140-day login warn, HnR warn, ratio warn)
- Remove requirements sub-table and downloadThreshold fields
- Left pane: fixed 400px CodeEditor for JSON editing
- Right pane: card-based visual editor with natural language, drag-and-drop, presets
- Remove JSON toggle button, always show both panes
- SitePagesController: add PUT /admin/site-pages/{siteId}/upload for uploading normal site pages to cloud storage
- SitePages.vue: show upload button for both default templates and normal sites