Add per-action AI privacy mode

This commit is contained in:
2026-05-27 00:21:16 +08:00
parent 7e329f1d85
commit 5d96c1de6d
15 changed files with 1993 additions and 340 deletions

View File

@@ -524,6 +524,57 @@ textarea {
background: #eef1f4;
}
.ai-progress {
display: grid;
gap: 7px;
border: 1px solid #9db7d8;
border-radius: 7px;
background: #f4f9ff;
padding: 8px;
}
.ai-progress-head {
display: flex;
justify-content: space-between;
gap: 8px;
align-items: center;
font-size: 12px;
}
.ai-progress-head strong {
color: #174a83;
}
.ai-progress-head span,
.ai-progress-meta {
color: var(--muted);
font-size: 12px;
}
.ai-progress-track {
height: 9px;
overflow: hidden;
border-radius: 999px;
background: #dbe6f3;
}
.ai-progress-track span {
display: block;
width: 0%;
height: 100%;
border-radius: inherit;
background: #2474bd;
transition: width .2s ease;
}
.ai-progress button {
min-height: 30px;
border: 1px solid #9f6d20;
border-radius: 6px;
background: #fff4df;
color: #744500;
}
#pdfSubtitle {
display: block;
margin-top: 3px;
@@ -707,6 +758,13 @@ textarea {
font-size: 12px;
}
.target-chips.is-ai-target button,
.target-chips.is-ai-target span {
border-color: #9bbff0;
background: #f3f8ff;
color: #1f5f9e;
}
.target-summary ul {
margin: 0;
padding: 0 10px 10px 28px;
@@ -715,6 +773,10 @@ textarea {
line-height: 1.5;
}
.target-summary ul.ai-note-list {
color: #1f5f9e;
}
#saveBtn,
.login-panel button,
.session-box button,
@@ -830,6 +892,14 @@ textarea {
font-style: normal;
}
.field.is-ai-modified > span em {
color: #1769c2;
}
.field.is-manual-modified > span em {
color: var(--ok);
}
.field.is-alert input,
.field.is-alert select,
.field.is-alert textarea,
@@ -838,6 +908,34 @@ textarea {
background: var(--focus-bg);
}
.field.is-ai-modified input,
.field.is-ai-modified select,
.field.is-ai-modified textarea,
.field.is-ai-modified .json-editor {
border-color: #78aee8;
background: #f2f8ff;
}
.field.is-manual-modified input,
.field.is-manual-modified select,
.field.is-manual-modified textarea,
.field.is-manual-modified .json-editor {
border-color: #8bc8a8;
background: #f2fbf6;
}
.json-table td.is-ai-cell input {
border-color: #5d9ee7;
background: #edf6ff;
box-shadow: inset 3px 0 0 #2d7ecb;
}
.json-table td.is-manual-cell input {
border-color: #6fbd91;
background: #effaf4;
box-shadow: inset 3px 0 0 #2b9a57;
}
.json-editor {
border: 1px solid var(--line);
border-radius: 7px;
@@ -899,6 +997,106 @@ textarea {
white-space: nowrap;
}
.data-table tr.log-ai td {
background: #f3f8ff;
}
.data-table tr.log-manual td {
background: #f3fbf6;
}
.ai-question-item {
border-top: 1px solid var(--line);
background: #fff;
}
.ai-question-item summary {
cursor: pointer;
display: grid;
grid-template-columns: 140px 110px minmax(0, 1fr);
gap: 8px;
align-items: center;
min-height: 34px;
padding: 7px 10px;
color: var(--muted);
}
.ai-question-item summary strong {
color: var(--accent);
}
.ai-question-item summary em {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-style: normal;
}
.ai-question-body {
display: grid;
gap: 8px;
padding: 8px 10px 10px;
border-top: 1px solid var(--line);
background: #fbfdff;
}
.ai-question-body p {
margin: 3px 0 0;
}
.ai-question-body pre {
max-height: 220px;
overflow: auto;
margin: 4px 0 0;
padding: 8px;
border: 1px solid var(--line);
border-radius: 6px;
background: #fff;
white-space: pre-wrap;
}
.ai-question-images {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 8px;
margin-top: 6px;
}
.ai-question-figure {
min-width: 0;
margin: 0;
border: 1px solid var(--line);
border-radius: 6px;
background: #fff;
overflow: hidden;
}
.ai-question-image-frame {
display: grid;
place-items: center;
min-height: 120px;
max-height: 320px;
overflow: auto;
background: #252525;
}
.ai-question-image-frame img {
max-width: 100%;
height: auto;
display: block;
}
.ai-question-figure figcaption {
padding: 6px 8px;
color: var(--muted);
font-size: 12px;
border-top: 1px solid var(--line);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.json-table input {
min-width: 120px;
border-color: #c8d0d8;
@@ -929,6 +1127,9 @@ textarea {
.review-log-panel {
max-height: 230px;
overflow: auto;
}
.review-log-panel.collapsible-panel {
padding: 0;
}
@@ -1025,6 +1226,29 @@ textarea {
grid-column: 1 / -1;
}
.settings-ai {
grid-column: 1 / -1;
}
.ai-section-head {
align-items: flex-start;
}
.ai-title-row {
display: inline-flex;
align-items: center;
gap: 14px;
flex-wrap: wrap;
}
.ai-enable-toggle {
min-height: 28px;
border: 1px solid var(--line);
border-radius: 6px;
padding: 3px 8px;
background: #f8fafb;
}
.settings-form {
display: grid;
grid-template-columns: minmax(180px, 1fr) minmax(180px, 1fr) minmax(360px, 2fr) auto;
@@ -1040,7 +1264,91 @@ textarea {
align-items: center;
}
.status-check-form input {
.ai-settings-form {
display: grid;
grid-template-columns: minmax(170px, 1fr) minmax(260px, 1.4fr) 82px auto auto;
gap: 10px;
align-items: end;
}
.ai-settings-form > label:not(.toggle-field) {
display: grid;
gap: 4px;
}
.ai-settings-form > label > span {
color: var(--muted);
font-size: 12px;
}
.ai-action-table {
margin-top: 10px;
border: 1px solid var(--line);
border-radius: 8px;
overflow: auto;
}
.ai-action-table table {
width: 100%;
min-width: 760px;
border-collapse: collapse;
}
.ai-action-table th,
.ai-action-table td {
border-bottom: 1px solid var(--line);
padding: 8px 10px;
text-align: left;
vertical-align: middle;
}
.ai-action-table th {
color: var(--muted);
font-size: 12px;
background: #f7fafc;
}
.ai-action-table tr:last-child td {
border-bottom: 0;
}
.ai-action-table select {
min-height: 32px;
}
.ai-privacy-toggle {
min-height: 32px;
display: inline-flex;
align-items: center;
gap: 6px;
white-space: nowrap;
}
.ai-privacy-toggle input {
width: auto;
min-height: 0;
}
.ai-privacy-note {
margin-top: 8px;
border: 1px solid #b6dec9;
border-radius: 6px;
padding: 8px 10px;
color: var(--ok);
background: var(--ok-bg);
font-size: 12px;
}
.ai-privacy-note.is-warning {
border-color: #e9c26f;
color: var(--warn);
background: var(--warn-bg);
}
.status-check-form input,
.status-check-form select,
.ai-settings-form input,
.ai-settings-form select {
min-height: 34px;
}
@@ -1174,7 +1482,8 @@ textarea {
min-height: 0;
}
.status-check-form {
.status-check-form,
.ai-settings-form {
grid-template-columns: 1fr;
}