142 lines
3.5 KiB
CSS
142 lines
3.5 KiB
CSS
/*
|
|||
|
|
* Design-system chrome shared with cash-just-works: the three-way theme
|
||
|
|
* toggle and the brand mark. Ported verbatim from public/css/components.css
|
||
|
|
* in the cash-just-works repo — colors resolve through tokens.css, so this
|
||
|
|
* follows the same light/dark rules as the source site.
|
||
|
|
*/
|
||
|
|
|
||
|
|
.theme-toggle {
|
||
|
|
display: inline-flex;
|
||
|
|
align-items: center;
|
||
|
|
gap: 2px;
|
||
|
|
padding: 3px;
|
||
|
|
border: 1px solid var(--jw-line);
|
||
|
|
border-radius: var(--jw-radius-pill);
|
||
|
|
background: var(--jw-surface-sunken);
|
||
|
|
}
|
||
|
|
|
||
|
|
.theme-toggle button {
|
||
|
|
width: 32px;
|
||
|
|
height: 28px;
|
||
|
|
display: inline-grid;
|
||
|
|
place-items: center;
|
||
|
|
border: 0;
|
||
|
|
border-radius: var(--jw-radius-pill);
|
||
|
|
background: transparent;
|
||
|
|
color: var(--jw-text-muted);
|
||
|
|
cursor: pointer;
|
||
|
|
transition:
|
||
|
|
background var(--jw-duration-base) var(--jw-ease-out),
|
||
|
|
color var(--jw-duration-base) var(--jw-ease-out);
|
||
|
|
}
|
||
|
|
|
||
|
|
.theme-toggle button:hover { color: var(--jw-text-primary); }
|
||
|
|
|
||
|
|
.theme-toggle button[aria-pressed="true"] {
|
||
|
|
background: var(--jw-surface);
|
||
|
|
color: var(--jw-text-primary);
|
||
|
|
box-shadow: var(--jw-shadow-xs);
|
||
|
|
}
|
||
|
|
|
||
|
|
.theme-toggle button:focus-visible {
|
||
|
|
outline: 2px solid var(--jw-field-border-focus);
|
||
|
|
outline-offset: 1px;
|
||
|
|
}
|
||
|
|
|
||
|
|
.theme-toggle svg {
|
||
|
|
width: 15px;
|
||
|
|
height: 15px;
|
||
|
|
fill: none;
|
||
|
|
stroke: currentColor;
|
||
|
|
stroke-width: 1.8;
|
||
|
|
stroke-linecap: round;
|
||
|
|
stroke-linejoin: round;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* Brand mark: one continuous line, path swapped by assets/ds/logo.js. */
|
||
|
|
|
||
|
|
.jw-mark {
|
||
|
|
width: var(--jw-mark-width, 2.1em);
|
||
|
|
height: auto;
|
||
|
|
flex: none;
|
||
|
|
display: block;
|
||
|
|
overflow: visible;
|
||
|
|
}
|
||
|
|
|
||
|
|
.jw-mark-portal {
|
||
|
|
width: auto;
|
||
|
|
height: var(--jw-mark-height, 1.35em);
|
||
|
|
}
|
||
|
|
|
||
|
|
.jw-mark-portal { filter: var(--jw-portal-depth); }
|
||
|
|
|
||
|
|
.jw-portal-frame { fill: var(--jw-text-primary); }
|
||
|
|
.jw-portal-head { stop-color: var(--jw-text-subtle); }
|
||
|
|
.jw-portal-floor { stop-color: transparent; }
|
||
|
|
|
||
|
|
.jw-mark-path {
|
||
|
|
fill: none;
|
||
|
|
stroke-width: 3;
|
||
|
|
stroke-linecap: round;
|
||
|
|
stroke-linejoin: round;
|
||
|
|
}
|
||
|
|
|
||
|
|
.jw-mark-stop-a { stop-color: var(--jw-accent); }
|
||
|
|
.jw-mark-stop-b { stop-color: var(--jw-highlight); }
|
||
|
|
|
||
|
|
.brand .jw-mark { margin-right: -0.15em; }
|
||
|
|
|
||
|
|
/* App icon: the mark in a translucent rimmed container. Fixed dark ground in
|
||
|
|
both themes on purpose (see tokens.css). */
|
||
|
|
|
||
|
|
.jw-app-icon {
|
||
|
|
position: relative;
|
||
|
|
width: var(--jw-app-icon-size);
|
||
|
|
height: var(--jw-app-icon-size);
|
||
|
|
flex: none;
|
||
|
|
display: grid;
|
||
|
|
place-items: center;
|
||
|
|
border-radius: var(--jw-app-icon-radius);
|
||
|
|
background: var(--jw-app-icon-bg);
|
||
|
|
-webkit-backdrop-filter: blur(var(--jw-app-icon-blur));
|
||
|
|
backdrop-filter: blur(var(--jw-app-icon-blur));
|
||
|
|
}
|
||
|
|
|
||
|
|
.jw-app-icon::before {
|
||
|
|
content: "";
|
||
|
|
position: absolute;
|
||
|
|
inset: 0;
|
||
|
|
padding: var(--jw-app-icon-rim-width);
|
||
|
|
border-radius: inherit;
|
||
|
|
background: linear-gradient(
|
||
|
|
135deg,
|
||
|
|
var(--jw-app-icon-rim-bright) 0%,
|
||
|
|
var(--jw-app-icon-rim-fade) 32%,
|
||
|
|
var(--jw-app-icon-rim-fade) 68%,
|
||
|
|
var(--jw-app-icon-rim-bright) 100%
|
||
|
|
);
|
||
|
|
-webkit-mask:
|
||
|
|
linear-gradient(#000 0 0) content-box,
|
||
|
|
linear-gradient(#000 0 0);
|
||
|
|
mask:
|
||
|
|
linear-gradient(#000 0 0) content-box,
|
||
|
|
linear-gradient(#000 0 0);
|
||
|
|
-webkit-mask-composite: xor;
|
||
|
|
mask-composite: exclude;
|
||
|
|
pointer-events: none;
|
||
|
|
}
|
||
|
|
|
||
|
|
.jw-app-icon .jw-mark.jw-mark-portal,
|
||
|
|
.jw-app-icon .jw-mark.jw-mark-line {
|
||
|
|
width: auto;
|
||
|
|
height: calc(var(--jw-app-icon-size) * 0.52);
|
||
|
|
transform: translateY(calc(var(--jw-app-icon-size) * -0.025));
|
||
|
|
}
|
||
|
|
|
||
|
|
.brand .jw-app-icon { margin-right: var(--jw-space-1); }
|
||
|
|
|
||
|
|
.jw-app-icon.lg { --jw-app-icon-size: 76px; --jw-app-icon-rim-width: 1.5px; }
|
||
|
|
.jw-app-icon.sm { --jw-app-icon-size: 26px; }
|
||
|
|
|
||
|
|
.nav-actions { display: flex; align-items: center; gap: 14px; }
|