vanta-admin 0.9.0__tar.gz → 0.11.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. {vanta_admin-0.9.0/vanta_admin.egg-info → vanta_admin-0.11.0}/PKG-INFO +7 -3
  2. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/README.md +6 -2
  3. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/pyproject.toml +1 -1
  4. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/css/theme.admin.css +536 -11
  5. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/css/theme.base.css +4 -0
  6. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/css/theme.tokens.css +9 -0
  7. vanta_admin-0.11.0/vanta_admin/static/admin/js/forms.js +561 -0
  8. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/js/vanta-theme.js +34 -0
  9. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/nav_sidebar.html +19 -1
  10. {vanta_admin-0.9.0 → vanta_admin-0.11.0/vanta_admin.egg-info}/PKG-INFO +7 -3
  11. vanta_admin-0.9.0/vanta_admin/static/admin/js/forms.js +0 -239
  12. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/LICENSE +0 -0
  13. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/MANIFEST.in +0 -0
  14. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/setup.cfg +0 -0
  15. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/__init__.py +0 -0
  16. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/apps.py +0 -0
  17. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/css/theme.css +0 -0
  18. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/css/theme.fonts.css +0 -0
  19. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/css/theme.login.css +0 -0
  20. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/css/theme.responsive.css +0 -0
  21. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/css/two_factor.css +0 -0
  22. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/fonts/OFL-Fira-Code.txt +0 -0
  23. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/fonts/OFL-Inter.txt +0 -0
  24. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/fonts/OFL-JetBrains-Mono.txt +0 -0
  25. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/fonts/fira-code-variable.woff2 +0 -0
  26. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/fonts/inter-italic-variable.woff2 +0 -0
  27. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/fonts/inter-variable.woff2 +0 -0
  28. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/fonts/jetbrains-mono-italic-variable.woff2 +0 -0
  29. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/fonts/jetbrains-mono-variable.woff2 +0 -0
  30. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/img/favicon.png +0 -0
  31. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/img/icon-no.svg +0 -0
  32. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/img/icon-unknown.svg +0 -0
  33. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/img/icon-yes.svg +0 -0
  34. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/js/changelist.js +0 -0
  35. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/js/messages.js +0 -0
  36. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/static/admin/js/sidebar.js +0 -0
  37. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/app_index.html +0 -0
  38. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/base.html +0 -0
  39. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/base_site.html +0 -0
  40. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/change_form.html +0 -0
  41. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/change_list.html +0 -0
  42. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/filter.html +0 -0
  43. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/includes/breadcrumbs.html +0 -0
  44. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/index.html +0 -0
  45. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/login.html +0 -0
  46. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/admin/pagination.html +0 -0
  47. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/two_factor/_base.html +0 -0
  48. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/two_factor/_base_focus.html +0 -0
  49. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/two_factor/_wizard_actions.html +0 -0
  50. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/two_factor/core/login.html +0 -0
  51. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/two_factor/core/setup_complete.html +0 -0
  52. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/two_factor/profile/disable.html +0 -0
  53. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templates/two_factor/profile/profile.html +0 -0
  54. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templatetags/__init__.py +0 -0
  55. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin/templatetags/admin_theme.py +0 -0
  56. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin.egg-info/SOURCES.txt +0 -0
  57. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin.egg-info/dependency_links.txt +0 -0
  58. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin.egg-info/requires.txt +0 -0
  59. {vanta_admin-0.9.0 → vanta_admin-0.11.0}/vanta_admin.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vanta-admin
3
- Version: 0.9.0
3
+ Version: 0.11.0
4
4
  Summary: A sharp, dark, and portable Django admin theme forged for builders who want the admin to feel less default.
5
5
  Author: oli-dev0
6
6
  License-Expression: MIT
@@ -57,13 +57,17 @@ feels more deliberate in everyday use.
57
57
  permanent right-side column.
58
58
  - Active-filter indicators in the toolbar, including a count when filters are
59
59
  applied.
