@swiftbrowser/web 0.26.1 → 0.26.3
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.
- package/app/index.html +9 -3
- package/node/dist/node/apps.d.ts +6 -0
- package/node/dist/node/apps.d.ts.map +1 -1
- package/node/dist/node/apps.js +3 -0
- package/node/dist/node/apps.js.map +1 -1
- package/node/dist/node/config.d.ts +2 -0
- package/node/dist/node/config.d.ts.map +1 -1
- package/node/dist/node/config.js +5 -0
- package/node/dist/node/config.js.map +1 -1
- package/node/dist/plugins/site-layout.d.ts +2 -0
- package/node/dist/plugins/site-layout.d.ts.map +1 -1
- package/node/dist/plugins/site-layout.js.map +1 -1
- package/package.json +1 -1
- package/plugins/site-layout.ts +2 -0
- package/src/deviceFrame.ts +38 -14
- package/src/layout/engine.ts +787 -175
- package/src/layout/types.ts +3 -0
- package/src/layout/typography.ts +27 -6
- package/src/layoutDom.ts +64 -3
- package/src/main.ts +13 -4
- package/src/pathShape.ts +42 -7
- package/src/protocol.ts +41 -1
- package/src/renderer.ts +35 -6
- package/src/styles.css +752 -0
- package/src/typography.ts +11 -10
- package/src/vite-env.d.ts +2 -0
package/src/styles.css
CHANGED
|
@@ -434,6 +434,68 @@ html[data-sb-frame="ipad"]:not([data-sb-mode="device"]) .home-indicator {
|
|
|
434
434
|
width: 315px;
|
|
435
435
|
}
|
|
436
436
|
|
|
437
|
+
/* A Mac window (docs/notes/macos.md): 1024 x 700 points with a 28-point
|
|
438
|
+
title bar the page draws over the app's top (the safe area, as the
|
|
439
|
+
iPhone's status bar is), its traffic lights at the leading edge; no
|
|
440
|
+
island, side buttons, status glyphs or home indicator. The window's title
|
|
441
|
+
is the app's to draw (its navigation title, from the Mac idiom). */
|
|
442
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) {
|
|
443
|
+
--device-screen-width: 1024px;
|
|
444
|
+
--device-screen-height: 700px;
|
|
445
|
+
--device-bezel: 0px;
|
|
446
|
+
--device-radius: 11px;
|
|
447
|
+
--device-safe-top: 28px;
|
|
448
|
+
--device-safe-bottom: 0px;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .device:not(.sb-island) {
|
|
452
|
+
background: none;
|
|
453
|
+
box-shadow:
|
|
454
|
+
0 0 0 1px rgba(0, 0, 0, 0.18),
|
|
455
|
+
0 22px 70px 4px rgba(0, 0, 0, 0.45);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .device::before,
|
|
459
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .device::after,
|
|
460
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .dynamic-island,
|
|
461
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .status-time,
|
|
462
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .status-glyphs,
|
|
463
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .home-indicator {
|
|
464
|
+
display: none;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/* The title bar's window buttons (close, minimize, zoom): three lights 12
|
|
468
|
+
points across, 8 apart, 8 in from the edge, over the app. The bar itself
|
|
469
|
+
is the app's: a navigation screen at the top of the window draws its title
|
|
470
|
+
bar there (the Mac idiom below; the engine leaves the buttons their room),
|
|
471
|
+
and a window with no bar shows its content under them, as a Mac window
|
|
472
|
+
with a hidden title bar does. */
|
|
473
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .status-bar {
|
|
474
|
+
justify-content: flex-start;
|
|
475
|
+
padding: 0 0 0 8px;
|
|
476
|
+
background: none;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/* The lights sit (bar height − 12) / 2 from the corner: 8 in a plain 28
|
|
480
|
+
bar, 20 in a unified 52 one, 13 in a tab view's 38 toolbar. */
|
|
481
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .device:has(.sb-navscreen[data-sb-unified]) .status-bar::before {
|
|
482
|
+
transform: translate(12px, 12px);
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .device:has(.sb-tabview[data-sb-tabs-top]) .status-bar::before {
|
|
486
|
+
transform: translate(5px, 5px);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
html[data-sb-frame="mac"]:not([data-sb-mode="device"]) .status-bar::before {
|
|
490
|
+
content: "";
|
|
491
|
+
width: 52px;
|
|
492
|
+
height: 12px;
|
|
493
|
+
background:
|
|
494
|
+
radial-gradient(circle at 6px 6px, #ff5f57 0 5.5px, transparent 6px),
|
|
495
|
+
radial-gradient(circle at 26px 6px, #febc2e 0 5.5px, transparent 6px),
|
|
496
|
+
radial-gradient(circle at 46px 6px, #28c840 0 5.5px, transparent 6px);
|
|
497
|
+
}
|
|
498
|
+
|
|
437
499
|
html[data-sb-frame="none"]:not([data-sb-mode="device"]) .device:not(.sb-island) {
|
|
438
500
|
flex: 1 1 auto;
|
|
439
501
|
align-self: stretch;
|
|
@@ -4469,6 +4531,35 @@ svg.sb-path {
|
|
|
4469
4531
|
transform: rotate(90deg);
|
|
4470
4532
|
}
|
|
4471
4533
|
|
|
4534
|
+
/* In a list a disclosure group is an outline (src/layout/engine.ts
|
|
4535
|
+
`outlineRows`): its label and its content are rows of the card, each
|
|
4536
|
+
with its line below it while a shown row follows, and a button or link
|
|
4537
|
+
among them fills while pressed, as the card's own rows do. The group
|
|
4538
|
+
element, a row of the card itself, keeps the card's paint and the line
|
|
4539
|
+
under its last row. */
|
|
4540
|
+
.sb-disclosuregroup[data-sb-outline] > .sb-slot > [data-sb-id]:has(~ [data-sb-id]:not([hidden]))::after {
|
|
4541
|
+
content: "";
|
|
4542
|
+
position: absolute;
|
|
4543
|
+
left: var(--sb-separator-leading, 16px);
|
|
4544
|
+
right: 16px;
|
|
4545
|
+
bottom: 0;
|
|
4546
|
+
height: 1px;
|
|
4547
|
+
background: var(--sb-color-row-separator);
|
|
4548
|
+
pointer-events: none;
|
|
4549
|
+
}
|
|
4550
|
+
|
|
4551
|
+
.sb-disclosuregroup[data-sb-outline] > .sb-slot > .sb-button {
|
|
4552
|
+
border-radius: 0;
|
|
4553
|
+
font-size: var(--sb-font-size-body);
|
|
4554
|
+
}
|
|
4555
|
+
|
|
4556
|
+
.sb-disclosuregroup[data-sb-outline] > .sb-slot > .sb-button:active,
|
|
4557
|
+
.sb-disclosuregroup[data-sb-outline] > .sb-slot > .sb-navlink:active,
|
|
4558
|
+
.sb-disclosuregroup[data-sb-outline] > .sb-slot > [data-sb-row-pressed] {
|
|
4559
|
+
opacity: 1;
|
|
4560
|
+
background: var(--sb-color-fill);
|
|
4561
|
+
}
|
|
4562
|
+
|
|
4472
4563
|
/* Collapsed: the content (a disclosure group's, a sidebar section's rows) is hidden by the engine, without a frame. */
|
|
4473
4564
|
.sb-disclosuregroup > .sb-slot > [data-sb-id][hidden],
|
|
4474
4565
|
.sb-disclosuregroup > .sb-slot > [data-sb-ghost][hidden],
|
|
@@ -4545,3 +4636,664 @@ svg.sb-path {
|
|
|
4545
4636
|
[data-sb-composite] > * {
|
|
4546
4637
|
--sb-shadow-filter: initial;
|
|
4547
4638
|
}
|
|
4639
|
+
|
|
4640
|
+
/* ---------------------------------------------------------------------------
|
|
4641
|
+
The Mac idiom (docs/notes/macos.md): the renderer draws macOS when the
|
|
4642
|
+
platform is `macos` (`html[data-sb-platform]`, set by the renderer's
|
|
4643
|
+
environment and pre-set by the page from the device picker's Mac window).
|
|
4644
|
+
The layout engine's MAC_* metrics place everything; this restyles what the
|
|
4645
|
+
iOS idiom draws as Liquid Glass. First pass, to be measured against the
|
|
4646
|
+
real app (the Mac fidelity harness, stage 3).
|
|
4647
|
+
--------------------------------------------------------------------------- */
|
|
4648
|
+
|
|
4649
|
+
/* Measured in the Mac app (macOS 15, scripts/mac-screenshots.sh): the
|
|
4650
|
+
window's title bar is white (#1e1e1e dark) with a #cfcfcf rule under it,
|
|
4651
|
+
its content the window background #f6f6f6 (#282828), a list white
|
|
4652
|
+
(#1e1e1e) with #e6e6e6 (#343434) separators and a rule the bar's color
|
|
4653
|
+
under a header; secondary text is half the label color. */
|
|
4654
|
+
html[data-sb-platform="macos"] .device[data-theme="light"] {
|
|
4655
|
+
/* The window's title bar and toolbar, its controls, the separators. */
|
|
4656
|
+
--sb-mac-bar: #ffffff;
|
|
4657
|
+
--sb-mac-separator: rgba(0, 0, 0, 0.19);
|
|
4658
|
+
--sb-mac-control: #ffffff;
|
|
4659
|
+
--sb-mac-control-shadow:
|
|
4660
|
+
0 0 0 0.5px rgba(0, 0, 0, 0.12),
|
|
4661
|
+
0 1px 1px rgba(0, 0, 0, 0.08);
|
|
4662
|
+
/* A text field's edges: light at the sides and top, darker at the bottom. */
|
|
4663
|
+
--sb-mac-field-shadow:
|
|
4664
|
+
inset 0 0 0 1px rgba(0, 0, 0, 0.11),
|
|
4665
|
+
inset 0 -1px 0 0 rgba(0, 0, 0, 0.27);
|
|
4666
|
+
--sb-mac-segment-track: #ededed;
|
|
4667
|
+
--sb-mac-segment: #ffffff;
|
|
4668
|
+
--sb-mac-tab-selected: #f2f2f2;
|
|
4669
|
+
--sb-mac-sheet: #ececec;
|
|
4670
|
+
/* The window background, under content; a list's background and its rows. */
|
|
4671
|
+
--sb-color-system-background: #f6f6f6;
|
|
4672
|
+
--sb-color-grouped-background: #ffffff;
|
|
4673
|
+
--sb-color-grouped-cell: #ffffff;
|
|
4674
|
+
--sb-color-row-separator: rgba(0, 0, 0, 0.1);
|
|
4675
|
+
--sb-color-secondary: rgba(0, 0, 0, 0.5);
|
|
4676
|
+
}
|
|
4677
|
+
|
|
4678
|
+
html[data-sb-platform="macos"] .device[data-theme="dark"] {
|
|
4679
|
+
--sb-mac-bar: #1e1e1e;
|
|
4680
|
+
--sb-mac-separator: rgba(255, 255, 255, 0.2);
|
|
4681
|
+
--sb-mac-control: #5c5c5c;
|
|
4682
|
+
--sb-mac-control-shadow:
|
|
4683
|
+
0 0 0 0.5px rgba(0, 0, 0, 0.4),
|
|
4684
|
+
0 1px 1px rgba(0, 0, 0, 0.2);
|
|
4685
|
+
--sb-mac-field-shadow:
|
|
4686
|
+
inset 0 0 0 1px rgba(255, 255, 255, 0.12),
|
|
4687
|
+
inset 0 -1px 0 0 rgba(255, 255, 255, 0.2);
|
|
4688
|
+
--sb-mac-segment-track: #333333;
|
|
4689
|
+
--sb-mac-segment: #666666;
|
|
4690
|
+
--sb-mac-tab-selected: #292929;
|
|
4691
|
+
--sb-mac-sheet: #2b2b2b;
|
|
4692
|
+
--sb-color-system-background: #282828;
|
|
4693
|
+
--sb-color-grouped-background: #1e1e1e;
|
|
4694
|
+
--sb-color-grouped-cell: #1e1e1e;
|
|
4695
|
+
--sb-color-row-separator: rgba(255, 255, 255, 0.1);
|
|
4696
|
+
--sb-color-secondary: rgba(255, 255, 255, 0.55);
|
|
4697
|
+
}
|
|
4698
|
+
|
|
4699
|
+
/* The title bar in place of the navigation bar: opaque, the window's chrome
|
|
4700
|
+
color, a hairline under it; no scroll-edge gradient and no glass capsules
|
|
4701
|
+
(the items sit on the bar). */
|
|
4702
|
+
html[data-sb-platform="macos"] .sb-navbar {
|
|
4703
|
+
background: var(--sb-mac-bar);
|
|
4704
|
+
}
|
|
4705
|
+
|
|
4706
|
+
/* The rule under the title bar is the row below it (the content's first). */
|
|
4707
|
+
html[data-sb-platform="macos"] .sb-navbar::after {
|
|
4708
|
+
content: "";
|
|
4709
|
+
position: absolute;
|
|
4710
|
+
left: 0;
|
|
4711
|
+
right: 0;
|
|
4712
|
+
bottom: -1px;
|
|
4713
|
+
height: 1px;
|
|
4714
|
+
background: var(--sb-mac-separator);
|
|
4715
|
+
pointer-events: none;
|
|
4716
|
+
}
|
|
4717
|
+
|
|
4718
|
+
html[data-sb-platform="macos"] .sb-navbar::before,
|
|
4719
|
+
html[data-sb-platform="macos"] .sb-bar-glass {
|
|
4720
|
+
display: none;
|
|
4721
|
+
}
|
|
4722
|
+
|
|
4723
|
+
/* The back button, the More button and the sidebar toggle: bare 28
|
|
4724
|
+
buttons (the engine's `back`, `more`, `toggle` rects), not glass circles;
|
|
4725
|
+
the back chevron is a secondary-colored glyph (measured in the Mac app). */
|
|
4726
|
+
html[data-sb-platform="macos"] .sb-navbar-back,
|
|
4727
|
+
html[data-sb-platform="macos"] .sb-navbar-more,
|
|
4728
|
+
html[data-sb-platform="macos"] .sb-navsplit-toggle {
|
|
4729
|
+
width: 28px;
|
|
4730
|
+
height: 28px;
|
|
4731
|
+
border-radius: 6px;
|
|
4732
|
+
background: none;
|
|
4733
|
+
box-shadow: none;
|
|
4734
|
+
backdrop-filter: none;
|
|
4735
|
+
-webkit-backdrop-filter: none;
|
|
4736
|
+
font-size: 13px;
|
|
4737
|
+
--sb-press-scale: 1;
|
|
4738
|
+
}
|
|
4739
|
+
|
|
4740
|
+
html[data-sb-platform="macos"] .sb-navbar-back > svg {
|
|
4741
|
+
width: 14px;
|
|
4742
|
+
height: 14px;
|
|
4743
|
+
margin-left: -1px;
|
|
4744
|
+
color: var(--sb-color-secondary);
|
|
4745
|
+
}
|
|
4746
|
+
|
|
4747
|
+
/* A bar's text button is a bordered 28 button at its slot (the engine's
|
|
4748
|
+
`bordered` rect, `data-sb-bordered="inset"` as a list row's), 6 beside
|
|
4749
|
+
its label; its label the primary color. */
|
|
4750
|
+
html[data-sb-platform="macos"] .sb-navbar .sb-button[data-sb-bordered="inset"] {
|
|
4751
|
+
color: var(--sb-button-color, var(--sb-color-primary));
|
|
4752
|
+
}
|
|
4753
|
+
|
|
4754
|
+
html[data-sb-platform="macos"] .sb-navbar-back:active,
|
|
4755
|
+
html[data-sb-platform="macos"] .sb-navbar-more:active {
|
|
4756
|
+
opacity: 1;
|
|
4757
|
+
background: var(--sb-color-fill);
|
|
4758
|
+
}
|
|
4759
|
+
|
|
4760
|
+
/* The title: the headline (13 semibold) centered in a plain title bar; in a
|
|
4761
|
+
unified one the window title, leading-aligned after the back button and
|
|
4762
|
+
the leading items, 15 semibold (the engine's `title` rect and font). */
|
|
4763
|
+
html[data-sb-platform="macos"] .sb-navbar-title {
|
|
4764
|
+
font-size: var(--sb-ts-headline-size, 13px);
|
|
4765
|
+
}
|
|
4766
|
+
|
|
4767
|
+
html[data-sb-platform="macos"] .sb-navscreen[data-sb-unified] > .sb-navbar > .sb-navbar-title {
|
|
4768
|
+
text-align: start;
|
|
4769
|
+
font-size: var(--sb-ts-title3-size, 15px);
|
|
4770
|
+
}
|
|
4771
|
+
|
|
4772
|
+
/* The tab bar: a segmented control at the top of the content (the engine's
|
|
4773
|
+
Mac tab view), each tab a segment with its title alone, the selected one
|
|
4774
|
+
raised; no icons, no glass. */
|
|
4775
|
+
html[data-sb-platform="macos"] .sb-tabbar {
|
|
4776
|
+
z-index: 2;
|
|
4777
|
+
border-radius: 6px;
|
|
4778
|
+
background: none;
|
|
4779
|
+
box-shadow: inset 0 0 0 1px var(--sb-color-row-separator);
|
|
4780
|
+
backdrop-filter: none;
|
|
4781
|
+
-webkit-backdrop-filter: none;
|
|
4782
|
+
}
|
|
4783
|
+
|
|
4784
|
+
html[data-sb-platform="macos"] .sb-tabbar-item {
|
|
4785
|
+
border-radius: 5px;
|
|
4786
|
+
color: var(--sb-color-primary);
|
|
4787
|
+
}
|
|
4788
|
+
|
|
4789
|
+
html[data-sb-platform="macos"] .sb-tabbar-item[aria-selected="true"] {
|
|
4790
|
+
color: var(--sb-color-primary);
|
|
4791
|
+
background: var(--sb-mac-tab-selected);
|
|
4792
|
+
box-shadow: none;
|
|
4793
|
+
}
|
|
4794
|
+
|
|
4795
|
+
html[data-sb-platform="macos"] .sb-tabbar-icon,
|
|
4796
|
+
html[data-sb-platform="macos"] .sb-tabbar-badge {
|
|
4797
|
+
display: none;
|
|
4798
|
+
}
|
|
4799
|
+
|
|
4800
|
+
html[data-sb-platform="macos"] .sb-tabbar-title {
|
|
4801
|
+
font-size: 13px;
|
|
4802
|
+
line-height: 16px;
|
|
4803
|
+
font-weight: 400;
|
|
4804
|
+
letter-spacing: 0;
|
|
4805
|
+
}
|
|
4806
|
+
|
|
4807
|
+
/* Buttons: a bordered button, and an automatic one the engine bordered
|
|
4808
|
+
(`data-sb-bordered`: outside a list row and a bar), is the Mac's push
|
|
4809
|
+
button, 22 tall with a 6 radius, the control color with a hairline and a
|
|
4810
|
+
shadow, its label the primary color; a prominent one the accent with
|
|
4811
|
+
white text. */
|
|
4812
|
+
html[data-sb-platform="macos"] .sb-button[data-sb-style="bordered"],
|
|
4813
|
+
html[data-sb-platform="macos"] .sb-button[data-sb-style="automatic"][data-sb-bordered],
|
|
4814
|
+
html[data-sb-platform="macos"] .sb-button[data-sb-style="borderedProminent"] {
|
|
4815
|
+
border-radius: 6px;
|
|
4816
|
+
background: var(--sb-mac-control);
|
|
4817
|
+
box-shadow: var(--sb-mac-control-shadow);
|
|
4818
|
+
color: var(--sb-button-color, var(--sb-color-primary));
|
|
4819
|
+
}
|
|
4820
|
+
|
|
4821
|
+
html[data-sb-platform="macos"] .sb-button[data-sb-style="borderedProminent"] {
|
|
4822
|
+
background: var(--sb-tint, var(--sb-color-accent));
|
|
4823
|
+
color: #ffffff;
|
|
4824
|
+
}
|
|
4825
|
+
|
|
4826
|
+
/* A disabled push button is faded, not grayed; a plain button's label is
|
|
4827
|
+
the secondary color (measured in the Mac app). */
|
|
4828
|
+
html[data-sb-platform="macos"] [data-sb-disabled] > .sb-button:is([data-sb-style="bordered"], [data-sb-style="borderedProminent"], [data-sb-bordered]) {
|
|
4829
|
+
background: var(--sb-mac-control);
|
|
4830
|
+
color: var(--sb-color-primary);
|
|
4831
|
+
opacity: 0.5;
|
|
4832
|
+
}
|
|
4833
|
+
|
|
4834
|
+
html[data-sb-platform="macos"] [data-sb-disabled] > .sb-button[data-sb-style="borderedProminent"] {
|
|
4835
|
+
background: var(--sb-tint, var(--sb-color-accent));
|
|
4836
|
+
color: #ffffff;
|
|
4837
|
+
}
|
|
4838
|
+
|
|
4839
|
+
html[data-sb-platform="macos"] .sb-button[data-sb-style="plain"] {
|
|
4840
|
+
color: var(--sb-button-color, var(--sb-color-secondary));
|
|
4841
|
+
}
|
|
4842
|
+
|
|
4843
|
+
/* A segmented control (measured in the Mac app): 22 tall with a 5 radius,
|
|
4844
|
+
a gray track under a hairline, 13-point regular labels, the selected
|
|
4845
|
+
segment white (dark: lighter gray) with a shadow, 1 in; its label (the
|
|
4846
|
+
engine's `label`) before it in the row's font. */
|
|
4847
|
+
html[data-sb-platform="macos"] .sb-picker[data-sb-style="segmented"]:not([data-sb-bar]) > .sb-segment-track {
|
|
4848
|
+
border-radius: 5px;
|
|
4849
|
+
background: var(--sb-mac-segment-track);
|
|
4850
|
+
box-shadow: inset 0 0 0 0.5px var(--sb-mac-separator);
|
|
4851
|
+
}
|
|
4852
|
+
|
|
4853
|
+
html[data-sb-platform="macos"] .sb-picker[data-sb-style="segmented"]:not([data-sb-bar]) > .sb-segment {
|
|
4854
|
+
font: 400 13px/16px var(--sb-font-family);
|
|
4855
|
+
letter-spacing: 0;
|
|
4856
|
+
}
|
|
4857
|
+
|
|
4858
|
+
html[data-sb-platform="macos"] .sb-picker[data-sb-style="segmented"]:not([data-sb-bar]) > .sb-segment::before {
|
|
4859
|
+
inset: 1px;
|
|
4860
|
+
border-radius: 4px;
|
|
4861
|
+
}
|
|
4862
|
+
|
|
4863
|
+
html[data-sb-platform="macos"] .sb-picker[data-sb-style="segmented"]:not([data-sb-bar]) > .sb-segment[aria-checked="true"]::before {
|
|
4864
|
+
background: var(--sb-mac-segment);
|
|
4865
|
+
box-shadow: var(--sb-mac-control-shadow);
|
|
4866
|
+
}
|
|
4867
|
+
|
|
4868
|
+
html[data-sb-platform="macos"] .sb-picker[data-sb-style="segmented"] > .sb-picker-label {
|
|
4869
|
+
color: var(--sb-color-primary);
|
|
4870
|
+
}
|
|
4871
|
+
|
|
4872
|
+
/* A toggle outside a list row is a checkbox (the engine's `checkbox` rect:
|
|
4873
|
+
14 square before the label), the accent with a check mark while on. */
|
|
4874
|
+
html[data-sb-platform="macos"] .sb-toggle[data-sb-checkbox] > .sb-switch {
|
|
4875
|
+
border-radius: 3px;
|
|
4876
|
+
background: var(--sb-mac-control);
|
|
4877
|
+
box-shadow: var(--sb-mac-control-shadow);
|
|
4878
|
+
}
|
|
4879
|
+
|
|
4880
|
+
html[data-sb-platform="macos"] .sb-toggle[data-sb-checkbox] > .sb-switch[aria-checked="true"] {
|
|
4881
|
+
background: var(--sb-tint, var(--sb-color-accent));
|
|
4882
|
+
}
|
|
4883
|
+
|
|
4884
|
+
html[data-sb-platform="macos"] .sb-toggle[data-sb-checkbox] > .sb-switch > .sb-switch-knob {
|
|
4885
|
+
display: none;
|
|
4886
|
+
}
|
|
4887
|
+
|
|
4888
|
+
html[data-sb-platform="macos"] .sb-toggle[data-sb-checkbox] > .sb-switch[aria-checked="true"]::after {
|
|
4889
|
+
content: "";
|
|
4890
|
+
position: absolute;
|
|
4891
|
+
left: 4.5px;
|
|
4892
|
+
top: 1.5px;
|
|
4893
|
+
width: 3.5px;
|
|
4894
|
+
height: 7.5px;
|
|
4895
|
+
border: solid #ffffff;
|
|
4896
|
+
border-width: 0 2px 2px 0;
|
|
4897
|
+
transform: rotate(45deg);
|
|
4898
|
+
}
|
|
4899
|
+
|
|
4900
|
+
/* A toggle in a list row (a grouped form's) is the small switch, 26 × 15. */
|
|
4901
|
+
html[data-sb-platform="macos"] .sb-list .sb-toggle:not([data-sb-checkbox]):not([data-sb-toggle-style="button"]) > .sb-switch > .sb-switch-knob {
|
|
4902
|
+
top: 1px;
|
|
4903
|
+
left: 1px;
|
|
4904
|
+
width: 13px;
|
|
4905
|
+
height: 13px;
|
|
4906
|
+
border-radius: 50%;
|
|
4907
|
+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
|
|
4908
|
+
}
|
|
4909
|
+
|
|
4910
|
+
html[data-sb-platform="macos"] .sb-list .sb-toggle:not([data-sb-checkbox]):not([data-sb-toggle-style="button"]) > .sb-switch[aria-checked="true"] > .sb-switch-knob {
|
|
4911
|
+
transform: translateX(11px);
|
|
4912
|
+
}
|
|
4913
|
+
|
|
4914
|
+
/* A menu picker outside a list row is a pop-up button: its value and the
|
|
4915
|
+
chevrons in a bordered button (the engine's `popup` rect), the chevrons
|
|
4916
|
+
on an accent square at its trailing end. */
|
|
4917
|
+
html[data-sb-platform="macos"] .sb-picker[data-sb-popup] > .sb-picker-value {
|
|
4918
|
+
box-sizing: border-box;
|
|
4919
|
+
padding: 0 3px 0 8px;
|
|
4920
|
+
gap: 6px;
|
|
4921
|
+
border-radius: 5px;
|
|
4922
|
+
background: var(--sb-mac-control);
|
|
4923
|
+
box-shadow: var(--sb-mac-control-shadow);
|
|
4924
|
+
color: var(--sb-color-primary);
|
|
4925
|
+
}
|
|
4926
|
+
|
|
4927
|
+
html[data-sb-platform="macos"] .sb-picker[data-sb-popup] > .sb-picker-value > svg {
|
|
4928
|
+
box-sizing: border-box;
|
|
4929
|
+
width: 16px;
|
|
4930
|
+
height: 16px;
|
|
4931
|
+
padding: 3px;
|
|
4932
|
+
border-radius: 4px;
|
|
4933
|
+
background: var(--sb-tint, var(--sb-color-accent));
|
|
4934
|
+
color: #ffffff;
|
|
4935
|
+
stroke-width: 3;
|
|
4936
|
+
}
|
|
4937
|
+
|
|
4938
|
+
/* Lists: no cards (the rows run the list's width on its white), a separator
|
|
4939
|
+
under every row from its first text to 16 before the edge, a rule across
|
|
4940
|
+
the list 8 under a header and 5 under a footer; a selected row is the
|
|
4941
|
+
accent with white text (the sidebar's, when the window is key). The
|
|
4942
|
+
engine draws no chevrons. */
|
|
4943
|
+
html[data-sb-platform="macos"] .sb-section-rows,
|
|
4944
|
+
html[data-sb-platform="macos"] .sb-list-content > :not(.sb-section) {
|
|
4945
|
+
border-radius: 0;
|
|
4946
|
+
background: none;
|
|
4947
|
+
}
|
|
4948
|
+
|
|
4949
|
+
html[data-sb-platform="macos"] .sb-section-rows > [data-sb-id],
|
|
4950
|
+
html[data-sb-platform="macos"] .sb-section-rows > [data-sb-ghost] {
|
|
4951
|
+
background: var(--sb-row-background, transparent);
|
|
4952
|
+
}
|
|
4953
|
+
|
|
4954
|
+
html[data-sb-platform="macos"] .sb-section-rows > :last-child::after,
|
|
4955
|
+
html[data-sb-platform="macos"] .sb-list-content > :not(.sb-section):last-child::after,
|
|
4956
|
+
html[data-sb-platform="macos"] .sb-list-content > :not(.sb-section):has(+ .sb-section)::after {
|
|
4957
|
+
content: "";
|
|
4958
|
+
position: absolute;
|
|
4959
|
+
left: var(--sb-separator-leading, 16px);
|
|
4960
|
+
right: 16px;
|
|
4961
|
+
bottom: 0;
|
|
4962
|
+
height: 1px;
|
|
4963
|
+
background: var(--sb-color-row-separator);
|
|
4964
|
+
pointer-events: none;
|
|
4965
|
+
}
|
|
4966
|
+
|
|
4967
|
+
html[data-sb-platform="macos"] .sb-section-header,
|
|
4968
|
+
html[data-sb-platform="macos"] .sb-section-footer {
|
|
4969
|
+
color: var(--sb-color-secondary);
|
|
4970
|
+
}
|
|
4971
|
+
|
|
4972
|
+
html[data-sb-platform="macos"] .sb-section-header::after,
|
|
4973
|
+
html[data-sb-platform="macos"] .sb-section-footer::after {
|
|
4974
|
+
content: "";
|
|
4975
|
+
position: absolute;
|
|
4976
|
+
left: -16px;
|
|
4977
|
+
right: -16px;
|
|
4978
|
+
bottom: -9px;
|
|
4979
|
+
height: 1px;
|
|
4980
|
+
background: var(--sb-mac-separator);
|
|
4981
|
+
pointer-events: none;
|
|
4982
|
+
}
|
|
4983
|
+
|
|
4984
|
+
html[data-sb-platform="macos"] .sb-section-footer::after {
|
|
4985
|
+
display: none;
|
|
4986
|
+
bottom: -6px;
|
|
4987
|
+
background: var(--sb-color-row-separator);
|
|
4988
|
+
}
|
|
4989
|
+
|
|
4990
|
+
/* The rule under a footer only where another section follows. */
|
|
4991
|
+
html[data-sb-platform="macos"] .sb-section:has(+ .sb-section) > .sb-section-footer::after {
|
|
4992
|
+
display: block;
|
|
4993
|
+
}
|
|
4994
|
+
|
|
4995
|
+
/* A button in a list row is a push button at its own size (the engine's
|
|
4996
|
+
`bordered` rect, `data-sb-bordered="inset"`), on the row, not the row
|
|
4997
|
+
itself; a destructive one is not tinted. */
|
|
4998
|
+
html[data-sb-platform="macos"] .sb-button[data-sb-style][data-sb-bordered="inset"] {
|
|
4999
|
+
border-radius: 0;
|
|
5000
|
+
background: none;
|
|
5001
|
+
box-shadow: none;
|
|
5002
|
+
}
|
|
5003
|
+
|
|
5004
|
+
html[data-sb-platform="macos"] .sb-button[data-sb-style][data-sb-bordered="inset"]::before {
|
|
5005
|
+
content: "";
|
|
5006
|
+
position: absolute;
|
|
5007
|
+
left: var(--sb-bordered-left);
|
|
5008
|
+
top: var(--sb-bordered-top);
|
|
5009
|
+
width: var(--sb-bordered-width);
|
|
5010
|
+
height: var(--sb-bordered-height);
|
|
5011
|
+
border-radius: 6px;
|
|
5012
|
+
background: var(--sb-mac-control);
|
|
5013
|
+
box-shadow: var(--sb-mac-control-shadow);
|
|
5014
|
+
pointer-events: none;
|
|
5015
|
+
}
|
|
5016
|
+
|
|
5017
|
+
html[data-sb-platform="macos"] .sb-button[data-sb-bordered][data-sb-role="destructive"],
|
|
5018
|
+
html[data-sb-platform="macos"] .sb-button[data-sb-style="bordered"][data-sb-role="destructive"] {
|
|
5019
|
+
color: var(--sb-color-primary);
|
|
5020
|
+
}
|
|
5021
|
+
|
|
5022
|
+
html[data-sb-platform="macos"] .sb-navlink[data-sb-selected],
|
|
5023
|
+
html[data-sb-platform="macos"] .sb-list[data-sb-list-style] > .sb-list-content > .sb-navlink[data-sb-selected],
|
|
5024
|
+
html[data-sb-platform="macos"] .sb-list[data-sb-list-style] .sb-section-rows > .sb-navlink[data-sb-selected] {
|
|
5025
|
+
border-radius: 5px;
|
|
5026
|
+
background: var(--sb-tint, var(--sb-color-accent));
|
|
5027
|
+
color: #ffffff;
|
|
5028
|
+
--sb-button-color: #ffffff;
|
|
5029
|
+
}
|
|
5030
|
+
|
|
5031
|
+
/* A selected `listrow` (a sidebar's rows select as rows) is the accent too;
|
|
5032
|
+
the link in it stays clear, as above. */
|
|
5033
|
+
html[data-sb-platform="macos"] .sb-listrow[data-sb-selected],
|
|
5034
|
+
html[data-sb-platform="macos"] .sb-list[data-sb-list-style] > .sb-list-content > .sb-listrow[data-sb-selected],
|
|
5035
|
+
html[data-sb-platform="macos"] .sb-list[data-sb-list-style] .sb-section-rows > .sb-listrow[data-sb-selected] {
|
|
5036
|
+
border-radius: 5px;
|
|
5037
|
+
background: var(--sb-tint, var(--sb-color-accent));
|
|
5038
|
+
color: #ffffff;
|
|
5039
|
+
--sb-button-color: #ffffff;
|
|
5040
|
+
}
|
|
5041
|
+
|
|
5042
|
+
html[data-sb-platform="macos"] .sb-listrow .sb-navlink[data-sb-selected] {
|
|
5043
|
+
background: transparent;
|
|
5044
|
+
}
|
|
5045
|
+
|
|
5046
|
+
/* A search field, in the title bar (the engine's `searchBar`) or on its
|
|
5047
|
+
own (a list row's, 22 tall): a bordered field with the magnifier, no glass. */
|
|
5048
|
+
html[data-sb-platform="macos"] .sb-searchfield {
|
|
5049
|
+
gap: 4px;
|
|
5050
|
+
padding: 0 6px 0 5px;
|
|
5051
|
+
border-radius: 6px;
|
|
5052
|
+
background: var(--sb-mac-control);
|
|
5053
|
+
box-shadow: var(--sb-mac-control-shadow);
|
|
5054
|
+
backdrop-filter: none;
|
|
5055
|
+
-webkit-backdrop-filter: none;
|
|
5056
|
+
}
|
|
5057
|
+
|
|
5058
|
+
html[data-sb-platform="macos"] .sb-searchfield::after {
|
|
5059
|
+
display: none;
|
|
5060
|
+
}
|
|
5061
|
+
|
|
5062
|
+
html[data-sb-platform="macos"] .sb-searchfield > svg {
|
|
5063
|
+
width: 13px;
|
|
5064
|
+
height: 13px;
|
|
5065
|
+
color: var(--sb-color-secondary);
|
|
5066
|
+
}
|
|
5067
|
+
|
|
5068
|
+
html[data-sb-platform="macos"] .sb-searchfield > .sb-searchfield-input {
|
|
5069
|
+
font-size: 13px;
|
|
5070
|
+
}
|
|
5071
|
+
|
|
5072
|
+
html[data-sb-platform="macos"] .sb-searchfield > .sb-searchfield-input::placeholder {
|
|
5073
|
+
color: var(--sb-color-tertiary-label);
|
|
5074
|
+
}
|
|
5075
|
+
|
|
5076
|
+
/* A sheet is a window-modal panel hanging from the title bar (the engine's
|
|
5077
|
+
form sheet on a Mac): square at the top, rounded below, a shadow; it
|
|
5078
|
+
drops in from above rather than sliding up. */
|
|
5079
|
+
/* A sheet (measured in the Mac app): a panel centered in the window with a
|
|
5080
|
+
10 radius and a shadow, its content on the window color under the white
|
|
5081
|
+
title bar (the stack's bar: its title leading, 13 bold); its actions in a
|
|
5082
|
+
60 bar at the bottom under a rule (the engine's `actions`). */
|
|
5083
|
+
html[data-sb-platform="macos"] .sb-sheet[data-sb-form] > .sb-sheet-card {
|
|
5084
|
+
--sb-sheet-offscreen: -100vh;
|
|
5085
|
+
border-radius: 10px;
|
|
5086
|
+
background: var(--sb-mac-sheet);
|
|
5087
|
+
box-shadow:
|
|
5088
|
+
0 0 0 0.5px rgba(0, 0, 0, 0.25),
|
|
5089
|
+
0 12px 40px rgba(0, 0, 0, 0.35);
|
|
5090
|
+
}
|
|
5091
|
+
|
|
5092
|
+
html[data-sb-platform="macos"] .sb-sheet[data-sb-form][data-sb-actions] > .sb-sheet-card::after {
|
|
5093
|
+
content: "";
|
|
5094
|
+
position: absolute;
|
|
5095
|
+
left: 0;
|
|
5096
|
+
right: 0;
|
|
5097
|
+
bottom: 0;
|
|
5098
|
+
height: 60px;
|
|
5099
|
+
box-shadow: inset 0 1px 0 var(--sb-color-row-separator);
|
|
5100
|
+
pointer-events: none;
|
|
5101
|
+
}
|
|
5102
|
+
|
|
5103
|
+
html[data-sb-platform="macos"] .sb-navscreen[data-sb-sheet-bar] > .sb-navbar > .sb-navbar-title {
|
|
5104
|
+
text-align: start;
|
|
5105
|
+
font-size: 13px;
|
|
5106
|
+
font-weight: 700;
|
|
5107
|
+
}
|
|
5108
|
+
|
|
5109
|
+
/* The sheet's actions are push buttons (the engine places them in the bottom bar). */
|
|
5110
|
+
html[data-sb-platform="macos"] .sb-navscreen[data-sb-sheet-bar] > .sb-toolbar .sb-button[data-sb-bordered] {
|
|
5111
|
+
color: var(--sb-button-color, var(--sb-color-primary));
|
|
5112
|
+
}
|
|
5113
|
+
|
|
5114
|
+
/* Text fields: 22 tall and bordered in every style but `plain`, the control
|
|
5115
|
+
color with a hairline, a 5 radius, the text 6 in. */
|
|
5116
|
+
html[data-sb-platform="macos"] .sb-textfield:not([data-sb-style="plain"]) {
|
|
5117
|
+
box-sizing: border-box;
|
|
5118
|
+
padding: 0 6px;
|
|
5119
|
+
border: 0;
|
|
5120
|
+
border-radius: 5px;
|
|
5121
|
+
background: var(--sb-mac-control);
|
|
5122
|
+
box-shadow: var(--sb-mac-field-shadow);
|
|
5123
|
+
font-size: 13px;
|
|
5124
|
+
}
|
|
5125
|
+
|
|
5126
|
+
html[data-sb-platform="macos"] .sb-textfield:not([data-sb-style="plain"]):focus {
|
|
5127
|
+
box-shadow:
|
|
5128
|
+
var(--sb-mac-field-shadow),
|
|
5129
|
+
0 0 0 3.5px color-mix(in srgb, var(--sb-tint, var(--sb-color-accent)) 50%, transparent);
|
|
5130
|
+
}
|
|
5131
|
+
|
|
5132
|
+
/* A text editor draws its own white (the Mac's text background), whatever is behind it. */
|
|
5133
|
+
html[data-sb-platform="macos"] .sb-texteditor {
|
|
5134
|
+
background: var(--sb-color-grouped-cell);
|
|
5135
|
+
}
|
|
5136
|
+
|
|
5137
|
+
/* A stepper's control is the Mac's pair of arrows (the engine's `arrows`
|
|
5138
|
+
rect, 13 × 22): up over down, in one bordered control. */
|
|
5139
|
+
html[data-sb-platform="macos"] .sb-stepper[data-sb-arrows] > .sb-stepper-control {
|
|
5140
|
+
flex-direction: column-reverse;
|
|
5141
|
+
border-radius: 5px;
|
|
5142
|
+
background: var(--sb-mac-control);
|
|
5143
|
+
box-shadow: var(--sb-mac-control-shadow);
|
|
5144
|
+
}
|
|
5145
|
+
|
|
5146
|
+
html[data-sb-platform="macos"] .sb-stepper[data-sb-arrows] > .sb-stepper-control > .sb-stepper-button {
|
|
5147
|
+
min-height: 0;
|
|
5148
|
+
font-size: 0;
|
|
5149
|
+
line-height: 0;
|
|
5150
|
+
}
|
|
5151
|
+
|
|
5152
|
+
html[data-sb-platform="macos"] .sb-stepper[data-sb-arrows] > .sb-stepper-control > .sb-stepper-button::after {
|
|
5153
|
+
content: "";
|
|
5154
|
+
width: 0;
|
|
5155
|
+
height: 0;
|
|
5156
|
+
border: 3px solid transparent;
|
|
5157
|
+
border-bottom: 4px solid var(--sb-color-primary);
|
|
5158
|
+
border-top: 0;
|
|
5159
|
+
transform: translateY(-1px);
|
|
5160
|
+
}
|
|
5161
|
+
|
|
5162
|
+
html[data-sb-platform="macos"] .sb-stepper[data-sb-arrows] > .sb-stepper-control > .sb-stepper-button:first-child::after {
|
|
5163
|
+
border-bottom: 0;
|
|
5164
|
+
border-top: 4px solid var(--sb-color-primary);
|
|
5165
|
+
transform: translateY(1px);
|
|
5166
|
+
}
|
|
5167
|
+
|
|
5168
|
+
html[data-sb-platform="macos"] .sb-stepper[data-sb-arrows] > .sb-stepper-control > .sb-stepper-button + .sb-stepper-button::before {
|
|
5169
|
+
display: none;
|
|
5170
|
+
}
|
|
5171
|
+
|
|
5172
|
+
/* An alert is a panel (the engine's `panel` rect, 260 wide): the window
|
|
5173
|
+
color with a 10 radius and a shadow, no glass, its title and message
|
|
5174
|
+
centered; its buttons are push buttons, the default one (the last that is
|
|
5175
|
+
not a cancel) the accent. */
|
|
5176
|
+
html[data-sb-platform="macos"] .sb-alert[data-sb-panel] .sb-alert-card {
|
|
5177
|
+
border-radius: 10px;
|
|
5178
|
+
background: var(--sb-mac-bar);
|
|
5179
|
+
box-shadow:
|
|
5180
|
+
0 0 0 0.5px rgba(0, 0, 0, 0.2),
|
|
5181
|
+
0 12px 40px rgba(0, 0, 0, 0.3);
|
|
5182
|
+
backdrop-filter: none;
|
|
5183
|
+
-webkit-backdrop-filter: none;
|
|
5184
|
+
}
|
|
5185
|
+
|
|
5186
|
+
/* The app's icon, 54 at the top of the panel (a generic one: the page has none). */
|
|
5187
|
+
html[data-sb-platform="macos"] .sb-alert[data-sb-panel] .sb-alert-card::before {
|
|
5188
|
+
content: "";
|
|
5189
|
+
position: absolute;
|
|
5190
|
+
top: 25px;
|
|
5191
|
+
left: 50%;
|
|
5192
|
+
width: 54px;
|
|
5193
|
+
height: 54px;
|
|
5194
|
+
margin-left: -27px;
|
|
5195
|
+
border-radius: 12px;
|
|
5196
|
+
background:
|
|
5197
|
+
linear-gradient(rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0)),
|
|
5198
|
+
repeating-linear-gradient(0deg, rgba(0, 0, 0, 0.08) 0 1px, transparent 1px 9px),
|
|
5199
|
+
repeating-linear-gradient(90deg, rgba(0, 0, 0, 0.08) 0 1px, transparent 1px 9px),
|
|
5200
|
+
#d3e0e5;
|
|
5201
|
+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
|
5202
|
+
}
|
|
5203
|
+
|
|
5204
|
+
/* Measured in the Mac app: the buttons gray (the control color darkened),
|
|
5205
|
+
28 tall, 13 regular; a destructive one red; a lone OK the accent. */
|
|
5206
|
+
html[data-sb-platform="macos"] .sb-alert[data-sb-panel] .sb-alert-buttons > .sb-button,
|
|
5207
|
+
html[data-sb-platform="macos"] .sb-alert[data-sb-panel] .sb-alert-ok {
|
|
5208
|
+
border-radius: 6px;
|
|
5209
|
+
background: var(--sb-color-fill);
|
|
5210
|
+
box-shadow: none;
|
|
5211
|
+
color: var(--sb-color-primary);
|
|
5212
|
+
font-size: 13px;
|
|
5213
|
+
}
|
|
5214
|
+
|
|
5215
|
+
html[data-sb-platform="macos"] .sb-alert[data-sb-panel] .sb-alert-ok {
|
|
5216
|
+
background: var(--sb-tint, var(--sb-color-accent));
|
|
5217
|
+
color: #ffffff;
|
|
5218
|
+
}
|
|
5219
|
+
|
|
5220
|
+
html[data-sb-platform="macos"] .sb-alert[data-sb-panel] .sb-alert-buttons > .sb-button[data-sb-role="destructive"] {
|
|
5221
|
+
color: var(--sb-color-red);
|
|
5222
|
+
}
|
|
5223
|
+
|
|
5224
|
+
html[data-sb-platform="macos"] .sb-alert[data-sb-panel] .sb-alert-buttons > .sb-button:active,
|
|
5225
|
+
html[data-sb-platform="macos"] .sb-alert[data-sb-panel] .sb-alert-ok:active {
|
|
5226
|
+
filter: brightness(0.92);
|
|
5227
|
+
}
|
|
5228
|
+
|
|
5229
|
+
/* A slider's knob is the Mac's round one (the engine's `knob` rect, 20) on
|
|
5230
|
+
a 4 track. */
|
|
5231
|
+
html[data-sb-platform="macos"] .sb-slider[data-sb-knob] > .sb-slider-track,
|
|
5232
|
+
html[data-sb-platform="macos"] .sb-slider[data-sb-knob] > .sb-slider-fill {
|
|
5233
|
+
border-radius: 2px;
|
|
5234
|
+
}
|
|
5235
|
+
|
|
5236
|
+
html[data-sb-platform="macos"] .sb-slider[data-sb-knob] > .sb-slider-thumb {
|
|
5237
|
+
border-radius: 50%;
|
|
5238
|
+
box-shadow:
|
|
5239
|
+
0 0 0 0.5px rgba(0, 0, 0, 0.2),
|
|
5240
|
+
0 1px 2px rgba(0, 0, 0, 0.2);
|
|
5241
|
+
}
|
|
5242
|
+
|
|
5243
|
+
/* A compact date picker's date and time are bordered fields (the engine's
|
|
5244
|
+
`fields` rect spans them), 22 tall. */
|
|
5245
|
+
html[data-sb-platform="macos"] .sb-datepicker[data-sb-fields] > .sb-datepicker-capsule,
|
|
5246
|
+
html[data-sb-platform="macos"] .sb-datepicker[data-sb-fields] > .sb-datepicker-date,
|
|
5247
|
+
html[data-sb-platform="macos"] .sb-datepicker[data-sb-fields] > .sb-datepicker-time {
|
|
5248
|
+
border-radius: 5px;
|
|
5249
|
+
background: var(--sb-mac-control);
|
|
5250
|
+
box-shadow: var(--sb-mac-control-shadow);
|
|
5251
|
+
font-size: 13px;
|
|
5252
|
+
}
|
|
5253
|
+
|
|
5254
|
+
/* A menu outside a bar and a list row is a pull-down button (the engine's
|
|
5255
|
+
`pulldown` rect): a push button around the label with the chevrons on an
|
|
5256
|
+
accent square at its trailing end. */
|
|
5257
|
+
html[data-sb-platform="macos"] .sb-menu[data-sb-pulldown] {
|
|
5258
|
+
position: relative;
|
|
5259
|
+
border-radius: 6px;
|
|
5260
|
+
background: var(--sb-mac-control);
|
|
5261
|
+
box-shadow: var(--sb-mac-control-shadow);
|
|
5262
|
+
color: var(--sb-color-primary);
|
|
5263
|
+
}
|
|
5264
|
+
|
|
5265
|
+
html[data-sb-platform="macos"] .sb-menu[data-sb-pulldown]:active {
|
|
5266
|
+
opacity: 1;
|
|
5267
|
+
filter: brightness(0.92);
|
|
5268
|
+
}
|
|
5269
|
+
|
|
5270
|
+
html[data-sb-platform="macos"] .sb-menu[data-sb-pulldown]::after {
|
|
5271
|
+
content: "";
|
|
5272
|
+
position: absolute;
|
|
5273
|
+
right: 3px;
|
|
5274
|
+
top: 50%;
|
|
5275
|
+
width: 16px;
|
|
5276
|
+
height: 16px;
|
|
5277
|
+
margin-top: -8px;
|
|
5278
|
+
border-radius: 4px;
|
|
5279
|
+
background:
|
|
5280
|
+
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 6.5 8 3.5l3 3M5 9.5l3 3 3-3'/%3E%3C/svg%3E") center / 16px 16px no-repeat,
|
|
5281
|
+
var(--sb-tint, var(--sb-color-accent));
|
|
5282
|
+
pointer-events: none;
|
|
5283
|
+
}
|
|
5284
|
+
|
|
5285
|
+
/* The sidebar material: a sidebar list sits on the Mac's sidebar gray, the
|
|
5286
|
+
window's chrome color (lighter than the grouped background). */
|
|
5287
|
+
html[data-sb-platform="macos"] .device[data-theme="light"] {
|
|
5288
|
+
--sb-mac-sidebar: #e8e8e8;
|
|
5289
|
+
}
|
|
5290
|
+
|
|
5291
|
+
html[data-sb-platform="macos"] .device[data-theme="dark"] {
|
|
5292
|
+
--sb-mac-sidebar: #2b2b2b;
|
|
5293
|
+
}
|
|
5294
|
+
|
|
5295
|
+
html[data-sb-platform="macos"] .sb-list[data-sb-list-look="sidebar"] {
|
|
5296
|
+
background: var(--sb-mac-sidebar);
|
|
5297
|
+
--sb-icon-knockout: var(--sb-mac-sidebar);
|
|
5298
|
+
}
|
|
5299
|
+
|