settings-stack.css

17.6 KB · raw

1/* Settings Stack — layered category deck for the full settings surface. */23.stk-shell {4  flex: 1;5  min-height: 0;6  position: relative;7  overflow: hidden;8  padding: 10px 12px 28px;9}1011.stk-mast {12  display: flex;13  align-items: center;14  justify-content: space-between;15  gap: 10px;16  padding: 0 0 8px;17}1819.stk-back {20  width: 28px;21  height: 28px;22  display: inline-flex;23  align-items: center;24  justify-content: center;25  flex: 0 0 auto;26  border: 1px solid var(--peach-border);27  border-radius: 999px;28  background: color-mix(in srgb, var(--peach-t0) 4%, transparent);29  color: var(--peach-t1);30  cursor: pointer;31}3233.stk-back:hover {34  color: var(--peach-t0);35  border-color: color-mix(in srgb, var(--peach-accent) 34%, transparent);36  background: color-mix(in srgb, var(--peach-accent) 10%, transparent);37}3839.stk-mast-title {40  flex: 1;41  font-family: var(--font-display);42  font-style: italic;43  font-weight: 400;44  font-size: 22px;45  line-height: 1;46  color: var(--peach-t0);47}4849.stk-mast-meta {50  display: flex;51  align-items: baseline;52  gap: 6px;53  font-family: var(--font-mono);54  font-size: 9px;55  letter-spacing: 0.22em;56  text-transform: uppercase;57  color: var(--peach-t2);58}5960.stk-version-corner {61  position: absolute;62  bottom: 7px;63  left: 0;64  right: 0;65  font-family: var(--font-mono);66  font-size: 7px;67  letter-spacing: 0;68  text-align: center;69  color: color-mix(in srgb, var(--peach-t0) 66%, transparent);70  pointer-events: none;71  white-space: nowrap;72  z-index: 1;73}7475.stk-deck {76  position: relative;77  height: min(462px, calc(100% - 36px));78  min-height: 462px;79  margin-top: 0;80}8182.stk-card {83  position: absolute;84  left: 0;85  right: 0;86  border-radius: var(--stack-card-radius);87  padding: 18px 18px 16px;88  overflow: hidden;89  cursor: pointer;90  transition:91    transform 380ms var(--stack-spring),92    height 380ms var(--stack-spring),93    box-shadow 280ms ease,94    opacity 220ms ease;95  box-shadow:96    0 1px 0 color-mix(in srgb, var(--peach-t0) 5%, transparent) inset,97    0 8px 20px rgba(0, 0, 0, 0.25);98  border: 1px solid color-mix(in srgb, var(--peach-t0) 6%, transparent);99  will-change: transform;100}101102.stk-card::after {103  content: "";104  position: absolute;105  inset: 0;106  border-radius: inherit;107  pointer-events: none;108  background:109    radial-gradient(110      120% 80% at 0% 0%,111      color-mix(in srgb, #fff 12%, transparent),112      transparent 50%113    );114}115116.stk-card.is-active {117  box-shadow:118    0 1px 0 color-mix(in srgb, var(--peach-t0) 8%, transparent) inset,119    0 18px 36px rgba(0, 0, 0, 0.42);120  cursor: default;121}122123.stk-card.is-focused {124  cursor: default;125}126127.stk-card.is-tab:hover {128  transform: translateY(calc(var(--stk-card-top) - 7px));129  box-shadow:130    0 1px 0 color-mix(in srgb, #fff 9%, transparent) inset,131    0 16px 32px rgba(0, 0, 0, 0.36),132    0 0 0 1px color-mix(in srgb, #fff 10%, transparent);133  transition:134    transform 90ms ease-out,135    box-shadow 90ms ease-out;136}137138.stk-card.is-concealed {139  opacity: 0;140  pointer-events: none;141}142143.stk-card-top {144  display: flex;145  justify-content: space-between;146  align-items: center;147  margin-bottom: 12px;148  position: relative;149  z-index: 1;150}151152.stk-card-num {153  font-family: var(--font-mono);154  font-size: 8.5px;155  letter-spacing: 0.26em;156  text-transform: uppercase;157  opacity: 0.7;158}159160.stk-card-icon {161  opacity: 0.85;162}163164.stk-card-title {165  position: relative;166  z-index: 1;167  margin: 6px 0 0;168  font-family: var(--font-display);169  font-style: italic;170  font-weight: 400;171  font-size: 26px;172  line-height: 1.2;173}174175.stk-card-lede {176  position: relative;177  z-index: 1;178  margin: 4px 0 0;179  font-family: var(--font-display);180  font-style: italic;181  font-size: 12.5px;182  line-height: 1.4;183  opacity: 0.72;184}185186.stk-card-body {187  position: relative;188  z-index: 1;189  height: calc(100% - 76px);190  margin-top: 14px;191  margin-right: -18px;192  padding-right: 18px;193  overflow-y: auto;194  overflow-x: hidden;195  padding-bottom: 16px;196  opacity: 0;197  scrollbar-width: thin;198  scrollbar-color: color-mix(in srgb, currentColor 28%, transparent) transparent;199  transition: opacity 200ms 100ms ease;200}201202.stk-card-body::-webkit-scrollbar {203  width: 3px;204}205206.stk-card-body::-webkit-scrollbar-thumb {207  background: color-mix(in srgb, currentColor 28%, transparent);208  border-radius: 2px;209}210211.stk-card-body::-webkit-scrollbar-track {212  background: transparent;213}214215.stk-card.is-active .stk-card-body {216  opacity: 1;217}218219.stk-card.is-tab .stk-card-top {220  display: none;221}222223.stk-card.is-tab {224  padding: 10px 16px 8px;225}226227.stk-card.is-tab .stk-card-title {228  font-size: 19px;229  line-height: 1;230  white-space: nowrap;231  overflow: hidden;232  text-overflow: ellipsis;233}234235.stk-card.is-tab .stk-card-lede,236.stk-card.is-tab .stk-card-body {237  display: none;238}239240.stk-card *:focus-visible {241  outline: 1px solid currentColor;242  outline-offset: 2px;243}244245.stk-row {246  display: flex;247  align-items: center;248  justify-content: space-between;249  gap: 12px;250  padding: 10px 0;251  border-bottom: 1px solid color-mix(in srgb, currentColor 12%, transparent);252}253254.stk-row:last-child {255  border-bottom: none;256}257258.stk-row-name {259  font-size: 13px;260}261262.stk-row-sub {263  margin-top: 2px;264  font-family: var(--font-display);265  font-style: italic;266  font-size: 11px;267  opacity: 0.7;268}269270.stk-pill {271  display: inline-flex;272  align-items: center;273  justify-content: center;274  min-height: 24px;275  padding: 3px 10px;276  font-family: var(--font-mono);277  font-size: 10px;278  letter-spacing: 0.08em;279  text-transform: lowercase;280  background: transparent;281  color: currentColor;282  border: 1px solid color-mix(in srgb, currentColor 35%, transparent);283  border-radius: 999px;284  cursor: pointer;285  transition: background 140ms ease, border-color 140ms ease;286}287288.stk-pill:hover,289.stk-pill.is-accent {290  background: color-mix(in srgb, currentColor 18%, transparent);291  border-color: color-mix(in srgb, currentColor 55%, transparent);292}293294.stk-pip {295  display: inline-block;296  width: 18px;297  height: 18px;298  border-radius: 50%;299  background: rgba(0, 0, 0, 0.18);300  border: 1px solid color-mix(in srgb, currentColor 24%, transparent);301}302303.stk-pip.is-on {304  background: var(--peach-health-ok);305  box-shadow: 0 0 6px color-mix(in srgb, var(--peach-health-ok) 55%, transparent);306}307308/* Sync indicator light. Solid green = healthy pair, pulsing green = a sync is309   running, red = sync is not working. `is-idle` deliberately stays unlit310   rather than green: nothing has happened yet is not the same as fine. */311.stk-pip--sync { width: 10px; height: 10px; flex-shrink: 0; }312313.stk-pip--sync.is-busy {314  background: var(--peach-health-ok);315  box-shadow: 0 0 6px color-mix(in srgb, var(--peach-health-ok) 55%, transparent);316  animation: stk-pip-pulse 1600ms ease-in-out infinite;317}318319.stk-pip--sync.is-error {320  background: var(--peach-breach);321  box-shadow: 0 0 6px color-mix(in srgb, var(--peach-breach) 55%, transparent);322}323324@keyframes stk-pip-pulse {325  0%, 100% { opacity: 1; }326  50% { opacity: 0.35; }327}328329@media (prefers-reduced-motion: reduce) {330  .stk-pip--sync.is-busy { animation: none; }331}332333.stk-sync-actions,334.stk-fb-chips,335.stk-inline-actions {336  display: flex;337  flex-wrap: wrap;338  gap: 6px;339}340341.stk-key {342  font-family: var(--font-mono);343  font-size: 10px;344  letter-spacing: 0.06em;345  padding: 2px 7px;346  border: 1px solid color-mix(in srgb, currentColor 32%, transparent);347  border-radius: 4px;348  background: color-mix(in srgb, currentColor 6%, transparent);349}350351.stk-pro-headline {352  padding: 6px 0 14px;353  border-bottom: 1px solid color-mix(in srgb, currentColor 14%, transparent);354}355356.stk-pro-title,357.stk-pro-price {358  font-family: var(--font-display);359  font-style: italic;360  line-height: 1;361}362363.stk-pro-title {364  font-size: 22px;365}366367.stk-pro-price {368  font-size: 28px;369}370371.stk-pro-meta {372  margin-top: 4px;373  font-family: var(--font-mono);374  font-size: 9.5px;375  letter-spacing: 0.18em;376  text-transform: uppercase;377  opacity: 0.7;378}379380.stk-card .peach-settings-body {381  display: block;382  flex: none;383  min-height: 0;384  overflow: visible;385  padding: 0;386  background: transparent;387}388389.stk-card .peach-settings-group {390  margin: 0;391  padding: 0;392  border: 0;393  border-radius: 0;394  background: transparent;395  box-shadow: none;396  backdrop-filter: none;397  -webkit-backdrop-filter: none;398}399400.stk-card .peach-settings-group + .peach-settings-group {401  margin-top: 0;402}403404.stk-card .peach-settings-sub-label,405.stk-card .peach-settings-label {406  margin: 12px 0 4px;407  color: color-mix(in srgb, currentColor 58%, transparent);408}409410.stk-card .peach-settings-sub-label:first-child,411.stk-card .peach-settings-label:first-child {412  margin-top: 0;413}414415.stk-card .peach-settings-row,416.stk-card .peach-shortcut-row,417.stk-card .peach-history-row {418  border-bottom: 1px solid color-mix(in srgb, currentColor 12%, transparent);419  color: currentColor;420}421422.stk-card .peach-settings-row--meta,423.stk-card .peach-settings-value,424.stk-card .peach-hint,425.stk-card .peach-settings-hint,426.stk-card .peach-feedback-meta,427.stk-card .peach-feedback-anon,428.stk-card .peach-feedback-intro,429.stk-card .peach-history-sub,430.stk-card .peach-history-footer,431.stk-card .peach-danger-card-copy {432  color: color-mix(in srgb, currentColor 70%, transparent);433}434435.stk-card .peach-toggle {436  --peach-accent: currentColor;437  border-color: color-mix(in srgb, currentColor 32%, transparent);438  background: color-mix(in srgb, currentColor 8%, transparent);439}440441.stk-card .peach-toggle.is-on {442  background: color-mix(in srgb, currentColor 28%, transparent);443  border-color: color-mix(in srgb, currentColor 50%, transparent);444}445446.stk-card .peach-toggle-knob {447  background: color-mix(in srgb, currentColor 58%, transparent);448}449450.stk-card .peach-toggle.is-on .peach-toggle-knob {451  background: currentColor;452}453454.stk-card .peach-btn--subtle,455.stk-card .peach-btn--ghost,456.stk-card .peach-btn--accent,457.stk-card .peach-shortcut-chip,458.stk-card .peach-shortcut-reset,459.stk-card .peach-feedback-chip,460.stk-card .peach-settings-license-copy,461.stk-card .peach-settings-license-toggle {462  color: currentColor;463  border-color: color-mix(in srgb, currentColor 28%, transparent);464  background: color-mix(in srgb, currentColor 8%, transparent);465}466467.stk-card .peach-btn--subtle:hover,468.stk-card .peach-btn--ghost:hover,469.stk-card .peach-btn--accent:hover,470.stk-card .peach-shortcut-chip:hover,471.stk-card .peach-feedback-chip:hover,472.stk-card .peach-feedback-chip.is-active {473  background: color-mix(in srgb, currentColor 16%, transparent);474}475476.stk-card .peach-feedback-chip.is-active {477  color: #221427;478  border-color: #f0daf8;479  background: #e8d4f0;480  box-shadow:481    0 0 0 1px color-mix(in srgb, #f0daf8 64%, transparent),482    0 0 16px color-mix(in srgb, #f0daf8 24%, transparent);483  font-weight: 700;484}485486.stk-card .peach-feedback-thanks {487  color: currentColor;488  border-color: color-mix(in srgb, currentColor 32%, transparent);489  background:490    linear-gradient(180deg, color-mix(in srgb, currentColor 12%, transparent), transparent),491    rgba(0, 0, 0, 0.18);492}493494.stk-card .peach-feedback-thanks-title {495  color: currentColor;496}497498.stk-card .peach-settings-input,499.stk-card .peach-settings-select,500.stk-card .peach-pro-key-inline-input,501.stk-card .peach-feedback-textarea {502  color: currentColor;503  border-color: color-mix(in srgb, currentColor 22%, transparent);504  background: rgba(0, 0, 0, 0.18);505}506507.stk-card .peach-settings-input::placeholder,508.stk-card .peach-pro-key-inline-input::placeholder,509.stk-card .peach-feedback-textarea::placeholder {510  color: color-mix(in srgb, currentColor 42%, transparent);511}512513.stk-card .peach-accent-picker {514  justify-content: flex-end;515  max-width: 160px;516}517518.stk-card .peach-accent-swatch {519  width: 20px;520  height: 20px;521}522523.stk-card .peach-accent-swatch.is-active {524  border-color: currentColor;525}526527.stk-card .peach-history-list {528  border-color: color-mix(in srgb, currentColor 18%, transparent);529}530531.stk-card .peach-danger-card {532  background: rgba(0, 0, 0, 0.18);533  border-color: color-mix(in srgb, currentColor 20%, transparent);534}535536.stk-card .peach-pro-upgrade,537.stk-card .peach-pro-active,538.stk-card .peach-pro-active-hero,539.stk-card .peach-pro-grid-item {540  background: transparent;541  border-color: color-mix(in srgb, currentColor 14%, transparent);542  box-shadow: none;543}544545.stk-card .peach-pro-grid {546  gap: 6px;547}548549.stk-card .peach-pro-grid-item {550  padding: 7px 0;551}552553.stk-card .peach-pro-headline,554.stk-card .peach-pro-active-title {555  color: currentColor;556}557558.stk-deck.is-open .stk-card.is-active .peach-pro-active {559  min-height: 0;560  padding: 0 4px 10px;561}562563.stk-deck.is-open .stk-card.is-active .peach-pro-active-hero {564  gap: 4px;565  padding: 8px 0 12px;566}567568.stk-deck.is-open .stk-card.is-active .peach-pro-active-mark-wrap {569  margin-bottom: 0;570  overflow: visible;571}572573.stk-deck.is-open .stk-card.is-active .peach-pro-active-mark {574  width: 50px;575  height: 50px;576}577578.stk-deck.is-open .stk-card.is-active .peach-pro-active-title {579  font-size: 25px;580  line-height: 1;581}582583.stk-deck.is-open .stk-card.is-active .peach-pro-active-since {584  line-height: 1.2;585}586587.stk-deck.is-open .stk-card.is-active .peach-settings-license,588.stk-deck.is-open .stk-card.is-active .peach-pro-active-features,589.stk-deck.is-open .stk-card.is-active .peach-pro-deactivate {590  display: none;591}592593.stk-card .peach-feedback-textarea {594  min-height: 116px;595}596597.peach-settings-overlay {598  --bg: #0C0A06;599  --s1: #131109;600  --s2: #1A1710;601  --s3: #221F14;602  --t0: #F0E8D8;603  --t1: rgba(240, 232, 216, 0.50);604  --t2: rgba(240, 232, 216, 0.20);605  --t3: rgba(240, 232, 216, 0.07);606  --t4: rgba(240, 232, 216, 0.04);607  --surface-card: rgba(240, 232, 216, 0.02);608  --surface-elevated: rgba(19, 17, 9, 0.88);609  --shell-accent-a: color-mix(in srgb, var(--peach-accent) 8%, transparent);610  --shell-accent-b: color-mix(in srgb, var(--peach-accent) 6%, transparent);611  --peach-bg: var(--bg);612  --peach-s1: var(--s1);613  --peach-s2: var(--s2);614  --peach-s3: var(--s3);615  --peach-t0: var(--t0);616  --peach-t1: var(--t1);617  --peach-t2: var(--t2);618  --peach-t3: var(--t3);619  --peach-t4: var(--t4);620  --peach-bg-card: var(--surface-card);621  --peach-border: var(--peach-t3);622  --peach-text-dim: var(--peach-t1);623  background: var(--peach-bg);624  color: var(--peach-t0);625}626627/* Force html/body backgrounds dark when Settings is mounted so the popup628   frame chrome doesn't go white in light theme. */629html:has(.peach-settings-overlay),630html:has(.peach-settings-overlay) body {631  background: #0C0A06;632}633634/* Beat the .light .peach-btn--ghost rule in popup.css which would otherwise635   paint Settings buttons with the light-theme surface color. */636.peach-settings-overlay .stk-card .peach-btn--ghost:not(.peach-icon-btn) {637  background: color-mix(in srgb, var(--peach-t0) 8%, transparent);638  border-color: color-mix(in srgb, var(--peach-t0) 22%, transparent);639  color: var(--peach-t0);640}641.peach-settings-overlay .stk-card .peach-btn--ghost:not(.peach-icon-btn):hover {642  background: color-mix(in srgb, var(--peach-t0) 16%, transparent);643}644645.peach-settings-overlay .stk-shell {646  background: var(--peach-bg);647}648649.peach-settings-overlay .stk-card {650  box-shadow:651    0 1px 0 color-mix(in srgb, var(--peach-t0) 5%, transparent) inset,652    0 8px 20px rgba(0, 0, 0, 0.25);653}654655.peach-settings-overlay .stk-card.is-active {656  box-shadow:657    0 1px 0 color-mix(in srgb, var(--peach-t0) 8%, transparent) inset,658    0 18px 36px rgba(0, 0, 0, 0.42);659}660661:root[data-native="true"] {662  --stack-tab-h: 64px;663  --stack-tab-overlap: 16px;664}665666:root[data-native="true"] .stk-deck {667  height: calc(100dvh - 126px);668  min-height: 520px;669}670671[data-motion="reduce"] .stk-card,672[data-motion="reduce"] .stk-card-body {673  transition: none !important;674}675676/* ── Fan animation: measured card transitions during the Pro replay cycle ── */677.stk-deck.is-fanning .stk-card {678  transition:679    transform 140ms cubic-bezier(0.22, 1, 0.36, 1),680    height 140ms cubic-bezier(0.22, 1, 0.36, 1),681    box-shadow 140ms ease,682    opacity 140ms ease;683}684685/* ── Card shake when the pro card lands after the fan ── */686.stk-card.is-celebrating {687  transition: none !important;688  animation: stk-card-celebrate 880ms cubic-bezier(0.22, 1, 0.36, 1) both;689}690691@keyframes stk-card-celebrate {692  0%   { transform: translateY(var(--stk-card-top)); }693  24%  { transform: translateY(calc(var(--stk-card-top) - 10px)) rotate(-1.3deg); }694  48%  { transform: translateY(calc(var(--stk-card-top) + 5px)) rotate(0.9deg); }695  70%  { transform: translateY(calc(var(--stk-card-top) - 4px)) rotate(-0.45deg); }696  86%  { transform: translateY(calc(var(--stk-card-top) + 2px)); }697  100% { transform: translateY(var(--stk-card-top)); }698}699700/* ── Ambient sparkle dust on the Pro card when user is Pro ── */701.stk-deck.is-pro .stk-card[data-settings-card-id="pro"]::before {702  content: "";703  position: absolute;704  inset: 0;705  border-radius: inherit;706  pointer-events: none;707  background-image:708    radial-gradient(circle, rgba(255, 248, 220, 0.9) 0.5px, transparent 0.5px),709    radial-gradient(circle, rgba(255, 255, 255, 0.7) 0.5px, transparent 0.5px),710    radial-gradient(circle, rgba(255, 238, 170, 0.6) 1px, transparent 1px);711  background-size: 38px 38px, 53px 47px, 71px 63px;712  background-position: 0 0, 19px 15px, 9px 30px;713  animation: stk-pro-dust 14s linear infinite;714  opacity: 0.11;715  z-index: 0;716  mix-blend-mode: screen;717}718719@keyframes stk-pro-dust {720  0%   { transform: translate(0, 0); }721  100% { transform: translate(53px, 47px); }722}723724[data-motion="reduce"] .stk-deck.is-pro .stk-card[data-settings-card-id="pro"]::before,725[data-motion="reduce"] .stk-card.is-celebrating {726  animation: none;727}728729/* ── Clickable card icon (easter egg trigger) ── */730.stk-card-icon--btn {731  background: transparent;732  border: 0;733  color: inherit;734  padding: 0;735  cursor: pointer;736  opacity: 0.85;737  display: inline-flex;738  align-items: center;739  justify-content: center;740}741742.stk-card-icon--btn:hover {743  opacity: 1;744}745746/* ── Chip highlight clipping fix ── */747/* .stk-card-body has overflow-x: hidden which clips the active chip's glow */748.stk-card .peach-feedback-chips {749  padding-left: 3px;750}