feat(web-console): add personalized seat weighing evolution

This commit is contained in:
vee
2026-08-14 15:53:08 +08:00
parent f77dda70fe
commit 344f662970
7 changed files with 1970 additions and 766 deletions
-537
View File
@@ -1364,543 +1364,6 @@
opacity: 0.78;
}
/* Self-evolution journal ------------------------------------------------- */
.console-v2 .v2-self-evolution {
display: none;
}
.console-v2[data-module="self-evolution"] .main-panel {
grid-template-rows: 36px minmax(0, 1fr);
}
.console-v2[data-module="self-evolution"] .v2-operation-shell,
.console-v2[data-module="self-evolution"] .v2-output-shell {
display: none;
}
.console-v2[data-module="self-evolution"] .v2-self-evolution {
min-width: 0;
min-height: 0;
display: block;
grid-row: 2;
overflow: auto;
background:
radial-gradient(circle at 10% 0%, color-mix(in srgb, var(--v2-accent-soft) 68%, white), transparent 27%),
var(--v2-surface);
border: 1px solid color-mix(in srgb, var(--v2-accent) 14%, transparent);
border-radius: clamp(17px, 1.4vw, 24px);
box-shadow: var(--v2-shadow);
}
.v2-evolution-shell {
min-width: 820px;
min-height: 100%;
display: grid;
grid-template-rows: auto minmax(330px, 1fr) auto;
}
.v2-evolution-overview {
min-width: 0;
display: grid;
grid-template-columns: minmax(300px, 1fr) auto;
align-items: start;
gap: clamp(20px, 3vw, 48px);
padding: var(--v2-module-title-block) var(--v2-module-title-inline);
border-bottom: 1px solid var(--v2-line);
}
.v2-evolution-heading .section-kicker {
display: inline-flex;
align-items: center;
gap: 7px;
color: var(--v2-accent-strong);
font-size: 9px;
font-weight: 850;
letter-spacing: 0.18em;
}
.v2-evolution-heading .section-kicker svg {
width: 15px;
height: 15px;
}
.v2-evolution-heading h1 {
margin: 8px 0 0;
color: var(--v2-ink);
font-size: clamp(24px, 2vw, 34px);
line-height: 1.06;
letter-spacing: -0.04em;
}
.v2-evolution-heading > p {
margin: 9px 0 0;
color: var(--v2-muted);
font-size: 12px;
line-height: 1.6;
}
.v2-evolution-summary {
min-width: 430px;
display: grid;
grid-template-columns: 1.25fr repeat(3, 1fr);
margin: 0;
overflow: hidden;
background: color-mix(in srgb, var(--v2-accent-soft) 38%, white);
border: 1px solid color-mix(in srgb, var(--v2-accent) 13%, transparent);
border-radius: 14px;
}
.v2-evolution-summary > div {
min-width: 0;
display: grid;
align-content: center;
padding: 11px 14px;
border-left: 1px solid var(--v2-line);
}
.v2-evolution-summary > div:first-child {
border-left: 0;
}
.v2-evolution-summary dt,
.v2-evolution-summary small {
color: var(--v2-muted);
font-size: 8px;
font-weight: 750;
}
.v2-evolution-summary dd {
margin: 2px 0 0;
color: var(--v2-ink);
font: 850 19px/1.1 "SFMono-Regular", Consolas, "Microsoft YaHei", monospace;
}
.v2-evolution-summary .v2-evolution-current dd {
color: var(--v2-accent-strong);
}
.v2-evolution-workspace {
min-width: 0;
min-height: 0;
display: grid;
grid-template-columns: clamp(225px, 21vw, 290px) minmax(0, 1fr);
}
.v2-evolution-timeline {
min-width: 0;
padding: 20px 18px 18px 24px;
background: color-mix(in srgb, var(--v2-accent-soft) 13%, white);
border-right: 1px solid var(--v2-line);
}
.v2-evolution-timeline-heading {
padding: 0 8px 12px 15px;
}
.v2-evolution-timeline-heading span,
.v2-evolution-next small {
display: block;
color: var(--v2-accent-strong);
font-size: 8px;
font-weight: 850;
letter-spacing: 0.16em;
}
.v2-evolution-timeline-heading strong {
display: block;
margin-top: 4px;
color: var(--v2-ink);
font-size: 13px;
}
.v2-evolution-version-list {
position: relative;
display: grid;
gap: 4px;
}
.v2-evolution-version-list::before {
width: 1px;
position: absolute;
inset: 11px auto 11px 6px;
content: "";
background: color-mix(in srgb, var(--v2-accent) 24%, transparent);
}
.v2-evolution-version {
min-width: 0;
position: relative;
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 2px 10px;
padding: 8px 9px 8px 25px;
color: var(--v2-muted);
text-align: left;
background: transparent;
border: 0;
border-radius: var(--v2-sidebar-card-radius);
cursor: pointer;
}
.v2-evolution-version::before {
width: 7px;
height: 7px;
position: absolute;
top: 14px;
left: 3px;
z-index: 1;
content: "";
background: white;
border: 2px solid color-mix(in srgb, var(--v2-accent) 42%, #a8b4b4);
border-radius: 50%;
}
.v2-evolution-version:hover {
color: var(--v2-ink);
background: color-mix(in srgb, var(--v2-accent-soft) 38%, transparent);
}
.v2-evolution-version.active {
color: var(--v2-accent-strong);
background: color-mix(in srgb, var(--v2-accent-soft) 72%, white);
}
.v2-evolution-version.active::before {
background: var(--v2-accent);
border-color: white;
box-shadow: 0 0 0 4px color-mix(in srgb, var(--v2-accent) 14%, transparent);
}
.v2-evolution-version > span {
display: flex;
align-items: center;
gap: 8px;
}
.v2-evolution-version strong {
color: currentColor;
font: 850 12px/1.2 "SFMono-Regular", Consolas, monospace;
}
.v2-evolution-version time,
.v2-evolution-version small {
color: var(--v2-muted);
font-size: 8px;
}
.v2-evolution-version b {
grid-column: 1 / -1;
overflow: hidden;
color: var(--v2-ink);
font-size: 11px;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-evolution-version small {
grid-column: 2;
grid-row: 1;
align-self: center;
white-space: nowrap;
}
.v2-evolution-detail {
min-width: 0;
padding: clamp(20px, 2.2vw, 32px) clamp(24px, 2.7vw, 42px) 20px;
}
.v2-evolution-detail-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.v2-evolution-detail-heading > div {
display: flex;
align-items: center;
gap: 10px;
}
.v2-evolution-status {
padding: 4px 9px;
color: var(--v2-accent-strong);
background: var(--v2-accent-soft);
border-radius: 999px;
font-size: 9px;
font-weight: 850;
}
.v2-evolution-detail-version {
color: var(--v2-muted);
font: 800 11px/1 "SFMono-Regular", Consolas, monospace;
}
.v2-evolution-detail-heading time {
color: var(--v2-muted);
font: 750 10px/1 "SFMono-Regular", Consolas, monospace;
}
.v2-evolution-detail > h2 {
margin: 12px 0 0;
color: var(--v2-ink);
font-size: clamp(20px, 1.7vw, 28px);
line-height: 1.15;
letter-spacing: -0.035em;
}
.v2-evolution-lead {
max-width: 860px;
margin: 7px 0 0;
color: var(--v2-muted);
font-size: 11px;
line-height: 1.6;
}
.v2-evolution-detail-grid {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(240px, 0.92fr);
gap: clamp(24px, 3vw, 48px);
margin-top: 18px;
padding-top: 16px;
border-top: 1px solid var(--v2-line);
}
.v2-evolution-detail-grid h3 {
display: flex;
align-items: center;
gap: 7px;
margin: 0 0 12px;
color: var(--v2-ink);
font-size: 11px;
}
.v2-evolution-detail-grid h3 svg {
width: 14px;
height: 14px;
color: var(--v2-accent);
}
.v2-evolution-changes > div {
display: grid;
gap: 10px;
}
.v2-evolution-changes > div > div {
min-width: 0;
display: grid;
grid-template-columns: 22px minmax(0, 1fr);
gap: 9px;
}
.v2-evolution-changes > div > div > svg {
width: 22px;
height: 22px;
padding: 5px;
color: var(--v2-accent-strong);
background: var(--v2-accent-soft);
border-radius: 50%;
}
.v2-evolution-changes p {
margin: 0;
}
.v2-evolution-changes p strong,
.v2-evolution-changes p span {
display: block;
}
.v2-evolution-changes p strong {
color: var(--v2-ink);
font-size: 10px;
}
.v2-evolution-changes p span {
margin-top: 2px;
color: var(--v2-muted);
font-size: 9px;
line-height: 1.45;
}
.v2-evolution-evidence > div {
display: grid;
gap: 12px;
}
.v2-evolution-metric > div {
min-width: 0;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.v2-evolution-metric > div > span {
overflow: hidden;
color: var(--v2-ink);
font-size: 9px;
font-weight: 750;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-evolution-metric p {
display: flex;
align-items: center;
gap: 5px;
margin: 0;
white-space: nowrap;
}
.v2-evolution-metric del {
color: #98a5a6;
font-size: 8px;
text-decoration-thickness: 1px;
}
.v2-evolution-metric p svg {
width: 10px;
height: 10px;
color: var(--v2-muted);
}
.v2-evolution-metric p strong {
color: var(--v2-accent-strong);
font-size: 10px;
}
.v2-evolution-progress {
width: 100%;
height: 5px;
display: block;
margin-top: 5px;
overflow: hidden;
background: color-mix(in srgb, var(--v2-accent-soft) 50%, #e7eceb);
border-radius: 999px;
}
.v2-evolution-progress i {
width: var(--evolution-progress);
height: 100%;
display: block;
background: linear-gradient(90deg, color-mix(in srgb, var(--v2-accent) 55%, white), var(--v2-accent));
border-radius: inherit;
transition: width 220ms ease;
}
.v2-evolution-validation {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
align-items: center;
gap: 14px;
margin-top: 18px;
padding-top: 14px;
border-top: 1px solid var(--v2-line);
}
.v2-evolution-module-tags {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.v2-evolution-module-tags span,
.v2-evolution-next-steps span {
padding: 4px 8px;
color: var(--v2-accent-strong);
background: color-mix(in srgb, var(--v2-accent-soft) 62%, white);
border: 1px solid color-mix(in srgb, var(--v2-accent) 12%, transparent);
border-radius: 999px;
font-size: 8px;
font-weight: 800;
white-space: nowrap;
}
.v2-evolution-validation > p {
min-width: 0;
display: flex;
align-items: center;
justify-content: flex-end;
gap: 7px;
margin: 0;
color: var(--v2-muted);
font-size: 9px;
text-align: right;
}
.v2-evolution-validation > p svg {
width: 14px;
height: 14px;
flex: 0 0 auto;
color: var(--v2-accent);
}
.console-v2 [data-evolution-scope="admin"] {
display: none;
}
.console-v2[data-demo-role="admin"] [data-evolution-scope="user"] {
display: none;
}
.console-v2[data-demo-role="admin"] [data-evolution-scope="admin"] {
display: inline;
}
.v2-evolution-next {
min-width: 0;
display: grid;
grid-template-columns: 38px minmax(280px, 1fr) auto;
align-items: center;
gap: 13px;
padding: 13px clamp(22px, 2.2vw, 34px);
background: color-mix(in srgb, var(--v2-accent-soft) 58%, white);
border-top: 1px solid color-mix(in srgb, var(--v2-accent) 15%, transparent);
}
.v2-evolution-next-icon {
width: 36px;
height: 36px;
display: grid;
place-items: center;
color: white;
background: var(--v2-accent);
border-radius: 11px;
box-shadow: 0 7px 18px color-mix(in srgb, var(--v2-accent) 22%, transparent);
}
.v2-evolution-next-icon svg {
width: 16px;
height: 16px;
}
.v2-evolution-next strong {
display: inline-block;
margin-top: 2px;
color: var(--v2-ink);
font-size: 12px;
}
.v2-evolution-next p {
display: inline;
margin: 0 0 0 8px;
color: var(--v2-muted);
font-size: 9px;
}
.v2-evolution-next-steps {
display: flex;
align-items: center;
gap: 6px;
}
.v2-evolution-next-steps svg {
width: 12px;
height: 12px;
color: var(--v2-accent);
}
.console-v2 .v2-inline-gesture .v2-camera-toggle {
width: 42px;