perch-design / css /permissions.css
hongcoding's picture
feat: Warm Paper 设计系统开源(48 CSS + 令牌 + 实时预览)
f402bb3 verified
Raw History Blame Contribute Delete
5.88 kB
/* 设置 → 权限(契约 13A 自主授权模式)——只用 theme.css 的色彩令牌,
不硬编码任何颜色;危险授权卡「红但不恐吓」(design-system.md:danger
只做指引,不用高饱和大面积红)。 */
/* 危险操作授权状态卡:未授权=灰(安全态),已授权=danger 描边 + 极淡底 */
.perm-card {
margin: 14px 0 0;
padding: 14px 16px;
border: 1px solid var(--border);
border-radius: var(--radius-card, 12px);
background: var(--bg-sunken);
transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease);
}
.perm-card.is-authorized {
border-color: var(--danger);
background: color-mix(in srgb, var(--danger) 6%, var(--bg));
}
.perm-card-head {
display: flex;
gap: 12px;
align-items: flex-start;
}
.perm-card-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 30px;
height: 30px;
border-radius: 50%;
border: 1px solid var(--border);
background: var(--bg);
color: var(--text-secondary);
flex-shrink: 0;
}
.perm-card.is-authorized .perm-card-icon {
color: var(--danger);
border-color: color-mix(in srgb, var(--danger) 40%, var(--border));
}
.perm-card-text {
min-width: 0;
}
.perm-card-title {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
font-weight: 500;
color: var(--text);
}
.perm-card-desc {
margin: 4px 0 0;
font-size: 12.5px;
line-height: 1.6;
color: var(--text-secondary);
}
/* 状态徽章:未授权=灰点,已授权=danger 点 */
.perm-status-badge {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 11.5px;
font-weight: 500;
padding: 3px 9px;
border-radius: 999px;
border: 1px solid var(--border);
color: var(--text-secondary);
background: var(--bg);
}
.perm-status-badge.is-on {
color: var(--danger);
border-color: color-mix(in srgb, var(--danger) 45%, var(--border));
}
.perm-status-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--text-tertiary);
}
.perm-status-badge.is-on .perm-status-dot {
background: var(--danger);
}
/* 卡内操作行 */
.perm-card-actions {
margin-top: 12px;
display: flex;
gap: 8px;
}
/* 一次性授权面板(输入确认词) */
.perm-grant-panel {
margin-top: 12px;
padding: 12px 14px;
border: 1px solid color-mix(in srgb, var(--danger) 35%, var(--border));
border-radius: var(--radius-control, 9px);
background: var(--bg);
}
.perm-grant-risk {
margin: 0;
font-size: 13px;
font-weight: 500;
color: var(--danger);
line-height: 1.6;
}
.perm-grant-note {
margin: 4px 0 0;
font-size: 12.5px;
color: var(--text-secondary);
line-height: 1.6;
}
.perm-grant-row {
margin-top: 10px;
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.perm-grant-input {
font: inherit;
font-size: 13px;
color: var(--text);
background: var(--bg-sunken);
border: 1px solid var(--border);
border-radius: var(--radius-control);
padding: 8px 10px;
min-width: 180px;
}
.perm-grant-input:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 1px;
}
/* 按钮三态:危险红底(有分量不刺眼)/ 危险描边(安静入口)/ 中性 */
.perm-btn-danger,
.perm-btn-danger-quiet,
.perm-btn-quiet {
appearance: none;
font: inherit;
font-size: 13px;
line-height: 1;
padding: 9px 14px;
border-radius: var(--radius-control);
cursor: pointer;
transition: background var(--dur) var(--ease), color var(--dur) var(--ease),
border-color var(--dur) var(--ease), opacity var(--dur) var(--ease);
}
.perm-btn-danger {
border: 1px solid var(--danger);
background: var(--danger);
color: var(--bg);
}
.perm-btn-danger:hover:not(:disabled) {
background: color-mix(in srgb, var(--danger) 88%, var(--text));
}
.perm-btn-danger:disabled {
opacity: 0.45;
cursor: not-allowed;
}
.perm-btn-danger-quiet {
border: 1px solid color-mix(in srgb, var(--danger) 45%, var(--border));
background: transparent;
color: var(--danger);
}
.perm-btn-danger-quiet:hover:not(:disabled) {
background: color-mix(in srgb, var(--danger) 10%, transparent);
}
.perm-btn-quiet {
border: 1px solid var(--border);
background: transparent;
color: var(--text-secondary);
}
.perm-btn-quiet:hover:not(:disabled) {
color: var(--text);
background: var(--bg-elevated);
}
.perm-btn-danger:focus-visible,
.perm-btn-danger-quiet:focus-visible,
.perm-btn-quiet:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 1px;
}
/* sudo 固定说明行(不可更改):中性底 + 锁形小图标 */
.perm-fixed-row {
margin-top: 14px;
display: flex;
gap: 10px;
align-items: flex-start;
padding: 11px 14px;
border: 1px solid var(--border);
border-radius: var(--radius-control, 9px);
background: var(--bg-sunken);
font-size: 12.5px;
line-height: 1.6;
color: var(--text-secondary);
}
.perm-fixed-row strong {
color: var(--text);
font-weight: 500;
margin-right: 4px;
}
.perm-fixed-icon {
display: inline-flex;
align-items: center;
color: var(--text-tertiary);
margin-top: 2px;
flex-shrink: 0;
}
/* 底部常驻审计承诺行 */
.perm-audit-pledge {
margin: 14px 0 0;
padding-top: 12px;
border-top: 1px solid var(--border);
font-size: 12px;
line-height: 1.6;
color: var(--text-tertiary);
}
/* Composer 任务模式的总闸状态小字(只读展示,改动去设置) */
.perm-gate-hint {
font-size: 11px;
line-height: 1;
color: var(--text-tertiary);
white-space: nowrap;
align-self: center;
cursor: default;
}
/* 实时之眼摄像头状态徽章(契约 12B):授权=绿(与危险授权的红语义区分) */
.perm-status-badge.is-good {
color: var(--success);
border-color: color-mix(in srgb, var(--success) 45%, var(--border));
}
.perm-status-badge.is-good .perm-status-dot {
background: var(--success);
}