60
- - Styled select controls for common admin dropdowns, while Django's native
61
- multi-select fields stay unchanged.
60
+ - An enhanced horizontal selector for many-to-many admin fields, with category
61
+ grouping, item filtering, selected counts, and add/remove visible controls.
62
+ - Styled select controls for common admin dropdowns, plus a clearer enhanced
63
+ horizontal selector for many-to-many fields.
62
64
  - Built-in icons for common admin areas, models, and recent actions.
63
65
  - A cleaner account menu with display preferences, project links, password
64
66
  access, 2FA settings, logout, and a Vanta support link.
65
67
  - A 12-hour and 24-hour time-format preference for changelist date/time values,
66
68
  stored in the browser for each admin user.
69
+ - A small, normal, and large font-size preference for the admin interface, stored
70
+ in the browser for each admin user.
67
71
  - Shorter changelist date formatting that makes date-heavy tables easier to
68
72
  scan.
69
73
  - Simpler breadcrumbs on edit pages, so the page path feels less cluttered.
@@ -32,13 +32,17 @@ feels more deliberate in everyday use.
32
32
  permanent right-side column.
33
33
  - Active-filter indicators in the toolbar, including a count when filters are
34
34
  applied.
35
- - Styled select controls for common admin dropdowns, while Django's native
36
- multi-select fields stay unchanged.
35
+ - An enhanced horizontal selector for many-to-many admin fields, with category
36
+ grouping, item filtering, selected counts, and add/remove visible controls.
37
+ - Styled select controls for common admin dropdowns, plus a clearer enhanced
38
+ horizontal selector for many-to-many fields.
37
39
  - Built-in icons for common admin areas, models, and recent actions.
38
40
  - A cleaner account menu with display preferences, project links, password
39
41
  access, 2FA settings, logout, and a Vanta support link.
40
42
  - A 12-hour and 24-hour time-format preference for changelist date/time values,
41
43
  stored in the browser for each admin user.
44
+ - A small, normal, and large font-size preference for the admin interface, stored
45
+ in the browser for each admin user.
42
46
  - Shorter changelist date formatting that makes date-heavy tables easier to
43
47
  scan.
44
48
  - Simpler breadcrumbs on edit pages, so the page path feels less cluttered.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "vanta-admin"
