Files
xiaobaifupan/app/frontend/pages/market/foundation.css
T

1326 lines
21 KiB
CSS

/* Canonical CSS owner: market. Historical layers consolidated 2026-08-02. */
@media (max-width: 720px) {
.stock-dialog {
width: calc(-16px + 100vw);
max-width: none;
max-height: calc(-20px + 100dvh);
border-radius: 8px;
}
}
.detail-section h3 {
margin: 0px;
font-size: 14px;
letter-spacing: 0px;
}
.note-row {
display: grid;
grid-template-columns: 100px minmax(0px, 1fr) minmax(0px, 1fr) auto;
gap: 14px;
align-items: start;
padding: 11px 0px;
border-bottom: 1px solid var(--line);
}
.note-row small,
.note-row time {
color: var(--text-muted);
font-size: 12px;
}
.note-block strong {
display: block;
margin-bottom: 4px;
font-size: 12px;
}
.note-block p {
margin: 0px;
overflow-wrap: anywhere;
line-height: 1.6;
white-space: pre-wrap;
}
.risk-note {
color: rgb(104, 118, 129);
}
.stock-chart-section {
padding: 14px 18px 10px;
border-bottom: 1px solid var(--line);
}
.detail-section-heading {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 8px;
}
.detail-section-heading h3 {
margin: 0px;
font-size: 14px;
}
.detail-section-heading span {
color: var(--text-muted);
font-size: 12px;
}
.chart-heading-controls {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 10px;
min-width: 0px;
}
.chart-mode-toggle.segmented {
height: 28px;
flex: 0 0 auto;
}
.chart-mode-toggle .segment {
min-width: 44px;
padding: 0px 9px;
font-size: 12px;
}
.price-chart {
width: 100%;
height: 300px;
display: block;
background: rgb(251, 252, 253);
border: 1px solid var(--line);
}
.moneyflow-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
margin: 12px 0px 0px;
border-top: 1px solid var(--line);
border-left: 1px solid var(--line);
}
.moneyflow-grid div {
min-height: 62px;
padding: 9px;
border-right: 1px solid var(--line);
border-bottom: 1px solid var(--line);
}
.moneyflow-grid dt {
color: var(--text-muted);
font-size: 12px;
}
.moneyflow-grid dd {
margin: 6px 0px 0px;
font-weight: 700;
}
.inline-edit-form {
display: flex;
gap: 8px;
margin-top: 12px;
}
.compact-form {
margin-top: 12px;
}
.compact-form textarea {
min-height: 78px;
}
.compact-notes {
margin-top: 14px;
}
.compact-notes .note-row {
grid-template-columns: 90px minmax(0px, 1fr) minmax(0px, 1fr) auto;
}
.detail-code {
color: var(--text-muted);
font-size: 12px;
}
.detail-price-line {
display: flex;
align-items: center;
gap: 12px;
padding: 18px;
border-bottom: 1px solid var(--line);
}
.detail-price-line strong {
color: var(--coral);
font-size: 30px;
}
.detail-price-line > span:nth-child(2) {
color: var(--coral);
font-size: 17px;
}
.detail-section {
padding: 18px;
border-bottom: 1px solid var(--line);
}
.detail-section p {
line-height: 1.8;
}
.sector-chip {
display: inline-flex;
align-items: center;
min-height: 24px;
padding: 2px 8px;
border-radius: 4px;
white-space: nowrap;
background: var(--blue-soft);
color: var(--blue-dark);
font-size: 12px;
}
.detail-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 0px;
margin: 12px 0px 0px;
border-top: 1px solid var(--line);
border-left: 1px solid var(--line);
}
.detail-grid div {
min-height: 68px;
padding: 10px;
border-right: 1px solid var(--line);
border-bottom: 1px solid var(--line);
}
.detail-grid dt {
color: var(--text-muted);
font-size: 12px;
}
.detail-grid dd {
margin: 7px 0px 0px;
font-weight: 700;
}
.stock-preview-trigger {
cursor: pointer;
text-decoration: underline transparent;
text-underline-offset: 3px;
transition: color var(--motion-fast) ease, text-decoration-color var(--motion-fast) ease, background-color var(--motion-fast) ease;
}
.stock-preview-trigger:hover {
color: var(--action);
text-decoration-color: currentcolor;
}
.stock-preview-trigger:focus-visible {
color: var(--action);
text-decoration-color: currentcolor;
outline: rgba(29, 101, 193, 0.42) solid 2px;
outline-offset: -2px;
}
.stock-preview-backdrop {
display: none;
}
.stock-preview-backdrop[hidden],
.stock-preview-loading[hidden],
.stock-preview[hidden] {
display: none;
}
.stock-preview {
width: 520px;
height: 398px;
position: fixed;
z-index: 65;
display: grid;
grid-template-rows: 64px 38px 230px 30px 36px;
overflow: hidden;
border: 1px solid var(--border-strong);
border-radius: 8px;
background: var(--surface);
box-shadow: rgba(24, 34, 45, 0.2) 0px 18px 48px;
animation: stock-preview-enter var(--motion-medium) var(--ease-out) both;
}
@keyframes stock-preview-enter {
0% {
opacity: 0;
transform: translateY(5px) scale(0.985);
}
100% {
opacity: 1;
transform: translateY(0px) scale(1);
}
}
.stock-preview-header {
min-width: 0px;
display: grid;
grid-template-columns: minmax(0px, 1fr) auto 32px;
align-items: center;
gap: 12px;
padding: 8px 10px 8px 14px;
border-bottom: 1px solid var(--border);
}
.stock-preview-identity {
min-width: 0px;
display: grid;
grid-template-columns: auto minmax(0px, 1fr);
align-items: baseline;
column-gap: 8px;
}
.stock-preview-identity > span {
color: var(--text-secondary);
font-size: 12px;
font-variant-numeric: tabular-nums;
}
.stock-preview-identity > strong {
min-width: 0px;
overflow: hidden;
font-size: 16px;
text-overflow: ellipsis;
white-space: nowrap;
}
.stock-preview-identity > small {
grid-column: 1 / -1;
margin-top: 3px;
overflow: hidden;
color: var(--text-secondary);
font-size: 11px;
text-overflow: ellipsis;
white-space: nowrap;
}
.stock-preview-quote {
display: flex;
align-items: baseline;
gap: 7px;
font-variant-numeric: tabular-nums;
}
.stock-preview-quote > strong {
font-size: 21px;
}
.stock-preview-quote > span {
font-size: 13px;
font-weight: 700;
}
.stock-preview-close {
width: 30px;
min-height: 30px;
border-color: transparent;
background: transparent;
}
.stock-preview-close .lucide {
width: 16px;
height: 16px;
}
.stock-preview-tabs {
display: flex;
align-items: stretch;
padding: 0px 10px;
border-bottom: 1px solid var(--border);
}
.stock-preview-tab {
min-width: 62px;
padding: 0px 12px;
border-width: 0px 0px 2px;
border-style: none none solid;
border-color: currentcolor currentcolor transparent;
border-image: none;
background: transparent;
color: var(--text-secondary);
cursor: pointer;
font-size: 12px;
}
.stock-preview-tab:hover {
color: var(--text-primary);
}
.stock-preview-tab.active {
border-bottom-color: var(--action);
color: var(--action);
font-weight: 700;
}
.stock-preview-tabs > span {
align-self: center;
margin-left: auto;
color: var(--text-secondary);
font-size: 11px;
}
.stock-preview-chart-shell {
min-width: 0px;
position: relative;
padding: 6px 10px 2px;
background: var(--chart-background);
}
.stock-preview-chart-shell canvas {
width: 100%;
height: 220px;
display: block;
}
.stock-preview-loading {
position: absolute;
inset: 6px 10px 2px;
display: flex;
align-items: center;
justify-content: center;
gap: 9px;
background: var(--chart-background);
color: var(--text-secondary);
font-size: 12px;
}
.stock-preview-loading .spinner {
width: 18px;
height: 18px;
}
.stock-preview-summary {
min-width: 0px;
margin: 0px;
padding: 5px 12px;
overflow: hidden;
color: var(--text-secondary);
font-size: 11px;
line-height: 20px;
text-overflow: ellipsis;
white-space: nowrap;
}
.stock-preview-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
padding: 3px 8px 3px 12px;
border-top: 1px solid var(--border);
}
.stock-preview-footer > span {
min-width: 0px;
overflow: hidden;
color: var(--text-secondary);
font-size: 11px;
text-overflow: ellipsis;
white-space: nowrap;
}
.stock-preview-footer .button {
min-height: 28px;
display: inline-flex;
align-items: center;
gap: 6px;
padding: 0px 9px;
border-color: transparent;
color: var(--action);
font-size: 12px;
}
.stock-preview-footer .lucide {
width: 14px;
height: 14px;
}
@media (max-width: 720px) {
body.stock-preview-open {
overflow: hidden;
}
.stock-preview-backdrop:not([hidden]) {
position: fixed;
inset: 0px;
z-index: 70;
display: block;
background: rgba(23, 26, 31, 0.3);
animation: preview-backdrop-enter var(--motion-medium) ease both;
}
@keyframes preview-backdrop-enter {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.stock-preview {
width: 100%;
height: min(490px, -64px + 100dvh);
max-height: calc(-64px + 100dvh);
z-index: 80;
grid-template-rows: 64px 40px minmax(210px, 1fr) 34px 42px;
border-right: 0px;
border-bottom: 0px;
border-left: 0px;
border-radius: 8px 8px 0px 0px;
animation-name: stock-preview-sheet-enter;
inset: auto 0px 0px !important;
}
@keyframes stock-preview-sheet-enter {
0% {
opacity: 0;
transform: translateY(24px);
}
100% {
opacity: 1;
transform: translateY(0px);
}
}
.stock-preview-chart-shell canvas {
height: 100%;
min-height: 210px;
}
.stock-preview-summary {
padding-right: 10px;
padding-left: 10px;
}
}
@media (max-width: 860px) {
.note-row {
grid-template-columns: 86px minmax(0px, 1fr) auto;
}
.note-row .note-block:nth-of-type(2) {
grid-column: 2 / -1;
}
.moneyflow-grid {
grid-template-columns: repeat(2, 1fr);
}
.risk-note {
display: none;
}
}
@media (max-width: 520px) {
.chart-mode-toggle.segmented {
width: auto;
}
.detail-section-heading {
align-items: flex-start;
gap: 8px;
}
.chart-heading-controls {
flex-wrap: wrap;
}
.stock-dialog {
margin: 8px auto;
max-height: calc(-16px + 100vh);
}
.price-chart {
height: 240px;
}
.compact-notes .note-row,
.note-row {
grid-template-columns: 1fr auto;
}
.note-row .note-block,
.note-row .note-block:nth-of-type(2) {
grid-column: 1 / -1;
}
}
.entity-detail-dialog .detail-grid div {
min-width: 0px;
}
.entity-detail-dialog .detail-grid dd {
overflow-wrap: anywhere;
}
@media (max-width: 720px) {
.entity-detail-dialog .detail-grid {
grid-template-columns: repeat(2, minmax(0px, 1fr));
}
}
.inline-edit-form input {
min-width: 0px;
height: 32px;
flex: 1 1 0%;
padding: 0px 8px;
border: 1px solid var(--line-strong);
border-radius: 4px;
}
:is(.global-search-dialog, .stock-dialog, .settings-dialog:not(.heaven-reading-dialog)) {
--dialog-line: var(--border);
--dialog-line-strong: var(--border-strong);
--dialog-muted: var(--surface-subtle);
--dialog-ink: var(--text-primary);
--dialog-sub: var(--text-secondary);
border: 1px solid var(--dialog-line-strong);
border-radius: 10px;
background: var(--surface);
color: var(--dialog-ink);
box-shadow: rgba(25, 36, 48, 0.2) 0px 26px 72px, rgba(25, 36, 48, 0.08) 0px 4px 14px;
}
:is(.global-search-dialog, .stock-dialog, .settings-dialog:not(.heaven-reading-dialog))::backdrop {
background: rgba(28, 39, 50, 0.46);
backdrop-filter: blur(3px);
}
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog))[open] {
animation: 180ms cubic-bezier(0.2, 0.78, 0.25, 1) 0s 1 normal both running stage18-dialog-enter;
}
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog)) .dialog-header {
position: sticky;
top: 0px;
z-index: 8;
min-height: 66px;
padding: 12px 18px;
border-bottom: 1px solid var(--dialog-line);
background: rgba(255, 255, 255, 0.97);
backdrop-filter: blur(10px);
}
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog)) .dialog-header h2 {
margin: 2px 0px 0px;
color: var(--dialog-ink);
font-size: 18px;
font-weight: 740;
line-height: 1.25;
}
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog)) :is(.dialog-eyebrow, .detail-code) {
color: rgb(123, 135, 149);
font-size: 10.5px;
font-weight: 620;
line-height: 1.2;
}
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog)) .dialog-header .icon-button {
width: 34px;
height: 34px;
border-radius: 7px;
color: rgb(89, 102, 120);
}
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog)) .dialog-header .icon-button:hover {
border-color: rgb(190, 200, 212);
background: rgb(245, 247, 250);
}
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog)) :is(input, select, textarea):focus-visible {
border-color: rgb(142, 175, 233);
outline: 0px;
box-shadow: rgba(37, 99, 235, 0.09) 0px 0px 0px 3px;
}
.stock-dialog {
border-radius: 9px;
width: min(810px, -24px + 100vw);
max-height: calc(-24px + 100dvh);
margin: 12px 12px 12px auto;
overflow: hidden auto;
overscroll-behavior: contain;
}
.stock-dialog .dialog-header-actions {
flex-wrap: wrap;
justify-content: flex-end;
gap: 7px;
}
.stock-dialog .dialog-header-actions .button {
min-height: 32px;
padding-inline: 10px;
border-radius: 7px;
font-size: 11px;
}
.stock-dialog .detail-price-line {
gap: 11px;
padding: 15px 18px 14px;
border-color: var(--dialog-line);
background: linear-gradient(rgb(255, 255, 255) 0%, rgb(251, 252, 254) 100%);
}
.stock-dialog .detail-price-line strong {
font-size: 29px;
line-height: 1;
}
.stock-dialog .detail-price-line > span:nth-child(2) {
font-size: 14px;
font-weight: 650;
}
.stock-dialog .streak-pill {
padding: 4px 7px;
border-radius: 5px;
font-size: 10px;
}
.stock-dialog .stock-chart-section {
padding: 15px 18px 14px;
border-color: var(--dialog-line);
}
.stock-dialog .detail-section-heading {
margin-bottom: 10px;
}
.stock-dialog .detail-section h3,
.stock-dialog .detail-section-heading h3 {
color: rgb(38, 51, 66);
font-size: 13.5px;
font-weight: 720;
}
.stock-dialog .chart-heading-controls > span {
max-width: 240px;
overflow: hidden;
color: rgb(122, 134, 149);
font-size: 10.5px;
text-overflow: ellipsis;
white-space: nowrap;
}
.stock-dialog .chart-mode-toggle.segmented {
height: 30px;
padding: 2px;
border-radius: 7px;
}
.stock-dialog .chart-mode-toggle .segment {
min-width: 43px;
border-radius: 5px;
font-size: 11px;
}
.stock-dialog .price-chart {
height: 282px;
border-color: var(--dialog-line);
border-radius: 7px;
background: rgb(251, 252, 253);
}
.stock-dialog .detail-section {
padding: 15px 18px;
border-color: var(--dialog-line);
}
.stock-dialog .detail-section > h3 {
margin: 0px 0px 11px;
}
.stock-dialog .moneyflow-grid {
overflow: hidden;
margin-top: 10px;
border: 1px solid var(--dialog-line);
border-radius: 7px;
background: var(--surface);
grid-template-columns: repeat(4, minmax(0px, 1fr));
}
.stock-dialog .detail-grid {
overflow: hidden;
margin-top: 10px;
border: 1px solid var(--dialog-line);
border-radius: 7px;
background: var(--surface);
grid-template-columns: repeat(3, minmax(0px, 1fr));
}
.stock-dialog :is(.moneyflow-grid, .detail-grid) > div {
min-height: 58px;
padding: 10px 11px;
border-top: 0px;
border-left: 0px;
border-image: none;
border-right: 1px solid var(--dialog-line);
border-bottom: 1px solid var(--dialog-line);
background: var(--surface);
}
.stock-dialog .moneyflow-grid > div:last-child {
border-right: 0px;
}
.stock-dialog .detail-grid > div:nth-child(3n) {
border-right: 0px;
}
.stock-dialog .detail-grid > div:nth-last-child(-n+3) {
border-bottom: 0px;
}
.stock-dialog :is(.moneyflow-grid, .detail-grid) dt {
color: rgb(123, 135, 148);
font-size: 10.5px;
}
.stock-dialog :is(.moneyflow-grid, .detail-grid) dd {
margin-top: 5px;
font-size: 13px;
}
.stock-dialog .inline-edit-form input {
min-width: 0px;
flex: 1 1 0%;
}
.stock-dialog .journal-form.compact-form {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin-top: 0px;
padding: 0px;
}
.stock-dialog .journal-form.compact-form .dialog-actions {
grid-column: 1 / -1;
}
.stock-dialog .compact-form textarea {
min-height: 84px;
}
.stock-dialog .compact-notes {
max-height: 240px;
overflow-y: auto;
}
.entity-detail-dialog .detail-grid {
grid-template-columns: repeat(3, minmax(0px, 1fr));
}
@media (max-width: 760px) {
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog), .global-search-dialog) {
width: calc(-16px + 100vw);
max-width: none;
max-height: calc(-16px + 100dvh);
margin: 8px auto;
border-radius: 8px;
}
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog)) .dialog-header {
min-height: 60px;
padding: 10px 12px;
}
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog)) .dialog-header h2 {
font-size: 16px;
}
.stock-dialog .dialog-header {
align-items: flex-start;
}
.stock-dialog .dialog-header-actions {
gap: 5px;
}
.stock-dialog .dialog-header-actions .button {
min-height: 30px;
padding-inline: 8px;
}
.stock-dialog .dialog-header-actions .button span {
display: none;
}
.stock-dialog .detail-price-line,
.stock-dialog .detail-section,
.stock-dialog .stock-chart-section {
padding-inline: 13px;
}
.stock-dialog .price-chart {
height: 236px;
}
.stock-dialog .moneyflow-grid {
grid-template-columns: repeat(2, minmax(0px, 1fr));
}
.stock-dialog .moneyflow-grid > div:nth-child(2n) {
border-right: 0px;
}
.stock-dialog .moneyflow-grid > div:nth-last-child(-n+2) {
border-bottom: 0px;
}
.entity-detail-dialog .detail-grid,
.stock-dialog .detail-grid {
grid-template-columns: repeat(2, minmax(0px, 1fr));
}
.stock-dialog .detail-grid > div:nth-child(3n) {
border-right: 1px solid var(--dialog-line);
}
.stock-dialog .detail-grid > div:nth-child(2n) {
border-right: 0px;
}
.stock-dialog .detail-grid > div:nth-last-child(-n+3) {
border-bottom: 1px solid var(--dialog-line);
}
.stock-dialog .detail-grid > div:nth-last-child(-n+2) {
border-bottom: 0px;
}
.stock-dialog .journal-form.compact-form {
grid-template-columns: 1fr;
}
.stock-dialog .journal-form.compact-form .dialog-actions {
grid-column: auto;
}
}
@media (max-width: 460px) {
.entity-detail-dialog .detail-grid,
.stock-dialog .detail-grid,
.stock-dialog .moneyflow-grid {
grid-template-columns: 1fr;
}
.stock-dialog :is(.moneyflow-grid, .detail-grid) > div {
border-right: 0px !important;
border-bottom: 1px solid var(--dialog-line) !important;
}
.stock-dialog :is(.moneyflow-grid, .detail-grid) > div:last-child {
border-bottom: 0px !important;
}
}
@media (prefers-reduced-motion: reduce) {
:is(.stock-dialog, .settings-dialog:not(.heaven-reading-dialog))[open] {
animation: auto ease 0s 1 normal none running none;
}
}
:root[data-theme="dark"] :is(dialog, .stock-dialog, .settings-dialog, .global-search-dialog, .strategy-drawer) {
border-color: var(--border-strong);
background: var(--surface);
color: var(--text-primary);
box-shadow: var(--shadow);
}
:root[data-theme="dark"] :is(.dialog-header, .global-search-head, .settings-section, .detail-section, .stock-chart-section) {
border-color: var(--line-soft);
background-color: var(--surface);
}
:root[data-theme="dark"] :is(.price-chart, .stock-preview-chart, .entity-detail-chart) {
border-color: var(--border);
background: var(--chart-background);
}
:root[data-theme="dark"] .stock-dialog {
--dialog-line: var(--line-soft);
--dialog-line-strong: var(--border-strong);
--dialog-muted: var(--surface-muted);
--dialog-ink: var(--text-primary);
--dialog-sub: var(--text-secondary);
}
:root[data-theme="dark"] .stock-dialog .dialog-header {
border-color: var(--dialog-line);
background: var(--surface);
}
:root[data-theme="dark"] .stock-dialog :is(.dialog-header h2, .detail-section h3, .detail-section-heading h3) {
color: var(--dialog-ink);
}
:root[data-theme="dark"] .stock-dialog :is(.dialog-eyebrow, .detail-code, .chart-heading-controls > span) {
color: var(--text-secondary);
}
:root[data-theme="dark"] .stock-dialog .dialog-header .icon-button {
color: var(--text-secondary);
}
:root[data-theme="dark"] .stock-dialog .dialog-header .icon-button:hover {
border-color: var(--border-strong);
background: var(--surface-subtle);
}
:root[data-theme="dark"] .stock-dialog .detail-price-line {
border-color: var(--dialog-line);
background: var(--surface-muted);
}
:root[data-theme="dark"] .stock-dialog :is(.moneyflow-grid, .detail-grid) {
border-color: var(--dialog-line);
background: var(--surface-muted);
}
:root[data-theme="dark"] .stock-dialog :is(.moneyflow-grid, .detail-grid) > div {
border-color: var(--dialog-line);
background: var(--surface);
}
:root[data-theme="dark"] .stock-dialog :is(.moneyflow-grid, .detail-grid) dt {
color: var(--text-secondary);
}
:root[data-theme="dark"] .stock-dialog :is(.moneyflow-grid, .detail-grid) dd {
color: var(--text-primary);
}