feat(web): protect phone data and polish release UI

This commit is contained in:
Codex
2026-07-30 20:16:50 +08:00
parent 6ec8e4f6a6
commit d60cff1dd8
19 changed files with 800 additions and 396 deletions
+97 -60
View File
@@ -253,11 +253,6 @@ code {
color: #fff;
font-size: 1rem;
}
.product-copy small {
color: #91a3b9;
font-size: 0.68rem;
letter-spacing: 0.03em;
}
.topbar-actions {
display: flex;
align-items: center;
@@ -384,16 +379,13 @@ main > section > header,
margin-bottom: 1rem;
border-bottom: 1px solid var(--line);
}
.fleet-heading p,
main > section > header p,
.page-heading p {
margin: 0.2rem 0 0;
color: var(--muted);
}
.page-kicker,
.eyebrow,
.fleet-sidebar-eyebrow,
.fleet-results-eyebrow {
.eyebrow {
margin: 0 0 0.18rem !important;
color: var(--primary) !important;
font-size: 0.66rem;
@@ -625,17 +617,6 @@ main > section > header p,
color: #fff;
background: var(--primary);
}
.fleet-sidebar-result-count {
margin: 0;
padding: 0.45rem 0.6rem;
color: var(--muted);
border-radius: 8px;
background: #f4f6f8;
font-size: 0.76rem;
}
.fleet-sidebar-result-count strong {
color: var(--ink);
}
.fleet-active-filters {
display: flex;
gap: 0.35rem;
@@ -1722,10 +1703,6 @@ main ul[aria-label='已配置实例'] > li {
.auth-card input {
width: 100%;
}
.auth-card .eyebrow {
color: #8eabff !important;
}
@media (max-width: 70rem) {
.fleet-workspace,
.fleet-workspace.is-sidebar-collapsed {
@@ -1775,7 +1752,6 @@ main ul[aria-label='已配置实例'] > li {
gap: 0.55rem;
padding: 0.55rem 0.75rem;
}
.product-copy small,
.connection-status {
display: none;
}
@@ -1901,11 +1877,6 @@ body,
letter-spacing: 0;
}
.product-copy small {
color: var(--workbench-muted);
font-size: 0.68rem;
}
.global-navigation {
align-self: stretch;
gap: 0.15rem;
@@ -2079,10 +2050,6 @@ main {
border-bottom: 1px solid var(--workbench-border);
}
.fleet-results-eyebrow {
display: none;
}
.fleet-card-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
@@ -2409,12 +2376,6 @@ main {
margin-bottom: 0.75rem;
font-size: 0.82rem;
}
.drawer-eyebrow {
color: var(--workbench-mint);
font-size: 0.68rem;
font-weight: 800;
text-transform: uppercase;
}
.icon-button {
width: 2.75rem;
height: 2.75rem;
@@ -2579,9 +2540,6 @@ main {
flex-wrap: wrap;
padding: 0.45rem 0.65rem;
}
.product-copy small {
display: none;
}
.topbar-actions {
margin-left: auto;
}
@@ -2838,10 +2796,6 @@ h1 {
font-size: 1.04rem;
}
.product-copy small {
color: #75664f;
}
.global-navigation {
gap: 0.3rem;
padding: 0.32rem;
@@ -2961,9 +2915,7 @@ main > section > header h1,
}
.page-kicker,
.eyebrow,
.fleet-sidebar-eyebrow,
.fleet-results-eyebrow {
.eyebrow {
color: #138f85 !important;
}
@@ -3115,10 +3067,6 @@ main > section > header h1,
border-bottom: 2px dashed #cabfa9;
}
.fleet-results-eyebrow {
color: #725d42 !important;
}
.fleet-card-grid {
grid-template-columns: repeat(auto-fill, minmax(min(100%, 20rem), 1fr));
gap: 1rem;
@@ -3764,10 +3712,6 @@ main ul[aria-label='已配置实例'] > li > div[class*='animal-'] {
color: #725d42;
}
.auth-card .eyebrow {
color: #138f85 !important;
}
.app-footer {
width: 100%;
margin-top: 1rem;
@@ -3894,7 +3838,6 @@ svg {
}
.fleet-sidebar-header strong,
.fleet-status-summary span,
.fleet-results-eyebrow,
.fleet-card-kicker,
.fleet-card-metrics dt,
.fleet-card-sms h3,
@@ -3906,7 +3849,6 @@ svg {
}
.fleet-sidebar-header strong svg,
.fleet-status-summary span svg,
.fleet-results-eyebrow svg,
.fleet-card-kicker svg,
.fleet-card-metrics dt svg,
.fleet-card-sms h3 svg,
@@ -4901,3 +4843,98 @@ svg {
overflow-x: auto;
overflow-y: hidden;
}
/* Phone privacy controls share one stable row across all fleet card widths. */
.fleet-card-hardware {
grid-template-columns: minmax(0, 1.55fr) minmax(5.25rem, 0.65fr);
gap: 0.35rem;
padding: 0.72rem 0.45rem;
}
.fleet-card-hardware dt,
.fleet-card-hardware dd {
white-space: nowrap;
}
.fleet-card-hardware .fleet-card-phone {
gap: 0.15rem;
}
.fleet-card-hardware .fleet-card-phone dd {
display: flex;
min-height: 2.5rem;
align-items: center;
gap: 0.25rem;
}
.fleet-card-phone-value {
min-width: 0;
flex: 1 1 auto;
overflow: hidden;
font-size: 0.7rem;
font-variant-numeric: tabular-nums;
white-space: nowrap;
text-overflow: ellipsis;
}
.fleet-phone-privacy-toggle,
.fleet-phone-privacy-toggle:hover:not(:disabled),
.fleet-phone-privacy-toggle:active:not(:disabled) {
position: relative;
display: grid;
width: 2.5rem;
height: 2.5rem;
min-height: 2.5rem;
flex: 0 0 2.5rem;
place-items: center;
padding: 0;
border: 1px solid var(--workbench-border);
border-radius: 8px;
color: var(--workbench-muted);
background: #fffef9;
box-shadow: none;
transform: none;
}
.fleet-phone-privacy-toggle::before {
position: absolute;
inset: -0.125rem;
content: '';
}
.fleet-phone-privacy-toggle:hover:not(:disabled) {
color: var(--workbench-text);
border-color: var(--workbench-border-strong);
background: #fff;
}
.fleet-phone-privacy-toggle[aria-pressed='true'] {
color: var(--workbench-mint);
border-color: rgba(17, 119, 110, 0.36);
background: #f1faf6;
}
.fleet-phone-privacy-toggle:focus-visible {
outline: 2px solid var(--workbench-mint);
outline-offset: 2px;
}
.fleet-phone-privacy-toggle svg {
width: 1rem;
height: 1rem;
}
.fleet-card-footer-primary > span:last-child {
font-variant-numeric: tabular-nums;
}
@media (min-width: 80rem) {
.fleet-card-footer {
display: grid;
grid-template-columns: minmax(0, 1fr);
}
.fleet-card-footer-time {
justify-self: end;
}
}