1431 lines
34 KiB
CSS
1431 lines
34 KiB
CSS
/* ============================================================
|
||
ModernSK — Components layer (ported to Radix Primitives)
|
||
Visual recipes kept 1:1 from the Claude Design bundle; state
|
||
hooks rewired from .is-* classes to Radix data-attributes
|
||
([data-state], [data-highlighted], [data-disabled]).
|
||
============================================================ */
|
||
|
||
@keyframes modern-sk-pop {
|
||
from {
|
||
opacity: 0;
|
||
transform: scale(0.6);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: scale(1);
|
||
}
|
||
}
|
||
@keyframes modern-sk-scale-in {
|
||
from {
|
||
opacity: 0;
|
||
transform: scale(0.96);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: scale(1);
|
||
}
|
||
}
|
||
@keyframes modern-sk-scale-out {
|
||
from {
|
||
opacity: 1;
|
||
transform: scale(1);
|
||
}
|
||
to {
|
||
opacity: 0;
|
||
transform: scale(0.96);
|
||
}
|
||
}
|
||
@keyframes modern-sk-fade-in {
|
||
from {
|
||
opacity: 0;
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
@keyframes modern-sk-fade-out {
|
||
from {
|
||
opacity: 1;
|
||
}
|
||
to {
|
||
opacity: 0;
|
||
}
|
||
}
|
||
|
||
/* ---------- BUTTONS ---------- */
|
||
.modern-sk-btn {
|
||
font-family: var(--font-sans);
|
||
font-size: var(--ctl-font);
|
||
font-weight: 600;
|
||
line-height: 1.1;
|
||
padding: var(--ctl-pad-y) var(--ctl-pad-x);
|
||
border-radius: var(--r-md);
|
||
cursor: pointer;
|
||
user-select: none;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 7px;
|
||
border: 1px solid var(--hair-strong);
|
||
color: var(--fg-1);
|
||
background: var(--grad-key);
|
||
box-shadow: var(--shadow-raised);
|
||
transition:
|
||
filter var(--dur-quick) var(--ease-out),
|
||
box-shadow var(--dur-quick) var(--ease-out),
|
||
transform var(--dur-press) var(--ease-out),
|
||
background var(--dur-quick) var(--ease-out);
|
||
}
|
||
.modern-sk-btn:hover {
|
||
background: var(--grad-key-hover);
|
||
}
|
||
.modern-sk-btn:active {
|
||
background: var(--grad-key-down);
|
||
box-shadow: var(--shadow-pressed);
|
||
transform: translateY(1px);
|
||
}
|
||
.modern-sk-btn:focus-visible {
|
||
outline: none;
|
||
box-shadow: var(--focus-ring), var(--shadow-raised);
|
||
}
|
||
.modern-sk-btn[disabled],
|
||
.modern-sk-btn.is-disabled {
|
||
opacity: 0.4;
|
||
filter: saturate(0.6);
|
||
pointer-events: none;
|
||
}
|
||
.modern-sk-btn .ph {
|
||
font-size: 1.05em;
|
||
display: inline-flex;
|
||
}
|
||
|
||
.modern-sk-btn--primary {
|
||
color: var(--lime-ink);
|
||
background: var(--grad-primary);
|
||
border-color: var(--lime-deep);
|
||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
|
||
box-shadow:
|
||
0 1px 0 rgba(255, 255, 255, 0.3) inset,
|
||
var(--glow-lime),
|
||
0 2px 4px rgba(0, 0, 0, 0.35);
|
||
}
|
||
.modern-sk-btn--primary:hover {
|
||
filter: brightness(1.04);
|
||
background: var(--grad-primary);
|
||
}
|
||
.modern-sk-btn--primary:active {
|
||
background: var(--grad-primary-down);
|
||
box-shadow: 0 3px 6px rgba(60, 90, 10, 0.5) inset;
|
||
transform: translateY(1px);
|
||
}
|
||
.modern-sk-btn--primary:focus-visible {
|
||
box-shadow:
|
||
var(--focus-ring),
|
||
0 1px 0 rgba(255, 255, 255, 0.3) inset,
|
||
0 2px 4px rgba(0, 0, 0, 0.35);
|
||
}
|
||
|
||
.modern-sk-btn--ember {
|
||
color: #fff;
|
||
background: var(--grad-ember);
|
||
border-color: var(--ember-deep);
|
||
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25);
|
||
box-shadow:
|
||
0 1px 0 rgba(255, 255, 255, 0.08) inset,
|
||
0 2px 4px rgba(0, 0, 0, 0.35),
|
||
0 6px 14px rgba(233, 87, 43, 0.18);
|
||
}
|
||
.modern-sk-btn--ember:hover {
|
||
background: var(--grad-ember);
|
||
filter: brightness(1.06);
|
||
}
|
||
.modern-sk-btn--ember:active {
|
||
background: var(--grad-ember-down);
|
||
box-shadow: 0 3px 6px rgba(90, 30, 10, 0.55) inset;
|
||
transform: translateY(1px);
|
||
}
|
||
.modern-sk-btn--ember:focus-visible {
|
||
box-shadow:
|
||
var(--focus-ring-ember),
|
||
0 2px 4px rgba(0, 0, 0, 0.35);
|
||
}
|
||
|
||
.modern-sk-btn--ghost {
|
||
color: var(--fg-2);
|
||
background: transparent;
|
||
border-color: var(--hair-strong);
|
||
box-shadow: none;
|
||
text-shadow: none;
|
||
}
|
||
.modern-sk-btn--ghost:hover {
|
||
background: rgba(255, 255, 255, 0.04);
|
||
color: var(--fg-1);
|
||
}
|
||
.modern-sk-btn--ghost:active {
|
||
background: rgba(0, 0, 0, 0.2);
|
||
box-shadow: var(--shadow-pressed);
|
||
transform: translateY(1px);
|
||
}
|
||
|
||
.modern-sk-btn--sm {
|
||
font-size: 12px;
|
||
padding: 4px 11px;
|
||
gap: 5px;
|
||
}
|
||
.modern-sk-btn--icon {
|
||
padding: var(--ctl-pad-y);
|
||
width: calc(var(--ctl-font) + 2 * var(--ctl-pad-y));
|
||
aspect-ratio: 1;
|
||
}
|
||
|
||
/* ---------- TEXT FIELDS ---------- */
|
||
.modern-sk-field {
|
||
width: 100%;
|
||
font-family: var(--font-sans);
|
||
font-size: 14px;
|
||
color: var(--fg-1);
|
||
padding: var(--field-pad-y) var(--field-pad-x);
|
||
border-radius: var(--r-md);
|
||
background: var(--steel-900);
|
||
border: 1px solid var(--edge-inset);
|
||
box-shadow: var(--shadow-inset-well);
|
||
outline: none;
|
||
transition:
|
||
box-shadow var(--dur-quick) var(--ease-out),
|
||
border-color var(--dur-quick) var(--ease-out);
|
||
}
|
||
.modern-sk-field::placeholder {
|
||
color: var(--fg-3);
|
||
}
|
||
.modern-sk-field:focus {
|
||
border-color: var(--lime-deep);
|
||
box-shadow: var(--shadow-inset-well), var(--focus-ring);
|
||
}
|
||
textarea.modern-sk-field {
|
||
resize: vertical;
|
||
min-height: 64px;
|
||
line-height: 1.5;
|
||
}
|
||
|
||
.modern-sk-search {
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
.modern-sk-search .ph {
|
||
position: absolute;
|
||
left: 11px;
|
||
color: var(--fg-3);
|
||
font-size: 16px;
|
||
pointer-events: none;
|
||
display: inline-flex;
|
||
}
|
||
.modern-sk-search .modern-sk-field {
|
||
padding-left: 34px;
|
||
}
|
||
|
||
/* ---------- TYPING ANIMATION (osu!-lazer style char in/out) ---------- */
|
||
/* The real field renders transparent over a mirrored per-letter overlay. */
|
||
.modern-sk-field-wrap {
|
||
position: relative;
|
||
width: 100%;
|
||
}
|
||
.modern-sk-search .modern-sk-field-wrap {
|
||
width: 100%;
|
||
}
|
||
.modern-sk-field--animated {
|
||
color: transparent;
|
||
caret-color: var(--fg-1);
|
||
}
|
||
.modern-sk-field--animated::placeholder {
|
||
color: var(--fg-3);
|
||
}
|
||
|
||
.modern-sk-field-overlay {
|
||
position: absolute;
|
||
inset: 0;
|
||
overflow: hidden;
|
||
pointer-events: none;
|
||
/* transparent border mirrors the field's 1px border so content aligns */
|
||
border: 1px solid transparent;
|
||
padding: var(--field-pad-y) var(--field-pad-x);
|
||
font-family: var(--font-sans);
|
||
font-size: 14px;
|
||
line-height: normal;
|
||
color: var(--fg-1);
|
||
white-space: pre;
|
||
text-align: left;
|
||
will-change: transform;
|
||
}
|
||
.modern-sk-field-overlay--multiline {
|
||
white-space: pre-wrap;
|
||
overflow-wrap: break-word;
|
||
line-height: 1.5;
|
||
}
|
||
.modern-sk-search .modern-sk-field-overlay {
|
||
padding-left: 34px;
|
||
}
|
||
|
||
.modern-sk-field-char {
|
||
/* inline (not inline-block) so the overlay wraps exactly like the field;
|
||
inherit white-space so multiline (pre-wrap) wraps while input (pre) won't.
|
||
'pre' on the span itself would suppress wrapping at its boundaries. */
|
||
position: relative;
|
||
white-space: inherit;
|
||
animation: modern-sk-char-in var(--dur-base) var(--ease-snap) both;
|
||
}
|
||
.modern-sk-field-char--leaving {
|
||
display: inline-block;
|
||
position: absolute;
|
||
white-space: pre;
|
||
animation: modern-sk-char-out var(--dur-base) var(--ease-out) forwards;
|
||
}
|
||
|
||
/* inline elements ignore transform, so the rise uses top instead */
|
||
@keyframes modern-sk-char-in {
|
||
from {
|
||
opacity: 0;
|
||
top: -0.32em;
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
top: 0;
|
||
}
|
||
}
|
||
@keyframes modern-sk-char-out {
|
||
from {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
to {
|
||
opacity: 0;
|
||
transform: translateY(0.7em) scale(0.9);
|
||
}
|
||
}
|
||
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.modern-sk-field-char {
|
||
animation: none;
|
||
}
|
||
.modern-sk-field-char--leaving {
|
||
animation: modern-sk-char-out 1ms linear forwards;
|
||
}
|
||
}
|
||
|
||
/* ---------- SELECT (Radix Select, styled as the glossy key) ---------- */
|
||
.modern-sk-select {
|
||
font-family: var(--font-sans);
|
||
font-size: 14px;
|
||
color: var(--fg-1);
|
||
cursor: pointer;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
padding: var(--field-pad-y) 12px var(--field-pad-y) var(--field-pad-x);
|
||
border-radius: var(--r-md);
|
||
border: 1px solid var(--hair-strong);
|
||
background: var(--grad-key);
|
||
box-shadow: var(--shadow-raised);
|
||
outline: none;
|
||
}
|
||
.modern-sk-select:hover {
|
||
background: var(--grad-key-hover);
|
||
}
|
||
.modern-sk-select:focus-visible {
|
||
box-shadow: var(--focus-ring), var(--shadow-raised);
|
||
}
|
||
.modern-sk-select__icon {
|
||
color: var(--fg-2);
|
||
display: inline-flex;
|
||
margin-left: auto;
|
||
}
|
||
.modern-sk-select__content {
|
||
min-width: var(--radix-select-trigger-width);
|
||
padding: 6px;
|
||
border-radius: var(--r-lg);
|
||
border: 1px solid var(--hair-strong);
|
||
background: rgba(34, 36, 27, 0.86);
|
||
backdrop-filter: blur(24px) saturate(1.3);
|
||
-webkit-backdrop-filter: blur(24px) saturate(1.3);
|
||
box-shadow: var(--shadow-window);
|
||
z-index: 50;
|
||
transform-origin: var(--radix-select-content-transform-origin);
|
||
}
|
||
/* slide out of the trigger: grows from the radix transform-origin while
|
||
sliding in from the open side. Symmetric, token-driven exit. */
|
||
.modern-sk-select__content[data-side='bottom'] {
|
||
--sel-from-y: -6px;
|
||
}
|
||
.modern-sk-select__content[data-side='top'] {
|
||
--sel-from-y: 6px;
|
||
}
|
||
.modern-sk-select__content[data-side='left'],
|
||
.modern-sk-select__content[data-side='right'] {
|
||
--sel-from-y: 0px;
|
||
}
|
||
.modern-sk-select__content[data-state='open'] {
|
||
animation: modern-sk-select-in var(--dur-base) var(--ease-snap);
|
||
}
|
||
.modern-sk-select__content[data-state='closed'] {
|
||
animation: modern-sk-select-out var(--dur-quick) var(--ease-out);
|
||
}
|
||
@keyframes modern-sk-select-in {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateY(var(--sel-from-y, -6px)) scale(0.94);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateY(0) scale(1);
|
||
}
|
||
}
|
||
@keyframes modern-sk-select-out {
|
||
from {
|
||
opacity: 1;
|
||
transform: translateY(0) scale(1);
|
||
}
|
||
to {
|
||
opacity: 0;
|
||
transform: translateY(var(--sel-from-y, -6px)) scale(0.96);
|
||
}
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.modern-sk-select__content[data-state='open'],
|
||
.modern-sk-select__content[data-state='closed'] {
|
||
animation: modern-sk-fade-in var(--dur-quick) var(--ease-out);
|
||
}
|
||
}
|
||
.modern-sk-select__item {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
padding: 7px 10px;
|
||
border-radius: var(--r-sm);
|
||
font-size: 13px;
|
||
color: var(--fg-1);
|
||
cursor: pointer;
|
||
outline: none;
|
||
user-select: none;
|
||
}
|
||
.modern-sk-select__item[data-highlighted] {
|
||
background: linear-gradient(180deg, var(--lime), var(--lime-deep));
|
||
color: var(--lime-ink);
|
||
}
|
||
.modern-sk-select__item-indicator {
|
||
margin-left: auto;
|
||
display: inline-flex;
|
||
}
|
||
|
||
/* ---------- SWITCH ---------- */
|
||
.modern-sk-switch {
|
||
position: relative;
|
||
width: var(--switch-w);
|
||
height: var(--switch-h);
|
||
flex-shrink: 0;
|
||
border-radius: 8px;
|
||
padding: 0;
|
||
border: 1px solid var(--edge-inset);
|
||
background: var(--steel-700);
|
||
box-shadow: var(--shadow-inset-well);
|
||
cursor: pointer;
|
||
transition:
|
||
background var(--dur-base) var(--ease-out),
|
||
border-color var(--dur-base) var(--ease-out);
|
||
}
|
||
.modern-sk-switch__thumb {
|
||
display: block;
|
||
position: absolute;
|
||
top: 50%;
|
||
left: var(--switch-gap);
|
||
transform: translateY(-50%);
|
||
width: var(--switch-knob);
|
||
height: var(--switch-knob);
|
||
border-radius: 5px;
|
||
background: linear-gradient(180deg, #cfd1c4, #a7a99c);
|
||
box-shadow:
|
||
0 1px 2px rgba(0, 0, 0, 0.4),
|
||
0 1px 0 rgba(255, 255, 255, 0.7) inset;
|
||
transition:
|
||
left var(--dur-base) var(--ease-snap),
|
||
background var(--dur-base) var(--ease-out);
|
||
}
|
||
.modern-sk-switch[data-state='checked'] {
|
||
background: linear-gradient(180deg, var(--lime), var(--lime-deep));
|
||
border-color: var(--lime-deep);
|
||
}
|
||
.modern-sk-switch[data-state='checked'] .modern-sk-switch__thumb {
|
||
left: calc(100% - var(--switch-knob) - var(--switch-gap));
|
||
background: linear-gradient(180deg, #fff, #e6e8dd);
|
||
}
|
||
.modern-sk-switch:focus-visible {
|
||
outline: none;
|
||
box-shadow: var(--shadow-inset-well), var(--focus-ring);
|
||
}
|
||
|
||
/* ---------- CHECKBOX ---------- */
|
||
.modern-sk-check {
|
||
width: 22px;
|
||
height: 22px;
|
||
flex-shrink: 0;
|
||
border-radius: 4px;
|
||
padding: 0;
|
||
background: var(--steel-900);
|
||
border: 1px solid var(--edge-inset);
|
||
box-shadow: var(--shadow-inset-well);
|
||
cursor: pointer;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
transition:
|
||
background var(--dur-quick) var(--ease-out),
|
||
border-color var(--dur-quick) var(--ease-out);
|
||
}
|
||
.modern-sk-check[data-state='checked'] {
|
||
background: linear-gradient(180deg, var(--lime-bright), var(--lime-deep));
|
||
border-color: var(--lime-deep);
|
||
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset;
|
||
}
|
||
.modern-sk-check__indicator {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
animation: modern-sk-pop var(--dur-quick) var(--ease-snap);
|
||
}
|
||
.modern-sk-check__indicator svg {
|
||
width: 13px;
|
||
height: 13px;
|
||
display: block;
|
||
}
|
||
.modern-sk-check:focus-visible {
|
||
outline: none;
|
||
box-shadow: var(--shadow-inset-well), var(--focus-ring);
|
||
}
|
||
|
||
/* ---------- RADIO ---------- */
|
||
.modern-sk-radio {
|
||
width: 22px;
|
||
height: 22px;
|
||
flex-shrink: 0;
|
||
border-radius: 50%;
|
||
padding: 0;
|
||
background: var(--steel-900);
|
||
border: 1px solid var(--edge-inset);
|
||
box-shadow: var(--shadow-inset-well);
|
||
cursor: pointer;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
transition: border-color var(--dur-quick) var(--ease-out);
|
||
}
|
||
.modern-sk-radio__indicator {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
.modern-sk-radio__indicator::after {
|
||
content: '';
|
||
width: 11px;
|
||
height: 11px;
|
||
border-radius: 50%;
|
||
background: radial-gradient(
|
||
circle at 50% 38%,
|
||
var(--lime-bright),
|
||
var(--lime-deep)
|
||
);
|
||
box-shadow:
|
||
0 0 8px rgba(190, 242, 100, 0.45),
|
||
0 1px 0 rgba(255, 255, 255, 0.45) inset;
|
||
animation: modern-sk-pop var(--dur-quick) var(--ease-snap);
|
||
}
|
||
.modern-sk-radio:focus-visible {
|
||
outline: none;
|
||
box-shadow: var(--shadow-inset-well), var(--focus-ring);
|
||
}
|
||
|
||
/* control + label row helper */
|
||
.modern-sk-control {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
font-size: 14px;
|
||
color: var(--fg-2);
|
||
cursor: pointer;
|
||
}
|
||
|
||
/* ---------- SEGMENTED CONTROL (Radix ToggleGroup) ---------- */
|
||
.modern-sk-seg {
|
||
position: relative;
|
||
display: inline-flex;
|
||
background: var(--steel-900);
|
||
border: 1px solid var(--edge-inset);
|
||
border-radius: var(--r-md);
|
||
padding: 3px;
|
||
box-shadow: var(--shadow-inset-well);
|
||
gap: 2px;
|
||
}
|
||
.modern-sk-seg__thumb {
|
||
position: absolute;
|
||
top: 3px;
|
||
left: 0;
|
||
height: calc(100% - 6px);
|
||
background: var(--grad-key);
|
||
border-radius: var(--r-sm);
|
||
box-shadow: var(--shadow-raised);
|
||
pointer-events: none;
|
||
transition:
|
||
transform 180ms var(--ease-snap),
|
||
width 180ms var(--ease-snap);
|
||
will-change: transform, width;
|
||
}
|
||
.modern-sk-seg__item {
|
||
position: relative;
|
||
z-index: 1;
|
||
font-family: var(--font-sans);
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
color: var(--fg-2);
|
||
background: transparent;
|
||
border: none;
|
||
padding: var(--seg-pad-y) 14px;
|
||
border-radius: var(--r-sm);
|
||
cursor: pointer;
|
||
transition: color var(--dur-quick);
|
||
}
|
||
.modern-sk-seg__item:hover {
|
||
color: var(--fg-1);
|
||
}
|
||
.modern-sk-seg__item[data-state='on'] {
|
||
color: var(--fg-1);
|
||
}
|
||
|
||
/* ---------- SLIDER ---------- */
|
||
.modern-sk-slider {
|
||
--ms-thumb: 20px;
|
||
--ms-thumb-w: var(--ms-thumb);
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
width: 200px;
|
||
height: var(--ms-thumb);
|
||
user-select: none;
|
||
touch-action: none;
|
||
}
|
||
.modern-sk-slider__track {
|
||
position: relative;
|
||
flex-grow: 1;
|
||
height: 6px;
|
||
border-radius: 3px;
|
||
background: var(--steel-800);
|
||
box-shadow: var(--shadow-inset-well);
|
||
}
|
||
.modern-sk-slider__range {
|
||
position: absolute;
|
||
height: 100%;
|
||
border-radius: 3px;
|
||
background: linear-gradient(90deg, var(--lime-deep), var(--lime));
|
||
box-shadow: 0 0 10px rgba(190, 242, 100, 0.4);
|
||
}
|
||
/* Radix positions the range via left/right offsets (not width); ease those
|
||
so the fill glides between discrete steps while dragging. */
|
||
.modern-sk-slider--animated .modern-sk-slider__range {
|
||
transition:
|
||
left 0.12s ease-out,
|
||
right 0.12s ease-out;
|
||
}
|
||
.modern-sk-slider__thumb {
|
||
display: block;
|
||
width: var(--ms-thumb-w);
|
||
height: var(--ms-thumb);
|
||
border-radius: 4px;
|
||
background: linear-gradient(180deg, #fff, #e6e8dd);
|
||
box-shadow:
|
||
0 2px 5px rgba(0, 0, 0, 0.5),
|
||
0 1px 0 rgba(255, 255, 255, 0.9) inset;
|
||
cursor: pointer;
|
||
outline: none;
|
||
}
|
||
/* Radix sets the step position (left) on a WRAPPER span around the thumb, not on
|
||
the thumb element itself — so the transition must live on that wrapper. The
|
||
wrapper is the slider's direct child span that isn't the track. */
|
||
.modern-sk-slider--animated > span:not(.modern-sk-slider__track) {
|
||
transition: left 0.12s ease-out;
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.modern-sk-slider--animated > span:not(.modern-sk-slider__track),
|
||
.modern-sk-slider--animated .modern-sk-slider__range {
|
||
transition: none;
|
||
}
|
||
}
|
||
.modern-sk-slider--knob-square .modern-sk-slider__thumb {
|
||
--ms-thumb-w: 14px;
|
||
}
|
||
.modern-sk-slider--knob-round .modern-sk-slider__thumb {
|
||
--ms-thumb-w: var(--ms-thumb);
|
||
border-radius: 50%;
|
||
}
|
||
.modern-sk-slider__thumb:focus-visible {
|
||
box-shadow:
|
||
0 2px 5px rgba(0, 0, 0, 0.5),
|
||
0 1px 0 rgba(255, 255, 255, 0.9) inset,
|
||
var(--focus-ring);
|
||
}
|
||
|
||
/* Notches sit OUTSIDE the bar, anchored to the track edges. Horizontal position tracks
|
||
the thumb centre: it travels from thumb-radius to (width - radius). Reserve layout
|
||
room with padding so ticks/labels never collide with neighbours. */
|
||
.modern-sk-slider--notch-top {
|
||
padding-top: 14px;
|
||
}
|
||
.modern-sk-slider--notch-bottom {
|
||
padding-bottom: 14px;
|
||
}
|
||
.modern-sk-slider--has-labels {
|
||
padding-bottom: 18px;
|
||
}
|
||
.modern-sk-slider--notch-bottom.modern-sk-slider--has-labels {
|
||
padding-bottom: 30px;
|
||
}
|
||
|
||
.modern-sk-slider__notches {
|
||
position: absolute;
|
||
left: 0;
|
||
right: 0;
|
||
height: 0;
|
||
pointer-events: none;
|
||
}
|
||
.modern-sk-slider__notches--top {
|
||
bottom: calc(100% + 7px);
|
||
}
|
||
.modern-sk-slider__notches--bottom {
|
||
top: calc(100% + 7px);
|
||
}
|
||
.modern-sk-slider__notch {
|
||
position: absolute;
|
||
left: calc(var(--ms-thumb) / 2 + (100% - var(--ms-thumb)) * var(--p));
|
||
width: 3px;
|
||
height: 3px;
|
||
border-radius: 99px;
|
||
background: var(--steel-500);
|
||
transform: translateX(-50%);
|
||
}
|
||
.modern-sk-slider__notches--top .modern-sk-slider__notch {
|
||
bottom: 0;
|
||
}
|
||
.modern-sk-slider__notches--bottom .modern-sk-slider__notch {
|
||
top: 0;
|
||
}
|
||
|
||
.modern-sk-slider__labels {
|
||
position: absolute;
|
||
left: 0;
|
||
right: 0;
|
||
top: calc(100% + 8px);
|
||
pointer-events: none;
|
||
}
|
||
.modern-sk-slider--notch-bottom .modern-sk-slider__labels {
|
||
top: calc(100% + 18px);
|
||
}
|
||
.modern-sk-slider__label {
|
||
position: absolute;
|
||
left: calc(var(--ms-thumb) / 2 + (100% - var(--ms-thumb)) * var(--p));
|
||
transform: translateX(-50%);
|
||
font-family: var(--font-mono);
|
||
font-size: 10px;
|
||
line-height: 1;
|
||
color: var(--fg-3);
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/* ---------- STEPPER ---------- */
|
||
.modern-sk-stepper {
|
||
display: inline-flex;
|
||
border-radius: var(--r-md);
|
||
overflow: hidden;
|
||
box-shadow: var(--shadow-raised);
|
||
border: 1px solid var(--hair-strong);
|
||
}
|
||
.modern-sk-stepper button {
|
||
font-family: var(--font-mono);
|
||
font-size: 16px;
|
||
font-weight: 600;
|
||
color: var(--fg-1);
|
||
background: var(--grad-key);
|
||
border: none;
|
||
width: 34px;
|
||
height: var(--stepper-h);
|
||
cursor: pointer;
|
||
transition: background var(--dur-quick);
|
||
}
|
||
.modern-sk-stepper button:hover {
|
||
background: var(--grad-key-hover);
|
||
}
|
||
.modern-sk-stepper button:active {
|
||
background: var(--grad-key-down);
|
||
}
|
||
.modern-sk-stepper button:first-child {
|
||
border-right: 1px solid var(--edge-inset);
|
||
}
|
||
|
||
/* ---------- BADGES / CHIPS / TAGS ---------- */
|
||
.modern-sk-badge {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 5px;
|
||
font-size: 11px;
|
||
font-weight: 700;
|
||
line-height: 1;
|
||
padding: 4px 9px;
|
||
border-radius: var(--r-pill);
|
||
letter-spacing: 0.02em;
|
||
border: 1px solid transparent;
|
||
}
|
||
.modern-sk-badge--lime {
|
||
color: var(--lime-ink);
|
||
background: linear-gradient(180deg, var(--lime-bright), var(--lime-deep));
|
||
border-color: var(--lime-deep);
|
||
}
|
||
.modern-sk-badge--ember {
|
||
color: #fff;
|
||
background: var(--grad-ember);
|
||
border-color: var(--ember-deep);
|
||
}
|
||
.modern-sk-badge--neutral {
|
||
color: var(--fg-2);
|
||
background: var(--steel-700);
|
||
border-color: var(--hair-strong);
|
||
}
|
||
.modern-sk-badge--outline {
|
||
color: var(--fg-2);
|
||
background: transparent;
|
||
border-color: var(--hair-strong);
|
||
}
|
||
.modern-sk-badge--dot::before {
|
||
content: '';
|
||
width: 6px;
|
||
height: 6px;
|
||
border-radius: 50%;
|
||
background: currentColor;
|
||
}
|
||
|
||
.modern-sk-chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
color: var(--fg-1);
|
||
padding: 5px 11px;
|
||
border-radius: var(--r-pill);
|
||
background: var(--steel-700);
|
||
border: 1px solid var(--hair-strong);
|
||
}
|
||
.modern-sk-chip .x {
|
||
color: var(--fg-3);
|
||
cursor: pointer;
|
||
font-size: 14px;
|
||
line-height: 1;
|
||
background: none;
|
||
border: none;
|
||
padding: 0;
|
||
display: inline-flex;
|
||
}
|
||
.modern-sk-chip .x:hover {
|
||
color: var(--fg-1);
|
||
}
|
||
|
||
/* ---------- CARD ---------- */
|
||
.modern-sk-card {
|
||
background: var(--steel-900);
|
||
border: 1px solid var(--hair);
|
||
border-radius: var(--r-lg);
|
||
box-shadow: var(--shadow-card);
|
||
padding: 18px;
|
||
}
|
||
|
||
/* ---------- LIST ROWS ---------- */
|
||
.modern-sk-list {
|
||
background: var(--steel-900);
|
||
border: 1px solid var(--hair);
|
||
border-radius: var(--r-lg);
|
||
box-shadow: var(--shadow-card);
|
||
overflow: hidden;
|
||
}
|
||
.modern-sk-row {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 12px;
|
||
padding: 10px 14px;
|
||
border-bottom: 1px solid var(--hair);
|
||
cursor: default;
|
||
font-size: 14px;
|
||
color: var(--fg-1);
|
||
}
|
||
.modern-sk-row:last-child {
|
||
border-bottom: none;
|
||
}
|
||
.modern-sk-row:hover {
|
||
background: var(--steel-800);
|
||
}
|
||
.modern-sk-row.is-selected {
|
||
background: linear-gradient(
|
||
180deg,
|
||
rgba(190, 242, 100, 0.16),
|
||
rgba(190, 242, 100, 0.08)
|
||
);
|
||
}
|
||
.modern-sk-row .nm {
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
color: var(--fg-1);
|
||
white-space: nowrap;
|
||
}
|
||
.modern-sk-row .meta {
|
||
margin-left: auto;
|
||
font-family: var(--font-mono);
|
||
font-size: 11px;
|
||
color: var(--fg-3);
|
||
}
|
||
|
||
/* ---------- MENU / POPOVER (Radix DropdownMenu) ---------- */
|
||
.modern-sk-menu {
|
||
min-width: 208px;
|
||
padding: 6px;
|
||
border-radius: var(--r-lg);
|
||
border: 1px solid var(--hair-strong);
|
||
background: rgba(34, 36, 27, 0.86);
|
||
backdrop-filter: blur(24px) saturate(1.3);
|
||
-webkit-backdrop-filter: blur(24px) saturate(1.3);
|
||
box-shadow: var(--shadow-window);
|
||
z-index: 50;
|
||
transform-origin: var(--radix-dropdown-menu-content-transform-origin);
|
||
}
|
||
.modern-sk-menu[data-state='open'] {
|
||
animation: modern-sk-scale-in var(--dur-base) var(--ease-out);
|
||
}
|
||
.modern-sk-menu[data-state='closed'] {
|
||
animation: modern-sk-scale-out var(--dur-quick) var(--ease-out);
|
||
}
|
||
.modern-sk-menu-item {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
padding: 7px 10px;
|
||
border-radius: var(--r-sm);
|
||
font-size: 13px;
|
||
color: var(--fg-1);
|
||
cursor: pointer;
|
||
outline: none;
|
||
user-select: none;
|
||
}
|
||
.modern-sk-menu-item .ph {
|
||
font-size: 16px;
|
||
color: var(--fg-2);
|
||
display: inline-flex;
|
||
}
|
||
.modern-sk-menu-item .sc {
|
||
margin-left: auto;
|
||
font-family: var(--font-mono);
|
||
font-size: 11px;
|
||
color: var(--fg-3);
|
||
}
|
||
.modern-sk-menu-item[data-highlighted] {
|
||
background: linear-gradient(180deg, var(--lime), var(--lime-deep));
|
||
color: var(--lime-ink);
|
||
}
|
||
.modern-sk-menu-item[data-highlighted] .ph,
|
||
.modern-sk-menu-item[data-highlighted] .sc {
|
||
color: var(--lime-ink);
|
||
}
|
||
.modern-sk-menu-sep {
|
||
height: 1px;
|
||
background: var(--hair);
|
||
margin: 5px 4px;
|
||
}
|
||
|
||
/* ---------- TABS (Radix Tabs) ---------- */
|
||
.modern-sk-tabs {
|
||
display: flex;
|
||
gap: 2px;
|
||
border-bottom: 1px solid var(--hair);
|
||
}
|
||
.modern-sk-tabs__trigger {
|
||
font-family: var(--font-sans);
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
color: var(--fg-3);
|
||
background: transparent;
|
||
border: none;
|
||
padding: 9px 14px;
|
||
cursor: pointer;
|
||
position: relative;
|
||
transition: color var(--dur-quick);
|
||
}
|
||
.modern-sk-tabs__trigger:hover {
|
||
color: var(--fg-2);
|
||
}
|
||
.modern-sk-tabs__trigger[data-state='active'] {
|
||
color: var(--fg-1);
|
||
}
|
||
.modern-sk-tabs__trigger[data-state='active']::after {
|
||
content: '';
|
||
position: absolute;
|
||
left: 8px;
|
||
right: 8px;
|
||
bottom: -1px;
|
||
height: 2px;
|
||
border-radius: 2px;
|
||
background: var(--lime);
|
||
box-shadow: 0 0 8px rgba(190, 242, 100, 0.5);
|
||
}
|
||
|
||
/* ---------- PROGRESS (Radix Progress) ---------- */
|
||
.modern-sk-progress {
|
||
width: 100%;
|
||
height: 8px;
|
||
border-radius: var(--r-pill);
|
||
background: var(--steel-800);
|
||
box-shadow: var(--shadow-inset-well);
|
||
overflow: hidden;
|
||
}
|
||
.modern-sk-progress__indicator {
|
||
display: block;
|
||
height: 100%;
|
||
border-radius: var(--r-pill);
|
||
background: linear-gradient(90deg, var(--lime-deep), var(--lime));
|
||
box-shadow: 0 0 10px rgba(190, 242, 100, 0.4);
|
||
transition: width var(--dur-base) var(--ease-out);
|
||
}
|
||
|
||
/* ---------- WINDOW CHROME ---------- */
|
||
.modern-sk-window {
|
||
border-radius: var(--r-xl);
|
||
overflow: hidden;
|
||
border: 1px solid var(--hair-strong);
|
||
background: var(--steel-800);
|
||
box-shadow: var(--shadow-window);
|
||
}
|
||
.modern-sk-titlebar {
|
||
height: 42px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 9px;
|
||
padding: 0 14px;
|
||
background: var(--grad-titlebar);
|
||
border-bottom: 1px solid rgba(0, 0, 0, 0.4);
|
||
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset;
|
||
}
|
||
.modern-sk-titlebar .ttl {
|
||
margin-left: 6px;
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
color: var(--fg-2);
|
||
}
|
||
.modern-sk-traffic {
|
||
width: 12px;
|
||
height: 12px;
|
||
border-radius: 50%;
|
||
box-shadow:
|
||
0 1px 1px rgba(0, 0, 0, 0.4) inset,
|
||
0 0 0 0.5px rgba(0, 0, 0, 0.3);
|
||
}
|
||
.modern-sk-traffic.r {
|
||
background: radial-gradient(circle at 35% 30%, #ff8a7a, #ec5f55);
|
||
}
|
||
.modern-sk-traffic.y {
|
||
background: radial-gradient(circle at 35% 30%, #ffd97a, #e6a93c);
|
||
}
|
||
.modern-sk-traffic.g {
|
||
background: radial-gradient(circle at 35% 30%, #bff07a, #9bce4c);
|
||
}
|
||
|
||
/* ---------- TOOLTIP (Radix Tooltip) ---------- */
|
||
.modern-sk-tooltip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
color: var(--fg-1);
|
||
padding: 5px 9px;
|
||
border-radius: var(--r-sm);
|
||
background: rgba(20, 21, 15, 0.92);
|
||
border: 1px solid var(--hair-strong);
|
||
box-shadow: var(--shadow-card);
|
||
z-index: 60;
|
||
transform-origin: var(--radix-tooltip-content-transform-origin);
|
||
}
|
||
.modern-sk-tooltip[data-state='delayed-open'],
|
||
.modern-sk-tooltip[data-state='instant-open'] {
|
||
animation: modern-sk-scale-in var(--dur-base) var(--ease-out);
|
||
}
|
||
.modern-sk-tooltip[data-state='closed'] {
|
||
animation: modern-sk-fade-out var(--dur-quick) var(--ease-out);
|
||
}
|
||
|
||
/* ---------- ICON BUTTON ----------
|
||
Square tactile key. Reuses the .modern-sk-btn engine; variants below
|
||
just recolor. Pair with .modern-sk-btn / .modern-sk-btn--primary etc. */
|
||
.modern-sk-iconbtn {
|
||
padding: 0;
|
||
width: 32px;
|
||
height: 32px;
|
||
aspect-ratio: 1;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.modern-sk-iconbtn--sm {
|
||
width: 26px;
|
||
height: 26px;
|
||
}
|
||
.modern-sk-iconbtn--lg {
|
||
width: 38px;
|
||
height: 38px;
|
||
}
|
||
|
||
/* ---------- SPINNER ----------
|
||
A carved donut groove (flat felt sunk by an SVG inner shadow, like the
|
||
switch well) with a glowing lime arc spinning in the channel. Groove
|
||
recess + arc glow are SVG filters; CSS only sizes the box and drives
|
||
the rotation. Honors reduced motion. */
|
||
.modern-sk-spinner {
|
||
display: inline-block;
|
||
width: 24px;
|
||
height: 24px;
|
||
line-height: 0;
|
||
}
|
||
.modern-sk-spinner--sm {
|
||
width: 16px;
|
||
height: 16px;
|
||
}
|
||
.modern-sk-spinner--lg {
|
||
width: 34px;
|
||
height: 34px;
|
||
}
|
||
.modern-sk-spinner svg {
|
||
width: 100%;
|
||
height: 100%;
|
||
display: block;
|
||
overflow: visible; /* let the arc glow spill past the box, not clip square */
|
||
}
|
||
.modern-sk-spinner__arc {
|
||
transform-origin: center;
|
||
animation: modern-sk-spin 0.7s linear infinite;
|
||
}
|
||
@keyframes modern-sk-spin {
|
||
to {
|
||
transform: rotate(360deg);
|
||
}
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.modern-sk-spinner__arc {
|
||
animation-duration: 1.8s;
|
||
}
|
||
}
|
||
|
||
/* ---------- CALLOUT ----------
|
||
Soft semantic surface (12–14% tint on the felt) with a glossy
|
||
icon chip. Variants reuse the semantic --*-bg tokens. */
|
||
.modern-sk-callout {
|
||
display: flex;
|
||
gap: 12px;
|
||
align-items: flex-start;
|
||
padding: 13px 15px;
|
||
border-radius: var(--r-lg);
|
||
border: 1px solid var(--hair);
|
||
background: var(--info-bg);
|
||
color: var(--fg-1);
|
||
box-shadow: var(--shadow-inset-well);
|
||
}
|
||
.modern-sk-callout__icon {
|
||
flex-shrink: 0;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 26px;
|
||
height: 26px;
|
||
border-radius: var(--r-sm);
|
||
color: var(--info);
|
||
}
|
||
.modern-sk-callout__body {
|
||
font-size: 13px;
|
||
line-height: 1.5;
|
||
color: var(--fg-2);
|
||
padding-top: 3px;
|
||
}
|
||
.modern-sk-callout__body strong {
|
||
color: var(--fg-1);
|
||
font-weight: 600;
|
||
}
|
||
.modern-sk-callout--success {
|
||
background: var(--success-bg);
|
||
border-color: rgba(190, 242, 100, 0.22);
|
||
}
|
||
.modern-sk-callout--success .modern-sk-callout__icon {
|
||
color: var(--success);
|
||
}
|
||
.modern-sk-callout--warning {
|
||
background: var(--warning-bg);
|
||
border-color: rgba(230, 169, 60, 0.22);
|
||
}
|
||
.modern-sk-callout--warning .modern-sk-callout__icon {
|
||
color: var(--warning);
|
||
}
|
||
.modern-sk-callout--danger {
|
||
background: var(--danger-bg);
|
||
border-color: rgba(233, 87, 43, 0.25);
|
||
}
|
||
.modern-sk-callout--danger .modern-sk-callout__icon {
|
||
color: var(--danger);
|
||
}
|
||
|
||
/* ---------- TABLE ----------
|
||
The list-row aesthetic stretched to columns: hairline grid, sunk
|
||
header strip, mono numerals, lime row selection. */
|
||
.modern-sk-table-wrap {
|
||
background: var(--steel-900);
|
||
border: 1px solid var(--hair);
|
||
border-radius: var(--r-lg);
|
||
box-shadow: var(--shadow-card);
|
||
overflow: hidden;
|
||
}
|
||
.modern-sk-table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
font-size: 14px;
|
||
}
|
||
.modern-sk-table thead th {
|
||
text-align: left;
|
||
font-family: var(--font-sans);
|
||
font-size: 11px;
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.14em;
|
||
color: var(--fg-3);
|
||
padding: 9px 14px;
|
||
background: var(--grad-titlebar);
|
||
border-bottom: 1px solid var(--hair-strong);
|
||
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.04) inset;
|
||
white-space: nowrap;
|
||
}
|
||
.modern-sk-table tbody td {
|
||
padding: 10px 14px;
|
||
border-bottom: 1px solid var(--hair);
|
||
color: var(--fg-1);
|
||
vertical-align: middle;
|
||
}
|
||
.modern-sk-table tbody tr:last-child td {
|
||
border-bottom: none;
|
||
}
|
||
.modern-sk-table tbody tr:hover td {
|
||
background: rgba(255, 255, 255, 0.03);
|
||
}
|
||
.modern-sk-table tbody tr.is-selected td {
|
||
background: linear-gradient(
|
||
180deg,
|
||
rgba(190, 242, 100, 0.16),
|
||
rgba(190, 242, 100, 0.08)
|
||
);
|
||
}
|
||
.modern-sk-table .num {
|
||
font-family: var(--font-mono);
|
||
font-size: 12px;
|
||
color: var(--fg-2);
|
||
text-align: right;
|
||
}
|
||
.modern-sk-table .muted {
|
||
color: var(--fg-3);
|
||
}
|
||
[data-theme='light'] .modern-sk-table tbody tr:hover td {
|
||
background: rgba(0, 0, 0, 0.035);
|
||
}
|
||
|
||
/* ---------- SCROLL AREA (Radix) ---------- */
|
||
.modern-sk-scroll {
|
||
overflow: hidden;
|
||
}
|
||
.modern-sk-scroll__viewport {
|
||
width: 100%;
|
||
height: 100%;
|
||
border-radius: inherit;
|
||
}
|
||
.modern-sk-scroll__bar {
|
||
display: flex;
|
||
user-select: none;
|
||
touch-action: none;
|
||
padding: 2px;
|
||
background: transparent;
|
||
transition: background var(--dur-base) var(--ease-out);
|
||
}
|
||
.modern-sk-scroll__bar[data-orientation='vertical'] {
|
||
width: 10px;
|
||
}
|
||
.modern-sk-scroll__bar[data-orientation='horizontal'] {
|
||
flex-direction: column;
|
||
height: 10px;
|
||
}
|
||
.modern-sk-scroll:hover .modern-sk-scroll__bar {
|
||
background: rgba(0, 0, 0, 0.18);
|
||
}
|
||
.modern-sk-scroll__thumb {
|
||
flex: 1;
|
||
background: var(--steel-500);
|
||
border-radius: var(--r-pill);
|
||
position: relative;
|
||
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.08) inset;
|
||
}
|
||
.modern-sk-scroll__thumb:hover {
|
||
background: var(--steel-400);
|
||
}
|
||
.modern-sk-scroll__thumb::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
transform: translate(-50%, -50%);
|
||
width: 100%;
|
||
height: 100%;
|
||
min-width: 44px;
|
||
min-height: 44px;
|
||
}
|
||
|
||
/* ---------- DIALOG / MODAL (Radix Dialog + AlertDialog) ----------
|
||
The floating sheet: window chrome aesthetic, scrim with blur. */
|
||
.modern-sk-overlay {
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: 80;
|
||
background: rgba(8, 9, 6, 0.55);
|
||
backdrop-filter: blur(3px);
|
||
-webkit-backdrop-filter: blur(3px);
|
||
}
|
||
.modern-sk-overlay[data-state='open'] {
|
||
animation: modern-sk-fade-in var(--dur-base) var(--ease-out);
|
||
}
|
||
.modern-sk-overlay[data-state='closed'] {
|
||
animation: modern-sk-fade-out var(--dur-quick) var(--ease-out);
|
||
}
|
||
.modern-sk-dialog {
|
||
position: fixed;
|
||
z-index: 81;
|
||
top: 50%;
|
||
left: 50%;
|
||
translate: -50% -50%;
|
||
width: min(92vw, 460px);
|
||
max-height: 85vh;
|
||
overflow: auto;
|
||
border-radius: var(--r-xl);
|
||
border: 1px solid var(--hair-strong);
|
||
background: var(--steel-800);
|
||
box-shadow: var(--shadow-window);
|
||
padding: 22px 22px 20px;
|
||
transform-origin: center;
|
||
font-family: var(--font-sans);
|
||
}
|
||
.modern-sk-dialog[data-state='open'] {
|
||
animation: modern-sk-scale-in var(--dur-base) var(--ease-out);
|
||
}
|
||
.modern-sk-dialog[data-state='closed'] {
|
||
animation: modern-sk-scale-out var(--dur-quick) var(--ease-out);
|
||
}
|
||
.modern-sk-dialog__title {
|
||
font-family: var(--font-sans);
|
||
font-size: var(--text-lg);
|
||
font-weight: 600;
|
||
color: var(--fg-1);
|
||
letter-spacing: var(--track-snug);
|
||
}
|
||
.modern-sk-dialog__desc {
|
||
margin-top: 8px;
|
||
font-size: 14px;
|
||
line-height: 1.55;
|
||
color: var(--fg-2);
|
||
}
|
||
.modern-sk-dialog__body {
|
||
margin-top: 16px;
|
||
}
|
||
.modern-sk-dialog__footer {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
gap: 12px;
|
||
margin-top: 22px;
|
||
}
|
||
.modern-sk-dialog__close {
|
||
position: absolute;
|
||
top: 14px;
|
||
right: 14px;
|
||
}
|
||
|
||
/* ============================================================
|
||
LIGHT THEME — component overrides (ported 1:1)
|
||
============================================================ */
|
||
[data-theme='light'] .modern-sk-btn--ghost:hover {
|
||
background: rgba(0, 0, 0, 0.05);
|
||
color: var(--fg-1);
|
||
}
|
||
[data-theme='light'] .modern-sk-btn--ghost:active {
|
||
background: rgba(0, 0, 0, 0.08);
|
||
}
|
||
[data-theme='light'] .modern-sk-row:hover {
|
||
background: rgba(0, 0, 0, 0.035);
|
||
}
|
||
|
||
[data-theme='light'] .modern-sk-btn--ember {
|
||
box-shadow:
|
||
0 1px 0 rgba(255, 255, 255, 0.25) inset,
|
||
0 1px 2px rgba(0, 0, 0, 0.18),
|
||
0 6px 14px rgba(233, 87, 43, 0.22);
|
||
}
|
||
|
||
[data-theme='light'] .modern-sk-switch__thumb {
|
||
background: linear-gradient(180deg, #ffffff, #e7e7dd);
|
||
box-shadow:
|
||
0 1px 2px rgba(0, 0, 0, 0.22),
|
||
0 1px 0 rgba(255, 255, 255, 0.9) inset;
|
||
}
|
||
[data-theme='light'] .modern-sk-switch {
|
||
background: var(--steel-600);
|
||
}
|
||
[data-theme='light'] .modern-sk-switch[data-state='checked'] {
|
||
background: linear-gradient(180deg, var(--lime), var(--lime-deep));
|
||
}
|
||
|
||
[data-theme='light'] .modern-sk-slider__thumb {
|
||
box-shadow:
|
||
0 1px 3px rgba(0, 0, 0, 0.28),
|
||
0 1px 0 rgba(255, 255, 255, 0.95) inset,
|
||
0 0 0 0.5px rgba(0, 0, 0, 0.06);
|
||
}
|
||
|
||
[data-theme='light'] .modern-sk-menu {
|
||
background: rgba(246, 246, 239, 0.82);
|
||
border-color: var(--hair-strong);
|
||
}
|
||
[data-theme='light'] .modern-sk-select__content {
|
||
background: rgba(246, 246, 239, 0.82);
|
||
}
|
||
[data-theme='light'] .modern-sk-tooltip {
|
||
background: rgba(246, 246, 239, 0.94);
|
||
color: var(--fg-1);
|
||
}
|
||
|
||
[data-theme='light'] .modern-sk-titlebar {
|
||
border-bottom-color: rgba(0, 0, 0, 0.12);
|
||
}
|
||
[data-theme='light'] .modern-sk-traffic {
|
||
box-shadow:
|
||
0 1px 1px rgba(0, 0, 0, 0.18) inset,
|
||
0 0 0 0.5px rgba(0, 0, 0, 0.14);
|
||
}
|
||
|
||
[data-theme='light'] .modern-sk-overlay {
|
||
background: rgba(60, 62, 52, 0.32);
|
||
}
|
||
[data-theme='light'] .modern-sk-scroll:hover .modern-sk-scroll__bar {
|
||
background: rgba(0, 0, 0, 0.06);
|
||
}
|
||
[data-theme='light'] .modern-sk-table thead th {
|
||
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.6) inset;
|
||
}
|