+
+
+
{title}
{badge && (
diff --git a/src/index.ts b/src/index.ts
index 6fa590a..356f278 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,7 +1,8 @@
/* ============================================================
- ModernSK UI — public package entry.
+ ModernSK — public package entry.
Import components from here; import the stylesheet once at your
- app root: import '@modernsk/ui/styles.css';
+ app root: import 'modern-sk/styles.css';
+ Optionally add the branded fonts: import 'modern-sk/fonts.css';
============================================================ */
import { Tooltip } from 'radix-ui';
diff --git a/src/styles/components.css b/src/styles/components.css
index 7b81fbb..a62661e 100644
--- a/src/styles/components.css
+++ b/src/styles/components.css
@@ -5,23 +5,23 @@
([data-state], [data-highlighted], [data-disabled]).
============================================================ */
-@keyframes msk-pop {
+@keyframes modern-sk-pop {
from { opacity: 0; transform: scale(.6); }
to { opacity: 1; transform: scale(1); }
}
-@keyframes msk-scale-in {
+@keyframes modern-sk-scale-in {
from { opacity: 0; transform: scale(.96); }
to { opacity: 1; transform: scale(1); }
}
-@keyframes msk-scale-out {
+@keyframes modern-sk-scale-out {
from { opacity: 1; transform: scale(1); }
to { opacity: 0; transform: scale(.96); }
}
-@keyframes msk-fade-in { from { opacity: 0; } to { opacity: 1; } }
-@keyframes msk-fade-out { from { opacity: 1; } to { opacity: 0; } }
+@keyframes modern-sk-fade-in { from { opacity: 0; } to { opacity: 1; } }
+@keyframes modern-sk-fade-out { from { opacity: 1; } to { opacity: 0; } }
/* ---------- BUTTONS ---------- */
-.msk-btn{
+.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;
@@ -34,60 +34,60 @@
transform var(--dur-press) var(--ease-out),
background var(--dur-quick) var(--ease-out);
}
-.msk-btn:hover{ background:var(--grad-key-hover); }
-.msk-btn:active{ background:var(--grad-key-down); box-shadow:var(--shadow-pressed); transform:translateY(1px); }
-.msk-btn:focus-visible{ outline:none; box-shadow:var(--focus-ring), var(--shadow-raised); }
-.msk-btn[disabled], .msk-btn.is-disabled{ opacity:.4; filter:saturate(.6); pointer-events:none; }
-.msk-btn .ph{ font-size:1.05em; display:inline-flex; }
+.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:.4; filter:saturate(.6); pointer-events:none; }
+.modern-sk-btn .ph{ font-size:1.05em; display:inline-flex; }
-.msk-btn--primary{
+.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,.25);
box-shadow:0 1px 0 rgba(255,255,255,.3) inset, var(--glow-lime), 0 2px 4px rgba(0,0,0,.35);
}
-.msk-btn--primary:hover{ filter:brightness(1.04); background:var(--grad-primary); }
-.msk-btn--primary:active{ background:var(--grad-primary-down); box-shadow:0 3px 6px rgba(60,90,10,.5) inset; transform:translateY(1px); }
-.msk-btn--primary:focus-visible{ box-shadow:var(--focus-ring), 0 1px 0 rgba(255,255,255,.3) inset, 0 2px 4px rgba(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,.5) inset; transform:translateY(1px); }
+.modern-sk-btn--primary:focus-visible{ box-shadow:var(--focus-ring), 0 1px 0 rgba(255,255,255,.3) inset, 0 2px 4px rgba(0,0,0,.35); }
-.msk-btn--ember{
+.modern-sk-btn--ember{
color:#fff; background:var(--grad-ember);
border-color:var(--ember-deep);
text-shadow:0 1px 1px rgba(0,0,0,.25);
box-shadow:0 1px 0 rgba(255,255,255,.08) inset, 0 2px 4px rgba(0,0,0,.35), 0 6px 14px rgba(233,87,43,.18);
}
-.msk-btn--ember:hover{ background:var(--grad-ember); filter:brightness(1.06); }
-.msk-btn--ember:active{ background:var(--grad-ember-down); box-shadow:0 3px 6px rgba(90,30,10,.55) inset; transform:translateY(1px); }
-.msk-btn--ember:focus-visible{ box-shadow:var(--focus-ring-ember), 0 2px 4px rgba(0,0,0,.35); }
+.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,.55) inset; transform:translateY(1px); }
+.modern-sk-btn--ember:focus-visible{ box-shadow:var(--focus-ring-ember), 0 2px 4px rgba(0,0,0,.35); }
-.msk-btn--ghost{
+.modern-sk-btn--ghost{
color:var(--fg-2); background:transparent; border-color:var(--hair-strong);
box-shadow:none; text-shadow:none;
}
-.msk-btn--ghost:hover{ background:rgba(255,255,255,.04); color:var(--fg-1); }
-.msk-btn--ghost:active{ background:rgba(0,0,0,.2); box-shadow:var(--shadow-pressed); transform:translateY(1px); }
+.modern-sk-btn--ghost:hover{ background:rgba(255,255,255,.04); color:var(--fg-1); }
+.modern-sk-btn--ghost:active{ background:rgba(0,0,0,.2); box-shadow:var(--shadow-pressed); transform:translateY(1px); }
-.msk-btn--sm{ font-size:12px; padding:4px 11px; gap:5px; }
-.msk-btn--icon{ padding:var(--ctl-pad-y); width:calc(var(--ctl-font) + 2*var(--ctl-pad-y)); aspect-ratio:1; }
+.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 ---------- */
-.msk-field{
+.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);
}
-.msk-field::placeholder{ color:var(--fg-3); }
-.msk-field:focus{ border-color:var(--lime-deep); box-shadow:var(--shadow-inset-well), var(--focus-ring); }
-textarea.msk-field{ resize:vertical; min-height:64px; line-height:1.5; }
+.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; }
-.msk-search{ position:relative; display:flex; align-items:center; }
-.msk-search .ph{ position:absolute; left:11px; color:var(--fg-3); font-size:16px; pointer-events:none; display:inline-flex; }
-.msk-search .msk-field{ padding-left:34px; }
+.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; }
/* ---------- SELECT (Radix Select, styled as the glossy key) ---------- */
-.msk-select{
+.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);
@@ -95,257 +95,257 @@ textarea.msk-field{ resize:vertical; min-height:64px; line-height:1.5; }
background:var(--grad-key);
box-shadow:var(--shadow-raised); outline:none;
}
-.msk-select:hover{ background:var(--grad-key-hover); }
-.msk-select:focus-visible{ box-shadow:var(--focus-ring), var(--shadow-raised); }
-.msk-select__icon{ color:var(--fg-2); display:inline-flex; margin-left:auto; }
-.msk-select__content{
+.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,.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);
}
-.msk-select__content[data-state="open"]{ animation:msk-scale-in var(--dur-base) var(--ease-out); }
-.msk-select__item{
+.modern-sk-select__content[data-state="open"]{ animation:modern-sk-scale-in var(--dur-base) 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;
}
-.msk-select__item[data-highlighted]{ background:linear-gradient(180deg,var(--lime),var(--lime-deep)); color:var(--lime-ink); }
-.msk-select__item-indicator{ margin-left:auto; display:inline-flex; }
+.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 ---------- */
-.msk-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);
}
-.msk-switch__thumb{
+.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,.4), 0 1px 0 rgba(255,255,255,.7) inset;
transition:left var(--dur-base) var(--ease-snap), background var(--dur-base) var(--ease-out);
}
-.msk-switch[data-state="checked"]{ background:linear-gradient(180deg,var(--lime),var(--lime-deep)); border-color:var(--lime-deep); }
-.msk-switch[data-state="checked"] .msk-switch__thumb{ left:calc(100% - var(--switch-knob) - var(--switch-gap)); background:linear-gradient(180deg,#fff,#e6e8dd); }
-.msk-switch:focus-visible{ outline:none; box-shadow:var(--shadow-inset-well), var(--focus-ring); }
+.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 ---------- */
-.msk-check{
+.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);
}
-.msk-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,.4) inset; }
-.msk-check__indicator{ display:flex; align-items:center; justify-content:center; animation:msk-pop var(--dur-quick) var(--ease-snap); }
-.msk-check__indicator svg{ width:13px; height:13px; display:block; }
-.msk-check:focus-visible{ outline:none; box-shadow:var(--shadow-inset-well), var(--focus-ring); }
+.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,.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 ---------- */
-.msk-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);
}
-.msk-radio__indicator{ display:flex; align-items:center; justify-content:center; width:100%; height:100%; }
-.msk-radio__indicator::after{
+.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,.45), 0 1px 0 rgba(255,255,255,.45) inset;
- animation:msk-pop var(--dur-quick) var(--ease-snap);
+ animation:modern-sk-pop var(--dur-quick) var(--ease-snap);
}
-.msk-radio:focus-visible{ outline:none; box-shadow:var(--shadow-inset-well), var(--focus-ring); }
+.modern-sk-radio:focus-visible{ outline:none; box-shadow:var(--shadow-inset-well), var(--focus-ring); }
/* control + label row helper */
-.msk-control{ display:inline-flex; align-items:center; gap:10px; font-size:14px; color:var(--fg-2); cursor:pointer; }
+.modern-sk-control{ display:inline-flex; align-items:center; gap:10px; font-size:14px; color:var(--fg-2); cursor:pointer; }
/* ---------- SEGMENTED CONTROL (Radix ToggleGroup) ---------- */
-.msk-seg{ 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; }
-.msk-seg__item{ 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), background var(--dur-quick); }
-.msk-seg__item:hover{ color:var(--fg-1); }
-.msk-seg__item[data-state="on"]{ color:var(--fg-1); background:var(--grad-key); box-shadow:var(--shadow-raised); }
+.modern-sk-seg{ 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__item{ 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), background var(--dur-quick); }
+.modern-sk-seg__item:hover{ color:var(--fg-1); }
+.modern-sk-seg__item[data-state="on"]{ color:var(--fg-1); background:var(--grad-key); box-shadow:var(--shadow-raised); }
/* ---------- SLIDER ---------- */
-.msk-slider{ position:relative; display:flex; align-items:center; width:200px; height:20px; user-select:none; touch-action:none; }
-.msk-slider__track{ position:relative; flex-grow:1; height:6px; border-radius:3px; background:var(--steel-800); box-shadow:var(--shadow-inset-well); }
-.msk-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,.4); }
-.msk-slider__thumb{ display:block; width:20px; height:20px; border-radius:50%; background:linear-gradient(180deg,#fff,#e6e8dd); box-shadow:0 2px 5px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.9) inset; cursor:pointer; outline:none; }
-.msk-slider__thumb:focus-visible{ box-shadow:0 2px 5px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.9) inset, var(--focus-ring); }
+.modern-sk-slider{ position:relative; display:flex; align-items:center; width:200px; height:20px; 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,.4); }
+.modern-sk-slider__thumb{ display:block; width:20px; height:20px; border-radius:50%; background:linear-gradient(180deg,#fff,#e6e8dd); box-shadow:0 2px 5px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.9) inset; cursor:pointer; outline:none; }
+.modern-sk-slider__thumb:focus-visible{ box-shadow:0 2px 5px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.9) inset, var(--focus-ring); }
/* ---------- STEPPER ---------- */
-.msk-stepper{ display:inline-flex; border-radius:var(--r-md); overflow:hidden; box-shadow:var(--shadow-raised); border:1px solid var(--hair-strong); }
-.msk-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); }
-.msk-stepper button:hover{ background:var(--grad-key-hover); }
-.msk-stepper button:active{ background:var(--grad-key-down); }
-.msk-stepper button:first-child{ border-right:1px solid var(--edge-inset); }
+.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 ---------- */
-.msk-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:.02em; border:1px solid transparent; }
-.msk-badge--lime{ color:var(--lime-ink); background:linear-gradient(180deg,var(--lime-bright),var(--lime-deep)); border-color:var(--lime-deep); }
-.msk-badge--ember{ color:#fff; background:var(--grad-ember); border-color:var(--ember-deep); }
-.msk-badge--neutral{ color:var(--fg-2); background:var(--steel-700); border-color:var(--hair-strong); }
-.msk-badge--outline{ color:var(--fg-2); background:transparent; border-color:var(--hair-strong); }
-.msk-badge--dot::before{ content:""; width:6px; height:6px; border-radius:50%; background:currentColor; }
+.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:.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; }
-.msk-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); }
-.msk-chip .x{ color:var(--fg-3); cursor:pointer; font-size:14px; line-height:1; background:none; border:none; padding:0; display:inline-flex; }
-.msk-chip .x:hover{ color:var(--fg-1); }
+.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 ---------- */
-.msk-card{ background:var(--steel-900); border:1px solid var(--hair); border-radius:var(--r-lg); box-shadow:var(--shadow-card); padding:18px; }
+.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 ---------- */
-.msk-list{ background:var(--steel-900); border:1px solid var(--hair); border-radius:var(--r-lg); box-shadow:var(--shadow-card); overflow:hidden; }
-.msk-row{ display:flex; align-items:center; gap:12px; padding:10px 14px; border-bottom:1px solid var(--hair); cursor:default; }
-.msk-row:last-child{ border-bottom:none; }
-.msk-row:hover{ background:rgba(255,255,255,.03); }
-.msk-row.is-selected{ background:linear-gradient(180deg,rgba(190,242,100,.16),rgba(190,242,100,.08)); }
-.msk-row .nm{ font-size:14px; font-weight:500; color:var(--fg-1); white-space:nowrap; }
-.msk-row .meta{ margin-left:auto; font-family:var(--font-mono); font-size:11px; color:var(--fg-3); }
+.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; }
+.modern-sk-row:last-child{ border-bottom:none; }
+.modern-sk-row:hover{ background:rgba(255,255,255,.03); }
+.modern-sk-row.is-selected{ background:linear-gradient(180deg,rgba(190,242,100,.16),rgba(190,242,100,.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) ---------- */
-.msk-menu{ min-width:208px; padding:6px; border-radius:var(--r-lg); border:1px solid var(--hair-strong); background:rgba(34,36,27,.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); }
-.msk-menu[data-state="open"]{ animation:msk-scale-in var(--dur-base) var(--ease-out); }
-.msk-menu[data-state="closed"]{ animation:msk-scale-out var(--dur-quick) var(--ease-out); }
-.msk-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; }
-.msk-menu-item .ph{ font-size:16px; color:var(--fg-2); display:inline-flex; }
-.msk-menu-item .sc{ margin-left:auto; font-family:var(--font-mono); font-size:11px; color:var(--fg-3); }
-.msk-menu-item[data-highlighted]{ background:linear-gradient(180deg,var(--lime),var(--lime-deep)); color:var(--lime-ink); }
-.msk-menu-item[data-highlighted] .ph, .msk-menu-item[data-highlighted] .sc{ color:var(--lime-ink); }
-.msk-menu-sep{ height:1px; background:var(--hair); margin:5px 4px; }
+.modern-sk-menu{ min-width:208px; padding:6px; border-radius:var(--r-lg); border:1px solid var(--hair-strong); background:rgba(34,36,27,.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) ---------- */
-.msk-tabs{ display:flex; gap:2px; border-bottom:1px solid var(--hair); }
-.msk-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); }
-.msk-tabs__trigger:hover{ color:var(--fg-2); }
-.msk-tabs__trigger[data-state="active"]{ color:var(--fg-1); }
-.msk-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,.5); }
+.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,.5); }
/* ---------- PROGRESS (Radix Progress) ---------- */
-.msk-progress{ width:100%; height:8px; border-radius:var(--r-pill); background:var(--steel-800); box-shadow:var(--shadow-inset-well); overflow:hidden; }
-.msk-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,.4); transition:width var(--dur-base) var(--ease-out); }
+.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,.4); transition:width var(--dur-base) var(--ease-out); }
/* ---------- WINDOW CHROME ---------- */
-.msk-window{ border-radius:var(--r-xl); overflow:hidden; border:1px solid var(--hair-strong); background:var(--steel-800); box-shadow:var(--shadow-window); }
-.msk-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,.4); box-shadow:0 1px 0 rgba(255,255,255,.05) inset; }
-.msk-titlebar .ttl{ margin-left:6px; font-size:13px; font-weight:600; color:var(--fg-2); }
-.msk-traffic{ width:12px; height:12px; border-radius:50%; box-shadow:0 1px 1px rgba(0,0,0,.4) inset, 0 0 0 .5px rgba(0,0,0,.3); }
-.msk-traffic.r{ background:radial-gradient(circle at 35% 30%,#ff8a7a,#ec5f55); }
-.msk-traffic.y{ background:radial-gradient(circle at 35% 30%,#ffd97a,#e6a93c); }
-.msk-traffic.g{ background:radial-gradient(circle at 35% 30%,#bff07a,#9bce4c); }
+.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,.4); box-shadow:0 1px 0 rgba(255,255,255,.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,.4) inset, 0 0 0 .5px rgba(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) ---------- */
-.msk-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,.92); border:1px solid var(--hair-strong); box-shadow:var(--shadow-card); z-index:60; transform-origin:var(--radix-tooltip-content-transform-origin); }
-.msk-tooltip[data-state="delayed-open"], .msk-tooltip[data-state="instant-open"]{ animation:msk-scale-in var(--dur-base) var(--ease-out); }
-.msk-tooltip[data-state="closed"]{ animation:msk-fade-out var(--dur-quick) var(--ease-out); }
+.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,.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 .msk-btn engine; variants below
- just recolor. Pair with .msk-btn / .msk-btn--primary etc. */
-.msk-iconbtn{ padding:0; width:32px; height:32px; aspect-ratio:1; display:inline-flex; align-items:center; justify-content:center; }
-.msk-iconbtn--sm{ width:26px; height:26px; }
-.msk-iconbtn--lg{ width:38px; height:38px; }
+ 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 (sunk like the switch well) with a glossy lime
arc spinning *inside* the channel. All drawn in SVG; CSS only sizes
the box and drives the rotation. Honors reduced motion. */
-.msk-spinner{ display:inline-block; width:24px; height:24px; line-height:0; }
-.msk-spinner--sm{ width:16px; height:16px; }
-.msk-spinner--lg{ width:34px; height:34px; }
-.msk-spinner svg{ width:100%; height:100%; display:block; }
-.msk-spinner__arc{
- transform-origin:center; animation:msk-spin .7s linear infinite;
+.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; }
+.modern-sk-spinner__arc{
+ transform-origin:center; animation:modern-sk-spin .7s linear infinite;
filter:drop-shadow(0 0 3px rgba(190,242,100,.55));
}
-@keyframes msk-spin{ to{ transform:rotate(360deg); } }
-@media (prefers-reduced-motion:reduce){ .msk-spinner__arc{ animation-duration:1.8s; } }
+@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. */
-.msk-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); }
-.msk-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); }
-.msk-callout__body{ font-size:13px; line-height:1.5; color:var(--fg-2); padding-top:3px; }
-.msk-callout__body strong{ color:var(--fg-1); font-weight:600; }
-.msk-callout--success{ background:var(--success-bg); border-color:rgba(190,242,100,.22); }
-.msk-callout--success .msk-callout__icon{ color:var(--success); }
-.msk-callout--warning{ background:var(--warning-bg); border-color:rgba(230,169,60,.22); }
-.msk-callout--warning .msk-callout__icon{ color:var(--warning); }
-.msk-callout--danger{ background:var(--danger-bg); border-color:rgba(233,87,43,.25); }
-.msk-callout--danger .msk-callout__icon{ color:var(--danger); }
+.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,.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,.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,.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. */
-.msk-table-wrap{ background:var(--steel-900); border:1px solid var(--hair); border-radius:var(--r-lg); box-shadow:var(--shadow-card); overflow:hidden; }
-.msk-table{ width:100%; border-collapse:collapse; font-size:14px; }
-.msk-table thead th{ text-align:left; font-family:var(--font-sans); font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:.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,.04) inset; white-space:nowrap; }
-.msk-table tbody td{ padding:10px 14px; border-bottom:1px solid var(--hair); color:var(--fg-1); vertical-align:middle; }
-.msk-table tbody tr:last-child td{ border-bottom:none; }
-.msk-table tbody tr:hover td{ background:rgba(255,255,255,.03); }
-.msk-table tbody tr.is-selected td{ background:linear-gradient(180deg,rgba(190,242,100,.16),rgba(190,242,100,.08)); }
-.msk-table .num{ font-family:var(--font-mono); font-size:12px; color:var(--fg-2); text-align:right; }
-.msk-table .muted{ color:var(--fg-3); }
-[data-theme="light"] .msk-table tbody tr:hover td{ background:rgba(0,0,0,.035); }
+.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:.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,.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,.03); }
+.modern-sk-table tbody tr.is-selected td{ background:linear-gradient(180deg,rgba(190,242,100,.16),rgba(190,242,100,.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,.035); }
/* ---------- SCROLL AREA (Radix) ---------- */
-.msk-scroll{ overflow:hidden; }
-.msk-scroll__viewport{ width:100%; height:100%; border-radius:inherit; }
-.msk-scroll__bar{ display:flex; user-select:none; touch-action:none; padding:2px; background:transparent; transition:background var(--dur-base) var(--ease-out); }
-.msk-scroll__bar[data-orientation="vertical"]{ width:10px; }
-.msk-scroll__bar[data-orientation="horizontal"]{ flex-direction:column; height:10px; }
-.msk-scroll:hover .msk-scroll__bar{ background:rgba(0,0,0,.18); }
-.msk-scroll__thumb{ flex:1; background:var(--steel-500); border-radius:var(--r-pill); position:relative; box-shadow:0 1px 0 rgba(255,255,255,.08) inset; }
-.msk-scroll__thumb:hover{ background:var(--steel-400); }
-.msk-scroll__thumb::before{ content:""; position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); width:100%; height:100%; min-width:44px; min-height:44px; }
+.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,.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,.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. */
-.msk-overlay{ position:fixed; inset:0; z-index:80; background:rgba(8,9,6,.55); backdrop-filter:blur(3px); -webkit-backdrop-filter:blur(3px); }
-.msk-overlay[data-state="open"]{ animation:msk-fade-in var(--dur-base) var(--ease-out); }
-.msk-overlay[data-state="closed"]{ animation:msk-fade-out var(--dur-quick) var(--ease-out); }
-.msk-dialog{ position:fixed; z-index:81; top:50%; left:50%; transform: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; }
-.msk-dialog[data-state="open"]{ animation:msk-scale-in var(--dur-base) var(--ease-out); }
-.msk-dialog[data-state="closed"]{ animation:msk-scale-out var(--dur-quick) var(--ease-out); }
-.msk-dialog__title{ font-family:var(--font-sans); font-size:var(--text-lg); font-weight:600; color:var(--fg-1); letter-spacing:var(--track-snug); }
-.msk-dialog__desc{ margin-top:8px; font-size:14px; line-height:1.55; color:var(--fg-2); }
-.msk-dialog__body{ margin-top:16px; }
-.msk-dialog__footer{ display:flex; justify-content:flex-end; gap:12px; margin-top:22px; }
-.msk-dialog__close{ position:absolute; top:14px; right:14px; }
+.modern-sk-overlay{ position:fixed; inset:0; z-index:80; background:rgba(8,9,6,.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%; transform: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; }
+.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"] .msk-btn--ghost:hover{ background:rgba(0,0,0,.05); color:var(--fg-1); }
-[data-theme="light"] .msk-btn--ghost:active{ background:rgba(0,0,0,.08); }
-[data-theme="light"] .msk-row:hover{ background:rgba(0,0,0,.035); }
+[data-theme="light"] .modern-sk-btn--ghost:hover{ background:rgba(0,0,0,.05); color:var(--fg-1); }
+[data-theme="light"] .modern-sk-btn--ghost:active{ background:rgba(0,0,0,.08); }
+[data-theme="light"] .modern-sk-row:hover{ background:rgba(0,0,0,.035); }
-[data-theme="light"] .msk-btn--ember{
+[data-theme="light"] .modern-sk-btn--ember{
box-shadow:0 1px 0 rgba(255,255,255,.25) inset, 0 1px 2px rgba(0,0,0,.18), 0 6px 14px rgba(233,87,43,.22);
}
-[data-theme="light"] .msk-switch__thumb{
+[data-theme="light"] .modern-sk-switch__thumb{
background:linear-gradient(180deg,#ffffff,#e7e7dd);
box-shadow:0 1px 2px rgba(0,0,0,.22), 0 1px 0 rgba(255,255,255,.9) inset;
}
-[data-theme="light"] .msk-switch{ background:var(--steel-600); }
-[data-theme="light"] .msk-switch[data-state="checked"]{ background:linear-gradient(180deg,var(--lime),var(--lime-deep)); }
+[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"] .msk-slider__thumb{ box-shadow:0 1px 3px rgba(0,0,0,.28), 0 1px 0 rgba(255,255,255,.95) inset, 0 0 0 .5px rgba(0,0,0,.06); }
+[data-theme="light"] .modern-sk-slider__thumb{ box-shadow:0 1px 3px rgba(0,0,0,.28), 0 1px 0 rgba(255,255,255,.95) inset, 0 0 0 .5px rgba(0,0,0,.06); }
-[data-theme="light"] .msk-menu{ background:rgba(246,246,239,.82); border-color:var(--hair-strong); }
-[data-theme="light"] .msk-select__content{ background:rgba(246,246,239,.82); }
-[data-theme="light"] .msk-tooltip{ background:rgba(246,246,239,.94); color:var(--fg-1); }
+[data-theme="light"] .modern-sk-menu{ background:rgba(246,246,239,.82); border-color:var(--hair-strong); }
+[data-theme="light"] .modern-sk-select__content{ background:rgba(246,246,239,.82); }
+[data-theme="light"] .modern-sk-tooltip{ background:rgba(246,246,239,.94); color:var(--fg-1); }
-[data-theme="light"] .msk-titlebar{ border-bottom-color:rgba(0,0,0,.12); }
-[data-theme="light"] .msk-traffic{ box-shadow:0 1px 1px rgba(0,0,0,.18) inset, 0 0 0 .5px rgba(0,0,0,.14); }
+[data-theme="light"] .modern-sk-titlebar{ border-bottom-color:rgba(0,0,0,.12); }
+[data-theme="light"] .modern-sk-traffic{ box-shadow:0 1px 1px rgba(0,0,0,.18) inset, 0 0 0 .5px rgba(0,0,0,.14); }
-[data-theme="light"] .msk-overlay{ background:rgba(60,62,52,.32); }
-[data-theme="light"] .msk-scroll:hover .msk-scroll__bar{ background:rgba(0,0,0,.06); }
-[data-theme="light"] .msk-table thead th{ box-shadow:0 1px 0 rgba(255,255,255,.6) inset; }
+[data-theme="light"] .modern-sk-overlay{ background:rgba(60,62,52,.32); }
+[data-theme="light"] .modern-sk-scroll:hover .modern-sk-scroll__bar{ background:rgba(0,0,0,.06); }
+[data-theme="light"] .modern-sk-table thead th{ box-shadow:0 1px 0 rgba(255,255,255,.6) inset; }
diff --git a/src/styles/fonts.css b/src/styles/fonts.css
new file mode 100644
index 0000000..2f81214
--- /dev/null
+++ b/src/styles/fonts.css
@@ -0,0 +1,24 @@
+/* ============================================================
+ ModernSK — optional branded webfonts.
+ Import this ONLY if you want the default ModernSK typefaces:
+
+ import 'modern-sk/styles.css'; // required — tokens + components
+ import 'modern-sk/fonts.css'; // optional — branded faces
+
+ Skip it and the --font-* tokens degrade to system-ui, or
+ override --font-display / --font-sans / --font-mono in your own
+ CSS to map components onto fonts your app already loads.
+ ------------------------------------------------------------
+ Onest + Geist Mono come from Google Fonts; Anta (the squared
+ display face) is self-hosted and inlined at build time.
+ ============================================================ */
+
+@import url('https://fonts.googleapis.com/css2?family=Onest:wght@300;400;500;600;700;800&family=Geist+Mono:wght@400;500;600&display=swap');
+
+@font-face {
+ font-family: 'Anta';
+ src: url('../assets/Anta-Regular.ttf') format('truetype');
+ font-weight: 400;
+ font-style: normal;
+ font-display: swap;
+}
diff --git a/src/styles/global.css b/src/styles/global.css
index 310bf9b..470ddd6 100644
--- a/src/styles/global.css
+++ b/src/styles/global.css
@@ -1,3 +1,4 @@
+@import './fonts.css';
@import './tokens.css';
@import './components.css';
diff --git a/src/styles/index.css b/src/styles/index.css
index 4bd44b0..9334283 100644
--- a/src/styles/index.css
+++ b/src/styles/index.css
@@ -1,12 +1,13 @@
/* ============================================================
- ModernSK UI — shippable stylesheet.
+ ModernSK — shippable stylesheet.
Tokens + component styles only. No demo/page layout, no global
- reset of consumer elements. Font is inlined at build time.
+ reset of consumer elements. No fonts: import 'modern-sk/fonts.css'
+ for the branded faces, or override the --font-* tokens.
============================================================ */
@import './tokens.css';
@import './components.css';
/* Non-invasive box-sizing for our own components only (zero specificity). */
-:where([class^='msk-'], [class*=' msk-']) {
+:where([class^='modern-sk-'], [class*=' modern-sk-']) {
box-sizing: border-box;
}
diff --git a/src/styles/tokens.css b/src/styles/tokens.css
index c3a4726..281aa46 100644
--- a/src/styles/tokens.css
+++ b/src/styles/tokens.css
@@ -4,19 +4,14 @@
Old-iOS skeuomorphism × macOS Sequoia neatness × Ubuntu warmth.
------------------------------------------------------------
Single source of truth. Every component reads from here.
+ ------------------------------------------------------------
+ Fonts are NOT loaded here. The branded faces (Anta / Onest /
+ Geist Mono) live in the optional `modern-sk/fonts.css`. The
+ --font-* chains below degrade to system-ui when that file is
+ not imported, and an app can override the tokens to remap any
+ typeface without touching this file.
============================================================ */
-@import url('https://fonts.googleapis.com/css2?family=Onest:wght@300;400;500;600;700;800&family=Geist+Mono:wght@400;500;600&display=swap');
-
-/* Anta — squared geometric display face (self-hosted from /public/fonts). */
-@font-face {
- font-family: 'Anta';
- src: url('../assets/Anta-Regular.ttf') format('truetype');
- font-weight: 400;
- font-style: normal;
- font-display: swap;
-}
-
:root {
/* ---------- BRAND ---------- */
--lime: #bef264;
@@ -192,7 +187,7 @@
/* ============================================================
THE FELT — the one global background.
============================================================ */
-.msk-felt {
+.modern-sk-felt {
position: relative;
background-color: var(--ink);
background-image: var(--bg-glow);
@@ -201,7 +196,7 @@
background-attachment: fixed;
color: var(--fg-1);
}
-.msk-felt::before {
+.modern-sk-felt::before {
content: "";
position: fixed;
inset: 0;
@@ -277,40 +272,40 @@
/* ============================================================
SEMANTIC TYPE CLASSES
============================================================ */
-.msk-display {
+.modern-sk-display {
font-family: var(--font-display); font-weight: 400;
font-size: var(--text-5xl); line-height: var(--lh-tight);
letter-spacing: -0.01em; color: var(--fg-1);
}
-.msk-h1 {
+.modern-sk-h1 {
font-family: var(--font-sans); font-weight: var(--w-bold);
font-size: var(--text-3xl); line-height: var(--lh-snug);
letter-spacing: var(--track-snug); color: var(--fg-1);
}
-.msk-h2 {
+.modern-sk-h2 {
font-family: var(--font-sans); font-weight: var(--w-semibold);
font-size: var(--text-2xl); line-height: var(--lh-snug);
letter-spacing: var(--track-snug); color: var(--fg-1);
}
-.msk-h3 {
+.modern-sk-h3 {
font-family: var(--font-sans); font-weight: var(--w-semibold);
font-size: var(--text-xl); line-height: var(--lh-snug); color: var(--fg-1);
}
-.msk-body {
+.modern-sk-body {
font-family: var(--font-sans); font-weight: var(--w-regular);
font-size: var(--text-base); line-height: var(--lh-normal); color: var(--fg-2);
}
-.msk-body-strong { font-weight: var(--w-medium); color: var(--fg-1); }
-.msk-caption {
+.modern-sk-body-strong { font-weight: var(--w-medium); color: var(--fg-1); }
+.modern-sk-caption {
font-family: var(--font-sans); font-weight: var(--w-medium);
font-size: var(--text-sm); color: var(--fg-3);
}
-.msk-label {
+.modern-sk-label {
font-family: var(--font-sans); font-weight: var(--w-semibold);
font-size: 11px; text-transform: uppercase;
letter-spacing: var(--track-caps); color: var(--fg-3);
}
-.msk-mono {
+.modern-sk-mono {
font-family: var(--font-mono); font-weight: var(--w-regular);
font-size: var(--text-sm); color: var(--fg-2);
}