@livenetworks/ashlar 2.1.13 → 2.2.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/assets/brand/android-chrome-192x192.png +0 -0
- package/assets/brand/android-chrome-512x512.png +0 -0
- package/assets/brand/apple-touch-icon.png +0 -0
- package/assets/brand/favicon-16x16.png +0 -0
- package/assets/brand/favicon-32x32.png +0 -0
- package/assets/brand/favicon-48x48.png +0 -0
- package/assets/brand/favicon-dark-128x128.png +0 -0
- package/assets/brand/favicon-dark-16x16.png +0 -0
- package/assets/brand/favicon-dark-180x180.png +0 -0
- package/assets/brand/favicon-dark-192x192.png +0 -0
- package/assets/brand/favicon-dark-256x256.png +0 -0
- package/assets/brand/favicon-dark-32x32.png +0 -0
- package/assets/brand/favicon-dark-48x48.png +0 -0
- package/assets/brand/favicon-dark-512x512.png +0 -0
- package/assets/brand/favicon-dark-64x64.png +0 -0
- package/assets/brand/favicon-dark.ico +0 -0
- package/assets/brand/favicon-dark.png +0 -0
- package/assets/brand/favicon-light-128x128.png +0 -0
- package/assets/brand/favicon-light-16x16.png +0 -0
- package/assets/brand/favicon-light-180x180.png +0 -0
- package/assets/brand/favicon-light-192x192.png +0 -0
- package/assets/brand/favicon-light-256x256.png +0 -0
- package/assets/brand/favicon-light-32x32.png +0 -0
- package/assets/brand/favicon-light-48x48.png +0 -0
- package/assets/brand/favicon-light-512x512.png +0 -0
- package/assets/brand/favicon-light-64x64.png +0 -0
- package/assets/brand/favicon-light.ico +0 -0
- package/assets/brand/favicon-light.png +0 -0
- package/assets/brand/favicon.ico +0 -0
- package/assets/brand/favicon.png +0 -0
- package/assets/brand/favicon.svg +12 -0
- package/assets/brand/ln-ashlar-emblem-dark-128.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark-16.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark-256.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark-32.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark-64.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-128.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-16.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-256.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-32.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-64.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light.png +0 -0
- package/assets/brand/ln-ashlar-logo-dark-128.png +0 -0
- package/assets/brand/ln-ashlar-logo-dark-256.png +0 -0
- package/assets/brand/ln-ashlar-logo-dark-512.png +0 -0
- package/assets/brand/ln-ashlar-logo-dark.png +0 -0
- package/assets/brand/ln-ashlar-logo-light-128.png +0 -0
- package/assets/brand/ln-ashlar-logo-light-256.png +0 -0
- package/assets/brand/ln-ashlar-logo-light-512.png +0 -0
- package/assets/brand/ln-ashlar-logo-light.png +0 -0
- package/assets/brand/site.webmanifest +41 -0
- package/assets/brand/source/ln-ashlar-icon-dark-1024.png +0 -0
- package/assets/brand/source/ln-ashlar-icon-dark-uncropped-1024.png +0 -0
- package/assets/brand/source/ln-ashlar-icon-light-1024.png +0 -0
- package/assets/brand/source/ln-ashlar-icon-light-uncropped-1024.png +0 -0
- package/assets/flags/ad.svg +150 -0
- package/assets/flags/ae.svg +6 -0
- package/assets/flags/af.svg +81 -0
- package/assets/flags/ag.svg +14 -0
- package/assets/flags/ai.svg +29 -0
- package/assets/flags/al.svg +5 -0
- package/assets/flags/am.svg +5 -0
- package/assets/flags/ao.svg +13 -0
- package/assets/flags/aq.svg +5 -0
- package/assets/flags/ar.svg +32 -0
- package/assets/flags/arab.svg +109 -0
- package/assets/flags/as.svg +72 -0
- package/assets/flags/asean.svg +13 -0
- package/assets/flags/at.svg +4 -0
- package/assets/flags/au.svg +8 -0
- package/assets/flags/aw.svg +186 -0
- package/assets/flags/ax.svg +18 -0
- package/assets/flags/az.svg +8 -0
- package/assets/flags/ba.svg +12 -0
- package/assets/flags/bb.svg +6 -0
- package/assets/flags/bd.svg +4 -0
- package/assets/flags/be.svg +7 -0
- package/assets/flags/bf.svg +7 -0
- package/assets/flags/bg.svg +5 -0
- package/assets/flags/bh.svg +4 -0
- package/assets/flags/bi.svg +15 -0
- package/assets/flags/bj.svg +14 -0
- package/assets/flags/bl.svg +5 -0
- package/assets/flags/bm.svg +97 -0
- package/assets/flags/bn.svg +36 -0
- package/assets/flags/bo.svg +673 -0
- package/assets/flags/bq.svg +5 -0
- package/assets/flags/br.svg +45 -0
- package/assets/flags/bs.svg +13 -0
- package/assets/flags/bt.svg +89 -0
- package/assets/flags/bv.svg +13 -0
- package/assets/flags/bw.svg +7 -0
- package/assets/flags/by.svg +18 -0
- package/assets/flags/bz.svg +145 -0
- package/assets/flags/ca.svg +4 -0
- package/assets/flags/cc.svg +19 -0
- package/assets/flags/cd.svg +5 -0
- package/assets/flags/cefta.svg +13 -0
- package/assets/flags/cf.svg +15 -0
- package/assets/flags/cg.svg +12 -0
- package/assets/flags/ch.svg +9 -0
- package/assets/flags/ci.svg +7 -0
- package/assets/flags/ck.svg +9 -0
- package/assets/flags/cl.svg +13 -0
- package/assets/flags/cm.svg +15 -0
- package/assets/flags/cn.svg +11 -0
- package/assets/flags/co.svg +7 -0
- package/assets/flags/cp.svg +7 -0
- package/assets/flags/cr.svg +7 -0
- package/assets/flags/cu.svg +13 -0
- package/assets/flags/cv.svg +13 -0
- package/assets/flags/cw.svg +14 -0
- package/assets/flags/cx.svg +15 -0
- package/assets/flags/cy.svg +6 -0
- package/assets/flags/cz.svg +5 -0
- package/assets/flags/de.svg +5 -0
- package/assets/flags/dg.svg +130 -0
- package/assets/flags/dj.svg +13 -0
- package/assets/flags/dk.svg +5 -0
- package/assets/flags/dm.svg +152 -0
- package/assets/flags/do.svg +121 -0
- package/assets/flags/dz.svg +5 -0
- package/assets/flags/eac.svg +48 -0
- package/assets/flags/ec.svg +138 -0
- package/assets/flags/ee.svg +5 -0
- package/assets/flags/eg.svg +38 -0
- package/assets/flags/eh.svg +16 -0
- package/assets/flags/er.svg +8 -0
- package/assets/flags/es-ct.svg +4 -0
- package/assets/flags/es-ga.svg +187 -0
- package/assets/flags/es-pv.svg +5 -0
- package/assets/flags/es.svg +544 -0
- package/assets/flags/et.svg +14 -0
- package/assets/flags/eu.svg +28 -0
- package/assets/flags/fi.svg +5 -0
- package/assets/flags/fj.svg +120 -0
- package/assets/flags/fk.svg +90 -0
- package/assets/flags/fm.svg +11 -0
- package/assets/flags/fo.svg +12 -0
- package/assets/flags/fr.svg +5 -0
- package/assets/flags/ga.svg +7 -0
- package/assets/flags/gb-eng.svg +5 -0
- package/assets/flags/gb-nir.svg +132 -0
- package/assets/flags/gb-sct.svg +4 -0
- package/assets/flags/gb-wls.svg +9 -0
- package/assets/flags/gb.svg +7 -0
- package/assets/flags/gd.svg +27 -0
- package/assets/flags/ge.svg +6 -0
- package/assets/flags/gf.svg +5 -0
- package/assets/flags/gg.svg +9 -0
- package/assets/flags/gh.svg +6 -0
- package/assets/flags/gi.svg +32 -0
- package/assets/flags/gl.svg +4 -0
- package/assets/flags/gm.svg +14 -0
- package/assets/flags/gn.svg +7 -0
- package/assets/flags/gp.svg +5 -0
- package/assets/flags/gq.svg +23 -0
- package/assets/flags/gr.svg +16 -0
- package/assets/flags/gs.svg +133 -0
- package/assets/flags/gt.svg +204 -0
- package/assets/flags/gu.svg +19 -0
- package/assets/flags/gw.svg +13 -0
- package/assets/flags/gy.svg +9 -0
- package/assets/flags/hk.svg +8 -0
- package/assets/flags/hm.svg +8 -0
- package/assets/flags/hn.svg +18 -0
- package/assets/flags/hr.svg +58 -0
- package/assets/flags/ht.svg +116 -0
- package/assets/flags/hu.svg +7 -0
- package/assets/flags/ic.svg +7 -0
- package/assets/flags/id.svg +4 -0
- package/assets/flags/ie.svg +7 -0
- package/assets/flags/il.svg +14 -0
- package/assets/flags/im.svg +36 -0
- package/assets/flags/in.svg +25 -0
- package/assets/flags/io.svg +130 -0
- package/assets/flags/iq.svg +10 -0
- package/assets/flags/ir.svg +219 -0
- package/assets/flags/is.svg +12 -0
- package/assets/flags/it.svg +7 -0
- package/assets/flags/je.svg +62 -0
- package/assets/flags/jm.svg +8 -0
- package/assets/flags/jo.svg +16 -0
- package/assets/flags/jp.svg +11 -0
- package/assets/flags/ke.svg +23 -0
- package/assets/flags/kg.svg +4 -0
- package/assets/flags/kh.svg +61 -0
- package/assets/flags/ki.svg +36 -0
- package/assets/flags/km.svg +16 -0
- package/assets/flags/kn.svg +14 -0
- package/assets/flags/kp.svg +15 -0
- package/assets/flags/kr.svg +24 -0
- package/assets/flags/kw.svg +13 -0
- package/assets/flags/ky.svg +103 -0
- package/assets/flags/kz.svg +36 -0
- package/assets/flags/la.svg +12 -0
- package/assets/flags/lb.svg +15 -0
- package/assets/flags/lc.svg +8 -0
- package/assets/flags/li.svg +43 -0
- package/assets/flags/lk.svg +22 -0
- package/assets/flags/lr.svg +14 -0
- package/assets/flags/ls.svg +8 -0
- package/assets/flags/lt.svg +7 -0
- package/assets/flags/lu.svg +5 -0
- package/assets/flags/lv.svg +6 -0
- package/assets/flags/ly.svg +13 -0
- package/assets/flags/ma.svg +4 -0
- package/assets/flags/mc.svg +6 -0
- package/assets/flags/md.svg +70 -0
- package/assets/flags/me.svg +116 -0
- package/assets/flags/mf.svg +5 -0
- package/assets/flags/mg.svg +7 -0
- package/assets/flags/mh.svg +7 -0
- package/assets/flags/mk.svg +5 -0
- package/assets/flags/ml.svg +7 -0
- package/assets/flags/mm.svg +12 -0
- package/assets/flags/mn.svg +14 -0
- package/assets/flags/mo.svg +9 -0
- package/assets/flags/mp.svg +86 -0
- package/assets/flags/mq.svg +5 -0
- package/assets/flags/mr.svg +6 -0
- package/assets/flags/ms.svg +29 -0
- package/assets/flags/mt.svg +58 -0
- package/assets/flags/mu.svg +8 -0
- package/assets/flags/mv.svg +6 -0
- package/assets/flags/mw.svg +10 -0
- package/assets/flags/mx.svg +382 -0
- package/assets/flags/my.svg +26 -0
- package/assets/flags/mz.svg +21 -0
- package/assets/flags/na.svg +16 -0
- package/assets/flags/nc.svg +13 -0
- package/assets/flags/ne.svg +6 -0
- package/assets/flags/nf.svg +9 -0
- package/assets/flags/ng.svg +6 -0
- package/assets/flags/ni.svg +129 -0
- package/assets/flags/nl.svg +5 -0
- package/assets/flags/no.svg +7 -0
- package/assets/flags/np.svg +13 -0
- package/assets/flags/nr.svg +12 -0
- package/assets/flags/nu.svg +10 -0
- package/assets/flags/nz.svg +36 -0
- package/assets/flags/om.svg +115 -0
- package/assets/flags/pa.svg +14 -0
- package/assets/flags/pc.svg +33 -0
- package/assets/flags/pe.svg +4 -0
- package/assets/flags/pf.svg +19 -0
- package/assets/flags/pg.svg +9 -0
- package/assets/flags/ph.svg +6 -0
- package/assets/flags/pk.svg +15 -0
- package/assets/flags/pl.svg +6 -0
- package/assets/flags/pm.svg +5 -0
- package/assets/flags/pn.svg +53 -0
- package/assets/flags/pr.svg +13 -0
- package/assets/flags/ps.svg +6 -0
- package/assets/flags/pt.svg +57 -0
- package/assets/flags/pw.svg +11 -0
- package/assets/flags/py.svg +157 -0
- package/assets/flags/qa.svg +4 -0
- package/assets/flags/re.svg +5 -0
- package/assets/flags/ro.svg +7 -0
- package/assets/flags/rs.svg +292 -0
- package/assets/flags/ru.svg +5 -0
- package/assets/flags/rw.svg +13 -0
- package/assets/flags/sa.svg +25 -0
- package/assets/flags/sb.svg +13 -0
- package/assets/flags/sc.svg +7 -0
- package/assets/flags/sd.svg +13 -0
- package/assets/flags/se.svg +4 -0
- package/assets/flags/sg.svg +13 -0
- package/assets/flags/sh-ac.svg +689 -0
- package/assets/flags/sh-hl.svg +164 -0
- package/assets/flags/sh-ta.svg +76 -0
- package/assets/flags/sh.svg +7 -0
- package/assets/flags/si.svg +18 -0
- package/assets/flags/sj.svg +7 -0
- package/assets/flags/sk.svg +9 -0
- package/assets/flags/sl.svg +7 -0
- package/assets/flags/sm.svg +75 -0
- package/assets/flags/sn.svg +8 -0
- package/assets/flags/so.svg +11 -0
- package/assets/flags/sr.svg +6 -0
- package/assets/flags/ss.svg +8 -0
- package/assets/flags/st.svg +16 -0
- package/assets/flags/sv.svg +593 -0
- package/assets/flags/sx.svg +56 -0
- package/assets/flags/sy.svg +6 -0
- package/assets/flags/sz.svg +34 -0
- package/assets/flags/tc.svg +50 -0
- package/assets/flags/td.svg +7 -0
- package/assets/flags/tf.svg +15 -0
- package/assets/flags/tg.svg +14 -0
- package/assets/flags/th.svg +7 -0
- package/assets/flags/tj.svg +22 -0
- package/assets/flags/tk.svg +5 -0
- package/assets/flags/tl.svg +13 -0
- package/assets/flags/tm.svg +204 -0
- package/assets/flags/tn.svg +4 -0
- package/assets/flags/to.svg +10 -0
- package/assets/flags/tr.svg +8 -0
- package/assets/flags/tt.svg +5 -0
- package/assets/flags/tv.svg +9 -0
- package/assets/flags/tw.svg +34 -0
- package/assets/flags/tz.svg +13 -0
- package/assets/flags/ua.svg +6 -0
- package/assets/flags/ug.svg +30 -0
- package/assets/flags/um.svg +9 -0
- package/assets/flags/un.svg +16 -0
- package/assets/flags/us.svg +9 -0
- package/assets/flags/uy.svg +28 -0
- package/assets/flags/uz.svg +30 -0
- package/assets/flags/va.svg +190 -0
- package/assets/flags/vc.svg +8 -0
- package/assets/flags/ve.svg +26 -0
- package/assets/flags/vg.svg +59 -0
- package/assets/flags/vi.svg +28 -0
- package/assets/flags/vn.svg +11 -0
- package/assets/flags/vu.svg +21 -0
- package/assets/flags/wf.svg +5 -0
- package/assets/flags/ws.svg +7 -0
- package/assets/flags/xk.svg +5 -0
- package/assets/flags/xx.svg +4 -0
- package/assets/flags/ye.svg +7 -0
- package/assets/flags/yt.svg +5 -0
- package/assets/flags/za.svg +17 -0
- package/assets/flags/zm.svg +27 -0
- package/assets/flags/zw.svg +21 -0
- package/components/COMPONENTS.md +80 -80
- package/components/ln-api-connector/ln-api-connector.schema.json +105 -105
- package/components/ln-chart/ln-chart-dev.scss +0 -4
- package/components/ln-core/README.md +21 -21
- package/components/ln-core/ln-core.schema.json +120 -120
- package/components/ln-core/query.js +113 -113
- package/components/ln-data-coordinator/README.md +2 -0
- package/components/ln-data-coordinator/ln-data-coordinator.js +1 -1
- package/components/ln-data-coordinator/ln-data-coordinator.schema.json +196 -196
- package/components/ln-data-coordinator/src/ln-data-coordinator.js +457 -432
- package/components/ln-data-store/ln-data-store.schema.json +92 -92
- package/components/ln-date/ln-date.js +1 -1
- package/components/ln-date/src/ln-date.js +1 -1
- package/components/ln-debug/ln-debug.js +1 -1
- package/components/ln-debug/ln-debug.schema.json +28 -28
- package/components/ln-debug/src/generated-attributes.js +4 -0
- package/components/ln-dropdown/ln-dropdown.schema.json +90 -90
- package/components/ln-external-links/README.md +19 -19
- package/components/ln-external-links/ln-external-links.js +1 -1
- package/components/ln-external-links/ln-external-links.schema.json +9 -0
- package/components/ln-external-links/ln-external-links.scss +12 -0
- package/components/ln-external-links/src/ln-external-links.js +3 -2
- package/components/ln-filter/README.md +2 -1
- package/components/ln-filter/ln-filter.js +1 -1
- package/components/ln-filter/ln-filter.schema.json +157 -169
- package/components/ln-filter/src/ln-filter.js +1 -3
- package/components/ln-form/ln-form.schema.json +57 -57
- package/components/ln-key/ln-key.js +1 -1
- package/components/ln-key/ln-key.schema.json +8 -0
- package/components/ln-key/src/ln-key.js +8 -5
- package/components/ln-obfuscator/ln-obfuscator.js +1 -1
- package/components/ln-obfuscator/ln-obfuscator.schema.json +6 -0
- package/components/ln-obfuscator/src/ln-obfuscator.js +2 -2
- package/components/ln-options/ln-options.schema.json +47 -47
- package/components/ln-popover/ln-popover.schema.json +82 -82
- package/components/ln-progress/ln-progress.schema.json +0 -13
- package/components/ln-search/ln-search.schema.json +111 -111
- package/components/ln-sort/README.md +1 -0
- package/components/ln-sort/ln-sort.js +1 -1
- package/components/ln-sort/ln-sort.schema.json +100 -112
- package/components/ln-sort/src/sort-model.js +1 -6
- package/components/ln-sortable/ln-sortable.schema.json +38 -38
- package/components/ln-sortable/ln-sortable.scss +25 -25
- package/components/ln-table/README.md +8 -1
- package/components/ln-table/ln-table.js +1 -1
- package/components/ln-table/ln-table.schema.json +195 -195
- package/components/ln-table/src/ln-table.js +43 -7
- package/components/ln-table-coordinator/ln-table-coordinator.js +1 -1
- package/components/ln-table-coordinator/ln-table-coordinator.schema.json +18 -0
- package/components/ln-table-coordinator/src/ln-table-coordinator.js +104 -2
- package/components/ln-toast/README.md +1 -1
- package/components/ln-toast/ln-toast.js +1 -1
- package/components/ln-toast/ln-toast.schema.json +6 -0
- package/components/ln-toast/src/ln-toast.js +1 -1
- package/components/ln-translations/README.md +202 -120
- package/components/ln-translations/ln-translations.js +1 -1
- package/components/ln-translations/ln-translations.schema.json +136 -120
- package/components/ln-translations/src/ln-translations.js +354 -295
- package/components/ln-translations/src/translations-model.js +221 -0
- package/components/ln-validate/README.md +6 -6
- package/components/ln-validate/ln-validate-dev.scss +0 -5
- package/components/ln-validate/ln-validate.js +1 -1
- package/components/ln-validate/ln-validate.schema.json +0 -6
- package/components/ln-validate/src/ln-validate.js +48 -29
- package/ln-ashlar.html-data.json +26 -8
- package/package.json +3 -2
- package/theme/README.md +7 -6
- package/theme/base/_global.scss +2 -2
- package/theme/base/_reset.scss +11 -0
- package/theme/components/_app-shell.scss +0 -8
- package/theme/components/_form.scss +6 -6
- package/theme/components/_ln-table.scss +6 -3
- package/theme/components/_scrollbar.scss +5 -4
- package/theme/components/_sortable.scss +19 -19
- package/theme/components/_stat-card.scss +1 -0
- package/theme/components/_table.scss +10 -33
- package/theme/components/_translations.scss +118 -111
- package/theme/config/_density.scss +236 -104
- package/theme/config/_palette.scss +71 -49
- package/theme/config/_theme.scss +27 -31
- package/theme/config/_tokens.scss +28 -26
- package/theme/config/mixins/_app-shell.scss +31 -21
- package/theme/config/mixins/_btn.scss +4 -2
- package/theme/config/mixins/_card.scss +87 -67
- package/theme/config/mixins/_colors.scss +2 -1
- package/theme/config/mixins/_count.scss +48 -0
- package/theme/config/mixins/_display.scss +12 -0
- package/theme/config/mixins/_footer.scss +3 -1
- package/theme/config/mixins/_form.scss +48 -16
- package/theme/config/mixins/_index.scss +1 -0
- package/theme/config/mixins/_layout.scss +9 -0
- package/theme/config/mixins/_ln-table.scss +22 -15
- package/theme/config/mixins/_modal.scss +3 -0
- package/theme/config/mixins/_nav.scss +19 -4
- package/theme/config/mixins/_sidebar.scss +2 -1
- package/theme/config/mixins/_stat-card.scss +33 -2
- package/theme/config/mixins/_status-badge.scss +1 -0
- package/theme/config/mixins/_table.scss +81 -39
- package/theme/config/mixins/_tabs.scss +31 -0
- package/theme/config/mixins/_toast.scss +0 -1
- package/theme/config/mixins/_translations.scss +126 -124
- package/theme/designs/relaxed/_card.scss +12 -0
- package/theme/designs/relaxed/_layout.scss +24 -0
- package/theme/ln-ashlar-core.scss +1 -0
- package/theme/ln-ashlar-dev.scss +0 -1
- package/theme/ln-ashlar-relaxed.scss +67 -0
- package/theme/tailwind/components.css +561 -24
- package/theme/utilities/_utilities.scss +1 -11
- package/web-types.json +38 -10
- package/components/ln-progress/ln-progress-dev.scss +0 -8
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
@use 'mixins/breakpoints' as *;
|
|
2
|
-
|
|
3
1
|
// ==========================================================================
|
|
4
2
|
// Design Tokens — ln-ashlar
|
|
5
3
|
// ==========================================================================
|
|
@@ -53,23 +51,24 @@
|
|
|
53
51
|
--max-w-form: 32rem;
|
|
54
52
|
--max-w-content: 48rem;
|
|
55
53
|
--max-w-container: 80rem;
|
|
54
|
+
--grid-item-min-width: 14rem; // intrinsic minimum for auto-fit card grids
|
|
56
55
|
|
|
57
56
|
// -----------------------------------------------------------------------
|
|
58
57
|
// Border Radius
|
|
59
58
|
// -----------------------------------------------------------------------
|
|
60
59
|
--radius-none: 0;
|
|
61
|
-
--radius-xs: 0.
|
|
62
|
-
--radius-sm: 0.
|
|
63
|
-
--radius-md: 0.
|
|
64
|
-
--radius-lg:
|
|
65
|
-
--radius-xl:
|
|
66
|
-
--radius-2xl:
|
|
60
|
+
--radius-xs: 0.25rem; // 4px
|
|
61
|
+
--radius-sm: 0.375rem; // 6px
|
|
62
|
+
--radius-md: 0.625rem; // 10px — controls (--radius)
|
|
63
|
+
--radius-lg: 1rem; // 16px — panels, modals
|
|
64
|
+
--radius-xl: 1.375rem; // 22px
|
|
65
|
+
--radius-2xl: 1.75rem; // 28px
|
|
67
66
|
--radius-full: 9999px;
|
|
68
67
|
|
|
69
68
|
// -----------------------------------------------------------------------
|
|
70
69
|
// Transitions — durations
|
|
71
70
|
// -----------------------------------------------------------------------
|
|
72
|
-
--transition-base: 0.
|
|
71
|
+
--transition-base: 0.25s cubic-bezier(0.4, 0, 0.2, 1);
|
|
73
72
|
--transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
|
|
74
73
|
--transition-slow: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
75
74
|
|
|
@@ -85,7 +84,9 @@
|
|
|
85
84
|
// -----------------------------------------------------------------------
|
|
86
85
|
// Typography
|
|
87
86
|
// -----------------------------------------------------------------------
|
|
88
|
-
|
|
87
|
+
// Plus Jakarta Sans is not bundled — the page loads it, or the stack
|
|
88
|
+
// falls back to Inter / system UI.
|
|
89
|
+
--font-sans: 'Plus Jakarta Sans', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
89
90
|
--font-mono: 'JetBrains Mono', ui-monospace, 'Cascadia Code', 'Source Code Pro', monospace;
|
|
90
91
|
--font-features: "cv02", "cv03", "cv04", "cv11", "tnum";
|
|
91
92
|
|
|
@@ -214,6 +215,21 @@
|
|
|
214
215
|
--btn-padding-x: var(--size-sm-up);
|
|
215
216
|
--btn-padding-y: var(--size-xs-up);
|
|
216
217
|
|
|
218
|
+
// Control size contract — buttons, text inputs, selects and pills share
|
|
219
|
+
// one line box and one vertical padding per density tier:
|
|
220
|
+
// height = --control-line-height + 2 × padding-y + 2 × border
|
|
221
|
+
// compact 22 + 2×6 + 2 = 36px · comfortable 44px · spacious 54px
|
|
222
|
+
// Density rebinds all three in _density.scss.
|
|
223
|
+
--control-line-height: 1.375rem; // 22px
|
|
224
|
+
--input-padding-y: var(--btn-padding-y);
|
|
225
|
+
|
|
226
|
+
// Card and table padding — structural rhythm, density-reactive via
|
|
227
|
+
// _density.scss (compact values here).
|
|
228
|
+
--card-padding-y: var(--size-sm-up); // 12px
|
|
229
|
+
--card-padding-x: var(--size-md); // 16px
|
|
230
|
+
--table-cell-padding-y: var(--size-sm); // 8px
|
|
231
|
+
--table-cell-padding-x: var(--size-md); // 16px
|
|
232
|
+
|
|
217
233
|
// -- Typography — primitives -----------------------------------------
|
|
218
234
|
// Mixins read these two primitives ONLY (via @include typography(role),
|
|
219
235
|
// which rebinds them per role on the consuming element's scope — mirror
|
|
@@ -267,19 +283,5 @@
|
|
|
267
283
|
// spacing — that is --gap.
|
|
268
284
|
}
|
|
269
285
|
|
|
270
|
-
//
|
|
271
|
-
//
|
|
272
|
-
// Not the same as `[data-density]` (that's a user opt-in).
|
|
273
|
-
// This is viewport-driven structural compression: content dominates chrome
|
|
274
|
-
// at narrow widths. Components reading --padding-x/--padding-y/--gap
|
|
275
|
-
// react via the cascade.
|
|
276
|
-
//
|
|
277
|
-
// Interaction with [data-density]: stacks. Compact density + mobile viewport =
|
|
278
|
-
// both apply; the underlying --padding-y tightens further from the mobile rebind.
|
|
279
|
-
// ---------------------------------------------------------------------------
|
|
280
|
-
@include mq-down(md) {
|
|
281
|
-
:root {
|
|
282
|
-
--padding-y: var(--size-xs); // 6px → 4px
|
|
283
|
-
--gap: var(--size-xs-up); // 6px → 6px (already tight)
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
+
// Mobile rhythm (viewport-driven tightening) lives at the end of
|
|
287
|
+
// _density.scss so it stacks on top of every density tier.
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
@use 'interaction' as *;
|
|
13
13
|
@use 'sidebar' as *;
|
|
14
14
|
@use 'card' as *;
|
|
15
|
+
@use 'count' as *;
|
|
15
16
|
|
|
16
17
|
// ─── App Shell ──────────────────────────────────────────────────────────────
|
|
17
18
|
// Mobile-ready application shell: fixed header, sidebar drawer, scrim overlay.
|
|
@@ -125,13 +126,13 @@
|
|
|
125
126
|
|
|
126
127
|
// Equalize height across icon-only and text-only siblings AND
|
|
127
128
|
// search-icon labels. Geometric — locks the border-box chrome to
|
|
128
|
-
// the
|
|
129
|
+
// the shared control line box (--control-line-height) plus rebound --padding-y and
|
|
129
130
|
// border-width on both edges. Buttons rebind --padding-y below;
|
|
130
131
|
// search labels read --padding-y from @mixin form-input-icon-group
|
|
131
132
|
// (same var(--size-xs) value), so the formula resolves identically
|
|
132
133
|
// for both. Border-box is the project default (scss/base/_reset.scss).
|
|
133
134
|
:is(button, label) {
|
|
134
|
-
min-height: calc(
|
|
135
|
+
min-height: calc(var(--control-line-height) + 2 * var(--padding-y) + 2 * var(--border-width));
|
|
135
136
|
}
|
|
136
137
|
|
|
137
138
|
button {
|
|
@@ -159,6 +160,19 @@
|
|
|
159
160
|
border: 0;
|
|
160
161
|
}
|
|
161
162
|
}
|
|
163
|
+
|
|
164
|
+
// Unread counter — <data value="3">3</data> as a direct child,
|
|
165
|
+
// pinned over the corner. Solid accent; tone via status class
|
|
166
|
+
// (<data value="3" class="error">3</data>).
|
|
167
|
+
&:has(> data) {
|
|
168
|
+
@include relative;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
> data {
|
|
172
|
+
@include count;
|
|
173
|
+
@include count-solid;
|
|
174
|
+
@include count-overlay;
|
|
175
|
+
}
|
|
162
176
|
}
|
|
163
177
|
}
|
|
164
178
|
|
|
@@ -190,20 +204,12 @@
|
|
|
190
204
|
height: calc(100dvh - var(--app-header-height));
|
|
191
205
|
overflow: hidden;
|
|
192
206
|
|
|
193
|
-
//
|
|
194
|
-
//
|
|
195
|
-
//
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
padding-left: var(--app-sidebar-width);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// On mobile the sidebar overlays (scrim covers content) —
|
|
203
|
-
// no content shift.
|
|
204
|
-
@include mq-down(md) {
|
|
205
|
-
&:has(.app-sidebar[data-ln-toggle="open"]) {
|
|
206
|
-
padding-left: 0;
|
|
207
|
+
// Open drawer on desktop: reserve its width on the parent so content
|
|
208
|
+
// and footer shift together (padding, not child margin — no overflow).
|
|
209
|
+
// On mobile the drawer overlays the content instead.
|
|
210
|
+
@include mq-up(md) {
|
|
211
|
+
&:has(> aside[data-ln-toggle="open"]) {
|
|
212
|
+
padding-left: var(--app-sidebar-width);
|
|
207
213
|
}
|
|
208
214
|
}
|
|
209
215
|
|
|
@@ -222,10 +228,13 @@
|
|
|
222
228
|
// `> *:first-child` / `> *:last-child` margins below — those
|
|
223
229
|
// margins scroll past with the content, leaving sticky to pin
|
|
224
230
|
// against the actual section edges.
|
|
225
|
-
padding-inline: var(--
|
|
231
|
+
padding-inline: clamp(var(--size-md), 3vw, var(--size-xl));
|
|
226
232
|
@include overflow-auto;
|
|
227
233
|
@include w-full;
|
|
228
|
-
@include stack(var(--
|
|
234
|
+
@include stack(var(--size-lg));
|
|
235
|
+
// The stack gap owns vertical rhythm here — section-cards drop
|
|
236
|
+
// their own bottom margin so the two do not add up.
|
|
237
|
+
--panel-margin-block: 0;
|
|
229
238
|
@include transition;
|
|
230
239
|
|
|
231
240
|
// Children keep intrinsic height — wrapper's overflow-auto
|
|
@@ -243,11 +252,11 @@
|
|
|
243
252
|
// descendants (sticky top:0 toolbar/thead, sticky bottom:0 footer)
|
|
244
253
|
// to the inside of the padding edge.
|
|
245
254
|
> *:first-child {
|
|
246
|
-
margin-block-start: var(--
|
|
255
|
+
margin-block-start: clamp(var(--size-md), 3vw, var(--size-xl));
|
|
247
256
|
}
|
|
248
257
|
|
|
249
258
|
> *:last-child {
|
|
250
|
-
margin-block-end: var(--
|
|
259
|
+
margin-block-end: clamp(var(--size-md), 3vw, var(--size-xl));
|
|
251
260
|
}
|
|
252
261
|
}
|
|
253
262
|
}
|
|
@@ -309,6 +318,7 @@
|
|
|
309
318
|
max-width: var(--max-w-container);
|
|
310
319
|
@include mx(auto);
|
|
311
320
|
@include w-full;
|
|
312
|
-
@include stack(var(--
|
|
321
|
+
@include stack(var(--size-lg));
|
|
322
|
+
--panel-margin-block: 0;
|
|
313
323
|
}
|
|
314
324
|
|
|
@@ -37,6 +37,8 @@
|
|
|
37
37
|
--padding-x: var(--btn-padding-x, var(--size-md));
|
|
38
38
|
padding: var(--padding-y) var(--padding-x);
|
|
39
39
|
@include text-sm;
|
|
40
|
+
// Shared control line box — aligns with inputs/selects (see _tokens.scss).
|
|
41
|
+
line-height: var(--control-line-height);
|
|
40
42
|
@include font-medium;
|
|
41
43
|
border-radius: var(--radius);
|
|
42
44
|
white-space: nowrap;
|
|
@@ -69,14 +71,14 @@
|
|
|
69
71
|
@mixin btn {
|
|
70
72
|
// Accent variant — rebinds the --btn-* token surface to accent values.
|
|
71
73
|
--color-accent: hsl(var(--color-primary));
|
|
72
|
-
--color-accent-hover: hsl(from var(--color-accent) h s calc(l -
|
|
74
|
+
--color-accent-hover: hsl(from var(--color-accent) h s calc(l + var(--accent-hover-shift)));
|
|
73
75
|
|
|
74
76
|
--btn-bg: var(--color-accent-bg, var(--color-accent));
|
|
75
77
|
--btn-fg: var(--color-accent-bg-fg, var(--color-accent-fg));
|
|
76
78
|
--btn-border: hsl(from var(--color-accent) h s calc(l - 4));
|
|
77
79
|
--btn-bg-hover: var(--color-accent-bg-hover, var(--color-accent-hover));
|
|
78
80
|
--btn-fg-hover: var(--color-accent-bg-fg, var(--color-accent-fg));
|
|
79
|
-
--btn-border-hover: hsl(from var(--color-accent) h s calc(l -
|
|
81
|
+
--btn-border-hover: hsl(from var(--color-accent) h s calc(l + var(--accent-hover-shift)));
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
@mixin btn-soft {
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
@use 'shadows' as *;
|
|
8
8
|
@use 'transitions' as *;
|
|
9
9
|
@use 'position' as *;
|
|
10
|
+
@use 'focus' as *;
|
|
10
11
|
|
|
11
12
|
// Card & Section — composite mixins
|
|
12
13
|
|
|
@@ -18,31 +19,25 @@
|
|
|
18
19
|
@include border;
|
|
19
20
|
@include w-full;
|
|
20
21
|
@include flex-col;
|
|
21
|
-
border-radius: var(--radius);
|
|
22
|
-
|
|
22
|
+
border-radius: var(--panel-radius, var(--radius));
|
|
23
|
+
// `clip`, not `hidden`: no scroll container, so a table's sticky thead
|
|
24
|
+
// binds to the page scroller. min-inline-size keeps the grid/flex shrink
|
|
25
|
+
// that `hidden` gave for free.
|
|
26
|
+
overflow: clip;
|
|
27
|
+
min-inline-size: 0;
|
|
23
28
|
@include transition;
|
|
24
29
|
box-shadow: var(--shadow), var(--surface-highlight, inset 0 0 0 0 transparent);
|
|
25
30
|
|
|
26
|
-
|
|
31
|
+
// Only whole-card links/buttons signal interaction. Passive containers
|
|
32
|
+
// must not respond merely because the pointer crosses their content.
|
|
33
|
+
&:is(a, button):hover:not(:disabled),
|
|
34
|
+
&:has(> a:hover) {
|
|
27
35
|
--color-border: color-mix(in srgb, var(--color-accent) 35%, transparent);
|
|
28
|
-
--shadow: var(--nested-card-shadow-hover, var(--shadow-floating));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Nesting ladder: when nested inside a section-card or another card,
|
|
32
|
-
// climb to elevated surface to preserve visual depth.
|
|
33
|
-
.section-card &,
|
|
34
|
-
.section &,
|
|
35
|
-
.card & {
|
|
36
|
-
--color-bg: var(--bg-elevated);
|
|
37
|
-
--shadow: var(--shadow-floating);
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
--nested-card-bg: var(--bg-elevated);
|
|
44
|
-
--nested-card-shadow: var(--shadow-floating);
|
|
45
|
-
--nested-card-shadow-hover: var(--shadow-floating);
|
|
38
|
+
&:is(a, button):focus-visible,
|
|
39
|
+
&:has(> a:focus-visible) {
|
|
40
|
+
@include focus-ring;
|
|
46
41
|
}
|
|
47
42
|
|
|
48
43
|
// Direct-child selectors only — nested <header>/<main>/<footer>
|
|
@@ -81,37 +76,65 @@
|
|
|
81
76
|
// without a <header> wrapper, the global h3 cascade (heading-sm)
|
|
82
77
|
// is too large for tile context. Tighten to tile-title sizing.
|
|
83
78
|
> main h3 {
|
|
84
|
-
@include typography(
|
|
79
|
+
@include typography(title-sm);
|
|
85
80
|
@include font-semibold;
|
|
86
81
|
color: inherit;
|
|
87
82
|
margin: 0;
|
|
88
83
|
}
|
|
89
84
|
}
|
|
90
85
|
|
|
91
|
-
|
|
86
|
+
// $group: true — title row of a transparent group: no inline padding, no
|
|
87
|
+
// divider, no surface (it sits on the canvas).
|
|
88
|
+
@mixin panel-header($group: false) {
|
|
92
89
|
@include flex;
|
|
93
90
|
@include items-center;
|
|
94
91
|
@include justify-between;
|
|
95
|
-
|
|
92
|
+
@if $group {
|
|
93
|
+
padding: var(--card-padding-y) 0;
|
|
94
|
+
} @else {
|
|
95
|
+
padding: var(--card-padding-y) var(--card-padding-x);
|
|
96
|
+
}
|
|
96
97
|
min-height: 2.5rem;
|
|
97
|
-
@
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
@if $group {
|
|
99
|
+
background: transparent;
|
|
100
|
+
} @else {
|
|
101
|
+
@include border-b;
|
|
102
|
+
// Header shares the panel surface (inherited --color-bg) — a tinted
|
|
103
|
+
// caption bar reads as legacy window chrome. Themes may opt in to a
|
|
104
|
+
// tint via --panel-header-bg. Opaque, so sticky toolbars stay solid.
|
|
105
|
+
background: var(--panel-header-bg, var(--color-bg));
|
|
106
|
+
}
|
|
100
107
|
@include transition;
|
|
101
108
|
margin-bottom: 0;
|
|
102
109
|
|
|
103
110
|
:is(h1, h2, h3, h4, h5, h6) {
|
|
104
|
-
@include typography(
|
|
105
|
-
@include font-
|
|
111
|
+
@include typography(title-sm);
|
|
112
|
+
@include font-semibold;
|
|
106
113
|
color: var(--color-fg);
|
|
107
114
|
margin: 0;
|
|
108
115
|
}
|
|
109
116
|
|
|
117
|
+
// Title + description: <hgroup><h3>…</h3><p>…</p></hgroup>
|
|
118
|
+
hgroup {
|
|
119
|
+
@include flex-col;
|
|
120
|
+
gap: var(--size-2xs);
|
|
121
|
+
min-inline-size: 0;
|
|
122
|
+
margin: 0;
|
|
123
|
+
|
|
124
|
+
> p {
|
|
125
|
+
@include typography(caption);
|
|
126
|
+
color: var(--fg-muted);
|
|
127
|
+
margin: 0;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
110
131
|
label {
|
|
111
132
|
--padding-y: var(--size-xs);
|
|
133
|
+
min-height: calc(var(--control-line-height) + 2 * var(--padding-y) + 2 * var(--border-width));
|
|
112
134
|
}
|
|
113
135
|
|
|
114
|
-
// Header actions
|
|
136
|
+
// Header actions lock to the control height: --control-line-height +
|
|
137
|
+
// 2 × --padding-y + 2 × border-width. This is a DESCENDANT selector,
|
|
115
138
|
// so it also reaches a button that belongs to a nested field — that button
|
|
116
139
|
// is the field's own chrome, not a header action, and form-field-group
|
|
117
140
|
// stretches it to the field's full height. An explicit height beats
|
|
@@ -135,19 +158,9 @@
|
|
|
135
158
|
// rule to (0,1,3) and silently outrank consumers that override it
|
|
136
159
|
// at equal weight by source order.
|
|
137
160
|
// Wrapped, the rule stays exactly (0,1,2); only its match set narrows.
|
|
138
|
-
//
|
|
139
|
-
// NOT written as [class*="group"]: that spelling means "field group" in
|
|
140
|
-
// components/_form.scss only because it is scoped under .form-element there.
|
|
141
|
-
// Unscoped it would also catch .btn-group and stop compacting a segmented
|
|
142
|
-
// group in a header — a regression, and those buttons already outrank this.
|
|
143
161
|
button:where(:not(:where([data-ln-date-field]) > button)) {
|
|
144
|
-
--btn-padding-y: var(--size-
|
|
145
|
-
--
|
|
146
|
-
font-size: var(--text-xs);
|
|
147
|
-
height: 1.75rem;
|
|
148
|
-
display: inline-flex;
|
|
149
|
-
align-items: center;
|
|
150
|
-
justify-content: center;
|
|
162
|
+
--btn-padding-y: var(--size-xs);
|
|
163
|
+
min-height: calc(var(--control-line-height) + 2 * var(--padding-y) + 2 * var(--border-width));
|
|
151
164
|
}
|
|
152
165
|
|
|
153
166
|
// Close/dismiss and toggle buttons inside the header should be tight and flat.
|
|
@@ -157,23 +170,21 @@
|
|
|
157
170
|
--btn-padding-y: var(--size-2xs);
|
|
158
171
|
--btn-padding-x: var(--size-2xs);
|
|
159
172
|
--shadow: none;
|
|
173
|
+
min-height: 0;
|
|
160
174
|
height: 1.75rem;
|
|
161
175
|
width: 1.75rem;
|
|
162
176
|
}
|
|
163
177
|
}
|
|
164
178
|
|
|
165
179
|
@mixin panel-body {
|
|
166
|
-
padding: var(--padding-y) var(--padding-x);
|
|
180
|
+
padding: var(--card-padding-y) var(--card-padding-x);
|
|
167
181
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
-webkit-overflow-scrolling: touch;
|
|
172
|
-
}
|
|
182
|
+
// A card in a panel body sits on a surface — climb to elevated.
|
|
183
|
+
--nested-card-bg: var(--bg-elevated);
|
|
184
|
+
--nested-card-shadow: none;
|
|
173
185
|
|
|
174
|
-
//
|
|
175
|
-
|
|
176
|
-
&:has(> [data-ln-table]) {
|
|
186
|
+
// `clip`, not `auto` — a scrolling cell would trap the sticky thead.
|
|
187
|
+
&:has(> :is(table, .table-container, [data-ln-table])) {
|
|
177
188
|
overflow-x: clip;
|
|
178
189
|
max-width: 100%;
|
|
179
190
|
}
|
|
@@ -205,10 +216,10 @@
|
|
|
205
216
|
}
|
|
206
217
|
|
|
207
218
|
@mixin panel-footer {
|
|
208
|
-
padding: var(--padding-y) var(--padding-x);
|
|
219
|
+
padding: var(--card-padding-y) var(--card-padding-x);
|
|
209
220
|
@include border-t;
|
|
210
|
-
|
|
211
|
-
background: var(--color-bg);
|
|
221
|
+
// Same surface as the panel; opt-in tint via --panel-footer-bg.
|
|
222
|
+
background: var(--panel-footer-bg, var(--color-bg));
|
|
212
223
|
@include flex;
|
|
213
224
|
@include justify-end;
|
|
214
225
|
gap: var(--gap);
|
|
@@ -251,7 +262,8 @@
|
|
|
251
262
|
// Usage: #my-card { @include card; @include card-accent-top; }
|
|
252
263
|
|
|
253
264
|
@mixin _card-accent-base {
|
|
254
|
-
&:hover
|
|
265
|
+
&:is(a, button):hover:not(:disabled),
|
|
266
|
+
&:has(> a:hover) {
|
|
255
267
|
background-color: color-mix(in srgb, var(--color-accent) var(--tint-hover), transparent);
|
|
256
268
|
}
|
|
257
269
|
}
|
|
@@ -309,27 +321,35 @@
|
|
|
309
321
|
}
|
|
310
322
|
}
|
|
311
323
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
324
|
+
// $group: true — a transparent titled group: no surface, border, shadow or
|
|
325
|
+
// radius; content sits directly on the canvas.
|
|
326
|
+
@mixin section-card($group: false) {
|
|
327
|
+
@if not $group {
|
|
328
|
+
background: var(--color-bg);
|
|
329
|
+
@include border;
|
|
330
|
+
border-radius: var(--panel-radius, var(--radius));
|
|
331
|
+
// `overflow: clip` not `overflow: hidden` — clips at rounded corners
|
|
332
|
+
// without establishing a scroll container, so sticky descendants
|
|
333
|
+
// (e.g. ln-table's <thead>) bind to the outer .app-main > section
|
|
334
|
+
// scroll surface instead of being trapped inside this card.
|
|
335
|
+
overflow: clip;
|
|
336
|
+
@include transition;
|
|
337
|
+
--shadow: var(--shadow-resting);
|
|
338
|
+
box-shadow: var(--shadow);
|
|
339
|
+
}
|
|
340
|
+
--margin-block: var(--panel-margin-block, var(--size-md));
|
|
325
341
|
margin-bottom: var(--margin-block);
|
|
326
342
|
|
|
327
343
|
// Direct-child selectors only — nested <header>/<main>/<footer>
|
|
328
344
|
// elements inside the card's content are consumer-owned and
|
|
329
345
|
// must not inherit the card's own chrome styles.
|
|
330
|
-
> header { @include panel-header; }
|
|
346
|
+
> header { @include panel-header($group); }
|
|
331
347
|
> main { @include panel-body; }
|
|
332
348
|
> footer { @include panel-footer; }
|
|
349
|
+
|
|
350
|
+
@if $group {
|
|
351
|
+
> main { padding: 0; }
|
|
352
|
+
}
|
|
333
353
|
}
|
|
334
354
|
|
|
335
355
|
// ─── Frosted Glass ──────────────────────────────────────
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
// Re-declare accent vocabulary at this scope so var() resolves
|
|
34
34
|
// here instead of staying frozen at an ancestor scope. Without this, descendants
|
|
35
35
|
// reading --color-accent get the ancestor's primary blue regardless of the
|
|
36
|
-
// semantic class. --color-accent-fg
|
|
36
|
+
// semantic class. --color-accent-fg stays inherited — white in light
|
|
37
|
+
// polarity, ink in the dark lift.
|
|
37
38
|
--color-accent: hsl(var(--color-primary));
|
|
38
39
|
--color-accent-tint: hsl(var(--color-#{$family}-lighter));
|
|
39
40
|
--color-accent-tint-strong: hsl(var(--color-#{$family}-light));
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
@use 'display' as *;
|
|
2
|
+
@use 'typography' as *;
|
|
3
|
+
@use 'position' as *;
|
|
4
|
+
|
|
5
|
+
// ─── Count ──────────────────────────────────────────────────────────────────
|
|
6
|
+
// Numeric counter pill — unread items, queue sizes, list totals. The
|
|
7
|
+
// element is <data value="24">24</data>: the value attribute carries the
|
|
8
|
+
// machine-readable number, the text the formatted one.
|
|
9
|
+
//
|
|
10
|
+
// @include count; ← neutral pill, tinted from --color-fg
|
|
11
|
+
// @include count-solid; ← delta: solid accent fill. Tone follows the
|
|
12
|
+
// semantic-color cascade — <data class="error">
|
|
13
|
+
// @include count-overlay; ← delta: pinned over the top-end corner of the
|
|
14
|
+
// nearest positioned ancestor (icon buttons).
|
|
15
|
+
// The host must be positioned.
|
|
16
|
+
//
|
|
17
|
+
// Bound structurally by @mixin nav (a > data) and @mixin app-header-actions
|
|
18
|
+
// (button > data).
|
|
19
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
|
|
21
|
+
@mixin count {
|
|
22
|
+
@include flex-shrink-0;
|
|
23
|
+
padding: 0 var(--size-xs-up);
|
|
24
|
+
min-width: 1.5rem;
|
|
25
|
+
text-align: center;
|
|
26
|
+
border-radius: var(--radius-full);
|
|
27
|
+
@include text-xs;
|
|
28
|
+
@include font-semibold;
|
|
29
|
+
font-variant-numeric: tabular-nums;
|
|
30
|
+
background: color-mix(in srgb, var(--color-fg) 12%, transparent);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@mixin count-solid {
|
|
34
|
+
background: var(--color-accent);
|
|
35
|
+
color: var(--color-accent-fg);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@mixin count-overlay {
|
|
39
|
+
@include absolute;
|
|
40
|
+
// em, not rem — the offsets and the circle track the counter's own
|
|
41
|
+
// font-size, so a rebound size keeps the same geometry.
|
|
42
|
+
inset-block-start: -0.5em;
|
|
43
|
+
inset-inline-end: -0.5em;
|
|
44
|
+
min-width: 1.5em;
|
|
45
|
+
padding-inline: var(--size-2xs);
|
|
46
|
+
line-height: 1.5em;
|
|
47
|
+
pointer-events: none;
|
|
48
|
+
}
|
|
@@ -7,6 +7,18 @@
|
|
|
7
7
|
@mixin hidden { display: none; }
|
|
8
8
|
@mixin invisible { visibility: hidden; }
|
|
9
9
|
|
|
10
|
+
@mixin sr-only {
|
|
11
|
+
position: absolute;
|
|
12
|
+
width: 1px;
|
|
13
|
+
height: 1px;
|
|
14
|
+
padding: 0;
|
|
15
|
+
margin: -1px;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
clip: rect(0, 0, 0, 0);
|
|
18
|
+
white-space: nowrap;
|
|
19
|
+
border-width: 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
10
22
|
@mixin flex-col { display: flex; flex-direction: column; }
|
|
11
23
|
@mixin flex-row { display: flex; flex-direction: row; }
|
|
12
24
|
@mixin flex-wrap { flex-wrap: wrap; }
|
|
@@ -24,7 +24,9 @@
|
|
|
24
24
|
--color-border: var(--border-subtle);
|
|
25
25
|
padding: var(--padding-y) var(--padding-x);
|
|
26
26
|
border-block-start: var(--border-block-start, var(--border-width) solid var(--color-border));
|
|
27
|
-
|
|
27
|
+
// Sits on the surrounding canvas — an opaque white strip pinned to the
|
|
28
|
+
// bottom edge reads as a desktop status bar. Opt in via --app-footer-bg.
|
|
29
|
+
background: var(--app-footer-bg, transparent);
|
|
28
30
|
@include typography(body-sm);
|
|
29
31
|
color: var(--color-fg);
|
|
30
32
|
@include flex;
|