@dillingerstaffing/strand-vue 0.16.1 → 0.17.1
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/dist/components/CardSection/CardSection.vue.d.ts +27 -0
- package/dist/components/CardSection/CardSection.vue.d.ts.map +1 -0
- package/dist/components/CardSection/index.d.ts +2 -0
- package/dist/components/CardSection/index.d.ts.map +1 -0
- package/dist/components/ContainerScale/ContainerScale.vue.d.ts +23 -0
- package/dist/components/ContainerScale/ContainerScale.vue.d.ts.map +1 -0
- package/dist/components/ContainerScale/ContainerScaleAxis.vue.d.ts +23 -0
- package/dist/components/ContainerScale/ContainerScaleAxis.vue.d.ts.map +1 -0
- package/dist/components/ContainerScale/ContainerScaleBar.vue.d.ts +24 -0
- package/dist/components/ContainerScale/ContainerScaleBar.vue.d.ts.map +1 -0
- package/dist/components/ContainerScale/ContainerScaleCaption.vue.d.ts +23 -0
- package/dist/components/ContainerScale/ContainerScaleCaption.vue.d.ts.map +1 -0
- package/dist/components/ContainerScale/ContainerScaleLabel.vue.d.ts +23 -0
- package/dist/components/ContainerScale/ContainerScaleLabel.vue.d.ts.map +1 -0
- package/dist/components/ContainerScale/ContainerScalePx.vue.d.ts +23 -0
- package/dist/components/ContainerScale/ContainerScalePx.vue.d.ts.map +1 -0
- package/dist/components/ContainerScale/ContainerScaleRow.vue.d.ts +23 -0
- package/dist/components/ContainerScale/ContainerScaleRow.vue.d.ts.map +1 -0
- package/dist/components/ContainerScale/ContainerScaleTrack.vue.d.ts +23 -0
- package/dist/components/ContainerScale/ContainerScaleTrack.vue.d.ts.map +1 -0
- package/dist/components/ContainerScale/index.d.ts +9 -0
- package/dist/components/ContainerScale/index.d.ts.map +1 -0
- package/dist/components/KvEditorial/KvEditorial.vue.d.ts +32 -0
- package/dist/components/KvEditorial/KvEditorial.vue.d.ts.map +1 -0
- package/dist/components/KvEditorial/index.d.ts +2 -0
- package/dist/components/KvEditorial/index.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFrame.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFrame.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFrameActions.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFrameActions.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFrameBody.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFrameBody.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFrameChrome.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFrameChrome.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFrameContent.vue.d.ts +25 -0
- package/dist/components/LabFrame/LabFrameContent.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFrameContentHead.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFrameContentHead.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFrameDot.vue.d.ts +9 -0
- package/dist/components/LabFrame/LabFrameDot.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFrameOverlay.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFrameOverlay.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFramePanel.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFramePanel.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFramePanelBody.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFramePanelBody.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFramePanelClose.vue.d.ts +25 -0
- package/dist/components/LabFrame/LabFramePanelClose.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFramePanelFooter.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFramePanelFooter.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFramePanelHeader.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFramePanelHeader.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFramePanelTitle.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFramePanelTitle.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/LabFrameTitle.vue.d.ts +23 -0
- package/dist/components/LabFrame/LabFrameTitle.vue.d.ts.map +1 -0
- package/dist/components/LabFrame/index.d.ts +16 -0
- package/dist/components/LabFrame/index.d.ts.map +1 -0
- package/dist/components/LabGlassStage/LabGlassPanel.vue.d.ts +23 -0
- package/dist/components/LabGlassStage/LabGlassPanel.vue.d.ts.map +1 -0
- package/dist/components/LabGlassStage/LabGlassStage.vue.d.ts +23 -0
- package/dist/components/LabGlassStage/LabGlassStage.vue.d.ts.map +1 -0
- package/dist/components/LabGlassStage/index.d.ts +3 -0
- package/dist/components/LabGlassStage/index.d.ts.map +1 -0
- package/dist/components/LabRevealStage/LabRevealLine.vue.d.ts +23 -0
- package/dist/components/LabRevealStage/LabRevealLine.vue.d.ts.map +1 -0
- package/dist/components/LabRevealStage/LabRevealStage.vue.d.ts +23 -0
- package/dist/components/LabRevealStage/LabRevealStage.vue.d.ts.map +1 -0
- package/dist/components/LabRevealStage/index.d.ts +3 -0
- package/dist/components/LabRevealStage/index.d.ts.map +1 -0
- package/dist/components/LabShell/LabBrand.vue.d.ts +23 -0
- package/dist/components/LabShell/LabBrand.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabBrandMark.vue.d.ts +23 -0
- package/dist/components/LabShell/LabBrandMark.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabBrandSub.vue.d.ts +23 -0
- package/dist/components/LabShell/LabBrandSub.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabBrandTitle.vue.d.ts +23 -0
- package/dist/components/LabShell/LabBrandTitle.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabExample.vue.d.ts +23 -0
- package/dist/components/LabShell/LabExample.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabExampleCaption.vue.d.ts +23 -0
- package/dist/components/LabShell/LabExampleCaption.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabExampleCode.vue.d.ts +23 -0
- package/dist/components/LabShell/LabExampleCode.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabExampleDemo.vue.d.ts +27 -0
- package/dist/components/LabShell/LabExampleDemo.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabExampleLabel.vue.d.ts +23 -0
- package/dist/components/LabShell/LabExampleLabel.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabExampleMeta.vue.d.ts +23 -0
- package/dist/components/LabShell/LabExampleMeta.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabHeader.vue.d.ts +23 -0
- package/dist/components/LabShell/LabHeader.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabHeaderLead.vue.d.ts +23 -0
- package/dist/components/LabShell/LabHeaderLead.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabHeaderMeta.vue.d.ts +23 -0
- package/dist/components/LabShell/LabHeaderMeta.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabHeaderMetaItem.vue.d.ts +23 -0
- package/dist/components/LabShell/LabHeaderMetaItem.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabHeaderMetaLabel.vue.d.ts +23 -0
- package/dist/components/LabShell/LabHeaderMetaLabel.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabHeaderMetaValue.vue.d.ts +23 -0
- package/dist/components/LabShell/LabHeaderMetaValue.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabHeaderTitle.vue.d.ts +23 -0
- package/dist/components/LabShell/LabHeaderTitle.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabMain.vue.d.ts +23 -0
- package/dist/components/LabShell/LabMain.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSection.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSection.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSectionBody.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSectionBody.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSectionHead.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSectionHead.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSectionHeadNote.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSectionHeadNote.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabShell.vue.d.ts +23 -0
- package/dist/components/LabShell/LabShell.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSidebar.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSidebar.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSidebarGroup.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSidebarGroup.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSidebarGroupDot.vue.d.ts +8 -0
- package/dist/components/LabShell/LabSidebarGroupDot.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSidebarGroupLabel.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSidebarGroupLabel.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSidebarGroupLink.vue.d.ts +25 -0
- package/dist/components/LabShell/LabSidebarGroupLink.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSidebarGroupList.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSidebarGroupList.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSidebarHead.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSidebarHead.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabSidebarScroll.vue.d.ts +23 -0
- package/dist/components/LabShell/LabSidebarScroll.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabTaxonomy.vue.d.ts +23 -0
- package/dist/components/LabShell/LabTaxonomy.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabTaxonomyList.vue.d.ts +23 -0
- package/dist/components/LabShell/LabTaxonomyList.vue.d.ts.map +1 -0
- package/dist/components/LabShell/LabTaxonomyTitle.vue.d.ts +23 -0
- package/dist/components/LabShell/LabTaxonomyTitle.vue.d.ts.map +1 -0
- package/dist/components/LabShell/index.d.ts +35 -0
- package/dist/components/LabShell/index.d.ts.map +1 -0
- package/dist/components/LabTip/LabTip.vue.d.ts +25 -0
- package/dist/components/LabTip/LabTip.vue.d.ts.map +1 -0
- package/dist/components/LabTip/LabTipBubble.vue.d.ts +26 -0
- package/dist/components/LabTip/LabTipBubble.vue.d.ts.map +1 -0
- package/dist/components/LabTip/index.d.ts +3 -0
- package/dist/components/LabTip/index.d.ts.map +1 -0
- package/dist/components/LabUtilCell/LabUtilCell.vue.d.ts +23 -0
- package/dist/components/LabUtilCell/LabUtilCell.vue.d.ts.map +1 -0
- package/dist/components/LabUtilCell/LabUtilCellBlock.vue.d.ts +23 -0
- package/dist/components/LabUtilCell/LabUtilCellBlock.vue.d.ts.map +1 -0
- package/dist/components/LabUtilCell/LabUtilCellCaption.vue.d.ts +23 -0
- package/dist/components/LabUtilCell/LabUtilCellCaption.vue.d.ts.map +1 -0
- package/dist/components/LabUtilCell/LabUtilCellCode.vue.d.ts +23 -0
- package/dist/components/LabUtilCell/LabUtilCellCode.vue.d.ts.map +1 -0
- package/dist/components/LabUtilCell/LabUtilCellDemo.vue.d.ts +23 -0
- package/dist/components/LabUtilCell/LabUtilCellDemo.vue.d.ts.map +1 -0
- package/dist/components/LabUtilCell/LabUtilRow.vue.d.ts +23 -0
- package/dist/components/LabUtilCell/LabUtilRow.vue.d.ts.map +1 -0
- package/dist/components/LabUtilCell/index.d.ts +7 -0
- package/dist/components/LabUtilCell/index.d.ts.map +1 -0
- package/dist/components/Swatch/Swatch.vue.d.ts +12 -0
- package/dist/components/Swatch/Swatch.vue.d.ts.map +1 -0
- package/dist/components/Swatch/SwatchGrid.vue.d.ts +23 -0
- package/dist/components/Swatch/SwatchGrid.vue.d.ts.map +1 -0
- package/dist/components/Swatch/index.d.ts +3 -0
- package/dist/components/Swatch/index.d.ts.map +1 -0
- package/dist/components/TokenSpecimen/TokenSpecimen.vue.d.ts +23 -0
- package/dist/components/TokenSpecimen/TokenSpecimen.vue.d.ts.map +1 -0
- package/dist/components/TokenSpecimen/TokenSpecimenBox.vue.d.ts +10 -0
- package/dist/components/TokenSpecimen/TokenSpecimenBox.vue.d.ts.map +1 -0
- package/dist/components/TokenSpecimen/TokenSpecimenGrid.vue.d.ts +23 -0
- package/dist/components/TokenSpecimen/TokenSpecimenGrid.vue.d.ts.map +1 -0
- package/dist/components/TokenSpecimen/TokenSpecimenSpacer.vue.d.ts +9 -0
- package/dist/components/TokenSpecimen/TokenSpecimenSpacer.vue.d.ts.map +1 -0
- package/dist/components/TokenSpecimen/index.d.ts +5 -0
- package/dist/components/TokenSpecimen/index.d.ts.map +1 -0
- package/dist/components/TypeSpecimen/TypeSpecimen.vue.d.ts +23 -0
- package/dist/components/TypeSpecimen/TypeSpecimen.vue.d.ts.map +1 -0
- package/dist/components/TypeSpecimen/TypeSpecimenMeta.vue.d.ts +23 -0
- package/dist/components/TypeSpecimen/TypeSpecimenMeta.vue.d.ts.map +1 -0
- package/dist/components/TypeSpecimen/index.d.ts +3 -0
- package/dist/components/TypeSpecimen/index.d.ts.map +1 -0
- package/dist/css/strand-ui.css +1312 -82
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1797 -756
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/CardSection/CardSection.test.ts +51 -0
- package/src/components/CardSection/CardSection.vue +42 -0
- package/src/components/CardSection/index.ts +1 -0
- package/src/components/ContainerScale/ContainerScale.test.ts +42 -0
- package/src/components/ContainerScale/ContainerScale.vue +8 -0
- package/src/components/ContainerScale/ContainerScaleAxis.vue +8 -0
- package/src/components/ContainerScale/ContainerScaleBar.vue +17 -0
- package/src/components/ContainerScale/ContainerScaleCaption.vue +8 -0
- package/src/components/ContainerScale/ContainerScaleLabel.vue +8 -0
- package/src/components/ContainerScale/ContainerScalePx.vue +8 -0
- package/src/components/ContainerScale/ContainerScaleRow.vue +8 -0
- package/src/components/ContainerScale/ContainerScaleTrack.vue +8 -0
- package/src/components/ContainerScale/index.ts +8 -0
- package/src/components/KvEditorial/KvEditorial.test.ts +43 -0
- package/src/components/KvEditorial/KvEditorial.vue +56 -0
- package/src/components/KvEditorial/index.ts +1 -0
- package/src/components/LabFrame/LabFrame.test.ts +89 -0
- package/src/components/LabFrame/LabFrame.vue +8 -0
- package/src/components/LabFrame/LabFrameActions.vue +8 -0
- package/src/components/LabFrame/LabFrameBody.vue +8 -0
- package/src/components/LabFrame/LabFrameChrome.vue +8 -0
- package/src/components/LabFrame/LabFrameContent.vue +17 -0
- package/src/components/LabFrame/LabFrameContentHead.vue +8 -0
- package/src/components/LabFrame/LabFrameDot.vue +15 -0
- package/src/components/LabFrame/LabFrameOverlay.vue +8 -0
- package/src/components/LabFrame/LabFramePanel.vue +11 -0
- package/src/components/LabFrame/LabFramePanelBody.vue +8 -0
- package/src/components/LabFrame/LabFramePanelClose.vue +26 -0
- package/src/components/LabFrame/LabFramePanelFooter.vue +8 -0
- package/src/components/LabFrame/LabFramePanelHeader.vue +8 -0
- package/src/components/LabFrame/LabFramePanelTitle.vue +8 -0
- package/src/components/LabFrame/LabFrameTitle.vue +8 -0
- package/src/components/LabFrame/index.ts +15 -0
- package/src/components/LabGlassStage/LabGlassPanel.vue +8 -0
- package/src/components/LabGlassStage/LabGlassStage.test.ts +16 -0
- package/src/components/LabGlassStage/LabGlassStage.vue +8 -0
- package/src/components/LabGlassStage/index.ts +2 -0
- package/src/components/LabRevealStage/LabRevealLine.vue +8 -0
- package/src/components/LabRevealStage/LabRevealStage.test.ts +16 -0
- package/src/components/LabRevealStage/LabRevealStage.vue +8 -0
- package/src/components/LabRevealStage/index.ts +2 -0
- package/src/components/LabShell/LabBrand.vue +8 -0
- package/src/components/LabShell/LabBrandMark.vue +8 -0
- package/src/components/LabShell/LabBrandSub.vue +8 -0
- package/src/components/LabShell/LabBrandTitle.vue +8 -0
- package/src/components/LabShell/LabExample.vue +8 -0
- package/src/components/LabShell/LabExampleCaption.vue +8 -0
- package/src/components/LabShell/LabExampleCode.vue +8 -0
- package/src/components/LabShell/LabExampleDemo.vue +30 -0
- package/src/components/LabShell/LabExampleLabel.vue +8 -0
- package/src/components/LabShell/LabExampleMeta.vue +8 -0
- package/src/components/LabShell/LabHeader.vue +8 -0
- package/src/components/LabShell/LabHeaderLead.vue +8 -0
- package/src/components/LabShell/LabHeaderMeta.vue +8 -0
- package/src/components/LabShell/LabHeaderMetaItem.vue +8 -0
- package/src/components/LabShell/LabHeaderMetaLabel.vue +8 -0
- package/src/components/LabShell/LabHeaderMetaValue.vue +8 -0
- package/src/components/LabShell/LabHeaderTitle.vue +8 -0
- package/src/components/LabShell/LabMain.vue +8 -0
- package/src/components/LabShell/LabSection.vue +8 -0
- package/src/components/LabShell/LabSectionBody.vue +8 -0
- package/src/components/LabShell/LabSectionHead.vue +8 -0
- package/src/components/LabShell/LabSectionHeadNote.vue +8 -0
- package/src/components/LabShell/LabShell.test.ts +166 -0
- package/src/components/LabShell/LabShell.vue +12 -0
- package/src/components/LabShell/LabSidebar.vue +8 -0
- package/src/components/LabShell/LabSidebarGroup.vue +8 -0
- package/src/components/LabShell/LabSidebarGroupDot.vue +8 -0
- package/src/components/LabShell/LabSidebarGroupLabel.vue +8 -0
- package/src/components/LabShell/LabSidebarGroupLink.vue +14 -0
- package/src/components/LabShell/LabSidebarGroupList.vue +8 -0
- package/src/components/LabShell/LabSidebarHead.vue +8 -0
- package/src/components/LabShell/LabSidebarScroll.vue +8 -0
- package/src/components/LabShell/LabTaxonomy.vue +8 -0
- package/src/components/LabShell/LabTaxonomyList.vue +8 -0
- package/src/components/LabShell/LabTaxonomyTitle.vue +8 -0
- package/src/components/LabShell/index.ts +34 -0
- package/src/components/LabTip/LabTip.test.ts +39 -0
- package/src/components/LabTip/LabTip.vue +18 -0
- package/src/components/LabTip/LabTipBubble.vue +19 -0
- package/src/components/LabTip/index.ts +2 -0
- package/src/components/LabUtilCell/LabUtilCell.test.ts +25 -0
- package/src/components/LabUtilCell/LabUtilCell.vue +8 -0
- package/src/components/LabUtilCell/LabUtilCellBlock.vue +8 -0
- package/src/components/LabUtilCell/LabUtilCellCaption.vue +8 -0
- package/src/components/LabUtilCell/LabUtilCellCode.vue +8 -0
- package/src/components/LabUtilCell/LabUtilCellDemo.vue +8 -0
- package/src/components/LabUtilCell/LabUtilRow.vue +8 -0
- package/src/components/LabUtilCell/index.ts +6 -0
- package/src/components/Swatch/Swatch.test.ts +29 -0
- package/src/components/Swatch/Swatch.vue +23 -0
- package/src/components/Swatch/SwatchGrid.vue +8 -0
- package/src/components/Swatch/index.ts +2 -0
- package/src/components/TokenSpecimen/TokenSpecimen.test.ts +41 -0
- package/src/components/TokenSpecimen/TokenSpecimen.vue +8 -0
- package/src/components/TokenSpecimen/TokenSpecimenBox.vue +23 -0
- package/src/components/TokenSpecimen/TokenSpecimenGrid.vue +8 -0
- package/src/components/TokenSpecimen/TokenSpecimenSpacer.vue +20 -0
- package/src/components/TokenSpecimen/index.ts +4 -0
- package/src/components/TypeSpecimen/TypeSpecimen.test.ts +17 -0
- package/src/components/TypeSpecimen/TypeSpecimen.vue +8 -0
- package/src/components/TypeSpecimen/TypeSpecimenMeta.vue +8 -0
- package/src/components/TypeSpecimen/index.ts +2 -0
- package/src/index.ts +18 -0
package/dist/css/strand-ui.css
CHANGED
|
@@ -735,6 +735,34 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
|
|
|
735
735
|
outline-offset: 2px;
|
|
736
736
|
}
|
|
737
737
|
|
|
738
|
+
/* ── Card section (BEM element, stacked rows inside a card) ──
|
|
739
|
+
A horizontal row inside a composed card. Use multiple
|
|
740
|
+
.strand-card__section children inside a .strand-card--pad-none
|
|
741
|
+
to stack header / body / cta rows separated by horizontal rules.
|
|
742
|
+
First child renders without the top border so the top edge of
|
|
743
|
+
the card is clean. The --header modifier turns a section into a
|
|
744
|
+
top-row header with baseline space-between layout for title
|
|
745
|
+
plus trailing chrome (e.g., overline + chip). This is distinct
|
|
746
|
+
from the standalone .strand-card-section molecule (DL 11.10
|
|
747
|
+
section-boundary production), which is a same-named BEM block
|
|
748
|
+
used outside cards. */
|
|
749
|
+
.strand-card__section {
|
|
750
|
+
display: block;
|
|
751
|
+
padding: var(--strand-space-5) var(--strand-space-6);
|
|
752
|
+
border-top: 1px solid var(--strand-gray-200);
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
.strand-card__section:first-child {
|
|
756
|
+
border-top: 0;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
.strand-card__section--header {
|
|
760
|
+
display: flex;
|
|
761
|
+
align-items: flex-start;
|
|
762
|
+
justify-content: space-between;
|
|
763
|
+
gap: var(--strand-space-4);
|
|
764
|
+
}
|
|
765
|
+
|
|
738
766
|
/* ── Channel grid helpers ──
|
|
739
767
|
Equal-height card row with a natural top-to-bottom stack inside each
|
|
740
768
|
card and the final horizontal row (the CTA) anchored to the card's
|
|
@@ -1139,6 +1167,91 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
|
|
|
1139
1167
|
}
|
|
1140
1168
|
|
|
1141
1169
|
|
|
1170
|
+
/* ContainerScale */
|
|
1171
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
1172
|
+
|
|
1173
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
1174
|
+
|
|
1175
|
+
/* ══════════════════════════════════════════════════
|
|
1176
|
+
CONTAINER SCALE (width visualizer)
|
|
1177
|
+
══════════════════════════════════════════════════
|
|
1178
|
+
A stacked set of horizontal bars demonstrating container
|
|
1179
|
+
widths (narrow / default / wide / full). Each bar's width
|
|
1180
|
+
is set inline per row via its consumer. */
|
|
1181
|
+
|
|
1182
|
+
.strand-container-scale {
|
|
1183
|
+
display: flex;
|
|
1184
|
+
flex-direction: column;
|
|
1185
|
+
gap: var(--strand-space-4);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
.strand-container-scale__row {
|
|
1189
|
+
display: flex;
|
|
1190
|
+
flex-direction: column;
|
|
1191
|
+
gap: 6px;
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
.strand-container-scale__label {
|
|
1195
|
+
display: flex;
|
|
1196
|
+
justify-content: space-between;
|
|
1197
|
+
align-items: baseline;
|
|
1198
|
+
font-size: 11px;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
.strand-container-scale__label code {
|
|
1202
|
+
font-family: var(--strand-font-mono);
|
|
1203
|
+
font-size: 11px;
|
|
1204
|
+
color: var(--strand-blue-primary);
|
|
1205
|
+
font-weight: var(--strand-weight-medium);
|
|
1206
|
+
background: transparent;
|
|
1207
|
+
padding: 0;
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
.strand-container-scale__caption {
|
|
1211
|
+
color: var(--strand-gray-500);
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
.strand-container-scale__track {
|
|
1215
|
+
height: 22px;
|
|
1216
|
+
background: var(--strand-surface-recessed);
|
|
1217
|
+
border-radius: var(--strand-radius-sm);
|
|
1218
|
+
position: relative;
|
|
1219
|
+
border: 1px solid var(--strand-gray-200);
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1222
|
+
.strand-container-scale__bar {
|
|
1223
|
+
height: 100%;
|
|
1224
|
+
background: linear-gradient(
|
|
1225
|
+
90deg,
|
|
1226
|
+
rgba(37, 99, 235, 0.14),
|
|
1227
|
+
rgba(37, 99, 235, 0.22)
|
|
1228
|
+
);
|
|
1229
|
+
border-right: 2px solid var(--strand-blue-primary);
|
|
1230
|
+
display: flex;
|
|
1231
|
+
align-items: center;
|
|
1232
|
+
justify-content: flex-end;
|
|
1233
|
+
padding-right: var(--strand-space-2);
|
|
1234
|
+
transition: width 300ms var(--strand-ease-out-expo);
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
.strand-container-scale__px {
|
|
1238
|
+
font-family: var(--strand-font-mono);
|
|
1239
|
+
font-size: 10px;
|
|
1240
|
+
font-weight: var(--strand-weight-medium);
|
|
1241
|
+
color: var(--strand-blue-primary);
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
.strand-container-scale__axis {
|
|
1245
|
+
display: flex;
|
|
1246
|
+
justify-content: space-between;
|
|
1247
|
+
margin-top: var(--strand-space-1);
|
|
1248
|
+
font-family: var(--strand-font-mono);
|
|
1249
|
+
font-size: 9px;
|
|
1250
|
+
letter-spacing: 0.06em;
|
|
1251
|
+
color: var(--strand-gray-400);
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
|
|
1142
1255
|
/* DataReadout */
|
|
1143
1256
|
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
1144
1257
|
|
|
@@ -1562,6 +1675,26 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
|
|
|
1562
1675
|
.strand-instrument-viewport .strand-kv__label { color: var(--strand-gray-400); }
|
|
1563
1676
|
.strand-instrument-viewport .strand-kv__value { color: var(--strand-gray-200); }
|
|
1564
1677
|
|
|
1678
|
+
/* Dark-surface cascades for status chips and ghost buttons.
|
|
1679
|
+
The light-surface defaults of .strand-status-chip--neutral and
|
|
1680
|
+
.strand-btn--ghost lose contrast when placed on the dark
|
|
1681
|
+
instrument viewport (full-bleed body or recessed panel). Apply
|
|
1682
|
+
matching on-dark treatments so consumers never need inline
|
|
1683
|
+
style overrides. Scoped to both .strand-body--instrument (full
|
|
1684
|
+
page mode) and .strand-instrument-viewport (recessed panel). */
|
|
1685
|
+
.strand-body--instrument .strand-status-chip--neutral,
|
|
1686
|
+
.strand-instrument-viewport .strand-status-chip--neutral {
|
|
1687
|
+
background: color-mix(in srgb, var(--strand-gray-400) 12%, transparent);
|
|
1688
|
+
color: var(--strand-gray-300);
|
|
1689
|
+
border: 1px solid color-mix(in srgb, var(--strand-gray-400) 20%, transparent);
|
|
1690
|
+
}
|
|
1691
|
+
|
|
1692
|
+
.strand-body--instrument .strand-btn--ghost,
|
|
1693
|
+
.strand-instrument-viewport .strand-btn--ghost {
|
|
1694
|
+
color: var(--strand-on-blue-primary);
|
|
1695
|
+
border-color: rgba(255, 255, 255, 0.2);
|
|
1696
|
+
}
|
|
1697
|
+
|
|
1565
1698
|
.strand-instrument-viewport__label {
|
|
1566
1699
|
color: var(--strand-gray-400);
|
|
1567
1700
|
font-family: var(--strand-font-mono);
|
|
@@ -2815,108 +2948,1026 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
|
|
|
2815
2948
|
margin-bottom: var(--strand-space-4);
|
|
2816
2949
|
}
|
|
2817
2950
|
|
|
2818
|
-
.strand-detail-panel__close:hover {
|
|
2819
|
-
background: var(--strand-blue-glow);
|
|
2820
|
-
}
|
|
2951
|
+
.strand-detail-panel__close:hover {
|
|
2952
|
+
background: var(--strand-blue-glow);
|
|
2953
|
+
}
|
|
2954
|
+
|
|
2955
|
+
.strand-detail-panel__close-icon {
|
|
2956
|
+
display: none;
|
|
2957
|
+
}
|
|
2958
|
+
|
|
2959
|
+
.strand-detail-panel__close-text {
|
|
2960
|
+
display: inline;
|
|
2961
|
+
}
|
|
2962
|
+
|
|
2963
|
+
.strand-detail-panel > .strand-overline {
|
|
2964
|
+
margin-bottom: var(--strand-space-2);
|
|
2965
|
+
}
|
|
2966
|
+
|
|
2967
|
+
.strand-map-legend,
|
|
2968
|
+
.strand-coord-readout {
|
|
2969
|
+
display: none;
|
|
2970
|
+
}
|
|
2971
|
+
|
|
2972
|
+
.strand-search-bar__input {
|
|
2973
|
+
font-size: 16px;
|
|
2974
|
+
}
|
|
2975
|
+
}
|
|
2976
|
+
|
|
2977
|
+
/* ──────────────────────────────────────────────
|
|
2978
|
+
REDUCED MOTION
|
|
2979
|
+
──────────────────────────────────────────────
|
|
2980
|
+
Strip every animation and transition from the FUI primitives
|
|
2981
|
+
when the user has prefers-reduced-motion. The instrument is
|
|
2982
|
+
still readable, just static. */
|
|
2983
|
+
|
|
2984
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2985
|
+
.strand-scanline,
|
|
2986
|
+
.strand-scanline--ambient {
|
|
2987
|
+
display: none;
|
|
2988
|
+
}
|
|
2989
|
+
|
|
2990
|
+
.strand-instrument-viewport--full-bleed::after {
|
|
2991
|
+
animation: none;
|
|
2992
|
+
}
|
|
2993
|
+
|
|
2994
|
+
.strand-map-pin {
|
|
2995
|
+
animation: none;
|
|
2996
|
+
}
|
|
2997
|
+
|
|
2998
|
+
.strand-map-pin::before,
|
|
2999
|
+
.strand-map-pin::after {
|
|
3000
|
+
animation: none;
|
|
3001
|
+
}
|
|
3002
|
+
|
|
3003
|
+
.strand-map-pin:hover {
|
|
3004
|
+
animation: none;
|
|
3005
|
+
}
|
|
3006
|
+
|
|
3007
|
+
.strand-map-pin:hover::before,
|
|
3008
|
+
.strand-map-pin:hover::after {
|
|
3009
|
+
animation: none;
|
|
3010
|
+
}
|
|
3011
|
+
|
|
3012
|
+
.strand-detail-panel {
|
|
3013
|
+
transition: none;
|
|
3014
|
+
}
|
|
3015
|
+
|
|
3016
|
+
.strand-detail-panel.is-open > .strand-overline,
|
|
3017
|
+
.strand-detail-panel--open > .strand-overline,
|
|
3018
|
+
.strand-detail-panel.open > .strand-overline,
|
|
3019
|
+
.strand-detail-panel.is-open .strand-detail-panel__title,
|
|
3020
|
+
.strand-detail-panel--open .strand-detail-panel__title,
|
|
3021
|
+
.strand-detail-panel.open .strand-detail-panel__title,
|
|
3022
|
+
.strand-detail-panel.is-open .strand-detail-panel__meta,
|
|
3023
|
+
.strand-detail-panel--open .strand-detail-panel__meta,
|
|
3024
|
+
.strand-detail-panel.open .strand-detail-panel__meta,
|
|
3025
|
+
.strand-detail-panel.is-open .strand-detail-panel__salary,
|
|
3026
|
+
.strand-detail-panel--open .strand-detail-panel__salary,
|
|
3027
|
+
.strand-detail-panel.open .strand-detail-panel__salary,
|
|
3028
|
+
.strand-detail-panel.is-open .strand-detail-panel__cta,
|
|
3029
|
+
.strand-detail-panel--open .strand-detail-panel__cta,
|
|
3030
|
+
.strand-detail-panel.open .strand-detail-panel__cta,
|
|
3031
|
+
.strand-detail-panel.is-open .strand-detail-panel__source,
|
|
3032
|
+
.strand-detail-panel--open .strand-detail-panel__source,
|
|
3033
|
+
.strand-detail-panel.open .strand-detail-panel__source {
|
|
3034
|
+
animation: none;
|
|
3035
|
+
}
|
|
3036
|
+
|
|
3037
|
+
.strand-map-legend__title::before {
|
|
3038
|
+
animation: none;
|
|
3039
|
+
}
|
|
3040
|
+
|
|
3041
|
+
.strand-coord-readout::before {
|
|
3042
|
+
animation: none;
|
|
3043
|
+
}
|
|
3044
|
+
|
|
3045
|
+
.strand-map-loading__spinner {
|
|
3046
|
+
animation: none;
|
|
3047
|
+
border-color: rgba(59, 142, 246, 0.4);
|
|
3048
|
+
}
|
|
3049
|
+
|
|
3050
|
+
.strand-search-bar__action--locating {
|
|
3051
|
+
animation: none;
|
|
3052
|
+
}
|
|
3053
|
+
}
|
|
3054
|
+
|
|
3055
|
+
|
|
3056
|
+
/* LabFrame */
|
|
3057
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3058
|
+
|
|
3059
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3060
|
+
|
|
3061
|
+
/* ══════════════════════════════════════════════════
|
|
3062
|
+
LAB FRAME (fake in-page window hosting a modal demo)
|
|
3063
|
+
══════════════════════════════════════════════════
|
|
3064
|
+
Doc-specific framing primitive. Real Strand Dialog steals
|
|
3065
|
+
the whole viewport; this frame hosts a dialog-style demo
|
|
3066
|
+
inline so docs can show the open state without replacing
|
|
3067
|
+
the page. Uses macOS-style traffic-light chrome with dot
|
|
3068
|
+
colors set inline per dot. */
|
|
3069
|
+
|
|
3070
|
+
.strand-ref-frame {
|
|
3071
|
+
background: var(--strand-surface-recessed);
|
|
3072
|
+
border-radius: var(--strand-radius-lg);
|
|
3073
|
+
overflow: hidden;
|
|
3074
|
+
}
|
|
3075
|
+
|
|
3076
|
+
.strand-ref-frame__chrome {
|
|
3077
|
+
display: flex;
|
|
3078
|
+
align-items: center;
|
|
3079
|
+
gap: 6px;
|
|
3080
|
+
padding: 10px 14px;
|
|
3081
|
+
background: var(--strand-surface-subtle);
|
|
3082
|
+
border-bottom: 1px solid var(--strand-gray-200);
|
|
3083
|
+
}
|
|
3084
|
+
|
|
3085
|
+
.strand-ref-frame__dot {
|
|
3086
|
+
width: 10px;
|
|
3087
|
+
height: 10px;
|
|
3088
|
+
border-radius: 50%;
|
|
3089
|
+
display: inline-block;
|
|
3090
|
+
flex: none;
|
|
3091
|
+
}
|
|
3092
|
+
|
|
3093
|
+
.strand-ref-frame__title {
|
|
3094
|
+
margin-left: var(--strand-space-3);
|
|
3095
|
+
font-family: var(--strand-font-mono);
|
|
3096
|
+
font-size: 11px;
|
|
3097
|
+
letter-spacing: 0.04em;
|
|
3098
|
+
color: var(--strand-gray-600);
|
|
3099
|
+
}
|
|
3100
|
+
|
|
3101
|
+
.strand-ref-frame__body {
|
|
3102
|
+
position: relative;
|
|
3103
|
+
min-height: 280px;
|
|
3104
|
+
background: var(--strand-surface-elevated);
|
|
3105
|
+
}
|
|
3106
|
+
|
|
3107
|
+
.strand-ref-frame__content {
|
|
3108
|
+
display: flex;
|
|
3109
|
+
align-items: center;
|
|
3110
|
+
justify-content: space-between;
|
|
3111
|
+
gap: var(--strand-space-5);
|
|
3112
|
+
padding: var(--strand-space-8) 36px;
|
|
3113
|
+
transition: filter 180ms var(--strand-ease-out-quart),
|
|
3114
|
+
opacity 180ms var(--strand-ease-out-quart);
|
|
3115
|
+
}
|
|
3116
|
+
|
|
3117
|
+
.strand-ref-frame__content[aria-hidden="true"] {
|
|
3118
|
+
filter: blur(2px);
|
|
3119
|
+
opacity: 0.55;
|
|
3120
|
+
pointer-events: none;
|
|
3121
|
+
}
|
|
3122
|
+
|
|
3123
|
+
.strand-ref-frame__content-head {
|
|
3124
|
+
/* container for overline + heading; no explicit styles */
|
|
3125
|
+
}
|
|
3126
|
+
|
|
3127
|
+
.strand-ref-frame__actions {
|
|
3128
|
+
display: flex;
|
|
3129
|
+
gap: 10px;
|
|
3130
|
+
}
|
|
3131
|
+
|
|
3132
|
+
.strand-ref-frame__overlay {
|
|
3133
|
+
position: absolute;
|
|
3134
|
+
inset: 0;
|
|
3135
|
+
background: rgba(15, 25, 42, 0.45);
|
|
3136
|
+
display: flex;
|
|
3137
|
+
align-items: center;
|
|
3138
|
+
justify-content: center;
|
|
3139
|
+
animation: strand-ref-frame-overlay-in 160ms var(--strand-ease-out-quart) forwards;
|
|
3140
|
+
padding: var(--strand-space-6);
|
|
3141
|
+
}
|
|
3142
|
+
|
|
3143
|
+
@keyframes strand-ref-frame-overlay-in {
|
|
3144
|
+
from { opacity: 0; }
|
|
3145
|
+
to { opacity: 1; }
|
|
3146
|
+
}
|
|
3147
|
+
|
|
3148
|
+
.strand-ref-frame__panel {
|
|
3149
|
+
background: var(--strand-surface-elevated);
|
|
3150
|
+
border-radius: var(--strand-radius-lg);
|
|
3151
|
+
box-shadow: 0 20px 50px rgba(15, 25, 42, 0.25),
|
|
3152
|
+
0 2px 6px rgba(15, 25, 42, 0.12);
|
|
3153
|
+
width: min(440px, 100%);
|
|
3154
|
+
overflow: hidden;
|
|
3155
|
+
animation: strand-ref-frame-panel-in 180ms var(--strand-ease-out-expo) forwards;
|
|
3156
|
+
transform-origin: center;
|
|
3157
|
+
}
|
|
3158
|
+
|
|
3159
|
+
@keyframes strand-ref-frame-panel-in {
|
|
3160
|
+
from { opacity: 0; transform: translateY(8px) scale(0.98); }
|
|
3161
|
+
to { opacity: 1; transform: translateY(0) scale(1); }
|
|
3162
|
+
}
|
|
3163
|
+
|
|
3164
|
+
.strand-ref-frame__panel-header {
|
|
3165
|
+
display: flex;
|
|
3166
|
+
align-items: flex-start;
|
|
3167
|
+
justify-content: space-between;
|
|
3168
|
+
padding: var(--strand-space-5) 22px 14px;
|
|
3169
|
+
gap: var(--strand-space-4);
|
|
3170
|
+
}
|
|
3171
|
+
|
|
3172
|
+
.strand-ref-frame__panel-title {
|
|
3173
|
+
margin: 4px 0 0;
|
|
3174
|
+
font-family: var(--strand-font-sans);
|
|
3175
|
+
font-size: 18px;
|
|
3176
|
+
font-weight: var(--strand-weight-medium);
|
|
3177
|
+
line-height: 1.3;
|
|
3178
|
+
color: var(--strand-blue-midnight);
|
|
3179
|
+
letter-spacing: -0.01em;
|
|
3180
|
+
}
|
|
3181
|
+
|
|
3182
|
+
.strand-ref-frame__panel-close {
|
|
3183
|
+
background: transparent;
|
|
3184
|
+
border: 0;
|
|
3185
|
+
width: 28px;
|
|
3186
|
+
height: 28px;
|
|
3187
|
+
border-radius: var(--strand-radius-md);
|
|
3188
|
+
display: grid;
|
|
3189
|
+
place-items: center;
|
|
3190
|
+
font-size: 18px;
|
|
3191
|
+
line-height: 1;
|
|
3192
|
+
color: var(--strand-gray-500);
|
|
3193
|
+
cursor: pointer;
|
|
3194
|
+
flex: none;
|
|
3195
|
+
transition: background var(--strand-duration-fast) var(--strand-ease-out-quart),
|
|
3196
|
+
color var(--strand-duration-fast) var(--strand-ease-out-quart);
|
|
3197
|
+
}
|
|
3198
|
+
|
|
3199
|
+
.strand-ref-frame__panel-close:hover {
|
|
3200
|
+
background: var(--strand-surface-recessed);
|
|
3201
|
+
color: var(--strand-blue-midnight);
|
|
3202
|
+
}
|
|
3203
|
+
|
|
3204
|
+
.strand-ref-frame__panel-close:focus-visible {
|
|
3205
|
+
outline: 2px solid var(--strand-blue-primary);
|
|
3206
|
+
outline-offset: 2px;
|
|
3207
|
+
}
|
|
3208
|
+
|
|
3209
|
+
.strand-ref-frame__panel-body {
|
|
3210
|
+
padding: 0 22px var(--strand-space-5);
|
|
3211
|
+
font-size: 14px;
|
|
3212
|
+
line-height: 1.55;
|
|
3213
|
+
color: var(--strand-gray-700);
|
|
3214
|
+
}
|
|
3215
|
+
|
|
3216
|
+
.strand-ref-frame__panel-footer {
|
|
3217
|
+
display: flex;
|
|
3218
|
+
justify-content: flex-end;
|
|
3219
|
+
gap: 10px;
|
|
3220
|
+
padding: var(--strand-space-4) 22px var(--strand-space-5);
|
|
3221
|
+
border-top: 1px solid var(--strand-gray-100);
|
|
3222
|
+
background: var(--strand-surface-recessed);
|
|
3223
|
+
}
|
|
3224
|
+
|
|
3225
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3226
|
+
.strand-ref-frame__overlay,
|
|
3227
|
+
.strand-ref-frame__panel {
|
|
3228
|
+
animation: none;
|
|
3229
|
+
}
|
|
3230
|
+
|
|
3231
|
+
.strand-ref-frame__content {
|
|
3232
|
+
transition: none;
|
|
3233
|
+
}
|
|
3234
|
+
}
|
|
3235
|
+
|
|
3236
|
+
|
|
3237
|
+
/* LabGlassStage */
|
|
3238
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3239
|
+
|
|
3240
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3241
|
+
|
|
3242
|
+
/* ══════════════════════════════════════════════════
|
|
3243
|
+
LAB GLASS STAGE (frosted-glass specimen container)
|
|
3244
|
+
══════════════════════════════════════════════════
|
|
3245
|
+
A layered blue-gradient backdrop with an embedded glass
|
|
3246
|
+
panel on top, used by docs pages to demonstrate frosted
|
|
3247
|
+
glass surfaces against a cinematic backdrop. */
|
|
3248
|
+
|
|
3249
|
+
.strand-ref-glass-stage {
|
|
3250
|
+
position: relative;
|
|
3251
|
+
padding: var(--strand-space-10) var(--strand-space-8);
|
|
3252
|
+
border-radius: var(--strand-radius-lg);
|
|
3253
|
+
overflow: hidden;
|
|
3254
|
+
background:
|
|
3255
|
+
radial-gradient(circle at 20% 30%, rgba(59, 142, 246, 0.45) 0%, transparent 55%),
|
|
3256
|
+
radial-gradient(circle at 80% 70%, rgba(20, 184, 166, 0.35) 0%, transparent 55%),
|
|
3257
|
+
linear-gradient(135deg, var(--strand-blue-midnight) 0%, var(--strand-blue-abyss) 100%);
|
|
3258
|
+
}
|
|
3259
|
+
|
|
3260
|
+
.strand-ref-glass-panel {
|
|
3261
|
+
position: relative;
|
|
3262
|
+
padding: 22px var(--strand-space-6);
|
|
3263
|
+
border-radius: var(--strand-radius-lg);
|
|
3264
|
+
background: rgba(15, 25, 42, 0.42);
|
|
3265
|
+
-webkit-backdrop-filter: blur(14px) saturate(1.2);
|
|
3266
|
+
backdrop-filter: blur(14px) saturate(1.2);
|
|
3267
|
+
border: 1px solid rgba(255, 255, 255, 0.16);
|
|
3268
|
+
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.35),
|
|
3269
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.12);
|
|
3270
|
+
color: var(--strand-on-blue-primary);
|
|
3271
|
+
}
|
|
3272
|
+
|
|
3273
|
+
|
|
3274
|
+
/* LabRevealStage */
|
|
3275
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3276
|
+
|
|
3277
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3278
|
+
|
|
3279
|
+
/* ══════════════════════════════════════════════════
|
|
3280
|
+
LAB REVEAL STAGE (staggered entry animation specimen)
|
|
3281
|
+
══════════════════════════════════════════════════
|
|
3282
|
+
Demonstrates the Principle 7 alive-signal staggered reveal
|
|
3283
|
+
pattern. Four lines animate in at 0 / 180 / 360 / 540 ms.
|
|
3284
|
+
Consumers remount the stage (via a key/ref) to replay. */
|
|
3285
|
+
|
|
3286
|
+
.strand-ref-reveal-stage {
|
|
3287
|
+
display: flex;
|
|
3288
|
+
flex-direction: column;
|
|
3289
|
+
gap: 10px;
|
|
3290
|
+
padding: var(--strand-space-5) 0;
|
|
3291
|
+
}
|
|
3292
|
+
|
|
3293
|
+
.strand-ref-reveal-line {
|
|
3294
|
+
opacity: 0;
|
|
3295
|
+
transform: translateY(8px);
|
|
3296
|
+
animation: strand-ref-reveal-in 2400ms var(--strand-ease-out-quart) forwards;
|
|
3297
|
+
font-family: var(--strand-font-mono);
|
|
3298
|
+
font-size: 12px;
|
|
3299
|
+
letter-spacing: 0.04em;
|
|
3300
|
+
color: var(--strand-blue-midnight);
|
|
3301
|
+
padding: 10px 14px;
|
|
3302
|
+
background: var(--strand-surface-elevated);
|
|
3303
|
+
border-left: 2px solid var(--strand-blue-primary);
|
|
3304
|
+
}
|
|
3305
|
+
|
|
3306
|
+
.strand-ref-reveal-line:nth-child(1) { animation-delay: 0ms; }
|
|
3307
|
+
.strand-ref-reveal-line:nth-child(2) { animation-delay: 180ms; }
|
|
3308
|
+
.strand-ref-reveal-line:nth-child(3) { animation-delay: 360ms; }
|
|
3309
|
+
.strand-ref-reveal-line:nth-child(4) { animation-delay: 540ms; }
|
|
3310
|
+
|
|
3311
|
+
@keyframes strand-ref-reveal-in {
|
|
3312
|
+
0% { opacity: 0; transform: translateY(8px); }
|
|
3313
|
+
25% { opacity: 1; transform: translateY(0); }
|
|
3314
|
+
85% { opacity: 1; transform: translateY(0); }
|
|
3315
|
+
100% { opacity: 1; transform: translateY(0); }
|
|
3316
|
+
}
|
|
3317
|
+
|
|
3318
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3319
|
+
.strand-ref-reveal-line {
|
|
3320
|
+
animation: none;
|
|
3321
|
+
opacity: 1;
|
|
3322
|
+
transform: none;
|
|
3323
|
+
}
|
|
3324
|
+
}
|
|
3325
|
+
|
|
3326
|
+
|
|
3327
|
+
/* LabShell */
|
|
3328
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3329
|
+
|
|
3330
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3331
|
+
|
|
3332
|
+
/* ══════════════════════════════════════════════════
|
|
3333
|
+
LAB SHELL / COMPONENT-REFERENCE PAGE CHROME
|
|
3334
|
+
══════════════════════════════════════════════════
|
|
3335
|
+
A named primitive family for a component-reference page
|
|
3336
|
+
layout: sticky sidebar + scrollable main + header + section
|
|
3337
|
+
+ example. Used by the Strand docs site itself, by any
|
|
3338
|
+
consumer building a component showcase, and by the DS Strand
|
|
3339
|
+
lab. 40+ classes map 1:1 to the handoff's showcase-* chrome.
|
|
3340
|
+
|
|
3341
|
+
Computed styles match the baseline at viewport 1440 per
|
|
3342
|
+
`.strand-handoff-render/ledger/focused.json`.
|
|
3343
|
+
|
|
3344
|
+
The sidebar sticky-top offset is set via the CSS custom
|
|
3345
|
+
property `--strand-ref-sticky-top` (default 0) so consumers
|
|
3346
|
+
can push the sidebar below fixed page chrome (e.g. a glass
|
|
3347
|
+
nav) without hardcoding any DS-specific value. Set on the
|
|
3348
|
+
shell root: `<div class="strand-ref-shell"
|
|
3349
|
+
style="--strand-ref-sticky-top: var(--strand-nav-height);">`.
|
|
3350
|
+
══════════════════════════════════════════════════ */
|
|
3351
|
+
|
|
3352
|
+
/* Shell root: two-column grid, sidebar left, main right. */
|
|
3353
|
+
.strand-ref-shell {
|
|
3354
|
+
display: grid;
|
|
3355
|
+
grid-template-columns: 256px 1fr;
|
|
3356
|
+
min-height: 100vh;
|
|
3357
|
+
}
|
|
3358
|
+
|
|
3359
|
+
/* Sidebar: sticky column. Height fills viewport from sticky-top to
|
|
3360
|
+
bottom so its bottom never falls below the viewport edge. dvh tracks
|
|
3361
|
+
mobile browser-chrome changes; vh fallback for older browsers. */
|
|
3362
|
+
.strand-ref-shell__sidebar {
|
|
3363
|
+
position: sticky;
|
|
3364
|
+
top: var(--strand-ref-sticky-top, 0);
|
|
3365
|
+
height: calc(100vh - var(--strand-ref-sticky-top, 0px));
|
|
3366
|
+
height: calc(100dvh - var(--strand-ref-sticky-top, 0px));
|
|
3367
|
+
max-height: calc(100vh - var(--strand-ref-sticky-top, 0px));
|
|
3368
|
+
max-height: calc(100dvh - var(--strand-ref-sticky-top, 0px));
|
|
3369
|
+
background: var(--strand-surface-elevated);
|
|
3370
|
+
border-right: 1px solid var(--strand-gray-200);
|
|
3371
|
+
display: flex;
|
|
3372
|
+
flex-direction: column;
|
|
3373
|
+
overflow: hidden;
|
|
3374
|
+
}
|
|
3375
|
+
|
|
3376
|
+
/* Sidebar head: fixed top block with brand and hairline bottom. */
|
|
3377
|
+
.strand-ref-shell__sidebar-head {
|
|
3378
|
+
padding: var(--strand-space-6) var(--strand-space-5) 18px;
|
|
3379
|
+
border-bottom: 1px solid var(--strand-gray-100);
|
|
3380
|
+
flex: none;
|
|
3381
|
+
background: var(--strand-surface-elevated);
|
|
3382
|
+
}
|
|
3383
|
+
|
|
3384
|
+
/* Sidebar scroll region: groups of nav links, overflow-y auto. */
|
|
3385
|
+
.strand-ref-shell__sidebar-scroll {
|
|
3386
|
+
flex: 1;
|
|
3387
|
+
min-height: 0;
|
|
3388
|
+
overflow-y: auto;
|
|
3389
|
+
overflow-anchor: none;
|
|
3390
|
+
overscroll-behavior: contain;
|
|
3391
|
+
padding: var(--strand-space-4) var(--strand-space-5) var(--strand-space-6);
|
|
3392
|
+
display: flex;
|
|
3393
|
+
flex-direction: column;
|
|
3394
|
+
gap: 18px;
|
|
3395
|
+
}
|
|
3396
|
+
|
|
3397
|
+
/* Brand row: mark + title + sub stacked horizontally. */
|
|
3398
|
+
.strand-ref-shell__brand {
|
|
3399
|
+
display: flex;
|
|
3400
|
+
align-items: center;
|
|
3401
|
+
gap: var(--strand-space-3);
|
|
3402
|
+
}
|
|
3403
|
+
|
|
3404
|
+
.strand-ref-shell__brand-mark {
|
|
3405
|
+
width: 36px;
|
|
3406
|
+
height: 36px;
|
|
3407
|
+
border-radius: var(--strand-radius-md);
|
|
3408
|
+
background: var(--strand-blue-midnight);
|
|
3409
|
+
color: var(--strand-on-blue-primary);
|
|
3410
|
+
display: grid;
|
|
3411
|
+
place-items: center;
|
|
3412
|
+
font-family: var(--strand-font-mono);
|
|
3413
|
+
font-weight: var(--strand-weight-semibold);
|
|
3414
|
+
font-size: 13px;
|
|
3415
|
+
letter-spacing: 0.04em;
|
|
3416
|
+
}
|
|
3417
|
+
|
|
3418
|
+
.strand-ref-shell__brand-title {
|
|
3419
|
+
font-family: var(--strand-font-mono);
|
|
3420
|
+
font-weight: var(--strand-weight-medium);
|
|
3421
|
+
color: var(--strand-blue-midnight);
|
|
3422
|
+
font-size: 15px;
|
|
3423
|
+
}
|
|
3424
|
+
|
|
3425
|
+
.strand-ref-shell__brand-sub {
|
|
3426
|
+
font-family: var(--strand-font-mono);
|
|
3427
|
+
font-size: 10px;
|
|
3428
|
+
text-transform: uppercase;
|
|
3429
|
+
letter-spacing: var(--strand-tracking-ultra);
|
|
3430
|
+
color: var(--strand-gray-500);
|
|
3431
|
+
}
|
|
3432
|
+
|
|
3433
|
+
/* Sidebar nav group: divider between groups, label + list. */
|
|
3434
|
+
.strand-ref-shell__group {
|
|
3435
|
+
display: flex;
|
|
3436
|
+
flex-direction: column;
|
|
3437
|
+
gap: var(--strand-space-1);
|
|
3438
|
+
padding-top: 10px;
|
|
3439
|
+
border-top: 1px solid var(--strand-gray-100);
|
|
3440
|
+
}
|
|
3441
|
+
|
|
3442
|
+
.strand-ref-shell__group:first-of-type {
|
|
3443
|
+
border-top: 0;
|
|
3444
|
+
padding-top: 0;
|
|
3445
|
+
}
|
|
3446
|
+
|
|
3447
|
+
.strand-ref-shell__group-label {
|
|
3448
|
+
font-family: var(--strand-font-mono);
|
|
3449
|
+
font-size: 10px;
|
|
3450
|
+
letter-spacing: 0.18em;
|
|
3451
|
+
text-transform: uppercase;
|
|
3452
|
+
color: var(--strand-blue-midnight);
|
|
3453
|
+
font-weight: var(--strand-weight-semibold);
|
|
3454
|
+
padding: 6px 10px 8px;
|
|
3455
|
+
}
|
|
3456
|
+
|
|
3457
|
+
.strand-ref-shell__group-list {
|
|
3458
|
+
display: flex;
|
|
3459
|
+
flex-direction: column;
|
|
3460
|
+
gap: 1px;
|
|
3461
|
+
}
|
|
3462
|
+
|
|
3463
|
+
.strand-ref-shell__group-link {
|
|
3464
|
+
display: flex;
|
|
3465
|
+
align-items: center;
|
|
3466
|
+
gap: 10px;
|
|
3467
|
+
padding: 7px 10px;
|
|
3468
|
+
border-radius: var(--strand-radius-md);
|
|
3469
|
+
font-family: var(--strand-font-sans);
|
|
3470
|
+
font-size: 13px;
|
|
3471
|
+
color: var(--strand-gray-700);
|
|
3472
|
+
text-decoration: none;
|
|
3473
|
+
transition: background var(--strand-duration-fast) var(--strand-ease-out-quart),
|
|
3474
|
+
color var(--strand-duration-fast) var(--strand-ease-out-quart);
|
|
3475
|
+
}
|
|
3476
|
+
|
|
3477
|
+
.strand-ref-shell__group-link:hover {
|
|
3478
|
+
background: var(--strand-surface-recessed);
|
|
3479
|
+
color: var(--strand-blue-midnight);
|
|
3480
|
+
}
|
|
3481
|
+
|
|
3482
|
+
.strand-ref-shell__group-dot {
|
|
3483
|
+
width: 4px;
|
|
3484
|
+
height: 4px;
|
|
3485
|
+
border-radius: 50%;
|
|
3486
|
+
background: var(--strand-gray-300);
|
|
3487
|
+
flex: none;
|
|
3488
|
+
}
|
|
3489
|
+
|
|
3490
|
+
.strand-ref-shell__group-link:hover .strand-ref-shell__group-dot {
|
|
3491
|
+
background: var(--strand-blue-primary);
|
|
3492
|
+
}
|
|
3493
|
+
|
|
3494
|
+
/* Main: scrolling column, padding 56px 64px 96px, clamped width. */
|
|
3495
|
+
.strand-ref-shell__main {
|
|
3496
|
+
padding: 56px var(--strand-space-16) 96px;
|
|
3497
|
+
max-width: 1120px;
|
|
3498
|
+
}
|
|
3499
|
+
|
|
3500
|
+
/* Header: h1 + lead + metrics row, bottom hairline. */
|
|
3501
|
+
.strand-ref-header {
|
|
3502
|
+
padding-bottom: var(--strand-space-10);
|
|
3503
|
+
border-bottom: 1px solid var(--strand-gray-200);
|
|
3504
|
+
margin-bottom: var(--strand-space-8);
|
|
3505
|
+
}
|
|
3506
|
+
|
|
3507
|
+
.strand-ref-header__title {
|
|
3508
|
+
font-family: var(--strand-font-sans);
|
|
3509
|
+
font-weight: var(--strand-weight-light);
|
|
3510
|
+
letter-spacing: var(--strand-tracking-tight);
|
|
3511
|
+
color: var(--strand-blue-midnight);
|
|
3512
|
+
font-size: 40px;
|
|
3513
|
+
margin: var(--strand-space-3) 0 0;
|
|
3514
|
+
}
|
|
3515
|
+
|
|
3516
|
+
.strand-ref-header__lead {
|
|
3517
|
+
max-width: 620px;
|
|
3518
|
+
margin: var(--strand-space-4) 0 0;
|
|
3519
|
+
font-family: var(--strand-font-sans);
|
|
3520
|
+
font-size: 20px;
|
|
3521
|
+
color: var(--strand-gray-500);
|
|
3522
|
+
line-height: 1.5;
|
|
3523
|
+
}
|
|
3524
|
+
|
|
3525
|
+
.strand-ref-header__meta {
|
|
3526
|
+
display: grid;
|
|
3527
|
+
grid-template-columns: repeat(4, minmax(0, auto));
|
|
3528
|
+
gap: 48px;
|
|
3529
|
+
margin: var(--strand-space-8) 0 0;
|
|
3530
|
+
justify-content: start;
|
|
3531
|
+
}
|
|
3532
|
+
|
|
3533
|
+
.strand-ref-header__meta-item {
|
|
3534
|
+
display: flex;
|
|
3535
|
+
flex-direction: column;
|
|
3536
|
+
gap: var(--strand-space-2);
|
|
3537
|
+
margin: 0;
|
|
3538
|
+
}
|
|
3539
|
+
|
|
3540
|
+
.strand-ref-header__meta-label {
|
|
3541
|
+
font-family: var(--strand-font-mono);
|
|
3542
|
+
font-size: 10px;
|
|
3543
|
+
letter-spacing: 0.14em;
|
|
3544
|
+
text-transform: uppercase;
|
|
3545
|
+
color: var(--strand-gray-500);
|
|
3546
|
+
margin: 0;
|
|
3547
|
+
}
|
|
3548
|
+
|
|
3549
|
+
.strand-ref-header__meta-value {
|
|
3550
|
+
font-family: var(--strand-font-sans);
|
|
3551
|
+
font-size: 22px;
|
|
3552
|
+
font-weight: var(--strand-weight-light);
|
|
3553
|
+
letter-spacing: -0.01em;
|
|
3554
|
+
color: var(--strand-blue-midnight);
|
|
3555
|
+
margin: 0;
|
|
3556
|
+
line-height: 1.2;
|
|
3557
|
+
}
|
|
3558
|
+
|
|
3559
|
+
/* Taxonomy explainer block: overline + definition list of terms. */
|
|
3560
|
+
.strand-ref-taxonomy {
|
|
3561
|
+
margin-top: var(--strand-space-6);
|
|
3562
|
+
padding: var(--strand-space-5) 22px;
|
|
3563
|
+
background: var(--strand-surface-recessed);
|
|
3564
|
+
border: 1px solid var(--strand-gray-200);
|
|
3565
|
+
border-radius: var(--strand-radius-lg);
|
|
3566
|
+
max-width: 720px;
|
|
3567
|
+
}
|
|
3568
|
+
|
|
3569
|
+
.strand-ref-taxonomy__title {
|
|
3570
|
+
font-family: var(--strand-font-mono);
|
|
3571
|
+
font-size: 10px;
|
|
3572
|
+
letter-spacing: 0.18em;
|
|
3573
|
+
text-transform: uppercase;
|
|
3574
|
+
color: var(--strand-blue-midnight);
|
|
3575
|
+
font-weight: var(--strand-weight-semibold);
|
|
3576
|
+
margin-bottom: 10px;
|
|
3577
|
+
}
|
|
3578
|
+
|
|
3579
|
+
.strand-ref-taxonomy__list {
|
|
3580
|
+
margin: 0;
|
|
3581
|
+
display: grid;
|
|
3582
|
+
grid-template-columns: 1fr;
|
|
3583
|
+
gap: var(--strand-space-2);
|
|
3584
|
+
}
|
|
3585
|
+
|
|
3586
|
+
.strand-ref-taxonomy__list > div {
|
|
3587
|
+
display: grid;
|
|
3588
|
+
grid-template-columns: 160px 1fr;
|
|
3589
|
+
gap: 14px;
|
|
3590
|
+
align-items: baseline;
|
|
3591
|
+
}
|
|
3592
|
+
|
|
3593
|
+
.strand-ref-taxonomy__list dt {
|
|
3594
|
+
font-family: var(--strand-font-mono);
|
|
3595
|
+
font-size: 11px;
|
|
3596
|
+
letter-spacing: 0.08em;
|
|
3597
|
+
text-transform: uppercase;
|
|
3598
|
+
color: var(--strand-blue-primary);
|
|
3599
|
+
font-weight: var(--strand-weight-semibold);
|
|
3600
|
+
margin: 0;
|
|
3601
|
+
}
|
|
3602
|
+
|
|
3603
|
+
.strand-ref-taxonomy__list dd {
|
|
3604
|
+
margin: 0;
|
|
3605
|
+
font-size: 13px;
|
|
3606
|
+
color: var(--strand-gray-700);
|
|
3607
|
+
line-height: 1.5;
|
|
3608
|
+
}
|
|
3609
|
+
|
|
3610
|
+
.strand-ref-taxonomy__list em {
|
|
3611
|
+
font-style: italic;
|
|
3612
|
+
color: var(--strand-blue-midnight);
|
|
3613
|
+
}
|
|
3614
|
+
|
|
3615
|
+
/* Section: vertical block with hairline bottom. */
|
|
3616
|
+
.strand-ref-section {
|
|
3617
|
+
padding: var(--strand-space-12) 0;
|
|
3618
|
+
border-bottom: 1px solid var(--strand-gray-200);
|
|
3619
|
+
scroll-margin-top: var(--strand-space-4);
|
|
3620
|
+
}
|
|
3621
|
+
|
|
3622
|
+
.strand-ref-section:last-child {
|
|
3623
|
+
border-bottom: 0;
|
|
3624
|
+
}
|
|
3625
|
+
|
|
3626
|
+
.strand-ref-section__head {
|
|
3627
|
+
margin-bottom: var(--strand-space-8);
|
|
3628
|
+
display: flex;
|
|
3629
|
+
align-items: baseline;
|
|
3630
|
+
justify-content: space-between;
|
|
3631
|
+
gap: var(--strand-space-6);
|
|
3632
|
+
flex-wrap: wrap;
|
|
3633
|
+
}
|
|
3634
|
+
|
|
3635
|
+
.strand-ref-section__head h2 {
|
|
3636
|
+
margin: var(--strand-space-2) 0 0;
|
|
3637
|
+
font-weight: var(--strand-weight-light);
|
|
3638
|
+
letter-spacing: var(--strand-tracking-tight);
|
|
3639
|
+
color: var(--strand-blue-midnight);
|
|
3640
|
+
font-size: 28px;
|
|
3641
|
+
}
|
|
3642
|
+
|
|
3643
|
+
.strand-ref-section__head-note {
|
|
3644
|
+
font-family: var(--strand-font-mono);
|
|
3645
|
+
font-size: 10px;
|
|
3646
|
+
letter-spacing: var(--strand-tracking-ultra);
|
|
3647
|
+
text-transform: uppercase;
|
|
3648
|
+
color: var(--strand-gray-500);
|
|
3649
|
+
}
|
|
3650
|
+
|
|
3651
|
+
.strand-ref-section__body {
|
|
3652
|
+
display: flex;
|
|
3653
|
+
flex-direction: column;
|
|
3654
|
+
gap: var(--strand-space-8);
|
|
3655
|
+
}
|
|
3656
|
+
|
|
3657
|
+
/* Example: a single component specimen with meta column + demo panel. */
|
|
3658
|
+
.strand-ref-example {
|
|
3659
|
+
display: grid;
|
|
3660
|
+
grid-template-columns: 200px 1fr;
|
|
3661
|
+
gap: 28px;
|
|
3662
|
+
align-items: start;
|
|
3663
|
+
}
|
|
3664
|
+
|
|
3665
|
+
.strand-ref-example__meta {
|
|
3666
|
+
padding-top: 6px;
|
|
3667
|
+
}
|
|
3668
|
+
|
|
3669
|
+
.strand-ref-example__label {
|
|
3670
|
+
font-family: var(--strand-font-sans);
|
|
3671
|
+
font-size: 13px;
|
|
3672
|
+
font-weight: var(--strand-weight-medium);
|
|
3673
|
+
color: var(--strand-blue-midnight);
|
|
3674
|
+
margin-bottom: 6px;
|
|
3675
|
+
}
|
|
3676
|
+
|
|
3677
|
+
.strand-ref-example__code {
|
|
3678
|
+
font-family: var(--strand-font-mono);
|
|
3679
|
+
font-size: 10px;
|
|
3680
|
+
letter-spacing: 0.04em;
|
|
3681
|
+
color: var(--strand-gray-500);
|
|
3682
|
+
display: block;
|
|
3683
|
+
line-height: 1.5;
|
|
3684
|
+
}
|
|
3685
|
+
|
|
3686
|
+
.strand-ref-example__demo {
|
|
3687
|
+
background: var(--strand-surface-elevated);
|
|
3688
|
+
border: 1px solid var(--strand-gray-200);
|
|
3689
|
+
border-radius: var(--strand-radius-lg);
|
|
3690
|
+
/* 24px 28px: token 24px (space-6) + literal 28px chrome value (no token match) */
|
|
3691
|
+
padding: var(--strand-space-6) 28px;
|
|
3692
|
+
box-shadow: 0 1px 2px rgba(15, 23, 42, 0.03);
|
|
3693
|
+
}
|
|
3694
|
+
|
|
3695
|
+
.strand-ref-example__demo--pad-none {
|
|
3696
|
+
padding: 0;
|
|
3697
|
+
overflow: hidden;
|
|
3698
|
+
}
|
|
3699
|
+
|
|
3700
|
+
.strand-ref-example__demo--recessed {
|
|
3701
|
+
background: var(--strand-surface-recessed);
|
|
3702
|
+
}
|
|
3703
|
+
|
|
3704
|
+
.strand-ref-example__caption {
|
|
3705
|
+
margin-top: var(--strand-space-2);
|
|
3706
|
+
font-size: 12px;
|
|
3707
|
+
line-height: 1.55;
|
|
3708
|
+
color: var(--strand-gray-500);
|
|
3709
|
+
max-width: 560px;
|
|
3710
|
+
}
|
|
3711
|
+
|
|
3712
|
+
/* Mobile-trigger FAB: hidden by default; shown only inside the responsive
|
|
3713
|
+
breakpoint. Floats bottom-right and toggles the mobile drawer. The
|
|
3714
|
+
consumer pairs this with toggling `.is-nav-open` on the shell mount
|
|
3715
|
+
point. The button itself uses standard strand-btn primitives plus
|
|
3716
|
+
this class for FAB positioning. */
|
|
3717
|
+
.strand-ref-mobile-trigger {
|
|
3718
|
+
display: none;
|
|
3719
|
+
}
|
|
3720
|
+
|
|
3721
|
+
.strand-ref-shell__nav-scrim {
|
|
3722
|
+
display: none;
|
|
3723
|
+
}
|
|
3724
|
+
|
|
3725
|
+
/* Responsive: at <=1040px the sidebar becomes a slide-over drawer.
|
|
3726
|
+
Consumer toggles `.is-nav-open` on the shell mount point to open the
|
|
3727
|
+
drawer. The trigger button (.strand-ref-mobile-trigger) sits as a FAB
|
|
3728
|
+
bottom-right, and the scrim (.strand-ref-shell__nav-scrim) closes it
|
|
3729
|
+
on tap. */
|
|
3730
|
+
@media (max-width: 1040px) {
|
|
3731
|
+
.strand-ref-shell {
|
|
3732
|
+
grid-template-columns: 1fr;
|
|
3733
|
+
}
|
|
3734
|
+
|
|
3735
|
+
.strand-ref-shell__sidebar {
|
|
3736
|
+
position: fixed;
|
|
3737
|
+
top: var(--strand-ref-sticky-top, 0);
|
|
3738
|
+
left: 0;
|
|
3739
|
+
right: 0;
|
|
3740
|
+
bottom: 0;
|
|
3741
|
+
height: auto;
|
|
3742
|
+
max-height: none;
|
|
3743
|
+
width: 100%;
|
|
3744
|
+
z-index: 80;
|
|
3745
|
+
background: var(--strand-surface-elevated);
|
|
3746
|
+
box-shadow: var(--strand-elevation-3, 0 8px 28px rgba(15, 23, 42, 0.18));
|
|
3747
|
+
transform: translateX(-100%);
|
|
3748
|
+
transition: transform var(--strand-duration-normal, 200ms)
|
|
3749
|
+
var(--strand-ease-out-quart, ease-out);
|
|
3750
|
+
visibility: hidden;
|
|
3751
|
+
border-right: 0;
|
|
3752
|
+
border-bottom: 0;
|
|
3753
|
+
}
|
|
3754
|
+
|
|
3755
|
+
.strand-ref-shell.is-nav-open .strand-ref-shell__sidebar {
|
|
3756
|
+
transform: translateX(0);
|
|
3757
|
+
visibility: visible;
|
|
3758
|
+
}
|
|
3759
|
+
|
|
3760
|
+
.strand-ref-shell__nav-scrim {
|
|
3761
|
+
position: fixed;
|
|
3762
|
+
top: var(--strand-ref-sticky-top, 0);
|
|
3763
|
+
left: 0;
|
|
3764
|
+
right: 0;
|
|
3765
|
+
bottom: 0;
|
|
3766
|
+
z-index: 75;
|
|
3767
|
+
background: rgba(15, 23, 42, 0.4);
|
|
3768
|
+
}
|
|
3769
|
+
|
|
3770
|
+
.strand-ref-shell.is-nav-open .strand-ref-shell__nav-scrim {
|
|
3771
|
+
display: block;
|
|
3772
|
+
}
|
|
3773
|
+
|
|
3774
|
+
.strand-ref-mobile-trigger {
|
|
3775
|
+
display: inline-flex;
|
|
3776
|
+
position: fixed;
|
|
3777
|
+
bottom: calc(env(safe-area-inset-bottom, 0px) + 16px);
|
|
3778
|
+
right: 16px;
|
|
3779
|
+
z-index: 85;
|
|
3780
|
+
box-shadow: var(--strand-elevation-3, 0 8px 24px rgba(15, 23, 42, 0.2));
|
|
3781
|
+
border-radius: var(--strand-radius-full, 9999px);
|
|
3782
|
+
}
|
|
3783
|
+
|
|
3784
|
+
.strand-ref-shell__main {
|
|
3785
|
+
padding: var(--strand-space-8) var(--strand-space-6) var(--strand-space-16);
|
|
3786
|
+
}
|
|
3787
|
+
|
|
3788
|
+
.strand-ref-example {
|
|
3789
|
+
grid-template-columns: 1fr;
|
|
3790
|
+
}
|
|
3791
|
+
|
|
3792
|
+
.strand-ref-header__meta {
|
|
3793
|
+
grid-template-columns: 1fr 1fr;
|
|
3794
|
+
gap: var(--strand-space-6) var(--strand-space-8);
|
|
3795
|
+
}
|
|
3796
|
+
}
|
|
3797
|
+
|
|
3798
|
+
@media (max-width: 560px) {
|
|
3799
|
+
.strand-ref-header__meta {
|
|
3800
|
+
grid-template-columns: 1fr;
|
|
3801
|
+
gap: 18px;
|
|
3802
|
+
}
|
|
3803
|
+
}
|
|
3804
|
+
|
|
3805
|
+
|
|
3806
|
+
/* LabTip */
|
|
3807
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3808
|
+
|
|
3809
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
3810
|
+
|
|
3811
|
+
/* ══════════════════════════════════════════════════
|
|
3812
|
+
LAB TIP (pure-CSS tooltip specimen)
|
|
3813
|
+
══════════════════════════════════════════════════
|
|
3814
|
+
A hover/focus-driven tooltip for QA specimens on docs
|
|
3815
|
+
pages. This is NOT the production Strand Tooltip (which is
|
|
3816
|
+
JS-driven with collision detection); it is a static
|
|
3817
|
+
specimen showing four fixed positions simultaneously.
|
|
3818
|
+
|
|
3819
|
+
Use the --pinned modifier to show the bubble without
|
|
3820
|
+
hover/focus (useful for before/after screenshots). */
|
|
3821
|
+
|
|
3822
|
+
.strand-ref-tip {
|
|
3823
|
+
position: relative;
|
|
3824
|
+
display: inline-flex;
|
|
3825
|
+
}
|
|
3826
|
+
|
|
3827
|
+
.strand-ref-tip__bubble {
|
|
3828
|
+
position: absolute;
|
|
3829
|
+
z-index: 2;
|
|
3830
|
+
padding: 6px 10px;
|
|
3831
|
+
border-radius: var(--strand-radius-sm);
|
|
3832
|
+
background: var(--strand-blue-midnight);
|
|
3833
|
+
color: var(--strand-on-blue-primary);
|
|
3834
|
+
font-family: var(--strand-font-mono);
|
|
3835
|
+
font-size: 11px;
|
|
3836
|
+
letter-spacing: 0.04em;
|
|
3837
|
+
white-space: nowrap;
|
|
3838
|
+
opacity: 0;
|
|
3839
|
+
pointer-events: none;
|
|
3840
|
+
transition: opacity var(--strand-duration-fast) var(--strand-ease-out-quart),
|
|
3841
|
+
transform var(--strand-duration-fast) var(--strand-ease-out-quart);
|
|
3842
|
+
}
|
|
3843
|
+
|
|
3844
|
+
.strand-ref-tip:hover .strand-ref-tip__bubble,
|
|
3845
|
+
.strand-ref-tip:focus-within .strand-ref-tip__bubble,
|
|
3846
|
+
.strand-ref-tip--pinned .strand-ref-tip__bubble {
|
|
3847
|
+
opacity: 1;
|
|
3848
|
+
}
|
|
2821
3849
|
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
3850
|
+
.strand-ref-tip__bubble--top {
|
|
3851
|
+
left: 50%;
|
|
3852
|
+
bottom: calc(100% + 8px);
|
|
3853
|
+
transform: translateX(-50%) translateY(4px);
|
|
3854
|
+
}
|
|
2825
3855
|
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
3856
|
+
.strand-ref-tip__bubble--bottom {
|
|
3857
|
+
left: 50%;
|
|
3858
|
+
top: calc(100% + 8px);
|
|
3859
|
+
transform: translateX(-50%) translateY(-4px);
|
|
3860
|
+
}
|
|
2829
3861
|
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
3862
|
+
.strand-ref-tip__bubble--left {
|
|
3863
|
+
right: calc(100% + 8px);
|
|
3864
|
+
top: 50%;
|
|
3865
|
+
transform: translateX(4px) translateY(-50%);
|
|
3866
|
+
}
|
|
2833
3867
|
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
3868
|
+
.strand-ref-tip__bubble--right {
|
|
3869
|
+
left: calc(100% + 8px);
|
|
3870
|
+
top: 50%;
|
|
3871
|
+
transform: translateX(-4px) translateY(-50%);
|
|
3872
|
+
}
|
|
2838
3873
|
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
3874
|
+
.strand-ref-tip:hover .strand-ref-tip__bubble--top,
|
|
3875
|
+
.strand-ref-tip--pinned .strand-ref-tip__bubble--top,
|
|
3876
|
+
.strand-ref-tip:focus-within .strand-ref-tip__bubble--top {
|
|
3877
|
+
transform: translateX(-50%) translateY(0);
|
|
2842
3878
|
}
|
|
2843
3879
|
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
still readable, just static. */
|
|
3880
|
+
.strand-ref-tip:hover .strand-ref-tip__bubble--bottom,
|
|
3881
|
+
.strand-ref-tip--pinned .strand-ref-tip__bubble--bottom,
|
|
3882
|
+
.strand-ref-tip:focus-within .strand-ref-tip__bubble--bottom {
|
|
3883
|
+
transform: translateX(-50%) translateY(0);
|
|
3884
|
+
}
|
|
2850
3885
|
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2855
|
-
|
|
3886
|
+
.strand-ref-tip:hover .strand-ref-tip__bubble--left,
|
|
3887
|
+
.strand-ref-tip--pinned .strand-ref-tip__bubble--left,
|
|
3888
|
+
.strand-ref-tip:focus-within .strand-ref-tip__bubble--left {
|
|
3889
|
+
transform: translateX(0) translateY(-50%);
|
|
3890
|
+
}
|
|
2856
3891
|
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
|
|
3892
|
+
.strand-ref-tip:hover .strand-ref-tip__bubble--right,
|
|
3893
|
+
.strand-ref-tip--pinned .strand-ref-tip__bubble--right,
|
|
3894
|
+
.strand-ref-tip:focus-within .strand-ref-tip__bubble--right {
|
|
3895
|
+
transform: translateX(0) translateY(-50%);
|
|
3896
|
+
}
|
|
2860
3897
|
|
|
2861
|
-
|
|
2862
|
-
|
|
3898
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3899
|
+
.strand-ref-tip__bubble {
|
|
3900
|
+
transition: none;
|
|
2863
3901
|
}
|
|
3902
|
+
}
|
|
2864
3903
|
|
|
2865
|
-
.strand-map-pin::before,
|
|
2866
|
-
.strand-map-pin::after {
|
|
2867
|
-
animation: none;
|
|
2868
|
-
}
|
|
2869
3904
|
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
}
|
|
3905
|
+
/* LabUtilCell */
|
|
3906
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
2873
3907
|
|
|
2874
|
-
|
|
2875
|
-
.strand-map-pin:hover::after {
|
|
2876
|
-
animation: none;
|
|
2877
|
-
}
|
|
3908
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
2878
3909
|
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
3910
|
+
/* ══════════════════════════════════════════════════
|
|
3911
|
+
LAB UTIL CELL (utility-class demo tile)
|
|
3912
|
+
══════════════════════════════════════════════════
|
|
3913
|
+
Demo tile that shows a single utility class in action
|
|
3914
|
+
(e.g. .strand-mt-4, .strand-mx-auto). The row container
|
|
3915
|
+
arranges cells horizontally; each cell has a code label
|
|
3916
|
+
+ demo area + optional caption. */
|
|
2882
3917
|
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
.strand-detail-panel.is-open .strand-detail-panel__meta,
|
|
2890
|
-
.strand-detail-panel--open .strand-detail-panel__meta,
|
|
2891
|
-
.strand-detail-panel.open .strand-detail-panel__meta,
|
|
2892
|
-
.strand-detail-panel.is-open .strand-detail-panel__salary,
|
|
2893
|
-
.strand-detail-panel--open .strand-detail-panel__salary,
|
|
2894
|
-
.strand-detail-panel.open .strand-detail-panel__salary,
|
|
2895
|
-
.strand-detail-panel.is-open .strand-detail-panel__cta,
|
|
2896
|
-
.strand-detail-panel--open .strand-detail-panel__cta,
|
|
2897
|
-
.strand-detail-panel.open .strand-detail-panel__cta,
|
|
2898
|
-
.strand-detail-panel.is-open .strand-detail-panel__source,
|
|
2899
|
-
.strand-detail-panel--open .strand-detail-panel__source,
|
|
2900
|
-
.strand-detail-panel.open .strand-detail-panel__source {
|
|
2901
|
-
animation: none;
|
|
2902
|
-
}
|
|
3918
|
+
.strand-ref-util-row {
|
|
3919
|
+
display: flex;
|
|
3920
|
+
align-items: stretch;
|
|
3921
|
+
gap: 18px;
|
|
3922
|
+
flex-wrap: wrap;
|
|
3923
|
+
}
|
|
2903
3924
|
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
3925
|
+
.strand-ref-util-cell {
|
|
3926
|
+
display: flex;
|
|
3927
|
+
flex-direction: column;
|
|
3928
|
+
gap: 10px;
|
|
3929
|
+
/* 14px 16px: specimen chrome literal, no token match for 14px */
|
|
3930
|
+
padding: 14px var(--strand-space-4);
|
|
3931
|
+
background: var(--strand-surface-recessed);
|
|
3932
|
+
border: 1px solid var(--strand-gray-200);
|
|
3933
|
+
border-radius: var(--strand-radius-md);
|
|
3934
|
+
min-width: 180px;
|
|
3935
|
+
flex: 1;
|
|
3936
|
+
}
|
|
2907
3937
|
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
3938
|
+
.strand-ref-util-cell__code {
|
|
3939
|
+
font-family: var(--strand-font-mono);
|
|
3940
|
+
font-size: 10px;
|
|
3941
|
+
letter-spacing: 0.06em;
|
|
3942
|
+
color: var(--strand-blue-primary);
|
|
3943
|
+
font-weight: var(--strand-weight-medium);
|
|
3944
|
+
}
|
|
2911
3945
|
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
3946
|
+
.strand-ref-util-cell__caption {
|
|
3947
|
+
font-family: var(--strand-font-mono);
|
|
3948
|
+
font-size: 10px;
|
|
3949
|
+
letter-spacing: 0.04em;
|
|
3950
|
+
color: var(--strand-gray-500);
|
|
3951
|
+
}
|
|
2916
3952
|
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
3953
|
+
.strand-ref-util-cell__demo {
|
|
3954
|
+
background: var(--strand-surface-elevated);
|
|
3955
|
+
border: 1px dashed var(--strand-gray-300);
|
|
3956
|
+
border-radius: var(--strand-radius-sm);
|
|
3957
|
+
padding: 0;
|
|
3958
|
+
display: flex;
|
|
3959
|
+
flex-direction: column;
|
|
3960
|
+
}
|
|
3961
|
+
|
|
3962
|
+
.strand-ref-util-cell__block {
|
|
3963
|
+
background: var(--strand-blue-midnight);
|
|
3964
|
+
color: var(--strand-on-blue-primary);
|
|
3965
|
+
padding: 6px 10px;
|
|
3966
|
+
font-family: var(--strand-font-mono);
|
|
3967
|
+
font-size: 11px;
|
|
3968
|
+
letter-spacing: 0.04em;
|
|
3969
|
+
display: inline-block;
|
|
3970
|
+
align-self: flex-start;
|
|
2920
3971
|
}
|
|
2921
3972
|
|
|
2922
3973
|
|
|
@@ -4187,6 +5238,53 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
|
|
|
4187
5238
|
}
|
|
4188
5239
|
|
|
4189
5240
|
|
|
5241
|
+
/* Swatch */
|
|
5242
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
5243
|
+
|
|
5244
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
5245
|
+
|
|
5246
|
+
/* ══════════════════════════════════════════════════
|
|
5247
|
+
SWATCH (color specimen for docs surfaces)
|
|
5248
|
+
══════════════════════════════════════════════════
|
|
5249
|
+
A single color tile rendered in a grid of swatches on a
|
|
5250
|
+
design-token documentation page. Background and text colors
|
|
5251
|
+
are applied inline via the consumer (because tone varies per
|
|
5252
|
+
swatch). Base chrome (border, min-height, internal layout)
|
|
5253
|
+
is CSS-driven. Grid container is a sibling primitive. */
|
|
5254
|
+
|
|
5255
|
+
.strand-swatch-grid {
|
|
5256
|
+
display: grid;
|
|
5257
|
+
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
|
|
5258
|
+
gap: 10px;
|
|
5259
|
+
}
|
|
5260
|
+
|
|
5261
|
+
.strand-swatch {
|
|
5262
|
+
display: flex;
|
|
5263
|
+
flex-direction: column;
|
|
5264
|
+
gap: var(--strand-space-1);
|
|
5265
|
+
/* 14px 14px 12px: specimen chrome literal, no token scale match */
|
|
5266
|
+
padding: 14px 14px 12px;
|
|
5267
|
+
border-radius: var(--strand-radius-md);
|
|
5268
|
+
border: 1px solid var(--strand-gray-200);
|
|
5269
|
+
min-height: 92px;
|
|
5270
|
+
}
|
|
5271
|
+
|
|
5272
|
+
.strand-swatch__name {
|
|
5273
|
+
font-family: var(--strand-font-mono);
|
|
5274
|
+
font-size: 10px;
|
|
5275
|
+
letter-spacing: var(--strand-tracking-widest);
|
|
5276
|
+
text-transform: uppercase;
|
|
5277
|
+
font-weight: var(--strand-weight-medium);
|
|
5278
|
+
}
|
|
5279
|
+
|
|
5280
|
+
.strand-swatch__hex {
|
|
5281
|
+
font-family: var(--strand-font-mono);
|
|
5282
|
+
font-size: 11px;
|
|
5283
|
+
opacity: 0.75;
|
|
5284
|
+
margin-top: auto;
|
|
5285
|
+
}
|
|
5286
|
+
|
|
5287
|
+
|
|
4190
5288
|
/* Switch */
|
|
4191
5289
|
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
4192
5290
|
|
|
@@ -4851,6 +5949,67 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
|
|
|
4851
5949
|
}
|
|
4852
5950
|
|
|
4853
5951
|
|
|
5952
|
+
/* TokenSpecimen */
|
|
5953
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
5954
|
+
|
|
5955
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
5956
|
+
|
|
5957
|
+
/* ══════════════════════════════════════════════════
|
|
5958
|
+
TOKEN SPECIMEN (spacing / radius / shadow tiles)
|
|
5959
|
+
══════════════════════════════════════════════════
|
|
5960
|
+
Each specimen pairs a visual (spacer bar, radius box, or
|
|
5961
|
+
shadow tile) with a mono label and value. Visuals set their
|
|
5962
|
+
pixel dimensions and shadow/radius inline (per-token variance
|
|
5963
|
+
is the whole point of the spec). */
|
|
5964
|
+
|
|
5965
|
+
.strand-token-specimen-grid {
|
|
5966
|
+
display: grid;
|
|
5967
|
+
grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));
|
|
5968
|
+
gap: var(--strand-space-5);
|
|
5969
|
+
}
|
|
5970
|
+
|
|
5971
|
+
.strand-token-specimen {
|
|
5972
|
+
display: flex;
|
|
5973
|
+
flex-direction: column;
|
|
5974
|
+
gap: 10px;
|
|
5975
|
+
align-items: flex-start;
|
|
5976
|
+
font-family: var(--strand-font-mono);
|
|
5977
|
+
font-size: 10px;
|
|
5978
|
+
letter-spacing: 0.04em;
|
|
5979
|
+
color: var(--strand-gray-500);
|
|
5980
|
+
line-height: 1.5;
|
|
5981
|
+
}
|
|
5982
|
+
|
|
5983
|
+
.strand-token-specimen b {
|
|
5984
|
+
display: block;
|
|
5985
|
+
font-weight: var(--strand-weight-medium);
|
|
5986
|
+
color: var(--strand-blue-midnight);
|
|
5987
|
+
letter-spacing: 0.06em;
|
|
5988
|
+
text-transform: uppercase;
|
|
5989
|
+
font-size: 10px;
|
|
5990
|
+
}
|
|
5991
|
+
|
|
5992
|
+
.strand-token-specimen > span {
|
|
5993
|
+
display: block;
|
|
5994
|
+
line-height: 1.5;
|
|
5995
|
+
}
|
|
5996
|
+
|
|
5997
|
+
.strand-token-specimen__spacer {
|
|
5998
|
+
display: block;
|
|
5999
|
+
height: 16px;
|
|
6000
|
+
background: var(--strand-blue-primary);
|
|
6001
|
+
border-radius: var(--strand-radius-sm);
|
|
6002
|
+
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.15);
|
|
6003
|
+
}
|
|
6004
|
+
|
|
6005
|
+
.strand-token-specimen__box {
|
|
6006
|
+
width: 64px;
|
|
6007
|
+
height: 64px;
|
|
6008
|
+
background: var(--strand-surface-elevated);
|
|
6009
|
+
border: 1px solid var(--strand-gray-200);
|
|
6010
|
+
}
|
|
6011
|
+
|
|
6012
|
+
|
|
4854
6013
|
/* Tooltip */
|
|
4855
6014
|
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
4856
6015
|
|
|
@@ -4929,6 +6088,46 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
|
|
|
4929
6088
|
}
|
|
4930
6089
|
|
|
4931
6090
|
|
|
6091
|
+
/* TypeSpecimen */
|
|
6092
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
6093
|
+
|
|
6094
|
+
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
6095
|
+
|
|
6096
|
+
/* ══════════════════════════════════════════════════
|
|
6097
|
+
TYPE SPECIMEN (docs-site typography tile)
|
|
6098
|
+
══════════════════════════════════════════════════
|
|
6099
|
+
A stacked specimen: large display text on top, mono meta
|
|
6100
|
+
line below. Use inside a section body on a typography
|
|
6101
|
+
documentation page. Dashed divider between siblings. */
|
|
6102
|
+
|
|
6103
|
+
.strand-type-specimen {
|
|
6104
|
+
display: grid;
|
|
6105
|
+
grid-template-columns: 1fr;
|
|
6106
|
+
gap: var(--strand-space-3);
|
|
6107
|
+
padding: var(--strand-space-5) 0;
|
|
6108
|
+
border-top: 1px dashed var(--strand-gray-200);
|
|
6109
|
+
}
|
|
6110
|
+
|
|
6111
|
+
.strand-type-specimen:first-child {
|
|
6112
|
+
border-top: 0;
|
|
6113
|
+
padding-top: 0;
|
|
6114
|
+
}
|
|
6115
|
+
|
|
6116
|
+
.strand-type-specimen__meta {
|
|
6117
|
+
display: block;
|
|
6118
|
+
font-family: var(--strand-font-mono);
|
|
6119
|
+
font-size: 10px;
|
|
6120
|
+
letter-spacing: 0.06em;
|
|
6121
|
+
color: var(--strand-gray-500);
|
|
6122
|
+
line-height: 1.5;
|
|
6123
|
+
}
|
|
6124
|
+
|
|
6125
|
+
.strand-type-specimen__meta b {
|
|
6126
|
+
color: var(--strand-blue-primary);
|
|
6127
|
+
font-weight: var(--strand-weight-medium);
|
|
6128
|
+
}
|
|
6129
|
+
|
|
6130
|
+
|
|
4932
6131
|
/* Static & Utilities */
|
|
4933
6132
|
/*! Strand UI | MIT License | dillingerstaffing.com */
|
|
4934
6133
|
|
|
@@ -5237,6 +6436,37 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
|
|
|
5237
6436
|
color: var(--strand-teal-vital);
|
|
5238
6437
|
}
|
|
5239
6438
|
|
|
6439
|
+
/* ── Key-Value Row: editorial modifier ──
|
|
6440
|
+
Additive modifier on .strand-kv for card-metadata contexts
|
|
6441
|
+
(composed cards, editorial specimens) where values should
|
|
6442
|
+
read as soft sans-serif Blue-midnight rather than the default
|
|
6443
|
+
mono-gray instrument readout. Dashed divider between rows.
|
|
6444
|
+
Use inside .strand-card__section content blocks. The base
|
|
6445
|
+
.strand-kv default stays mono-tabular for instrument surfaces. */
|
|
6446
|
+
.strand-kv--editorial {
|
|
6447
|
+
padding: 6px 0;
|
|
6448
|
+
font-size: var(--strand-text-sm);
|
|
6449
|
+
line-height: 1.4;
|
|
6450
|
+
}
|
|
6451
|
+
|
|
6452
|
+
.strand-kv--editorial + .strand-kv--editorial {
|
|
6453
|
+
border-top: 1px dashed var(--strand-gray-200);
|
|
6454
|
+
}
|
|
6455
|
+
|
|
6456
|
+
.strand-kv--editorial .strand-kv__label {
|
|
6457
|
+
letter-spacing: var(--strand-tracking-ultra);
|
|
6458
|
+
flex: none;
|
|
6459
|
+
white-space: nowrap;
|
|
6460
|
+
}
|
|
6461
|
+
|
|
6462
|
+
.strand-kv--editorial .strand-kv__value {
|
|
6463
|
+
font-family: var(--strand-font-sans);
|
|
6464
|
+
font-size: var(--strand-text-sm);
|
|
6465
|
+
color: var(--strand-blue-midnight);
|
|
6466
|
+
font-weight: var(--strand-weight-medium);
|
|
6467
|
+
font-variant-numeric: normal;
|
|
6468
|
+
}
|
|
6469
|
+
|
|
5240
6470
|
/* ── Diagnostic Log Entry ──
|
|
5241
6471
|
Derivation: inline-sequence + ranked-sequence (DL 11.10).
|
|
5242
6472
|
time(OVERLINE) + status(OVERLINE+COLOR_SEMANTIC) + text(SECONDARY) + RANK_BORDER */
|