UNPKG

3.78 kBCSSView Raw
1@import "../props.media.css";
2@import "../props.gray-hsl.css";
3
4:where(button,input:is([type="button"],[type="submit"],[type="reset"])),
5:where(input[type="file"])::-webkit-file-upload-button,
6:where(input[type="file"])::file-selector-button {
7 --_accent: initial /* your color */;
8 --_text: initial /* your text color */;
9 --_size: initial /* your size */;
10
11 --_bg-light: white;
12 --_bg-dark: var(--surface-3);
13 --_bg: var(--_bg-light);
14
15 --_border: var(--surface-3);
16
17 --_highlight-size: 0;
18 --_highlight-light: hsl(var(--gray-5-hsl) / 25%);
19 --_highlight-dark: hsl(var(--gray-12-hsl) / 25%);
20 --_highlight: var(--_highlight-light);
21
22 --_ink-shadow-light: 0 1px 0 var(--gray-3);
23 --_ink-shadow-dark: 0 1px 0 var(--surface-1);
24 --_ink-shadow: var(--_ink-shadow-light);
25
26 --_icon-size: 2ch;
27 --_icon-color: var(--_accent, var(--link));
28
29 font-size: var(--_size);
30 background: var(--_bg);
31 color: var(--_text);
32 border: var(--border-size-2) solid var(--_border);
33 box-shadow:
34 var(--shadow-2),
35 0 1px var(--surface-3),
36 0 0 0 var(--_highlight-size) var(--_highlight)
37 ;
38 text-shadow: var(--_ink-shadow);
39
40 display: inline-flex;
41 justify-content: center;
42 align-items: center;
43 text-align: center;
44 gap: var(--size-2);
45
46 font-weight: var(--font-weight-7);
47 border-radius: var(--radius-2);
48 padding-block: .75ch;
49 padding-inline: 1.75ch;
50
51 user-select: none;
52 -webkit-tap-highlight-color: transparent;
53 -webkit-touch-callout: none;
54
55 transition: border-color .5s var(--ease-3) 3s;
56
57 @media (--OSdark) {
58 --_highlight: var(--_highlight-dark);
59 --_bg: var(--_bg-dark);
60 --_ink-shadow: var(--_ink-shadow-dark);
61 }
62
63 @media (--motionOK) {
64 transition:
65 border-color .5s var(--ease-3) 3s,
66 box-shadow 145ms var(--ease-4),
67 outline-offset 145ms var(--ease-4);
68 }
69}
70
71:where(button,input:is([type="button"],[type="submit"],[type="reset"])) {
72 /* disabled */
73 &[disabled] {
74 --_bg: none;
75 --_text: var(--gray-6);
76 cursor: not-allowed;
77 box-shadow: var(--shadow-1);
78
79 @media (--OSdark) {
80 --_text: var(--gray-5);
81 }
82 }
83
84 /* pressing */
85 &:where(:not(:active):hover) {
86 --_highlight-size: var(--size-2);
87 transition-delay: 0s;
88 transition-duration: .25s;
89 }
90
91 /* icons */
92 & > :where(svg) {
93 flex-shrink: 0;
94 filter: drop-shadow(var(--_ink-shadow));
95 block-size: var(--_icon-size);
96 inline-size: var(--_icon-size);
97 }
98
99 & > :where(svg > *) {
100 stroke: var(--_icon-color);
101 stroke-width: var(--border-size-2);
102 }
103}
104
105/* adaptive indigo text */
106:where([type="submit"], form button:not([type],[disabled])) {
107 --_text: var(--_accent, var(--link));
108}
109
110/* red reset */
111:where([type="reset"]) {
112 --_text: var(--red-6);
113 --_border: var(--red-3);
114
115 &:focus-visible {
116 outline-color: var(--red-6);
117 }
118
119 @media (--OSdark) {
120 --_text: var(--red-2);
121 --_border: var(--surface-3);
122 }
123}
124
125/* submit, form > button, reset matching hover border color */
126:where([type="submit"], [type="reset"], form button:not([type])):is(:hover, :focus-visible):not([disabled]) {
127 --_border: currentColor;
128}
129
130/* file input */
131:where(input[type="file"]) {
132 max-inline-size: 100%;
133 padding: 0;
134 cursor: initial;
135 align-self: flex-start;
136 border-radius: var(--radius-2);
137 border: var(--border-size-1) solid var(--surface-2);
138 box-shadow: var(--inner-shadow-4);
139 color: var(--text-2);
140}
141
142:where(input[type="file"])::-webkit-file-upload-button,
143:where(input[type="file"])::file-selector-button {
144 margin-inline-end: 1.75ch;
145 cursor: pointer;
146}
147
148/* special dark theme styles */
149@media (--OSdark) {
150 :where([type="submit"]),
151 :where(form button:not([type="button"])),
152 :where([type="reset"]),
153 :where([disabled]) {
154 --_bg: var(--surface-1);
155 }
156}