Files
xiaobai-review/frontend/shared/components/controls.css
T

1042 lines
15 KiB
CSS

/* Canonical CSS owner: controls. Historical layers consolidated 2026-08-02. */
.lucide {
width: 18px;
height: 18px;
flex: 0 0 auto;
stroke-width: 1.75;
}
@media (max-width: 720px) {
.header-command-group .command-button {
width: 100%;
min-height: 38px;
justify-content: flex-start;
padding: 0px 10px;
border-color: transparent;
background: transparent;
}
}
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
outline: rgba(8, 127, 174, 0.48) solid 2px;
outline-offset: 2px;
}
.icon-button:active {
transform: translateY(1px) scale(0.985);
box-shadow: none;
}
.button:disabled,
.icon-button:disabled {
cursor: not-allowed;
opacity: 0.58;
transform: none;
box-shadow: none;
}
.button.danger-button {
border-color: rgb(226, 170, 163);
color: rgb(185, 54, 39);
}
.button.danger-button:hover {
border-color: var(--coral);
background: var(--coral-soft);
color: rgb(167, 44, 30);
}
.date-input:focus,
.search-field input:focus {
border-color: var(--blue);
box-shadow: rgba(8, 127, 174, 0.13) 0px 0px 0px 2px;
}
.form-field {
display: grid;
gap: 7px;
font-weight: 650;
}
.command-button .lucide {
width: 16px;
height: 16px;
}
.sidebar-collapse-button:hover {
background: var(--control-hover);
color: var(--text-primary);
}
.mobile-market-selector {
display: none;
}
.button:focus-visible,
.icon-button:focus-visible,
.sidebar-collapse-button:focus-visible {
outline-color: rgba(29, 101, 193, 0.48);
}
body.sidebar-collapsed .sidebar-collapse-button .lucide {
transform: rotate(180deg);
}
@media (min-width: 721px) and (max-width: 1279px) {
.command-button {
width: 32px;
padding: 0px;
}
.command-button > span {
display: none;
}
}
@media (min-width: 721px) and (max-width: 1023px) {
.sidebar-collapse-button span {
display: none;
}
.sidebar-collapse-button {
justify-content: center;
padding: 0px;
display: none;
}
}
@media (max-width: 720px) {
.header-command-group .button.primary {
border-color: var(--action);
background: var(--action);
}
.mobile-market-selector > span {
display: inline-flex;
align-items: center;
gap: 7px;
color: var(--text-secondary);
font-size: 12px;
}
.mobile-market-selector > span .lucide {
width: 16px;
height: 16px;
color: var(--action);
}
.mobile-market-selector > span b {
font-weight: 650;
}
.mobile-market-selector > .lucide {
width: 16px;
height: 16px;
pointer-events: none;
}
}
.stock-heaven-button {
display: inline-flex;
align-items: center;
gap: 5px;
}
.stock-heaven-button .lucide {
width: 15px;
height: 15px;
}
@media (max-width: 720px) {
.stock-heaven-button span {
display: none;
}
.stock-heaven-button {
width: 36px;
padding: 0px;
justify-content: center;
}
}
.icon-button:hover {
border-color: rgb(148, 181, 216);
background: var(--surface-selected);
color: var(--action-hover);
box-shadow: none;
}
.button .lucide,
.icon-button .lucide {
width: 16px;
height: 16px;
stroke-width: 1.8;
}
.command-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
padding: 0px 10px;
min-height: 36px;
}
.form-field > span {
color: rgb(51, 65, 80);
font-size: 12.5px;
font-weight: 670;
}
@media (min-width: 721px) and (max-width: 1279px) {
.sidebar-collapse-button span {
display: none;
}
.sidebar-collapse-button {
justify-content: center;
padding: 0px;
}
}
@media (max-width: 720px) {
.header-menu-button {
width: 34px;
min-height: 34px;
border-color: var(--border);
display: grid;
}
.mobile-market-selector select {
width: 100%;
height: 38px;
padding: 0px 4px;
border: 0px;
outline: 0px;
background: transparent;
color: var(--text-primary);
font-weight: 680;
text-align: right;
appearance: none;
font-size: 13px;
}
.button,
.icon-button {
min-height: 42px;
}
.form-field input,
.form-field select,
.search-field input {
min-height: 44px;
font-size: 16px;
}
}
@media (prefers-reduced-motion: reduce) {
.button,
.icon-button {
animation: auto ease 0s 1 normal none running none;
transition: none;
}
}
.text-button {
padding: 2px;
border: 0px;
background: transparent;
color: var(--blue);
cursor: pointer;
font-size: 12px;
}
@media (max-width: 860px) {
.search-field {
min-width: 180px;
flex: 1 1 0%;
}
.search-field input {
width: 100%;
}
}
.search-field input {
width: 220px;
padding: 0px 10px;
border: 1px solid var(--line-strong);
border-radius: 4px;
outline: none;
height: 36px;
background: var(--surface);
color: var(--text-primary);
font-size: 12.5px;
}
.checkbox-control {
min-height: 34px;
display: inline-flex;
align-items: center;
gap: 6px;
white-space: nowrap;
}
#heartReveal #interpretHeartButton {
opacity: 0;
transition: opacity 1s;
}
#heartReveal #interpretHeartButton.is-ready {
opacity: 1;
}
@media (max-width: 860px) {
.date-input {
min-width: 134px;
flex: 1 1 0%;
}
}
.date-input {
width: 138px;
height: 34px;
padding: 0px 8px;
background: var(--surface);
color: var(--text);
font-weight: 650;
min-height: var(--control-height);
border-color: var(--border-strong);
border-radius: var(--radius-md);
box-shadow: none;
}
.icon-button {
background: var(--surface);
cursor: pointer;
transition: transform var(--motion-fast) var(--ease-out), border-color var(--motion-fast) ease, background-color var(--motion-fast) ease, color var(--motion-fast) ease, box-shadow var(--motion-fast) ease;
padding: 0px;
display: grid;
place-items: center;
font-size: 22px;
line-height: 1;
width: 36px;
color: rgb(68, 83, 99);
min-height: var(--control-height);
border-color: var(--border-strong);
border-radius: var(--radius-md);
box-shadow: none;
}
.button {
cursor: pointer;
white-space: nowrap;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
min-height: var(--control-height);
border-color: var(--control-border);
border-radius: var(--radius-md);
box-shadow: none;
padding: 0px 12px;
background: var(--control-surface);
color: var(--text-primary);
font-size: var(--font-size-label);
font-weight: var(--font-weight-semibold);
transition: border-color var(--duration-fast), color var(--duration-fast), background var(--duration-fast), transform var(--duration-fast);
}
.button:hover {
box-shadow: none;
border-color: var(--color-action-line);
color: var(--primary);
background: var(--control-hover);
}
.button:active {
box-shadow: none;
transform: scale(.98);
}
.button.primary {
border-color: var(--primary);
background: var(--primary);
color: var(--on-action);
}
.button.primary:hover {
border-color: var(--primary-hover);
background: var(--primary-hover);
color: var(--on-action);
}
.form-field input {
width: 100%;
min-width: 0px;
height: 40px;
padding: 0px 10px;
outline: none;
border-color: var(--border-strong);
border-radius: var(--radius-md);
background: var(--control-surface);
box-shadow: none;
}
.form-field select,
.search-field {
border-color: var(--border-strong);
border-radius: var(--radius-md);
background: var(--control-surface);
box-shadow: none;
}
.form-field textarea {
width: 100%;
min-height: 104px;
resize: vertical;
padding: 9px 10px;
color: var(--text);
font-style: inherit;
font-variant: inherit;
font-weight: inherit;
font-stretch: inherit;
font-size: inherit;
font-family: inherit;
font-optical-sizing: inherit;
font-size-adjust: inherit;
font-kerning: inherit;
font-feature-settings: inherit;
font-variation-settings: inherit;
font-language-override: inherit;
line-height: 1.6;
outline: none;
border-color: var(--border-strong);
border-radius: var(--radius-md);
background: var(--control-surface);
box-shadow: none;
}
.form-field input:focus,
.form-field select:focus,
.form-field textarea:focus,
.search-field:focus-within {
border-color: var(--action);
box-shadow: 0 0 0 3px var(--focus-ring);
}
@media (max-width: 720px) {
.module-nav .sidebar-collapse-button {
display: none;
}
.mobile-market-selector:not([hidden]) {
position: relative;
display: grid;
grid-template-columns: auto minmax(0px, 1fr) 18px;
align-items: center;
gap: 8px;
padding: 0px 11px;
background: var(--surface);
height: 44px;
border-color: var(--border);
border-radius: 7px;
box-shadow: var(--shadow-soft);
margin-bottom: 8px;
}
}
.date-input::-webkit-calendar-picker-indicator {
opacity: 0.48;
}
.header-command-group .command-button .lucide {
width: 14px;
height: 14px;
}
@media (min-width: 1280px) and (max-width: 1510px) {
.header-command-group .command-button {
width: 31px;
padding: 0px;
}
.header-command-group .command-button > span {
display: none;
}
}
.toolbar-controls .search-field {
height: 34px;
}
.sidebar-collapse-button {
width: 100%;
cursor: pointer;
text-align: left;
min-height: 38px;
display: flex;
align-items: center;
gap: 8px;
margin: auto -8px -8px;
padding: 10px 16px;
border-right: 0px;
border-bottom: 0px;
border-left: 0px;
border-image: none;
border-top: 1px solid var(--r2-line-soft);
border-radius: 0px;
background: var(--surface);
color: var(--r2-sub);
font-size: 12px;
}
body.sidebar-collapsed .sidebar-collapse-button span {
display: none;
}
body.sidebar-collapsed .sidebar-collapse-button {
padding: 0px;
justify-content: center;
padding-inline: 0px;
}
.header-menu-button {
width: 30px;
min-height: 30px;
height: 30px;
padding: 0px;
border: 1px solid var(--r2-line);
border-radius: 7px;
background: var(--surface);
color: rgb(75, 85, 99);
box-shadow: none;
}
.header-command-group .command-button {
min-height: 30px;
height: 30px;
padding: 0px 10px;
border: 1px solid var(--r2-line);
border-radius: 7px;
background: var(--surface);
color: rgb(55, 65, 81);
font-size: 12px;
font-weight: 500;
box-shadow: none;
}
.header-command-group .command-button.primary {
border-color: var(--r2-blue);
background: var(--r2-blue);
color: var(--text-inverse);
}
@media (max-width: 1023px) and (min-width: 721px) {
.sidebar-collapse-button span {
display: none;
}
.sidebar-collapse-button {
justify-content: center;
padding-inline: 0px;
}
}
button {
font: inherit;
letter-spacing: 0px;
cursor: pointer;
border-width: medium;
border-style: none;
border-color: currentcolor;
border-image: none;
background: none;
color: inherit;
}
input,
select,
textarea {
border-radius: 6px;
font-style: inherit;
font-variant: inherit;
font-weight: inherit;
font-stretch: inherit;
line-height: inherit;
font-optical-sizing: inherit;
font-size-adjust: inherit;
font-kerning: inherit;
font-feature-settings: inherit;
font-variation-settings: inherit;
font-language-override: inherit;
letter-spacing: 0px;
font-family: inherit;
font-size: 13px;
color: var(--ink);
}
.seg button {
padding: 4px 12px;
border-radius: 6px;
font-size: 12px;
color: var(--sub);
}
.seg button.on {
background: var(--surface);
color: var(--ink);
font-weight: 600;
box-shadow: rgba(0, 0, 0, 0.08) 0px 1px 2px;
}
.seg button .n {
font-size: 11px;
color: var(--faint);
margin-left: 2px;
}
.seg button.on .n {
color: var(--blue);
}
.search input {
border-width: medium;
border-style: none;
border-color: currentcolor;
border-image: none;
outline: none;
width: 150px;
font-size: 12.5px;
}
.field input[type="text"],
.field select {
width: 100%;
border: 1px solid var(--line);
border-radius: 7px;
padding: 8px 10px;
outline: none;
}
.field textarea {
width: 100%;
border: 1px solid var(--line);
border-radius: 7px;
padding: 8px 10px;
outline: none;
min-height: 90px;
resize: vertical;
}
.field input:focus,
.field textarea:focus {
border-color: var(--blue-line);
}
.method button {
padding: 6px 18px;
border-radius: 7px;
font-size: 13px;
color: var(--sub);
font-weight: 600;
display: flex;
align-items: center;
gap: 6px;
}
.method button.on {
background: var(--blue);
color: var(--text-inverse);
}
.factor input[type="range"] {
flex: 1 1 0%;
accent-color: var(--blue);
}
.cond input[type="text"],
.cond select {
border: 1px solid var(--line);
border-radius: 6px;
padding: 4px 8px;
width: 76px;
font-size: 12px;
}
.chat-input {
display: flex;
gap: 8px;
padding: 12px 16px;
border-top: 1px solid var(--line-soft);
}
.chat-input input {
flex: 1 1 0%;
border: 1px solid var(--line);
border-radius: 8px;
padding: 9px 12px;
outline: none;
}
.chat-input input:focus {
border-color: var(--blue-line);
}
@media (max-width: 720px), (max-width: 1023px) and (max-height: 600px) {
.sidebar-collapse-button {
display: none;
}
}
:root[data-theme="dark"] :is(.module-tab, .sidebar-collapse-button, .nav-group-label) {
color: var(--text-secondary);
}
:root[data-theme="dark"] :is(.icon-button, .button, .btn, .date-input, .search, .sidebar-collapse-button, input, textarea, select) {
border-color: var(--border);
background-color: var(--surface);
color: var(--text-primary);
}
:root[data-theme="dark"] .header-date-group .date-input {
background-color: transparent;
}
:root[data-theme="dark"] :is(input, textarea, select)::placeholder {
color: var(--text-tertiary);
}
:root[data-theme="dark"] :is(.icon-button, .button, .btn):hover:not(:disabled) {
border-color: var(--blue-line);
background-color: var(--surface-muted);
color: var(--action);
}
:root[data-theme="dark"] :is(.button.primary, .btn.primary) {
border-color: var(--action);
background: var(--action);
color: var(--on-action);
}
:root[data-theme="dark"] :is(.button.primary, .btn.primary):hover:not(:disabled) {
border-color: var(--action-hover);
background: var(--action-hover);
color: var(--on-action);
}
:root[data-theme="dark"] :is(.seg, .segmented, .filter-segment) {
border-color: var(--border);
background: var(--surface-muted);
}
:root[data-theme="dark"] :is(.seg button.on, .seg button.active, .segment.active, .filter-segment button.active) {
background: var(--surface-subtle);
color: var(--text-primary);
box-shadow: var(--control-shadow);
}
@media (min-width: 721px) {
.header-menu-button {
display: none;
}
}