7
- version = "0.9.0"
7
+ version = "0.11.0"
8
8
  description = "A sharp, dark, and portable Django admin theme forged for builders who want the admin to feel less default."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -128,7 +128,7 @@ body.admin-sidebar-resizing .admin-sidebar {
128
128
  width: 2rem;
129
129
  min-width: 2rem;
130
130
  height: 2rem;
131
- border: 0;
131
+ border: 0 !important;
132
132
  border-radius: 0.27rem;
133
133
  background: var(--surface-muted);
134
134
  color: var(--accent);
@@ -284,7 +284,7 @@ html[data-theme="light"] #nav-sidebar .admin-sidebar__filter input[type="search"
284
284
 
285
285
  .admin-sidebar__groups {
286
286
  flex: 1 1 auto;
287
- min-height: 0;
287
+ min-height: 0 !important;
288
288
  overflow-y: auto;
289
289
  padding: 0.65rem 1rem 8.25rem;
290
290
  scrollbar-color: var(--border-strong) transparent;
@@ -390,7 +390,7 @@ html[data-theme="light"] #nav-sidebar .admin-sidebar__filter input[type="search"
390
390
  min-height: 1.5rem;
391
391
  margin-top: 0;
392
392
  padding: 0.08rem 0.75rem;
393
- border: 1px solid transparent;
393
+ border: 0;
394
394
  border-radius: var(--admin-radius-md);
395
395
  color: var(--admin-muted);
396
396
  font-size: 0.84375rem;
@@ -541,7 +541,7 @@ html[data-theme="light"] .admin-sidebar__account-summary {
541
541
  align-items: center;
542
542
  justify-content: start;
543
543
  gap: 0.22rem;
544
- min-height: 1.86rem;
544
+ min-height: 0;
545
545
  }
546
546
 
547
547
  .admin-sidebar__display-label {
@@ -563,18 +563,29 @@ html[data-theme="light"] .admin-sidebar__account-summary {
563
563
  }
564
564
 
565
565
  .admin-sidebar__theme-controls,
566
- .admin-sidebar__time-controls {
566
+ .admin-sidebar__time-controls,
567
+ .admin-sidebar__font-size-controls {
567
568
  display: grid;
568
- grid-template-columns: 1fr 1fr;
569
569
  gap: 0.18rem;
570
570
  padding: 0.14rem;
571
- width: 4.18rem;
572
571
  border-radius: 0.3rem;
573
572
  background: var(--surface-muted);
574
573
  }
575
574
 
575
+ .admin-sidebar__theme-controls,
576
+ .admin-sidebar__time-controls {
577
+ grid-template-columns: 1fr 1fr;
578
+ width: 4.18rem;
579
+ }
580
+
581
+ .admin-sidebar__font-size-controls {
582
+ grid-template-columns: repeat(3, 1fr);
583
+ width: 4.18rem;
584
+ }
585
+
576
586
  .admin-sidebar__theme-button,
577
- .admin-sidebar__time-button {
587
+ .admin-sidebar__time-button,
588
+ .admin-sidebar__font-size-button {
578
589
  display: inline-flex;
579
590
  align-items: center;
580
591
  justify-content: center;
@@ -595,6 +606,10 @@ html[data-theme="light"] .admin-sidebar__account-summary {
595
606
  letter-spacing: 0;
596
607
  }
597
608
 
609
+ .admin-sidebar__font-size-button {
610
+ letter-spacing: 0;
611
+ }
612
+
598
613
  .admin-sidebar__theme-button svg {
599
614
  width: 0.78rem;
600
615
  height: 0.78rem;
@@ -602,7 +617,8 @@ html[data-theme="light"] .admin-sidebar__account-summary {
602
617
 
603
618
  html[data-theme="dark"] .admin-sidebar__theme-button--dark,
604
619
  html[data-theme="light"] .admin-sidebar__theme-button--light,
605
- .admin-sidebar__time-button[aria-pressed="true"] {
620
+ .admin-sidebar__time-button[aria-pressed="true"],
621
+ .admin-sidebar__font-size-button[aria-pressed="true"] {
606
622
  color: var(--accent-strong);
607
623
  background: var(--accent-soft);
608
624
  }
@@ -611,7 +627,8 @@ html[data-theme="light"] .admin-sidebar__theme-button--light {
611
627
  background: var(--accent-softer);
612
628
  }
613
629
 
614
- html[data-theme="light"] .admin-sidebar__time-button[aria-pressed="true"] {
630
+ html[data-theme="light"] .admin-sidebar__time-button[aria-pressed="true"],
631
+ html[data-theme="light"] .admin-sidebar__font-size-button[aria-pressed="true"] {
615
632
  background: var(--accent-softer);
616
633
  }
617
634
 
@@ -2053,7 +2070,7 @@ select:focus {
2053
2070
  width: 100%;
2054
2071
  min-height: 1.5rem;
2055
2072
  padding: 0.08rem 0.56rem;
2056
- border: 1px solid transparent;
2073
+ border: 0;
2057
2074
  border-radius: var(--admin-radius-md);
2058
2075
  background: var(--surface-muted);
2059
2076
  color: var(--admin-text);
@@ -2178,6 +2195,514 @@ select:focus {
2178
2195
  outline-offset: 1px;
2179
2196
  }
2180
2197
 
2198
+ .change-form .form-row > div:has(> .related-widget-wrapper),
2199
+ .change-form .form-row > fieldset:has(.related-widget-wrapper) {
2200
+ display: grid;
2201
+ grid-template-columns: minmax(7.5rem, 10rem) minmax(0, 1fr);
2202
+ align-items: start;
2203
+ column-gap: 0.8rem;
2204
+ row-gap: 0.24rem;
2205
+ }
2206
+
2207
+ .change-form .form-row > div:has(> .related-widget-wrapper) > label,
2208
+ .change-form .form-row > fieldset:has(.related-widget-wrapper) > legend {
2209
+ grid-column: 1;
2210
+ grid-row: 1;
2211
+ float: none;
2212
+ width: auto;
2213
+ margin: 0;
2214
+ padding: 0.42rem 0 0;
2215
+ }
2216
+
2217
+ .change-form .form-row > fieldset:has(.related-widget-wrapper) > div,
2218
+ .change-form .form-row > fieldset:has(.related-widget-wrapper) .flex-container {
2219
+ display: contents;
2220
+ }
2221
+
2222
+ .change-form .related-widget-wrapper {
2223
+ display: contents;
2224
+ float: none;
2225
+ overflow: visible;
2226
+ }
2227
+
2228
+ .change-form .related-widget-wrapper > :not(.related-widget-wrapper-link) {
2229
+ grid-column: 2;
2230
+ grid-row: 1 / span 8;
2231
+ min-width: 0;
2232
+ }
2233
+
2234
+ .change-form .form-row:has(.admin-checkbox-selector-source) > div > .help,
2235
+ .change-form .form-row:has(.admin-checkbox-selector-source) > div > .helptext,
2236
+ .change-form .form-row:has(.admin-checkbox-selector-source) > fieldset > div > .help,
2237
+ .change-form .form-row:has(.admin-checkbox-selector-source) > fieldset > div > .helptext {
2238
+ display: none;
2239
+ }
2240
+
2241
+ .change-form .related-widget-wrapper-link {
2242
+ display: inline-grid;
2243
+ grid-column: 1;
2244
+ grid-row: auto;
2245
+ place-items: center;
2246
+ justify-self: start;
2247
+ width: 2.05rem;
2248
+ min-width: 2.05rem;
2249
+ height: 2.05rem;
2250
+ min-height: 2.05rem;
2251
+ margin: 0.16rem 0 0;
2252
+ padding: 0;
2253
+ border: 0;
2254
+ border-radius: var(--admin-radius-sm);
2255
+ background: var(--surface-muted);
2256
+ color: var(--admin-accent-strong);
2257
+ line-height: 1;
2258
+ box-shadow: none;
2259
+ transition:
2260
+ background-color var(--admin-transition),
2261
+ color var(--admin-transition),
2262
+ transform var(--admin-transition);
2263
+ }
2264
+
2265
+ .change-form .related-widget-wrapper-link:hover,
2266
+ .change-form .related-widget-wrapper-link:focus-visible {
2267
+ background: var(--surface);
2268
+ color: var(--admin-accent-strong);
2269
+ transform: translateY(-2px);
2270
+ }
2271
+
2272
+ .change-form .related-widget-wrapper-link:focus-visible {
2273
+ outline: 2px solid var(--admin-accent-border);
2274
+ outline-offset: 2px;
2275
+ }
2276
+
2277
+ .change-form .related-widget-wrapper-link img {
2278
+ display: block;
2279
+ width: 1rem;
2280
+ height: 1rem;
2281
+ }
2282
+
2283
+ @media (max-width: 767px) {
2284
+ .change-form .form-row > div:has(> .related-widget-wrapper),
2285
+ .change-form .form-row > fieldset:has(.related-widget-wrapper) {
2286
+ grid-template-columns: 1fr;
2287
+ }
2288
+
2289
+ .change-form .form-row > div:has(> .related-widget-wrapper) > label,
2290
+ .change-form .form-row > fieldset:has(.related-widget-wrapper) > legend,
2291
+ .change-form .related-widget-wrapper > :not(.related-widget-wrapper-link),
2292
+ .change-form .related-widget-wrapper-link {
2293
+ grid-column: 1;
2294
+ }
2295
+
2296
+ .change-form .related-widget-wrapper > :not(.related-widget-wrapper-link) {
2297
+ grid-row: auto;
2298
+ }
2299
+
2300
+ .admin-checkbox-selector__list,
2301
+ .admin-checkbox-selector__section-block--flat .admin-checkbox-selector__section {
2302
+ grid-template-columns: 1fr;
2303
+ }
2304
+ }
2305
+
2306
+ .selector.admin-checkbox-selector-source {
2307
+ display: block;
2308
+ width: 100%;
2309
+ }
2310
+
2311
+ .selector.admin-checkbox-selector-source > :not(.admin-checkbox-selector) {
2312
+ position: absolute;
2313
+ width: 1px;
2314
+ height: 1px;
2315
+ overflow: hidden;
2316
+ clip: rect(0 0 0 0);
2317
+ clip-path: inset(50%);
2318
+ white-space: nowrap;
2319
+ }
2320
+
2321
+ .admin-checkbox-selector {
2322
+ display: grid;
2323
+ gap: 0.68rem;
2324
+ width: min(100%, 60rem);
2325
+ padding: 0.72rem;
2326
+ border: 1px solid var(--admin-border-strong);
2327
+ border-radius: var(--admin-radius-lg);
2328
+ background: color-mix(in srgb, var(--admin-surface-raised) 82%, var(--admin-bg));
2329
+ color: var(--admin-text);
2330
+ }
2331
+
2332
+ .admin-checkbox-selector__header {
2333
+ display: flex;
2334
+ flex-wrap: wrap;
2335
+ align-items: center;
2336
+ gap: 0.5rem;
2337
+ justify-content: space-between;
2338
+ }
2339
+
2340
+ .admin-checkbox-selector__tools {
2341
+ display: flex;
2342
+ flex-wrap: wrap;
2343
+ align-items: center;
2344
+ gap: 0.38rem;
2345
+ justify-content: flex-start;
2346
+ }
2347
+
2348
+ .admin-checkbox-selector__title {
2349
+ color: var(--admin-text);
2350
+ font-size: 0.86rem;
2351
+ font-weight: 780;
2352
+ line-height: 1.2;
2353
+ }
2354
+
2355
+ .admin-checkbox-selector__count {
2356
+ color: var(--admin-muted);
2357
+ font-size: 0.74rem;
2358
+ font-weight: 720;
2359
+ line-height: 1.2;
2360
+ }
2361
+
2362
+ .admin-checkbox-selector__count-wrap {
2363
+ display: inline-flex;
2364
+ align-items: center;
2365
+ gap: 0.34rem;
2366
+ }
2367
+
2368
+ .admin-checkbox-selector__clear-selected {
2369
+ display: inline-grid;
2370
+ place-items: center;
2371
+ width: 1.25rem;
2372
+ height: 1.25rem;
2373
+ min-height: 0;
2374
+ margin: 0;
2375
+ padding: 0;
2376
+ border: 0;
2377
+ border-radius: var(--admin-radius-sm);
2378
+ background: transparent;
2379
+ color: var(--admin-muted);
2380
+ cursor: pointer;
2381
+ box-shadow: none;
2382
+ transition:
2383
+ color var(--admin-transition),
2384
+ transform var(--admin-transition);
2385
+ }
2386
+
2387
+ .admin-checkbox-selector__clear-selected:hover,
2388
+ .admin-checkbox-selector__clear-selected:focus-visible {
2389
+ background: transparent;
2390
+ color: var(--admin-text);
2391
+ outline: none;
2392
+ box-shadow: none;
2393
+ transform: translateY(-2px);
2394
+ }
2395
+
2396
+ .admin-checkbox-selector__clear-selected-icon {
2397
+ width: 0.72rem;
2398
+ height: 0.72rem;
2399
+ background: currentColor;
2400
+ mask: url("../img/icon-no.svg") center / contain no-repeat;
2401
+ -webkit-mask: url("../img/icon-no.svg") center / contain no-repeat;
2402
+ }
2403
+
2404
+ .admin-checkbox-selector__categories {
2405
+ display: flex;
2406
+ flex-wrap: wrap;
2407
+ gap: 0.34rem;
2408
+ padding-bottom: 0.1rem;
2409
+ }
2410
+
2411
+ .admin-checkbox-selector button.admin-checkbox-selector__category {
2412
+ display: inline-flex;
2413
+ align-items: flex-start;
2414
+ justify-content: center;
2415
+ gap: 0.18rem;
2416
+ min-height: 0 !important;
2417
+ margin: 0;
2418
+ border: 0 !important;
2419
+ border-radius: var(--admin-radius-md);
2420
+ background: transparent;
2421
+ color: var(--admin-muted);
2422
+ cursor: pointer;
2423
+ font: inherit;
2424
+ font-size: 0.75rem;
2425
+ font-weight: 760;
2426
+ line-height: 1.14;
2427
+ text-align: center;
2428
+ box-shadow: none;
2429
+ transition:
2430
+ background-color var(--admin-transition),
2431
+ color var(--admin-transition),
2432
+ transform var(--admin-transition);
2433
+ }
2434
+
2435
+ .admin-checkbox-selector button.admin-checkbox-selector__category {
2436
+ padding: 0.12rem 0.5rem;
2437
+ }
2438
+
2439
+ .admin-checkbox-selector__category:hover,
2440
+ .admin-checkbox-selector__category:focus-visible {
2441
+ color: var(--admin-text);
2442
+ background: transparent;
2443
+ transform: translateY(-2px);
2444
+ }
2445
+
2446
+ .admin-checkbox-selector button.admin-checkbox-selector__category.is-active {
2447
+ color: var(--admin-text);
2448
+ background: var(--admin-nav-item-active-bg);
2449
+ font-size: 0.82rem;
2450
+ }
2451
+
2452
+ .admin-checkbox-selector__category:focus-visible {
2453
+ outline: none;
2454
+ box-shadow: none;
2455
+ }
2456
+
2457
+ .admin-checkbox-selector__category-count {
2458
+ flex: 0 0 auto;
2459
+ min-width: 0;
2460
+ height: auto;
2461
+ align-self: flex-start;
2462
+ margin-top: -0.06rem;
2463
+ padding-inline: 0;
2464
+ border-radius: 0;
2465
+ background: transparent;
2466
+ color: var(--admin-accent-strong);
2467
+ font-size: 0.58rem;
2468
+ font-weight: 720;
2469
+ line-height: 1;
2470
+ font-variant-numeric: tabular-nums;
2471
+ }
2472
+
2473
+ .admin-checkbox-selector__category-count[hidden] {
2474
+ display: none;
2475
+ }
2476
+
2477
+ .admin-checkbox-selector__search-wrap {
2478
+ position: relative;
2479
+ flex: 0 1 21rem;
2480
+ width: min(21rem, 100%);
2481
+ max-width: 21rem;
2482
+ }
2483
+
2484
+ .admin-checkbox-selector__search-wrap::before {
2485
+ content: "";
2486
+ position: absolute;
2487
+ top: 50%;
2488
+ left: 0.72rem;
2489
+ z-index: 1;
2490
+ width: 0.95rem;
2491
+ height: 0.95rem;
2492
+ background: var(--accent);
2493
+ mask: url("../img/search.svg") center / contain no-repeat;
2494
+ -webkit-mask: url("../img/search.svg") center / contain no-repeat;
2495
+ pointer-events: none;
2496
+ transform: translateY(-50%);
2497
+ }
2498
+
2499
+ .admin-checkbox-selector input.admin-checkbox-selector__search {
2500
+ box-sizing: border-box;
2501
+ width: 100%;
2502
+ height: 1.72rem;
2503
+ min-height: 1.72rem;
2504
+ border: 0;
2505
+ border-radius: 0.27rem;
2506
+ background: var(--surface-muted);
2507
+ color: var(--text);
2508
+ padding: 0.24rem 0.7rem 0.24rem 2.3rem !important;
2509
+ font-size: 0.82rem;
2510
+ font-weight: 650;
2511
+ outline: none;
2512
+ transition:
2513
+ background-color var(--admin-transition),
2514
+ color var(--admin-transition);
2515
+ }
2516
+
2517
+ .admin-checkbox-selector input.admin-checkbox-selector__search::placeholder {
2518
+ color: var(--admin-muted);
2519
+ opacity: 0.82;
2520
+ }
2521
+
2522
+ .admin-checkbox-selector input.admin-checkbox-selector__search:hover,
2523
+ .admin-checkbox-selector input.admin-checkbox-selector__search:focus,
2524
+ .admin-checkbox-selector input.admin-checkbox-selector__search:focus-visible {
2525
+ background: var(--surface);
2526
+ border: 0 !important;
2527
+ outline: none !important;
2528
+ box-shadow: none !important;
2529
+ }
2530
+
2531
+ .admin-checkbox-selector input.admin-checkbox-selector__search:active {
2532
+ border: 0 !important;
2533
+ outline: none !important;
2534
+ box-shadow: none !important;
2535
+ }
2536
+
2537
+ .admin-checkbox-selector input.admin-checkbox-selector__search::-webkit-search-decoration {
2538
+ appearance: none;
2539
+ }
2540
+
2541
+ html[data-theme="light"] .admin-checkbox-selector input.admin-checkbox-selector__search:hover,
2542
+ html[data-theme="light"] .admin-checkbox-selector input.admin-checkbox-selector__search:focus,
2543
+ html[data-theme="light"] .admin-checkbox-selector input.admin-checkbox-selector__search:focus-visible {
2544
+ background: #e8f1fa;
2545
+ }
2546
+
2547
+ .admin-checkbox-selector__bulk-button {
2548
+ display: inline-flex;
2549
+ align-items: center;
2550
+ justify-content: center;
2551
+ gap: 0.35rem;
2552
+ flex: 0 0 auto;
2553
+ min-height: 1.86rem;
2554
+ margin: 0;
2555
+ padding: 0.34rem 0.68rem;
2556
+ border: 0;
2557
+ border-radius: var(--admin-radius-sm);
2558
+ background: var(--admin-accent);
2559
+ color: var(--admin-button-text);
2560
+ cursor: pointer;
2561
+ font: inherit;
2562
+ font-size: 0.75rem;
2563
+ font-weight: 760;
2564
+ line-height: 1.14;
2565
+ text-align: center;
2566
+ box-shadow: none;
2567
+ transition:
2568
+ background-color var(--admin-transition),
2569
+ color var(--admin-transition),
2570
+ filter var(--admin-transition),
2571
+ transform var(--admin-transition);
2572
+ }
2573
+
2574
+ .admin-checkbox-selector__bulk-button--muted {
2575
+ background: var(--surface-muted);
2576
+ color: var(--admin-text);
2577
+ }
2578
+
2579
+ .admin-checkbox-selector__bulk-button:hover,
2580
+ .admin-checkbox-selector__bulk-button:focus-visible {
2581
+ background: var(--admin-accent-strong);
2582
+ color: var(--admin-button-text);
2583
+ filter: brightness(1.04);
2584
+ transform: translateY(-2px);
2585
+ }
2586
+
2587
+ .admin-checkbox-selector__bulk-button--muted:hover,
2588
+ .admin-checkbox-selector__bulk-button--muted:focus-visible {
2589
+ background: var(--surface);
2590
+ color: var(--admin-text);
2591
+ }
2592
+
2593
+ .admin-checkbox-selector__bulk-button:focus-visible {
2594
+ outline: none;
2595
+ box-shadow: none;
2596
+ }
2597
+
2598
+ .admin-checkbox-selector__bulk-button:active {
2599
+ border: 0;
2600
+ outline: none;
2601
+ box-shadow: none;
2602
+ transform: translateY(0);
2603
+ }
2604
+
2605
+ .admin-checkbox-selector__list {
2606
+ display: grid;
2607
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2608
+ align-items: start;
2609
+ gap: 0.55rem 0.65rem;
2610
+ max-height: 24rem;
2611
+ overflow: auto;
2612
+ padding: 0.5rem;
2613
+ border: 1px solid var(--admin-border);
2614
+ border-radius: var(--admin-radius-md);
2615
+ background: var(--admin-surface);
2616
+ }
2617
+
2618
+ .admin-checkbox-selector__section-block {
2619
+ display: grid;
2620
+ gap: 0.28rem;
2621
+ min-width: 0;
2622
+ }
2623
+
2624
+ .admin-checkbox-selector__section-block--flat {
2625
+ grid-column: 1 / -1;
2626
+ }
2627
+
2628
+ .admin-checkbox-selector__section-title {
2629
+ margin: 0;
2630
+ padding: 0.08rem 0.08rem 0;
2631
+ color: var(--admin-muted);
2632
+ font-size: 0.75rem;
2633
+ font-weight: 820;
2634
+ line-height: 1.18;
2635
+ }
2636
+
2637
+ .admin-checkbox-selector__section {
2638
+ display: grid;
2639
+ gap: 0.18rem;
2640
+ min-width: 0;
2641
+ }
2642
+
2643
+ .admin-checkbox-selector__section-block--flat .admin-checkbox-selector__section {
2644
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2645
+ gap: 0.18rem 0.65rem;
2646
+ }
2647
+
2648
+ label.admin-checkbox-selector__item {
2649
+ display: flex;
2650
+ align-items: center;
2651
+ gap: 0.62rem;
2652
+ width: 100%;
2653
+ max-width: 100%;
2654
+ min-height: 1.86rem;
2655
+ margin: 0;
2656
+ padding: 0.34rem 0.42rem;
2657
+ border: 0;
2658
+ border-radius: var(--admin-radius-sm);
2659
+ background: transparent;
2660
+ color: var(--admin-text);
2661
+ cursor: pointer;
2662
+ font-size: 0.8rem;
2663
+ font-weight: 620;
2664
+ line-height: 1.2;
2665
+ transition:
2666
+ color var(--admin-transition),
2667
+ transform var(--admin-transition);
2668
+ }
2669
+
2670
+ label.admin-checkbox-selector__item:hover,
2671
+ label.admin-checkbox-selector__item:has(input:focus-visible),
2672
+ label.admin-checkbox-selector__item:has(input:checked) {
2673
+ background: transparent;
2674
+ color: var(--admin-text);
2675
+ }
2676
+
2677
+ label.admin-checkbox-selector__item:hover,
2678
+ label.admin-checkbox-selector__item:has(input:focus-visible) {
2679
+ transform: translateY(-2px);
2680
+ }
2681
+
2682
+ label.admin-checkbox-selector__item:has(input:checked) {
2683
+ transform: none;
2684
+ }
2685
+
2686
+ label.admin-checkbox-selector__item input[type="checkbox"] {
2687
+ flex: 0 0 auto;
2688
+ margin: 0;
2689
+ }
2690
+
2691
+ label.admin-checkbox-selector__item span {
2692
+ min-width: 0;
2693
+ line-height: 1.2;
2694
+ overflow-wrap: anywhere;
2695
+ }
2696
+
2697
+ .admin-checkbox-selector__empty {
2698
+ grid-column: 1 / -1;
2699
+ margin: 0;
2700
+ padding: 0.55rem 0.42rem;
2701
+ color: var(--admin-muted);
2702
+ font-size: 0.8rem;
2703
+ font-weight: 650;
2704
+ }
2705
+
2181
2706
  input[type="checkbox"] {
2182
2707
  width: 0.95rem;
2183
2708
  height: 0.95rem;
@@ -5,6 +5,10 @@ body {
5
5
  min-height: 100%;
6
6
  }
7
7
 
8
+ html {
9
+ font-size: var(--admin-font-size);
10
+ }
11
+
8
12
  body {
9
13
  margin: 0;
10
14
  color: var(--admin-text);
@@ -17,12 +17,21 @@
17
17
  --admin-radius-xl: var(--radius-xl);
18
18
  --admin-transition: 160ms ease;
19
19
  --ease: cubic-bezier(0.2, 0.7, 0.2, 1);
20
+ --admin-font-size: 100%;
20
21
  --site-font-body: "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
21
22
  --site-font-mono: "JetBrains Mono", "Fira Code", Consolas, monospace;
22
23
  --admin-font-family: var(--site-font-body);
23
24
  --admin-error-font: Arial, "Helvetica Neue", Helvetica, sans-serif;
24
25
  }
25
26
 
27
+ html[data-admin-font-size="small"] {
28
+ --admin-font-size: 94%;
29
+ }
30
+
31
+ html[data-admin-font-size="large"] {
32
+ --admin-font-size: 108%;
33
+ }
34
+
26
35
  :root,
27
36
  html[data-theme="dark"],
28
37
  body[data-theme="dark"],