@tempoxyz/ds 0.3.2 → 0.3.5
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/README.md +7 -0
- package/dist/web/components/Accordion.css +1 -1
- package/dist/web/components/Accordion.js.zyzz.json +1 -1
- package/dist/web/components/AddressCard.css +1 -1
- package/dist/web/components/AddressCard.js.zyzz.json +1 -1
- package/dist/web/components/AgentLogo.js.zyzz.json +1 -1
- package/dist/web/components/Alert.css +1 -1
- package/dist/web/components/Alert.js.zyzz.json +1 -1
- package/dist/web/components/AlertDialog.js.zyzz.json +1 -1
- package/dist/web/components/Amount.css +1 -1
- package/dist/web/components/Amount.js.zyzz.json +1 -1
- package/dist/web/components/AmountInput.css +1 -1
- package/dist/web/components/AmountInput.js.zyzz.json +1 -1
- package/dist/web/components/AppShell.css +1 -1
- package/dist/web/components/AppShell.d.ts +4 -0
- package/dist/web/components/AppShell.d.ts.map +1 -1
- package/dist/web/components/AppShell.js +20 -20
- package/dist/web/components/AppShell.js.map +1 -1
- package/dist/web/components/AppShell.js.zyzz.json +1 -1
- package/dist/web/components/AssetChip.css +1 -1
- package/dist/web/components/AssetChip.js.zyzz.json +1 -1
- package/dist/web/components/Autocomplete.js.zyzz.json +1 -1
- package/dist/web/components/Avatar.css +1 -1
- package/dist/web/components/Avatar.js.zyzz.json +1 -1
- package/dist/web/components/Badge.css +1 -1
- package/dist/web/components/Badge.js.zyzz.json +1 -1
- package/dist/web/components/Banner.css +1 -1
- package/dist/web/components/Banner.js.zyzz.json +1 -1
- package/dist/web/components/BarChart.css +1 -1
- package/dist/web/components/BarChart.js.zyzz.json +1 -1
- package/dist/web/components/Breadcrumbs.css +1 -1
- package/dist/web/components/Breadcrumbs.js.zyzz.json +1 -1
- package/dist/web/components/Button.css +1 -1
- package/dist/web/components/Button.js.zyzz.json +1 -1
- package/dist/web/components/ButtonGroup.js.zyzz.json +1 -1
- package/dist/web/components/Calendar.css +1 -1
- package/dist/web/components/Calendar.js.zyzz.json +1 -1
- package/dist/web/components/Callout.css +1 -1
- package/dist/web/components/Callout.js.zyzz.json +1 -1
- package/dist/web/components/Checkbox.js.zyzz.json +1 -1
- package/dist/web/components/CheckboxGroup.js.zyzz.json +1 -1
- package/dist/web/components/ChoiceGroup.css +1 -1
- package/dist/web/components/ChoiceGroup.js.zyzz.json +1 -1
- package/dist/web/components/Choicebox.css +1 -1
- package/dist/web/components/Choicebox.js.zyzz.json +1 -1
- package/dist/web/components/Code.js.zyzz.json +1 -1
- package/dist/web/components/Combobox.css +1 -1
- package/dist/web/components/Combobox.js.zyzz.json +1 -1
- package/dist/web/components/Container.js.zyzz.json +1 -1
- package/dist/web/components/CopyButton.js.zyzz.json +1 -1
- package/dist/web/components/DatePicker.css +1 -1
- package/dist/web/components/DatePicker.js.zyzz.json +1 -1
- package/dist/web/components/Dialog.css +1 -1
- package/dist/web/components/Dialog.js.zyzz.json +1 -1
- package/dist/web/components/Drawer.css +1 -1
- package/dist/web/components/Drawer.js.zyzz.json +1 -1
- package/dist/web/components/Empty.css +1 -1
- package/dist/web/components/Empty.js.zyzz.json +1 -1
- package/dist/web/components/Field.css +1 -1
- package/dist/web/components/Field.js.zyzz.json +1 -1
- package/dist/web/components/Fieldset.css +1 -1
- package/dist/web/components/Fieldset.js.zyzz.json +1 -1
- package/dist/web/components/Frame.css +1 -1
- package/dist/web/components/Frame.js.zyzz.json +1 -1
- package/dist/web/components/Gauge.css +1 -1
- package/dist/web/components/Gauge.js.zyzz.json +1 -1
- package/dist/web/components/GetStartedVisual.js.zyzz.json +1 -1
- package/dist/web/components/Grid.js.zyzz.json +1 -1
- package/dist/web/components/HeroVisual.css +1 -1
- package/dist/web/components/HeroVisual.js.zyzz.json +1 -1
- package/dist/web/components/Hex.js.zyzz.json +1 -1
- package/dist/web/components/IconTile.js.zyzz.json +1 -1
- package/dist/web/components/Identicon.js.zyzz.json +1 -1
- package/dist/web/components/Inline.js.zyzz.json +1 -1
- package/dist/web/components/Inset.js.zyzz.json +1 -1
- package/dist/web/components/Kbd.css +1 -1
- package/dist/web/components/Kbd.js.zyzz.json +1 -1
- package/dist/web/components/ListGroup.css +1 -1
- package/dist/web/components/ListGroup.js.zyzz.json +1 -1
- package/dist/web/components/LoadingDots.js.zyzz.json +1 -1
- package/dist/web/components/Menu.css +1 -1
- package/dist/web/components/Menu.js.zyzz.json +1 -1
- package/dist/web/components/NativeSelect.css +1 -1
- package/dist/web/components/NativeSelect.js.zyzz.json +1 -1
- package/dist/web/components/NetworkLogo.js.zyzz.json +1 -1
- package/dist/web/components/NumberField.js.zyzz.json +1 -1
- package/dist/web/components/OtpField.css +1 -1
- package/dist/web/components/OtpField.js.zyzz.json +1 -1
- package/dist/web/components/Pagination.css +1 -1
- package/dist/web/components/Pagination.js.zyzz.json +1 -1
- package/dist/web/components/Popover.css +1 -1
- package/dist/web/components/Popover.js.zyzz.json +1 -1
- package/dist/web/components/Progress.css +1 -1
- package/dist/web/components/Progress.js.zyzz.json +1 -1
- package/dist/web/components/Qr.js.zyzz.json +1 -1
- package/dist/web/components/RadioGroup.js.zyzz.json +1 -1
- package/dist/web/components/SecretValue.js.zyzz.json +1 -1
- package/dist/web/components/Select.js.zyzz.json +1 -1
- package/dist/web/components/Separator.css +1 -1
- package/dist/web/components/Separator.js.zyzz.json +1 -1
- package/dist/web/components/SidebarMenu.css +1 -1
- package/dist/web/components/SidebarMenu.js.zyzz.json +1 -1
- package/dist/web/components/Skeleton.js.zyzz.json +1 -1
- package/dist/web/components/Slider.css +1 -1
- package/dist/web/components/Slider.js.zyzz.json +1 -1
- package/dist/web/components/Snippet.js.zyzz.json +1 -1
- package/dist/web/components/Spinner.js.zyzz.json +1 -1
- package/dist/web/components/SplitBar.css +1 -1
- package/dist/web/components/SplitBar.js.zyzz.json +1 -1
- package/dist/web/components/SplitButton.js.zyzz.json +1 -1
- package/dist/web/components/Stack.js.zyzz.json +1 -1
- package/dist/web/components/StatusChip.css +1 -1
- package/dist/web/components/StatusChip.js.zyzz.json +1 -1
- package/dist/web/components/StatusIndicator.css +1 -1
- package/dist/web/components/StatusIndicator.js.zyzz.json +1 -1
- package/dist/web/components/StatusRow.css +1 -1
- package/dist/web/components/StatusRow.js.zyzz.json +1 -1
- package/dist/web/components/Stepper.js.zyzz.json +1 -1
- package/dist/web/components/SuccessHero.css +1 -1
- package/dist/web/components/SuccessHero.js.zyzz.json +1 -1
- package/dist/web/components/Surface.css +1 -1
- package/dist/web/components/Surface.js.zyzz.json +1 -1
- package/dist/web/components/Switch.js.zyzz.json +1 -1
- package/dist/web/components/Table.css +1 -1
- package/dist/web/components/Table.js.zyzz.json +1 -1
- package/dist/web/components/Tabs.css +1 -1
- package/dist/web/components/Tabs.js.zyzz.json +1 -1
- package/dist/web/components/TempoLogo.js.zyzz.json +1 -1
- package/dist/web/components/TextInput.js.zyzz.json +1 -1
- package/dist/web/components/Textarea.css +1 -1
- package/dist/web/components/Textarea.js.zyzz.json +1 -1
- package/dist/web/components/Toast.css +1 -1
- package/dist/web/components/Toast.js.zyzz.json +1 -1
- package/dist/web/components/Token.css +1 -1
- package/dist/web/components/Token.js.zyzz.json +1 -1
- package/dist/web/components/TokenLogo.js.zyzz.json +1 -1
- package/dist/web/components/Tooltip.css +1 -1
- package/dist/web/components/Tooltip.js.zyzz.json +1 -1
- package/dist/web/components/VerificationCode.css +1 -1
- package/dist/web/components/VerificationCode.js.zyzz.json +1 -1
- package/dist/web/components/Visual.css +1 -1
- package/dist/web/components/Visual.js.zyzz.json +1 -1
- package/dist/web/components/internal/Field.css +1 -1
- package/dist/web/components/internal/Field.js.zyzz.json +1 -1
- package/dist/web/components/internal/InputGroup.css +1 -1
- package/dist/web/components/internal/InputGroup.js.zyzz.json +1 -1
- package/dist/web/components/internal/Listbox.css +1 -1
- package/dist/web/components/internal/Listbox.js.zyzz.json +1 -1
- package/dist/web/components/internal/Streaks.js.zyzz.json +1 -1
- package/dist/web/index.js.zyzz.json +1 -1
- package/dist/web/vars.d.ts +8 -8
- package/dist/web/vars.d.ts.map +1 -1
- package/dist/web/vars.js.map +1 -1
- package/dist/web/vars.js.zyzz.json +1 -1
- package/dist/web/zyzz.config.d.ts +40 -40
- package/dist/web/zyzz.config.js.zyzz.json +1 -1
- package/package.json +1 -1
- package/src/web/README.md +1 -1
- package/src/web/components/AppShell.tsx +5 -0
- package/src/web/vars.ts +15 -14
package/README.md
CHANGED
|
@@ -27,6 +27,12 @@ npm i @tempoxyz/ds zyzz
|
|
|
27
27
|
| A web application | Web | `@tempoxyz/ds` |
|
|
28
28
|
| A mobile application | Mobile | `@tempoxyz/ds/mobile` |
|
|
29
29
|
|
|
30
|
+
Native Apple apps add the [tempoxyz/ds-swift](https://github.com/tempoxyz/ds-swift) Swift package, which each release mirrors from `swift/`, and import `TempoDesignSystem`. It holds the Web spacing, radius, ease, duration, opacity, scale, and shadow scales as Swift constants, such as `TDS.Spacing.s16` and `TDS.Ease.snappy.animation(TDS.Duration.ms200)`. Colors and typography stay with each app.
|
|
31
|
+
|
|
32
|
+
```swift
|
|
33
|
+
.package(url: "https://github.com/tempoxyz/ds-swift", from: "0.3.3")
|
|
34
|
+
```
|
|
35
|
+
|
|
30
36
|
### 3. Set Up Zyzz
|
|
31
37
|
|
|
32
38
|
Follow the [Zyzz setup guide](https://zyzz.style/docs/introduction/getting-started) for your bundler.
|
|
@@ -118,6 +124,7 @@ pnpm figma:check # Check tokens, variants, and rendered components a
|
|
|
118
124
|
pnpm figma:sync # Refresh the Figma snapshot with FIGMA_TOKEN, then check
|
|
119
125
|
pnpm playground:dev # Start the web playground
|
|
120
126
|
pnpm playground:mobile # Start the Expo playground in the iOS Simulator
|
|
127
|
+
pnpm swift:generate # Regenerate the Swift package's TDS.swift from the Web variables
|
|
121
128
|
pnpm test # Test package delivery and browser suites
|
|
122
129
|
pnpm test:browser # Run browser suites and update local screenshots
|
|
123
130
|
pnpm test:browser:update # Explicitly update screenshots
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.z_tds_2f_web-ctC8Bx0{color:var(--z-tds_2f_web-color-content-secondary,light-dark(var(--z-tds_2f_web-color-neutral-shade-056,#0000008f),var(--z-tds_2f_web-color-neutral-tint-064,#ffffffa3)))}.z_tds_2f_web-ctC8Bx1{padding-bottom:var(--z-tds_2f_web-spacing-16,1rem)}.z_tds_2f_web-ctC8Bx2{font-family:var(--z-tds_2f_web-typography-body-b2-fontFamily,var(--z-tds_2f_web-fontFamily-body,Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"))}.z_tds_2f_web-ctC8Bx3{font-size:var(--z-tds_2f_web-typography-body-b2-fontSize,14px)}.z_tds_2f_web-ctC8Bx4{font-weight:var(--z-tds_2f_web-typography-body-b2-fontWeight,400)}.z_tds_2f_web-ctC8Bx5{letter-spacing:var(--z-tds_2f_web-typography-body-b2-letterSpacing
|
|
1
|
+
.z_tds_2f_web-ctC8Bx0{color:var(--z-tds_2f_web-color-content-secondary,light-dark(var(--z-tds_2f_web-color-neutral-shade-056,#0000008f),var(--z-tds_2f_web-color-neutral-tint-064,#ffffffa3)))}.z_tds_2f_web-ctC8Bx1{padding-bottom:var(--z-tds_2f_web-spacing-16,1rem)}.z_tds_2f_web-ctC8Bx2{font-family:var(--z-tds_2f_web-typography-body-b2-fontFamily,var(--z-tds_2f_web-fontFamily-body,Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"))}.z_tds_2f_web-ctC8Bx3{font-size:var(--z-tds_2f_web-typography-body-b2-fontSize,14px)}.z_tds_2f_web-ctC8Bx4{font-weight:var(--z-tds_2f_web-typography-body-b2-fontWeight,400)}.z_tds_2f_web-ctC8Bx5{letter-spacing:var(--z-tds_2f_web-typography-body-b2-letterSpacing,-.09px)}.z_tds_2f_web-ctC8Bx6{line-height:var(--z-tds_2f_web-typography-body-b2-lineHeight,20px)}.z_tds_2f_web-ctC8Bx7{margin:var(--z-tds_2f_web-spacing-0,0rem)}.z_tds_2f_web-ctC8Bx8{flex-shrink:0}.z_tds_2f_web-ctC8Bx9{height:var(--z-tds_2f_web-spacing-16,1rem)}.z_tds_2f_web-ctC8Bxa{transition-duration:var(--z-tds_2f_web-transitionDuration-240,.24s)}.z_tds_2f_web-ctC8Bxb{transition-property:transform}.z_tds_2f_web-ctC8Bxc{transition-timing-function:var(--z-tds_2f_web-ease-spring,cubic-bezier(.32, .72, 0, 1))}.z_tds_2f_web-ctC8Bxd{width:var(--z-tds_2f_web-spacing-16,1rem)}.z_tds_2f_web-ctC8Bxe{[data-panel-open]>&{transform:rotate(180deg)}}@media (prefers-reduced-motion:reduce){.z_tds_2f_web-ctC8Bxf{transition-property:none}}.z_tds_2f_web-ctC8Bxg{border-bottom:1px solid}.z_tds_2f_web-ctC8Bxh{border-color:var(--z-tds_2f_web-color-line-secondary,light-dark(var(--z-tds_2f_web-color-neutral-shade-008,#00000014),var(--z-tds_2f_web-color-neutral-tint-008,#ffffff14)))}.z_tds_2f_web-ctC8Bxi{height:var(--accordion-panel-height)}.z_tds_2f_web-ctC8Bxj{overflow:hidden}.z_tds_2f_web-ctC8Bxk{transition-duration:var(--z-tds_2f_web-transitionDuration-240,.24s)}.z_tds_2f_web-ctC8Bxl{transition-property:height,opacity}.z_tds_2f_web-ctC8Bxm{&[data-ending-style]{transition-duration:var(--z-tds_2f_web-transitionDuration-180,.18s)}}.z_tds_2f_web-ctC8Bxn{&[data-ending-style],&[data-starting-style]{height:var(--z-tds_2f_web-spacing-0,0rem)}}.z_tds_2f_web-ctC8Bxo{&[data-ending-style],&[data-starting-style]{opacity:0}}@media (prefers-reduced-motion:reduce){.z_tds_2f_web-ctC8Bxp{transition-property:opacity}}.z_tds_2f_web-ctC8Bxq{display:flex}.z_tds_2f_web-ctC8Bxr{flex-direction:column}.z_tds_2f_web-ctC8Bxs{width:100%}.z_tds_2f_web-ctC8Bxt{&:where([data-size=large]){& [data-accordion-trigger]{min-height:var(--z-tds_2f_web-spacing-56,3.5rem)}}}.z_tds_2f_web-ctC8Bxu{&:where([data-size=large]){& [data-accordion-trigger]{padding-block:var(--z-tds_2f_web-spacing-12,.75rem)}}}.z_tds_2f_web-ctC8Bxv{&:where([data-size=large]){& [data-accordion-trigger]{font-family:var(--z-tds_2f_web-typography-body-b1Strong-fontFamily,var(--z-tds_2f_web-fontFamily-body,Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"))}}}.z_tds_2f_web-ctC8Bxw{&:where([data-size=large]){& [data-accordion-trigger]{font-size:var(--z-tds_2f_web-typography-body-b1Strong-fontSize,16px)}}}.z_tds_2f_web-ctC8Bxx{&:where([data-size=large]){& [data-accordion-trigger]{font-weight:var(--z-tds_2f_web-typography-body-b1Strong-fontWeight,500)}}}.z_tds_2f_web-ctC8Bxy{&:where([data-size=large]){& [data-accordion-trigger]{letter-spacing:var(--z-tds_2f_web-typography-body-b1Strong-letterSpacing,-.18px)}}}.z_tds_2f_web-ctC8Bxz{&:where([data-size=large]){& [data-accordion-trigger]{line-height:var(--z-tds_2f_web-typography-body-b1Strong-lineHeight,22px)}}}.z_tds_2f_web-ctC8Bx10{&:where([data-size=small]){& [data-accordion-trigger]{min-height:var(--z-tds_2f_web-spacing-32,2rem)}}}.z_tds_2f_web-ctC8Bx11{&:where([data-size=small]){& [data-accordion-trigger]{padding-block:var(--z-tds_2f_web-spacing-4,.25rem)}}}.z_tds_2f_web-ctC8Bx12{&:where([data-size=small]){& [data-accordion-trigger]{font-family:var(--z-tds_2f_web-typography-body-b3Strong-fontFamily,var(--z-tds_2f_web-fontFamily-body,Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"))}}}.z_tds_2f_web-ctC8Bx13{&:where([data-size=small]){& [data-accordion-trigger]{font-size:var(--z-tds_2f_web-typography-body-b3Strong-fontSize,12px)}}}.z_tds_2f_web-ctC8Bx14{&:where([data-size=small]){& [data-accordion-trigger]{font-weight:var(--z-tds_2f_web-typography-body-b3Strong-fontWeight,500)}}}.z_tds_2f_web-ctC8Bx15{&:where([data-size=small]){& [data-accordion-trigger]{letter-spacing:var(--z-tds_2f_web-typography-body-b3Strong-letterSpacing,.01px)}}}.z_tds_2f_web-ctC8Bx16{&:where([data-size=small]){& [data-accordion-trigger]{line-height:var(--z-tds_2f_web-typography-body-b3Strong-lineHeight,16px)}}}.z_tds_2f_web-ctC8Bx17{align-items:center}.z_tds_2f_web-ctC8Bx18{background-color:#0000}.z_tds_2f_web-ctC8Bx19{border:none}.z_tds_2f_web-ctC8Bx1a{border-radius:var(--z-tds_2f_web-radius-2xs,calc(.5rem * var(--tds-corner-scale,1)))}.z_tds_2f_web-ctC8Bx1b{box-sizing:border-box}.z_tds_2f_web-ctC8Bx1c{color:var(--z-tds_2f_web-color-content-primary,light-dark(var(--z-tds_2f_web-color-neutral-100,#000),var(--z-tds_2f_web-color-neutral-000,#fff)))}.z_tds_2f_web-ctC8Bx1d{column-gap:var(--z-tds_2f_web-spacing-16,1rem)}.z_tds_2f_web-ctC8Bx1e{cursor:pointer}.z_tds_2f_web-ctC8Bx1f{justify-content:space-between}.z_tds_2f_web-ctC8Bx1g{min-height:var(--z-tds_2f_web-spacing-40,2.5rem)}.z_tds_2f_web-ctC8Bx1h{outline-color:#0000}.z_tds_2f_web-ctC8Bx1i{outline-offset:var(--z-tds_2f_web-outlineOffset-0,0px)}.z_tds_2f_web-ctC8Bx1j{outline-style:solid}.z_tds_2f_web-ctC8Bx1k{outline-width:var(--z-tds_2f_web-outlineWidth-2,2px)}.z_tds_2f_web-ctC8Bx1l{padding-block:var(--z-tds_2f_web-spacing-8,.5rem)}.z_tds_2f_web-ctC8Bx1m{padding-inline:var(--z-tds_2f_web-spacing-0,0rem)}.z_tds_2f_web-ctC8Bx1n{text-align:start}.z_tds_2f_web-ctC8Bx1o{transition-duration:var(--z-tds_2f_web-transitionDuration-160,.16s)}.z_tds_2f_web-ctC8Bx1p{transition-property:opacity,outline-color,outline-offset}.z_tds_2f_web-ctC8Bx1q{transition-timing-function:var(--z-tds_2f_web-ease-snappy,cubic-bezier(.23, 1, .32, 1))}.z_tds_2f_web-ctC8Bx1r{font-family:var(--z-tds_2f_web-typography-body-b2Strong-fontFamily,var(--z-tds_2f_web-fontFamily-body,Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"))}.z_tds_2f_web-ctC8Bx1s{font-size:var(--z-tds_2f_web-typography-body-b2Strong-fontSize,14px)}.z_tds_2f_web-ctC8Bx1t{font-weight:var(--z-tds_2f_web-typography-body-b2Strong-fontWeight,500)}.z_tds_2f_web-ctC8Bx1u{letter-spacing:var(--z-tds_2f_web-typography-body-b2Strong-letterSpacing,-.09px)}.z_tds_2f_web-ctC8Bx1v{line-height:var(--z-tds_2f_web-typography-body-b2Strong-lineHeight,20px)}.z_tds_2f_web-ctC8Bx1w{&:focus-visible{outline-color:var(--z-tds_2f_web-color-border-focus,light-dark(var(--z-tds_2f_web-color-neutral-shade-040,#0006),var(--z-tds_2f_web-color-neutral-tint-052,#ffffff85)))}}.z_tds_2f_web-ctC8Bx1x{&:focus-visible{outline-offset:var(--z-tds_2f_web-outlineOffset-2,2px)}}.z_tds_2f_web-ctC8Bx1y{&[data-disabled]{cursor:default}}.z_tds_2f_web-ctC8Bx1z{&[data-disabled]{opacity:var(--z-tds_2f_web-opacity-disabled,.32)}}@media (prefers-reduced-motion:reduce){.z_tds_2f_web-ctC8Bx20{transition-property:opacity,outline-color}}
|