jekyll-theme-modootoday 1.0.0
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +182 -0
- data/LICENSE +21 -0
- data/README.ko.md +115 -0
- data/README.md +112 -0
- data/RULES.md +120 -0
- data/_includes/footer-custom.html +5 -0
- data/_includes/head-custom.html +1 -0
- data/_includes/modootoday/actions.html +17 -0
- data/_includes/modootoday/archive-years.html +30 -0
- data/_includes/modootoday/archive.html +44 -0
- data/_includes/modootoday/blog/card.html +23 -0
- data/_includes/modootoday/blog/config.html +17 -0
- data/_includes/modootoday/blog/list.html +13 -0
- data/_includes/modootoday/blog/pager.html +15 -0
- data/_includes/modootoday/blog/reading-time.html +10 -0
- data/_includes/modootoday/blog/select.html +18 -0
- data/_includes/modootoday/brand/icon.html +39 -0
- data/_includes/modootoday/brand/logo.html +7 -0
- data/_includes/modootoday/breadcrumb.html +22 -0
- data/_includes/modootoday/config.html +41 -0
- data/_includes/modootoday/detail/cover.html +5 -0
- data/_includes/modootoday/detail/cta.html +13 -0
- data/_includes/modootoday/detail/facts.html +31 -0
- data/_includes/modootoday/detail/jsonld.html +34 -0
- data/_includes/modootoday/directory/date-tile.html +2 -0
- data/_includes/modootoday/directory/filter.html +7 -0
- data/_includes/modootoday/directory/ics.html +17 -0
- data/_includes/modootoday/directory/item.html +18 -0
- data/_includes/modootoday/directory/items.html +4 -0
- data/_includes/modootoday/directory/jsonld.html +5 -0
- data/_includes/modootoday/directory/list.html +16 -0
- data/_includes/modootoday/directory/values.html +6 -0
- data/_includes/modootoday/doc/page-actions.html +15 -0
- data/_includes/modootoday/doc/pagination.html +24 -0
- data/_includes/modootoday/doc/sidebar-item.html +11 -0
- data/_includes/modootoday/doc/sidebar.html +28 -0
- data/_includes/modootoday/doc/twin.html +8 -0
- data/_includes/modootoday/docs-extra/head.html +7 -0
- data/_includes/modootoday/docs-extra/jsonld.html +19 -0
- data/_includes/modootoday/head-meta.html +90 -0
- data/_includes/modootoday/home-url.html +4 -0
- data/_includes/modootoday/i18n/ar.html +2 -0
- data/_includes/modootoday/i18n/de.html +2 -0
- data/_includes/modootoday/i18n/el.html +2 -0
- data/_includes/modootoday/i18n/es.html +2 -0
- data/_includes/modootoday/i18n/fa.html +2 -0
- data/_includes/modootoday/i18n/fr.html +2 -0
- data/_includes/modootoday/i18n/id.html +2 -0
- data/_includes/modootoday/i18n/it.html +2 -0
- data/_includes/modootoday/i18n/ja.html +2 -0
- data/_includes/modootoday/i18n/ko.html +2 -0
- data/_includes/modootoday/i18n/ml.html +2 -0
- data/_includes/modootoday/i18n/name.html +2 -0
- data/_includes/modootoday/i18n/pl.html +2 -0
- data/_includes/modootoday/i18n/pt-BR.html +2 -0
- data/_includes/modootoday/i18n/ro.html +2 -0
- data/_includes/modootoday/i18n/ru.html +2 -0
- data/_includes/modootoday/i18n/th.html +2 -0
- data/_includes/modootoday/i18n/tr.html +2 -0
- data/_includes/modootoday/i18n/uk.html +2 -0
- data/_includes/modootoday/i18n/ur-Latn.html +2 -0
- data/_includes/modootoday/i18n/vi.html +2 -0
- data/_includes/modootoday/i18n/zh-CN.html +2 -0
- data/_includes/modootoday/i18n/zh-TW.html +2 -0
- data/_includes/modootoday/i18n.html +163 -0
- data/_includes/modootoday/jsonld/article.html +15 -0
- data/_includes/modootoday/jsonld/author.html +8 -0
- data/_includes/modootoday/jsonld/breadcrumb.html +17 -0
- data/_includes/modootoday/jsonld/entity.html +16 -0
- data/_includes/modootoday/jsonld/graph.html +24 -0
- data/_includes/modootoday/jsonld/profile.html +20 -0
- data/_includes/modootoday/jsonld/props.html +13 -0
- data/_includes/modootoday/jsonld/publisher.html +11 -0
- data/_includes/modootoday/jsonld/type.html +29 -0
- data/_includes/modootoday/jsonld/webpage.html +17 -0
- data/_includes/modootoday/jsonld/website.html +9 -0
- data/_includes/modootoday/lang-switch.html +31 -0
- data/_includes/modootoday/link.html +3 -0
- data/_includes/modootoday/links/attrs.html +9 -0
- data/_includes/modootoday/links/content.html +16 -0
- data/_includes/modootoday/markdown/c/details.html +6 -0
- data/_includes/modootoday/markdown/c/faq.html +2 -0
- data/_includes/modootoday/markdown/c/filetree.html +3 -0
- data/_includes/modootoday/markdown/c/gallery.html +5 -0
- data/_includes/modootoday/markdown/c/linkcards.html +2 -0
- data/_includes/modootoday/markdown/c/params.html +3 -0
- data/_includes/modootoday/markdown/c/pricing.html +10 -0
- data/_includes/modootoday/markdown/c/quote.html +6 -0
- data/_includes/modootoday/markdown/c/subscribe.html +6 -0
- data/_includes/modootoday/markdown/components.html +114 -0
- data/_includes/modootoday/markdown/inline.html +46 -0
- data/_includes/modootoday/markdown/llms-pages.html +14 -0
- data/_includes/modootoday/markdown/raw-body.html +6 -0
- data/_includes/modootoday/markdown/sections.html +43 -0
- data/_includes/modootoday/marketing/head.html +6 -0
- data/_includes/modootoday/meta/byline.html +24 -0
- data/_includes/modootoday/meta/post-nav.html +16 -0
- data/_includes/modootoday/meta/related.html +20 -0
- data/_includes/modootoday/meta/series.html +11 -0
- data/_includes/modootoday/meta/share.html +4 -0
- data/_includes/modootoday/nav.html +19 -0
- data/_includes/modootoday/news/badge.html +4 -0
- data/_includes/modootoday/news/front.html +30 -0
- data/_includes/modootoday/news/notes.html +10 -0
- data/_includes/modootoday/page-meta.html +16 -0
- data/_includes/modootoday/pages/error.html +13 -0
- data/_includes/modootoday/pages/hero/scene.html +27 -0
- data/_includes/modootoday/pages/hero/sparks.html +6 -0
- data/_includes/modootoday/pages/hero.html +11 -0
- data/_includes/modootoday/pages/search-form.html +14 -0
- data/_includes/modootoday/search.json +11 -0
- data/_includes/modootoday/stylesheets.html +36 -0
- data/_includes/modootoday/t.html +7 -0
- data/_includes/modootoday/theme-color.html +19 -0
- data/_includes/modootoday/toc.html +17 -0
- data/_includes/modootoday/tokens.html +11 -0
- data/_includes/sections/showcase.html +18 -0
- data/_layouts/archive.html +6 -0
- data/_layouts/author.html +19 -0
- data/_layouts/blog.html +28 -0
- data/_layouts/book.html +21 -0
- data/_layouts/brand.html +21 -0
- data/_layouts/case-study.html +5 -0
- data/_layouts/changelog.html +24 -0
- data/_layouts/contact.html +27 -0
- data/_layouts/course.html +21 -0
- data/_layouts/default.html +87 -0
- data/_layouts/detail.html +31 -0
- data/_layouts/directory.html +12 -0
- data/_layouts/doc.html +27 -0
- data/_layouts/download.html +21 -0
- data/_layouts/episode.html +5 -0
- data/_layouts/error.html +7 -0
- data/_layouts/event.html +5 -0
- data/_layouts/events.html +6 -0
- data/_layouts/feature.html +18 -0
- data/_layouts/feed.html +35 -0
- data/_layouts/glossary.html +24 -0
- data/_layouts/home.html +7 -0
- data/_layouts/hub.html +16 -0
- data/_layouts/integrations.html +7 -0
- data/_layouts/job.html +5 -0
- data/_layouts/jobs.html +7 -0
- data/_layouts/legal.html +21 -0
- data/_layouts/links.html +18 -0
- data/_layouts/llms-full.html +8 -0
- data/_layouts/llms.html +32 -0
- data/_layouts/minimal.html +8 -0
- data/_layouts/news-article.html +6 -0
- data/_layouts/news.html +22 -0
- data/_layouts/portfolio.html +7 -0
- data/_layouts/post.html +54 -0
- data/_layouts/pricing.html +32 -0
- data/_layouts/project.html +5 -0
- data/_layouts/redirect.html +21 -0
- data/_layouts/reference.html +24 -0
- data/_layouts/resume.html +50 -0
- data/_layouts/roadmap.html +22 -0
- data/_layouts/search.html +8 -0
- data/_layouts/sponsors.html +7 -0
- data/_layouts/team.html +7 -0
- data/_layouts/twin.html +2 -0
- data/_layouts/wide.html +7 -0
- data/_sass/modootoday/_access.scss +12 -0
- data/_sass/modootoday/_core.scss +18 -0
- data/_sass/modootoday/_settings.scss +5 -0
- data/_sass/modootoday/_sheet.scss +6 -0
- data/_sass/modootoday/base/_bidi.scss +8 -0
- data/_sass/modootoday/base/_code.scss +18 -0
- data/_sass/modootoday/base/_interaction.scss +6 -0
- data/_sass/modootoday/base/_prose.scss +32 -0
- data/_sass/modootoday/base/_reset.scss +14 -0
- data/_sass/modootoday/base/_table.scss +8 -0
- data/_sass/modootoday/blog/_article.scss +27 -0
- data/_sass/modootoday/blog/_cards.scss +36 -0
- data/_sass/modootoday/blog/_index.scss +10 -0
- data/_sass/modootoday/blog/_news.scss +26 -0
- data/_sass/modootoday/blog/_post.scss +9 -0
- data/_sass/modootoday/components/core/chrome/_banner.scss +7 -0
- data/_sass/modootoday/components/core/chrome/_breadcrumb.scss +10 -0
- data/_sass/modootoday/components/core/chrome/_nav.scss +39 -0
- data/_sass/modootoday/components/core/chrome/_pagination.scss +10 -0
- data/_sass/modootoday/components/core/chrome/_theme-toggle.scss +16 -0
- data/_sass/modootoday/components/core/inline/_badge.scss +15 -0
- data/_sass/modootoday/components/core/inline/_callout.scss +14 -0
- data/_sass/modootoday/components/core/inline/_code-copy.scss +11 -0
- data/_sass/modootoday/components/core/inline/_code.scss +11 -0
- data/_sass/modootoday/components/core/inline/_cta.scss +11 -0
- data/_sass/modootoday/components/core/inline/_embed.scss +6 -0
- data/_sass/modootoday/components/core/inline/_figure.scss +9 -0
- data/_sass/modootoday/components/core/inline/_footnotes.scss +6 -0
- data/_sass/modootoday/components/core/inline/_hero.scss +8 -0
- data/_sass/modootoday/components/core/inline/_kbd.scss +6 -0
- data/_sass/modootoday/components/core/inline/_progress.scss +8 -0
- data/_sass/modootoday/components/doc/_page-actions.scss +10 -0
- data/_sass/modootoday/components/doc/_sidebar.scss +31 -0
- data/_sass/modootoday/components/doc/_toc.scss +19 -0
- data/_sass/modootoday/components/loading/_loading.scss +33 -0
- data/_sass/modootoday/components/search/_search.scss +36 -0
- data/_sass/modootoday/components/section/showcase/_card.scss +15 -0
- data/_sass/modootoday/components/section/showcase/_cta.scss +7 -0
- data/_sass/modootoday/components/section/showcase/_gallery.scss +15 -0
- data/_sass/modootoday/components/section/showcase/_linkcards.scss +12 -0
- data/_sass/modootoday/components/section/showcase/_pricing.scss +12 -0
- data/_sass/modootoday/components/section/showcase/_quote.scss +7 -0
- data/_sass/modootoday/components/section/showcase/_subscribe.scss +9 -0
- data/_sass/modootoday/components/section/structure/_accordion.scss +15 -0
- data/_sass/modootoday/components/section/structure/_details.scss +15 -0
- data/_sass/modootoday/components/section/structure/_faq.scss +5 -0
- data/_sass/modootoday/components/section/structure/_filetree.scss +13 -0
- data/_sass/modootoday/components/section/structure/_params.scss +8 -0
- data/_sass/modootoday/components/section/structure/_steps.scss +13 -0
- data/_sass/modootoday/components/section/structure/_tabs.scss +21 -0
- data/_sass/modootoday/components/section/structure/_timeline.scss +10 -0
- data/_sass/modootoday/detail/_index.scss +8 -0
- data/_sass/modootoday/detail/_page.scss +25 -0
- data/_sass/modootoday/directory/_filter.scss +12 -0
- data/_sass/modootoday/directory/_grid.scss +18 -0
- data/_sass/modootoday/directory/_index.scss +11 -0
- data/_sass/modootoday/directory/_presets.scss +16 -0
- data/_sass/modootoday/docs-extra/_index.scss +7 -0
- data/_sass/modootoday/docs-extra/_page.scss +37 -0
- data/_sass/modootoday/hero/_index.scss +6 -0
- data/_sass/modootoday/hero/_layout.scss +28 -0
- data/_sass/modootoday/hero/_scene.scss +20 -0
- data/_sass/modootoday/kit/_button.scss +8 -0
- data/_sass/modootoday/layout/_page-meta.scss +9 -0
- data/_sass/modootoday/layout/_safe-area.scss +9 -0
- data/_sass/modootoday/layout/_shell.scss +56 -0
- data/_sass/modootoday/marketing/_forms.scss +11 -0
- data/_sass/modootoday/marketing/_index.scss +10 -0
- data/_sass/modootoday/marketing/_page.scss +31 -0
- data/_sass/modootoday/marketing/_pricing.scss +15 -0
- data/_sass/modootoday/pages/_actions.scss +11 -0
- data/_sass/modootoday/pages/_error.scss +7 -0
- data/_sass/modootoday/pages/_index.scss +11 -0
- data/_sass/modootoday/pages/_legal.scss +17 -0
- data/_sass/modootoday/pages/_search.scss +9 -0
- data/_sass/modootoday/pages/_shells.scss +11 -0
- data/_sass/modootoday/resume/_index.scss +5 -0
- data/_sass/modootoday/resume/_page.scss +27 -0
- data/_sass/modootoday/tokens/_emit.scss +15 -0
- data/_sass/modootoday/tokens/_primitive.scss +18 -0
- data/_sass/modootoday/tokens/_semantic.scss +37 -0
- data/_sass/modootoday/tools/_functions.scss +2 -0
- data/_sass/modootoday/tools/_img-dark.scss +12 -0
- data/_sass/modootoday/tools/_mixins.scss +8 -0
- data/_sass/modootoday.scss +40 -0
- data/assets/css/modootoday/doc.scss +10 -0
- data/assets/css/modootoday/loading.scss +8 -0
- data/assets/css/modootoday/search.scss +8 -0
- data/assets/css/modootoday/showcase/card.scss +7 -0
- data/assets/css/modootoday/showcase/cta.scss +7 -0
- data/assets/css/modootoday/showcase/gallery.scss +7 -0
- data/assets/css/modootoday/showcase/linkcards.scss +7 -0
- data/assets/css/modootoday/showcase/pricing.scss +7 -0
- data/assets/css/modootoday/showcase/quote.scss +7 -0
- data/assets/css/modootoday/showcase/subscribe.scss +7 -0
- data/assets/css/modootoday/structure/accordion.scss +7 -0
- data/assets/css/modootoday/structure/details.scss +7 -0
- data/assets/css/modootoday/structure/faq.scss +7 -0
- data/assets/css/modootoday/structure/filetree.scss +7 -0
- data/assets/css/modootoday/structure/params.scss +7 -0
- data/assets/css/modootoday/structure/steps.scss +7 -0
- data/assets/css/modootoday/structure/tabs.scss +7 -0
- data/assets/css/modootoday/structure/timeline.scss +7 -0
- data/assets/css/modootoday-blog.scss +7 -0
- data/assets/css/modootoday-detail.scss +7 -0
- data/assets/css/modootoday-directory.scss +7 -0
- data/assets/css/modootoday-docs-extra.scss +7 -0
- data/assets/css/modootoday-hero.scss +7 -0
- data/assets/css/modootoday-marketing.scss +7 -0
- data/assets/css/modootoday-pages.scss +7 -0
- data/assets/css/modootoday-resume.scss +7 -0
- data/assets/css/modootoday.scss +17 -0
- data/assets/js/modootoday/accordion.js +13 -0
- data/assets/js/modootoday/code-copy.js +29 -0
- data/assets/js/modootoday/menu.js +19 -0
- data/assets/js/modootoday/scroll-region.js +14 -0
- data/assets/js/modootoday/search-keys.js +18 -0
- data/assets/js/modootoday/search.js +31 -0
- data/assets/js/modootoday/share.js +16 -0
- data/assets/js/modootoday/tabs.js +26 -0
- data/assets/js/modootoday/theme-init.js +2 -0
- data/assets/js/modootoday/theme-toggle.js +17 -0
- data/assets/modootoday/apple-touch-icon.png +0 -0
- data/assets/modootoday/favicon-32.png +0 -0
- data/assets/modootoday/favicon.svg +1 -0
- data/assets/modootoday/hero/dawn-1280.webp +0 -0
- data/assets/modootoday/hero/dawn-640.webp +0 -0
- data/assets/modootoday/hero/dawn-960.webp +0 -0
- data/exe/modootoday-check +7 -0
- data/i18n/ar.yml +130 -0
- data/i18n/de.yml +130 -0
- data/i18n/el.yml +130 -0
- data/i18n/en.yml +131 -0
- data/i18n/es.yml +130 -0
- data/i18n/fa.yml +130 -0
- data/i18n/fr.yml +130 -0
- data/i18n/glossary.yml +61 -0
- data/i18n/id.yml +130 -0
- data/i18n/it.yml +130 -0
- data/i18n/ja.yml +130 -0
- data/i18n/ko.yml +130 -0
- data/i18n/languages.yml +25 -0
- data/i18n/ml.yml +130 -0
- data/i18n/pl.yml +130 -0
- data/i18n/pt-BR.yml +130 -0
- data/i18n/ro.yml +130 -0
- data/i18n/ru.yml +130 -0
- data/i18n/th.yml +130 -0
- data/i18n/tr.yml +130 -0
- data/i18n/uk.yml +130 -0
- data/i18n/ur-Latn.yml +130 -0
- data/i18n/vi.yml +130 -0
- data/i18n/zh-CN.yml +130 -0
- data/i18n/zh-TW.yml +130 -0
- data/lib/jekyll-theme-modootoday.rb +59 -0
- data/lib/modootoday/check/a11y/content.rb +57 -0
- data/lib/modootoday/check/a11y/new_window.rb +64 -0
- data/lib/modootoday/check/blog.rb +72 -0
- data/lib/modootoday/check/build_output.rb +39 -0
- data/lib/modootoday/check/built_parts.rb +40 -0
- data/lib/modootoday/check/cli.rb +61 -0
- data/lib/modootoday/check/component_rules.rb +54 -0
- data/lib/modootoday/check/context.rb +41 -0
- data/lib/modootoday/check/gh_render.rb +21 -0
- data/lib/modootoday/check/github_pages.rb +23 -0
- data/lib/modootoday/check/i18n.rb +92 -0
- data/lib/modootoday/check/layouts/detail.rb +52 -0
- data/lib/modootoday/check/layouts/directory.rb +36 -0
- data/lib/modootoday/check/layouts/docs_extra.rb +84 -0
- data/lib/modootoday/check/layouts/marketing.rb +64 -0
- data/lib/modootoday/check/layouts/shape.rb +38 -0
- data/lib/modootoday/check/layouts/shells.rb +47 -0
- data/lib/modootoday/check/layouts.rb +37 -0
- data/lib/modootoday/check/markdown.rb +39 -0
- data/lib/modootoday/check/page_sections.rb +72 -0
- data/lib/modootoday/check/page_syntax.rb +104 -0
- data/lib/modootoday/check/page_values.rb +30 -0
- data/lib/modootoday/check/pages.rb +31 -0
- data/lib/modootoday/check/registry.rb +69 -0
- data/lib/modootoday/check/site_config.rb +74 -0
- data/lib/modootoday/check/slots.rb +50 -0
- data/lib/modootoday/check/structured_data.rb +97 -0
- data/lib/modootoday/check/stylesheets.rb +28 -0
- data/lib/modootoday/check/twins.rb +69 -0
- data/lib/modootoday/check.rb +22 -0
- data/lib/modootoday/schema/rules.rb +49 -0
- data/lib/modootoday/schema/vocab.txt +2478 -0
- metadata +420 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Progress: `progress:60` → a labelled native <progress> plus the value as text.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-progress { display: inline-flex; align-items: center; gap: .5rem; vertical-align: middle; font-size: .875rem; color: mt(muted-foreground); }
|
|
4
|
+
.mt-progress progress { appearance: none; width: 8rem; height: .5rem; border: 0; border-radius: 999px; background: mt(muted); overflow: hidden; accent-color: mt(primary); }
|
|
5
|
+
.mt-progress progress::-webkit-progress-bar { background: mt(muted); }
|
|
6
|
+
.mt-progress progress::-webkit-progress-value { background: mt(primary); }
|
|
7
|
+
.mt-progress progress::-moz-progress-bar { background: mt(primary); }
|
|
8
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Page actions (details.mt-menu.mt-page-actions): a small menu at the inline end above the article.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-page-actions { position: relative; float: inline-end; margin-inline-start: 1rem; z-index: 5; margin-block-end: var(--mt-p-space-4); }
|
|
4
|
+
// Any block that clears the float (hero, wide figure/card rows) sits below its margin box: one gap rule for all of them.
|
|
5
|
+
@media (min-width: 48rem) { .mt-page-actions { margin-block-end: var(--mt-p-space-6); } }
|
|
6
|
+
.mt-page-actions > summary { border: 1px solid mt(border); }
|
|
7
|
+
.mt-page-actions > ul { inset-inline: auto 0; }
|
|
8
|
+
.mt-page-actions button { width: 100%; padding: .35rem .6rem; border: 0; border-radius: mt(radius); background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; }
|
|
9
|
+
.mt-page-actions button:hover { background: mt(accent); }
|
|
10
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Doc sidebar from grouped nav: a sticky column from 64rem (aside.mt-doc-nav), a collapsed <details> below it. The sticky column rule is shared with the TOC in layout/_shell.scss.
|
|
2
|
+
// With a sidebar the header drops the inline copies of group links (.mt-nav-flat), so narrow headers stay short.
|
|
3
|
+
@include mt-layer(components) {
|
|
4
|
+
.mt-sidebar { font-size: .9rem; }
|
|
5
|
+
.mt-sidebar ul { list-style: none; margin: 0; padding: 0; }
|
|
6
|
+
.mt-sidebar a { display: block; padding: .3rem .6rem; border-radius: mt(radius); color: mt(muted-foreground); text-decoration: none; }
|
|
7
|
+
.mt-sidebar a:hover, .mt-sidebar [aria-current] { color: mt(foreground); background: mt(accent); }
|
|
8
|
+
.mt-sidebar [aria-current] { font-weight: 600; }
|
|
9
|
+
.mt-sidebar-group { margin-top: 1rem; }
|
|
10
|
+
.mt-sidebar summary { cursor: pointer; }
|
|
11
|
+
.mt-sidebar ul ul summary { padding: .3rem .6rem; color: mt(muted-foreground); }
|
|
12
|
+
.mt-sidebar ul ul { padding-inline-start: .75rem; }
|
|
13
|
+
.mt-sidebar-title { display: list-item; padding: 0 .6rem .3rem; font-size: .75rem; font-weight: 650; letter-spacing: .06em; text-transform: uppercase; }
|
|
14
|
+
.mt-doc-nav, .mt-body:has(.mt-doc-nav) .mt-nav-flat { display: none; }
|
|
15
|
+
.mt-sidebar-mobile { margin: 0 0 1rem; border: 1px solid mt(border); border-radius: mt(radius); background: mt(muted); font-size: .875rem; }
|
|
16
|
+
.mt-sidebar-mobile > summary { cursor: pointer; padding: .55rem .85rem; font-weight: 600; }
|
|
17
|
+
.mt-sidebar-mobile > .mt-sidebar { padding: 0 .5rem .6rem; max-height: 60vh; overflow-y: auto; }
|
|
18
|
+
@media (min-width: 64rem) {
|
|
19
|
+
.mt-sidebar-mobile, .mt-has-sidebar .mt-doc-aside { display: none; }
|
|
20
|
+
.mt-doc-layout.mt-has-sidebar { display: grid; grid-template-columns: 12rem minmax(0, #{mt(measure)}); gap: 3rem; max-width: none; }
|
|
21
|
+
.mt-has-sidebar .mt-doc-nav { display: block; }
|
|
22
|
+
.mt-has-sidebar .mt-toc-mobile { display: block; }
|
|
23
|
+
.mt-doc-layout.mt-has-sidebar ~ * { max-width: mt(measure); margin-inline-start: 15rem; }
|
|
24
|
+
}
|
|
25
|
+
@media (min-width: 80rem) {
|
|
26
|
+
.mt-has-sidebar.mt-has-toc { grid-template-columns: 12rem minmax(0, 1fr) 12rem; gap: 2.5rem; }
|
|
27
|
+
.mt-has-sidebar .mt-doc-aside { display: block; grid-column: 3; grid-row: 1; }
|
|
28
|
+
.mt-has-sidebar .mt-toc-mobile { display: none; }
|
|
29
|
+
.mt-doc-layout.mt-has-sidebar ~ * { margin-inline-start: 14.5rem; }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// "On this page": a sticky right column from 64rem (aside > nav.mt-toc), a collapsed <details> below it.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-toc { --mt-toc-indent: .85rem; font-size: .875rem; }
|
|
4
|
+
.mt-toc-title { margin: 0 0 .6rem; font-size: .75rem; font-weight: 650; letter-spacing: .06em; text-transform: uppercase; color: mt(foreground); }
|
|
5
|
+
.mt-toc ol, .mt-toc-mobile ol { list-style: none; margin: 0; padding: 0; }
|
|
6
|
+
.mt-toc ol { border-inline-start: 1px solid mt(border); }
|
|
7
|
+
.mt-toc li, .mt-toc-mobile li { margin: 0; }
|
|
8
|
+
.mt-toc .mt-toc-h3, .mt-toc-mobile .mt-toc-h3 { padding-inline-start: var(--mt-toc-indent); }
|
|
9
|
+
.mt-toc a, .mt-toc-mobile a { display: block; min-height: 24px; padding: .2rem 0 .2rem .85rem; line-height: 1.45; color: mt(muted-foreground); text-decoration: none; }
|
|
10
|
+
.mt-toc a { margin-inline-start: -1px; border-inline-start: 1px solid transparent; }
|
|
11
|
+
.mt-toc a:hover, .mt-toc-mobile a:hover { color: mt(foreground); border-inline-start-color: mt(muted-foreground); }
|
|
12
|
+
.mt-toc-mobile { margin: 0 0 1.5rem; border: 1px solid mt(border); border-radius: mt(radius); background: mt(muted); font-size: .875rem; }
|
|
13
|
+
.mt-toc-mobile > summary { cursor: pointer; padding: .55rem .85rem; font-weight: 600; }
|
|
14
|
+
.mt-toc-mobile > ol { padding: 0 .5rem .6rem 0; max-height: 50vh; overflow-y: auto; }
|
|
15
|
+
// The sticky column lists h2 only, so long pages stay scannable; the collapsed mobile list keeps h3 too.
|
|
16
|
+
.mt-doc-aside .mt-toc .mt-toc-h3 { display: none; }
|
|
17
|
+
.mt-doc-aside .mt-toc a { padding-top: .3rem; padding-bottom: .3rem; }
|
|
18
|
+
@media (min-width: 64rem) { .mt-toc-mobile { display: none; } }
|
|
19
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Loading and skeleton UI (optional sheet, CSS only): `loading:spinner`, `loading:bar` (thin top bar) and
|
|
2
|
+
// `skeleton:text|card|image|avatar|row` placeholders, plus .mt-ratio-* boxes that reserve space for media.
|
|
3
|
+
// Motion stops under prefers-reduced-motion; forced-colors keeps outlines visible; the shimmer follows dir.
|
|
4
|
+
@include mt-layer(components) {
|
|
5
|
+
.mt-spinner { display: inline-block; width: 1.25rem; height: 1.25rem; vertical-align: middle; border: 2px solid mt(border); border-top-color: mt(primary);
|
|
6
|
+
border-radius: 50%; animation: mt-spin .8s linear infinite; }
|
|
7
|
+
.mt-topbar { position: fixed; inset-block-start: 0; inset-inline: 0; z-index: 200; display: block; height: 3px; overflow: hidden; background: color-mix(in srgb, #{mt(primary)} 20%, transparent); }
|
|
8
|
+
.mt-topbar::before { content: ""; position: absolute; inset-block: 0; inset-inline-start: 0; width: 40%; background: mt(primary); animation: mt-bar 1.2s ease-in-out infinite; }
|
|
9
|
+
.mt-skeleton { display: block; margin: 0 0 .75rem; border-radius: mt(radius); background: linear-gradient(90deg, #{mt(muted)} 25%, #{mt(accent)} 50%, #{mt(muted)} 75%);
|
|
10
|
+
background-size: 200% 100%; animation: mt-shimmer 1.4s ease-in-out infinite; }
|
|
11
|
+
[dir="rtl"] .mt-skeleton { animation-direction: reverse; }
|
|
12
|
+
.mt-skeleton-text { height: .9rem; max-width: 36rem; box-shadow: 0 1.4rem 0 -.05rem mt(muted); margin-bottom: 2.1rem; }
|
|
13
|
+
.mt-skeleton-card { height: 9rem; border-radius: mt(radius-lg); }
|
|
14
|
+
.mt-skeleton-image, .mt-ratio-16x9 { aspect-ratio: 16 / 9; }
|
|
15
|
+
.mt-skeleton-image { width: 100%; }
|
|
16
|
+
.mt-skeleton-avatar { width: 2.5rem; height: 2.5rem; border-radius: 50%; }
|
|
17
|
+
.mt-skeleton-row { height: 2.5rem; border-radius: 0; border-bottom: 1px solid mt(border); }
|
|
18
|
+
.mt-ratio-4x3 { aspect-ratio: 4 / 3; }
|
|
19
|
+
.mt-ratio-1x1 { aspect-ratio: 1; }
|
|
20
|
+
.mt-prose img[width][height] { height: auto; }
|
|
21
|
+
@media (prefers-reduced-motion: reduce) {
|
|
22
|
+
.mt-spinner, .mt-skeleton, .mt-topbar::before { animation: none; }
|
|
23
|
+
.mt-topbar::before { width: 100%; opacity: .6; }
|
|
24
|
+
}
|
|
25
|
+
@media (forced-colors: active) {
|
|
26
|
+
.mt-skeleton { background: Canvas; border: 1px solid CanvasText; }
|
|
27
|
+
.mt-spinner { border-color: CanvasText; border-top-color: Highlight; }
|
|
28
|
+
.mt-topbar::before { background: Highlight; }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
@keyframes mt-spin { to { transform: rotate(360deg); } }
|
|
32
|
+
@keyframes mt-bar { 0% { inset-inline-start: -40%; } 100% { inset-inline-start: 100%; } }
|
|
33
|
+
@keyframes mt-shimmer { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } }
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Search box (header) and results list; needs a site /search.json (include modootoday/search.json).
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-search { position: relative; margin-inline-start: auto; flex: none; }
|
|
4
|
+
// Reserve the box from the first paint when scripting is on (search.js only wires it up), so the header does not jump.
|
|
5
|
+
@media (scripting: enabled) { .mt-search[hidden] { display: block; } }
|
|
6
|
+
.mt-search > .mt-icon { position: absolute; inset-inline-start: .65rem; top: 1.125rem; translate: 0 -50%; color: mt(muted-foreground); pointer-events: none; }
|
|
7
|
+
.mt-search input { font: inherit; font-size: .875rem; height: 2.25rem; padding: 0 .75rem; padding-inline-start: 2.1rem; border: 1px solid mt(border); border-radius: mt(radius);
|
|
8
|
+
background: mt(muted); color: mt(foreground); width: 12rem; transition: border-color .15s, background-color .15s; }
|
|
9
|
+
.mt-search input::placeholder { color: mt(muted-foreground); }
|
|
10
|
+
.mt-search input:hover { border-color: mt(muted-foreground); }
|
|
11
|
+
.mt-search input:focus-visible { outline-offset: 1px; background: mt(background); }
|
|
12
|
+
.mt-search-results { position: absolute; inset-inline-end: 0; z-index: 30; list-style: none; margin: .4rem 0 0; padding: .35rem; width: 22rem; max-width: calc(100vw - 2rem);
|
|
13
|
+
background: mt(card); color: mt(card-foreground); border: 1px solid mt(border); border-radius: mt(radius-lg); box-shadow: mt(shadow); }
|
|
14
|
+
.mt-search-results:empty { display: none; }
|
|
15
|
+
.mt-search-results li + li { margin-top: 0; }
|
|
16
|
+
.mt-search-results a { display: block; padding: .4rem .6rem; border-radius: var(--mt-p-radius-sm); text-decoration: none; font-size: .9rem; }
|
|
17
|
+
.mt-search-results a { color: mt(foreground); }
|
|
18
|
+
.mt-search-title { display: block; font-weight: 600; }
|
|
19
|
+
.mt-search-snippet { display: block; margin-top: .1rem; font-size: .8rem; line-height: 1.45; color: mt(muted-foreground);
|
|
20
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
21
|
+
.mt-search-results a:hover, .mt-search-results a:focus { background: mt(accent); color: mt(accent-foreground); }
|
|
22
|
+
@media (max-width: 47.99rem) { .mt-search { flex: 1 1 0; min-width: 0; } .mt-search input { width: 100%; padding-inline-end: .5rem; } .mt-search { position: static; }
|
|
23
|
+
.mt-search-results { inset-inline: 1rem; top: 2.9rem; width: auto; max-width: none; } }
|
|
24
|
+
// Narrow phones: search takes its own row under the title so the input stays usable next to the header buttons.
|
|
25
|
+
@media (max-width: 29.99rem) { .mt-search { order: 9; flex: 1 0 100%; position: relative; }
|
|
26
|
+
.mt-search-results { inset-inline: 0; top: 100%; } }
|
|
27
|
+
}
|
|
28
|
+
@include mt-layer(components) {
|
|
29
|
+
// 64–80rem: the one-line header is tight; let search shrink so it never overlaps the nav (WCAG 2.2 target-size).
|
|
30
|
+
@media (min-width: 64rem) { .mt-search { flex: 0 1 15rem; min-width: 5rem; } .mt-search input { width: 100%; } }
|
|
31
|
+
}
|
|
32
|
+
// Coarse pointers and forced colors (here, not in core _access, because this sheet loads after core).
|
|
33
|
+
@include mt-layer(components) {
|
|
34
|
+
@media (pointer: coarse) { .mt-search input { height: 2.75rem; font-size: 1rem; } }
|
|
35
|
+
@media (forced-colors: active) { .mt-search input { border: 1px solid ButtonText; } }
|
|
36
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Cards: c: features section, list items "- **Title** — description" (the dash is dropped in Liquid).
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-c-features > ul { --mt-card-padding: 1.25rem;
|
|
4
|
+
list-style: none; padding: 0; margin: 1.5rem 0 0; display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); }
|
|
5
|
+
.mt-c-features > ul > li { margin: 0; border: 1px solid mt(border); border-radius: mt(radius-lg); padding: var(--mt-card-padding);
|
|
6
|
+
background: mt(card); color: mt(muted-foreground); box-shadow: mt(shadow-sm); font-size: .9375rem; line-height: 1.6;
|
|
7
|
+
transition: border-color .15s, box-shadow .15s; }
|
|
8
|
+
.mt-c-features > ul > li code { white-space: nowrap; }
|
|
9
|
+
.mt-c-features > ul > li:hover { border-color: color-mix(in srgb, #{mt(primary)} 40%, #{mt(border)}); box-shadow: mt(shadow); }
|
|
10
|
+
.mt-c-features > ul > li > strong:first-child { display: block; margin-bottom: .35rem; color: mt(card-foreground); font-size: 1rem; }
|
|
11
|
+
@media (min-width: 48rem) {
|
|
12
|
+
.mt-cols-2 > ul { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
13
|
+
.mt-cols-3 > ul { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// c: cta sections: a centred, tinted panel around the heading and its action buttons (.mt-actions lives in core).
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-cta { margin-top: mt(space-section); padding: 2.5rem 2rem; text-align: center; border: 1px solid mt(border); border-radius: mt(radius-lg);
|
|
4
|
+
background: radial-gradient(120% 140% at 50% 0%, color-mix(in srgb, #{mt(primary)} 10%, #{mt(background)}), #{mt(muted)}); }
|
|
5
|
+
.mt-cta > h2 { margin: 0 0 .5rem; }
|
|
6
|
+
.mt-cta > .mt-actions { justify-content: center; margin-top: 1.25rem; }
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Gallery: c: gallery, a list of images → thumbnail grid; each opens a no-script :target lightbox with a close link.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-c-gallery > ul { list-style: none; padding: 0; margin: 1.5rem 0 0; display: grid; gap: .75rem; grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); }
|
|
4
|
+
.mt-c-gallery > ul > li { margin: 0; }
|
|
5
|
+
.mt-gallery-thumb { display: block; border-radius: mt(radius); overflow: hidden; border: 1px solid mt(border); }
|
|
6
|
+
.mt-gallery-thumb img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; transition: transform .2s; }
|
|
7
|
+
.mt-gallery-thumb:hover img { transform: scale(1.03); }
|
|
8
|
+
.mt-gallery-thumb:focus-visible { outline: 2px solid mt(ring); outline-offset: 2px; }
|
|
9
|
+
.mt-lightbox { display: none; }
|
|
10
|
+
.mt-lightbox:target { position: fixed; inset: 0; z-index: 100; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1rem;
|
|
11
|
+
padding: 1.5rem; background: rgba(0, 0, 0, .85); }
|
|
12
|
+
.mt-lightbox img { max-width: 100%; max-height: 80vh; border-radius: mt(radius); }
|
|
13
|
+
.mt-lightbox-close { display: inline-flex; align-items: center; min-height: 2.5rem; padding: 0 1rem; border-radius: 999px; background: #fff; color: #111; font-weight: 600; text-decoration: none; }
|
|
14
|
+
@media (prefers-reduced-motion: reduce) { .mt-gallery-thumb img { transition: none; } }
|
|
15
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Link cards: c: linkcards, list items "[Title](url) — description"; the whole card is one link target.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-c-linkcards > ul { list-style: none; padding: 0; margin: 1.5rem 0 0; display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); }
|
|
4
|
+
.mt-c-linkcards > ul > li { position: relative; margin: 0; padding: 1.1rem 1.25rem; border: 1px solid mt(border); border-radius: mt(radius-lg);
|
|
5
|
+
background: mt(card); color: mt(muted-foreground); font-size: .9375rem; transition: border-color .15s, box-shadow .15s; }
|
|
6
|
+
.mt-c-linkcards > ul > li > a:first-child { display: block; margin-bottom: .25rem; color: mt(card-foreground); font-weight: 650; text-decoration: none; }
|
|
7
|
+
.mt-c-linkcards > ul > li > a:first-child::before { content: ""; position: absolute; inset: 0; border-radius: inherit; }
|
|
8
|
+
.mt-c-linkcards > ul > li > a:first-child::after { content: " →"; color: mt(primary); }
|
|
9
|
+
[dir="rtl"] .mt-c-linkcards > ul > li > a:first-child::after { content: " ←"; }
|
|
10
|
+
.mt-c-linkcards > ul > li:hover { border-color: mt(primary); box-shadow: mt(shadow); }
|
|
11
|
+
.mt-c-linkcards > ul > li > a:first-child:focus-visible { outline: 2px solid mt(ring); outline-offset: 2px; border-radius: mt(radius); }
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Pricing: c: pricing; each ### is a plan card (price, feature list, link). recommended: <n> marks one plan in text.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-plans { display: grid; gap: 1rem; margin-top: 1.5rem; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); align-items: stretch; }
|
|
4
|
+
.mt-plan { position: relative; display: flex; flex-direction: column; padding: 1.5rem; border: 1px solid mt(border); border-radius: mt(radius-lg); background: mt(card); box-shadow: mt(shadow-sm); }
|
|
5
|
+
.mt-plan h3 { margin: 0 0 .5rem; font-size: 1.0625rem; }
|
|
6
|
+
.mt-plan h3 + p { margin: 0 0 1rem; color: mt(muted-foreground); }
|
|
7
|
+
.mt-plan h3 + p strong { color: mt(card-foreground); font-size: 1.875rem; font-weight: 750; letter-spacing: -.02em; }
|
|
8
|
+
.mt-plan ul { flex: 1; margin: 0 0 1.25rem; padding-inline-start: 1.1rem; color: mt(muted-foreground); font-size: .9375rem; }
|
|
9
|
+
.mt-plan .mt-actions { margin-top: auto; }
|
|
10
|
+
.mt-plan-recommended { border: 2px solid mt(primary); box-shadow: mt(shadow); }
|
|
11
|
+
.mt-plan-flag { align-self: flex-start; margin-bottom: .75rem; padding: .1rem .6rem; border-radius: 999px; background: mt(primary); color: mt(primary-foreground); font-size: .75rem; font-weight: 600; }
|
|
12
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Quote: c: quote; a quote whose last paragraph starts with "— " becomes figure > blockquote + figcaption.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-quote { margin: 1.5rem 0; padding: 1.5rem 1.75rem; border: 1px solid mt(border); border-radius: mt(radius-lg); background: mt(card); }
|
|
4
|
+
.mt-quote blockquote { margin: 0; padding: 0; border: 0; color: mt(card-foreground); font-size: 1.125rem; line-height: 1.6; }
|
|
5
|
+
.mt-quote blockquote > :last-child { margin-bottom: 0; }
|
|
6
|
+
.mt-quote figcaption { margin-top: 1rem; color: mt(muted-foreground); font-size: .875rem; font-weight: 600; }
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Subscribe: c: subscribe; the section text plus a static e-mail form posting to modootoday.subscribe.action.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-subscribe { display: flex; flex-wrap: wrap; gap: .5rem; align-items: flex-end; margin-top: 1.25rem; }
|
|
4
|
+
.mt-subscribe label { flex-basis: 100%; font-size: .875rem; font-weight: 600; }
|
|
5
|
+
.mt-subscribe input { flex: 1 1 14rem; min-height: 2.75rem; padding: 0 .9rem; border: 1px solid mt(border); border-radius: mt(radius);
|
|
6
|
+
background: mt(background); color: mt(foreground); font: inherit; }
|
|
7
|
+
.mt-subscribe input:focus-visible, .mt-subscribe button:focus-visible { outline: 2px solid mt(ring); outline-offset: 2px; }
|
|
8
|
+
.mt-subscribe button { min-height: 2.75rem; padding: 0 1.25rem; border: 0; border-radius: mt(radius); background: mt(primary); color: mt(primary-foreground); font: inherit; font-weight: 600; cursor: pointer; }
|
|
9
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Accordion: sections with `c: accordion`; each `###` becomes a disclosure (assets/js/modootoday/accordion.js).
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-c-accordion h3 { margin: 0; border-top: 1px solid mt(border); font-size: 1rem; }
|
|
4
|
+
.mt-c-accordion > h2 + h3 { margin-top: 1.25rem; }
|
|
5
|
+
.mt-accordion-trigger { all: unset; box-sizing: border-box; display: flex; justify-content: space-between; align-items: center; gap: 1rem; width: 100%;
|
|
6
|
+
padding: 1rem 0; cursor: pointer; font-weight: 600; }
|
|
7
|
+
.mt-accordion-trigger:hover { color: mt(primary); }
|
|
8
|
+
.mt-accordion-trigger:focus-visible { outline: 2px solid mt(ring); outline-offset: 2px; }
|
|
9
|
+
.mt-accordion-trigger::after { content: ""; flex: none; width: .5rem; height: .5rem; margin-inline-end: .25rem; border: solid mt(muted-foreground);
|
|
10
|
+
border-width: 0 2px 2px 0; transform: translateY(-25%) rotate(45deg); transition: transform .2s; }
|
|
11
|
+
.mt-accordion-trigger[aria-expanded="true"]::after { transform: translateY(25%) rotate(-135deg); }
|
|
12
|
+
.mt-accordion-panel { padding-bottom: 1rem; color: mt(muted-foreground); }
|
|
13
|
+
.mt-accordion-panel[hidden] { display: none; }
|
|
14
|
+
.mt-c-accordion { border-bottom: 1px solid mt(border); }
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Details: c: details (and c: faq); each ### heading becomes a native <details> summary. No script needed.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-details { border-top: 1px solid mt(border); }
|
|
4
|
+
.mt-details:last-of-type { border-bottom: 1px solid mt(border); }
|
|
5
|
+
.mt-details > summary { display: flex; justify-content: space-between; align-items: center; gap: 1rem; padding: 1rem 0; cursor: pointer; list-style: none; }
|
|
6
|
+
.mt-details > summary::-webkit-details-marker { display: none; }
|
|
7
|
+
.mt-details > summary h3 { margin: 0; font-size: 1rem; }
|
|
8
|
+
.mt-details > summary:hover { color: mt(primary); }
|
|
9
|
+
.mt-details > summary:focus-visible { outline: 2px solid mt(ring); outline-offset: 2px; }
|
|
10
|
+
.mt-details > summary::after { content: ""; flex: none; width: .5rem; height: .5rem; margin-inline-end: .25rem; border: solid mt(muted-foreground);
|
|
11
|
+
border-width: 0 2px 2px 0; transform: translateY(-25%) rotate(45deg); transition: transform .2s; }
|
|
12
|
+
.mt-details[open] > summary::after { transform: translateY(25%) rotate(-135deg); }
|
|
13
|
+
.mt-details > summary ~ * { color: mt(muted-foreground); }
|
|
14
|
+
.mt-details > :last-child { margin-bottom: 1rem; }
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// File tree: c: filetree, a nested list; items with a nested list are folders. Guides drawn with borders.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-c-filetree > ul { margin: 1.25rem 0; padding: .75rem 1rem; border: 1px solid mt(border); border-radius: mt(radius-lg); background: mt(muted); font: .875rem/1.7 mt(font-mono); }
|
|
4
|
+
.mt-c-filetree ul { list-style: none; }
|
|
5
|
+
.mt-c-filetree ul ul { margin: 0; padding-inline-start: 1.25rem; border-inline-start: 1px solid mt(border); }
|
|
6
|
+
.mt-c-filetree li { margin: 0; }
|
|
7
|
+
.mt-c-filetree li p { margin: 0; }
|
|
8
|
+
.mt-c-filetree li::before { content: ""; display: inline-block; width: .7rem; height: .85rem; margin-inline-end: .45rem; vertical-align: -.1rem;
|
|
9
|
+
border: 1.5px solid mt(muted-foreground); border-radius: 2px; }
|
|
10
|
+
.mt-c-filetree li:has(> ul)::before { width: .9rem; height: .7rem; border-radius: 2px 4px 2px 2px; background: color-mix(in srgb, #{mt(primary)} 25%, transparent); border-color: mt(primary); }
|
|
11
|
+
.mt-c-filetree li:has(> ul) { font-weight: 600; }
|
|
12
|
+
.mt-c-filetree li li:not(:has(> ul)) { font-weight: 400; }
|
|
13
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Parameter table: c: params, a GFM table (name, type, default, description); `required` in a cell becomes a badge.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-c-params table { font-size: .9375rem; }
|
|
4
|
+
.mt-c-params td:first-child code { color: mt(primary); font-weight: 600; white-space: nowrap; }
|
|
5
|
+
.mt-c-params td:nth-child(2) { color: mt(muted-foreground); font-family: mt(font-mono); font-size: .8125rem; }
|
|
6
|
+
.mt-param-required { display: inline-block; padding: 0 .45rem; border: 1px solid color-mix(in srgb, #{mt(caution)} 50%, transparent); border-radius: 999px;
|
|
7
|
+
color: mt(caution); font-size: .75rem; font-weight: 600; white-space: nowrap; }
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Steps: sections with `c: steps`; the ordered list (or ### headings) get numbered markers on a rail.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-c-steps { counter-reset: mt-step; }
|
|
4
|
+
.mt-c-steps > ol { list-style: none; padding: 0; margin-top: 1.5rem; counter-reset: mt-step; }
|
|
5
|
+
.mt-c-steps > ol > li, .mt-c-steps > h3 { counter-increment: mt-step; position: relative; padding-inline-start: 2.75rem; }
|
|
6
|
+
.mt-c-steps > ol > li { margin: 0; padding-bottom: 1.25rem; }
|
|
7
|
+
.mt-c-steps > ol > li:not(:last-child)::after { content: ""; position: absolute; inset-inline-start: .875rem; top: 2rem; bottom: .25rem; width: 1px; background: mt(border); }
|
|
8
|
+
.mt-c-steps > h3 ~ :not(h3) { padding-inline-start: 2.75rem; }
|
|
9
|
+
.mt-c-steps > ol > li::before, .mt-c-steps > h3::before { content: counter(mt-step); position: absolute; inset-inline-start: 0; top: 0;
|
|
10
|
+
width: 1.75rem; height: 1.75rem; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%;
|
|
11
|
+
background: mt(muted); border: 1px solid mt(border); color: mt(foreground); font-size: .8rem; font-weight: 650; }
|
|
12
|
+
.mt-c-steps > h3 { margin-top: 1.5rem; line-height: 1.75rem; }
|
|
13
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// The tablist scrolls sideways only: no negative margins or outer focus rings that would overflow it vertically.
|
|
2
|
+
// Tabs (assets/js/modootoday/tabs.js): c: tabs, ### name + code block pairs → WAI-ARIA tabs.
|
|
3
|
+
@include mt-layer(components) {
|
|
4
|
+
[role="tablist"] { display: flex; gap: .25rem; overflow: auto hidden; scrollbar-width: thin; box-shadow: inset 0 -1px mt(border); margin: 1.25rem 0 0; }
|
|
5
|
+
[role="tab"] { font: inherit; font-size: .875rem; line-height: 1.5; font-weight: 500; white-space: nowrap; background: none; color: mt(muted-foreground);
|
|
6
|
+
border: 0; border-bottom: 2px solid transparent; padding: .55rem .85rem; cursor: pointer; transition: color .15s; }
|
|
7
|
+
[role="tab"]:hover { color: mt(foreground); }
|
|
8
|
+
[role="tab"][aria-selected="true"] { color: mt(foreground); border-bottom-color: mt(primary); font-weight: 600; }
|
|
9
|
+
[role="tabpanel"] { margin-top: .75rem; }
|
|
10
|
+
[role="tabpanel"] pre { margin-top: 0; }
|
|
11
|
+
}
|
|
12
|
+
// Before tabs.js runs (scripting on): the first "### name" already draws as a tab row of the same height
|
|
13
|
+
// and only its code block shows, so grouping after load moves nothing. Without JS every method stays visible.
|
|
14
|
+
@media (scripting: enabled) {
|
|
15
|
+
@include mt-layer(components) {
|
|
16
|
+
[data-tabs]:not(:has([role="tablist"])) {
|
|
17
|
+
> h3:has(+ div, + pre) { font-size: .875rem; line-height: 1.5; padding: .55rem .85rem; margin: 1.25rem 0 0; border-bottom: 2px solid mt(primary); }
|
|
18
|
+
> h3 ~ h3:has(+ div, + pre), > h3 ~ h3 + * { display: none; }
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Timeline: sections with `c: timeline`; each ### heading is a date/milestone, content follows.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-c-timeline { --mt-timeline-line: #{mt(border)}; --mt-timeline-dot: #{mt(primary)}; }
|
|
4
|
+
.mt-c-timeline > h3, .mt-c-timeline > h3 ~ * { position: relative; margin-inline-start: .5rem; padding-inline-start: 1.5rem; border-inline-start: 2px solid var(--mt-timeline-line); }
|
|
5
|
+
.mt-c-timeline > h3 { margin-bottom: 0; padding-top: 1.25rem; margin-top: 0; font-size: .8125rem; font-weight: 650; letter-spacing: .02em; color: mt(muted-foreground); font-family: mt(font-mono); }
|
|
6
|
+
.mt-c-timeline > h2 + h3 { margin-top: 1rem; }
|
|
7
|
+
.mt-c-timeline > h3 ~ * { margin-top: 0; margin-bottom: 0; padding-bottom: .5rem; }
|
|
8
|
+
.mt-c-timeline > h3::before { content: ""; position: absolute; inset-inline-start: -.45rem; top: 1.55rem;
|
|
9
|
+
width: .75rem; height: .75rem; border-radius: 50%; background: var(--mt-timeline-dot); box-shadow: 0 0 0 3px #{mt(background)}; }
|
|
10
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Detail page partials (separate bundle). Uses the core tokens (--mt-*) already on the page; emits no tokens.
|
|
2
|
+
@import "../settings";
|
|
3
|
+
@import "../tools/functions";
|
|
4
|
+
@import "../tools/mixins";
|
|
5
|
+
@import "../kit/button";
|
|
6
|
+
@import "page";
|
|
7
|
+
@import "../tools/img-dark";
|
|
8
|
+
@include mt-img-dark(".mt-detail-cover img");
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Detail pages: header, facts list, media and one call to action. Print drops the call to action.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-detail-head { margin-bottom: 1.5rem; }
|
|
4
|
+
.mt-detail-kicker { margin: 0 0 .5rem; color: mt(muted-foreground); font-size: .875rem; font-weight: 600; letter-spacing: .02em; }
|
|
5
|
+
.mt-detail-head h1 { margin: 0; }
|
|
6
|
+
.mt-detail-lead { margin: .75rem 0 0; font-size: 1.125rem; color: mt(muted-foreground); }
|
|
7
|
+
.mt-detail-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); gap: 1rem 1.5rem; margin: 0 0 2rem;
|
|
8
|
+
padding: 1rem 1.25rem; border: 1px solid mt(border); border-radius: mt(radius); }
|
|
9
|
+
.mt-detail-facts dt { color: mt(muted-foreground); font-size: .8125rem; font-weight: 600; }
|
|
10
|
+
.mt-detail-facts dd { margin: .25rem 0 0; overflow-wrap: anywhere; }
|
|
11
|
+
.mt-detail-tags, .mt-detail-links { display: flex; flex-wrap: wrap; gap: .375rem .75rem; margin: 0; padding: 0; list-style: none; }
|
|
12
|
+
:is(.mt-detail-tags, .mt-detail-links) > li { margin: 0; }
|
|
13
|
+
.mt-detail-tags li { padding: 0 .5rem; border-radius: mt(radius); background: mt(muted); font-size: .8125rem; }
|
|
14
|
+
.mt-detail-cover { margin: 0 0 2rem; }
|
|
15
|
+
.mt-detail-cover img { display: block; inline-size: 100%; block-size: auto; aspect-ratio: 4 / 3; object-fit: cover; border-radius: mt(radius-lg); background: mt(muted); }
|
|
16
|
+
@media (min-width: 48rem) { .mt-detail-cover img { aspect-ratio: 21 / 9; } }
|
|
17
|
+
.mt-detail-media { margin: 0 0 2rem; }
|
|
18
|
+
.mt-detail-media audio { display: block; width: 100%; }
|
|
19
|
+
.mt-detail-media figcaption { margin-top: .5rem; font-size: .875rem; }
|
|
20
|
+
.mt-detail-cta { display: flex; flex-wrap: wrap; align-items: center; gap: .75rem 1rem; margin: 2.5rem 0 0; padding-top: 1.5rem;
|
|
21
|
+
border-top: 1px solid mt(border); }
|
|
22
|
+
@include mt-kit-button(".mt-detail-btn");
|
|
23
|
+
.mt-detail-cta .mt-ics { font-size: .875rem; font-weight: 600; }
|
|
24
|
+
@media print { .mt-detail-cta, .mt-detail-media audio { display: none; } }
|
|
25
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// CSS-only filter: radio i checked hides items without class mt-f<i>. Browsers without :has() show every item.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-dir-filter { border: 0; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: .5rem; }
|
|
4
|
+
.mt-dir-filter > label { display: inline-flex; align-items: center; min-height: 2.75rem; padding: 0 1rem; border: 1px solid mt(border);
|
|
5
|
+
border-radius: 999px; font-size: .875rem; font-weight: 600; cursor: pointer; user-select: none; }
|
|
6
|
+
.mt-dir-filter > input:checked + label { background: mt(foreground); border-color: mt(foreground); color: mt(background); }
|
|
7
|
+
.mt-dir-filter > input:focus-visible + label { outline: 2px solid mt(ring); outline-offset: 2px; }
|
|
8
|
+
@for $i from 1 through 12 {
|
|
9
|
+
.mt-dir:has(.mt-f-r#{$i}:checked) .mt-dir-item:not(.mt-f#{$i}) { display: none; }
|
|
10
|
+
}
|
|
11
|
+
@media (forced-colors: active) { .mt-dir-filter > input:checked + label { forced-color-adjust: none; background: Highlight; color: HighlightText; } }
|
|
12
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Card grid shared by every directory preset.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-dir-grid { list-style: none; margin: 1.5rem 0 0; padding: 0; display: grid; gap: 1rem;
|
|
4
|
+
grid-template-columns: repeat(auto-fill, minmax(min(100%, 16rem), 1fr)); }
|
|
5
|
+
.mt-dir-item { display: flex; flex-direction: column; gap: .75rem; margin: 0; padding: 1rem; border: 1px solid mt(border);
|
|
6
|
+
border-radius: mt(radius); background: mt(background); position: relative; }
|
|
7
|
+
.mt-dir-item:focus-within { outline: 2px solid mt(ring); outline-offset: 2px; }
|
|
8
|
+
.mt-dir-img { width: 100%; height: auto; aspect-ratio: 16 / 10; object-fit: cover; border-radius: calc(#{mt(radius)} - 2px); background: mt(muted); }
|
|
9
|
+
.mt-dir-title { font-size: 1.05rem; margin: 0; line-height: 1.35; }
|
|
10
|
+
.mt-dir-title > a { color: inherit; text-decoration: none; }
|
|
11
|
+
.mt-dir-title > a::after { content: ""; position: absolute; inset: 0; }
|
|
12
|
+
.mt-dir-title > a:focus-visible { outline: none; }
|
|
13
|
+
.mt-dir-meta { margin: .25rem 0 0; font-size: .875rem; color: mt(muted-foreground); }
|
|
14
|
+
.mt-dir-text { margin: .5rem 0 0; font-size: .9375rem; }
|
|
15
|
+
.mt-dir-tags { display: flex; flex-wrap: wrap; gap: .375rem; margin: .75rem 0 0; }
|
|
16
|
+
.mt-dir-tags > span { font-size: .75rem; padding: .125rem .5rem; border-radius: 999px; background: mt(muted); color: mt(muted-foreground); }
|
|
17
|
+
.mt-ics { position: relative; z-index: 1; display: inline-block; margin-top: .75rem; font-size: .875rem; font-weight: 600; }
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Directory engine partials (separate bundle): shells and buttons, card grid, CSS-only filter, presets.
|
|
2
|
+
@import "../settings";
|
|
3
|
+
@import "../tools/functions";
|
|
4
|
+
@import "../tools/mixins";
|
|
5
|
+
@import "../pages/shells";
|
|
6
|
+
@import "../pages/actions";
|
|
7
|
+
@import "grid";
|
|
8
|
+
@import "filter";
|
|
9
|
+
@import "presets";
|
|
10
|
+
@import "../tools/img-dark";
|
|
11
|
+
@include mt-img-dark('.mt-dir img:not([src$=".svg"])', '.mt-dir img[src$=".svg"]');
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Preset looks: team avatars, events with a date tile, sponsor and integration logos, jobs as rows.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-dir-team .mt-dir-item { align-items: center; text-align: center; }
|
|
4
|
+
.mt-dir-team .mt-dir-img { width: 6rem; height: 6rem; aspect-ratio: 1; border-radius: 50%; }
|
|
5
|
+
.mt-dir-events .mt-dir-item, .mt-dir-jobs .mt-dir-item { flex-direction: row; align-items: flex-start; }
|
|
6
|
+
.mt-dir-jobs .mt-dir-grid, .mt-dir-events .mt-dir-grid { grid-template-columns: 1fr; }
|
|
7
|
+
.mt-dir-events .mt-dir-img { flex: none; width: 7rem; aspect-ratio: 4 / 3; }
|
|
8
|
+
@media (max-width: 30rem) { .mt-dir-events .mt-dir-img { width: 4.5rem; } }
|
|
9
|
+
.mt-date-tile { flex: none; display: flex; flex-direction: column; align-items: center; justify-content: center; width: 4rem; height: 4rem;
|
|
10
|
+
border-radius: mt(radius); background: mt(muted); line-height: 1.1; text-transform: uppercase; font-size: .75rem; }
|
|
11
|
+
.mt-date-tile > b { font-size: 1.5rem; }
|
|
12
|
+
.mt-dir-sponsors .mt-dir-img, .mt-dir-integrations .mt-dir-img { width: auto; max-width: 100%; height: 3rem; aspect-ratio: auto;
|
|
13
|
+
object-fit: contain; background: none; }
|
|
14
|
+
.mt-dir-sponsors .mt-dir-item { align-items: center; text-align: center; }
|
|
15
|
+
@media print { .mt-dir-filter { display: none; } .mt-dir-item { break-inside: avoid; } }
|
|
16
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Docs-extra partials (separate bundle: reference, changelog, roadmap, glossary, hub, course, book). Uses the core tokens.
|
|
2
|
+
@import "../settings";
|
|
3
|
+
@import "../tools/functions";
|
|
4
|
+
@import "../tools/mixins";
|
|
5
|
+
@import "page";
|
|
6
|
+
@import "../tools/img-dark";
|
|
7
|
+
@include mt-img-dark(".mt-dx-cover");
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Shared header and the lists of each docs-extra layout.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-dx-head { margin: 1rem 0 1.5rem; }
|
|
4
|
+
.mt-dx-head h1 { margin: 0; }
|
|
5
|
+
.mt-dx-lead { margin: .5rem 0 0; font-size: 1.125rem; color: mt(muted-foreground); }
|
|
6
|
+
.mt-dx-kicker, .mt-dx-meta, .mt-dx-time, .mt-dx-count { color: mt(muted-foreground); font-size: .875rem; }
|
|
7
|
+
.mt-dx-kicker { margin: 0 0 .25rem; font-weight: 600; }
|
|
8
|
+
.mt-dx-toc ul, .mt-dx-letters ul, .mt-dx-cards, .mt-dx-col ul { margin: 0; padding: 0; list-style: none; }
|
|
9
|
+
.mt-dx-toc ul, .mt-dx-letters ul { display: flex; flex-wrap: wrap; gap: .25rem .75rem; margin-bottom: 1.5rem; }
|
|
10
|
+
.mt-dx-toc li, .mt-dx-letters li { margin: 0; }
|
|
11
|
+
.mt-dx-letters a { display: inline-block; min-width: 2rem; padding: .25rem; text-align: center; }
|
|
12
|
+
.mt-dx-member, .mt-dx-release { margin-top: 2rem; padding-top: 1rem; border-top: 1px solid mt(border); scroll-margin-top: 4rem; }
|
|
13
|
+
.mt-dx-member h2, .mt-dx-release h2 { margin-top: 0; }
|
|
14
|
+
.mt-dx-release time { margin-inline-start: .5rem; font-size: .875rem; font-weight: 400; color: mt(muted-foreground); }
|
|
15
|
+
.mt-dx-cat { font-size: .8125rem; text-transform: uppercase; letter-spacing: .04em; }
|
|
16
|
+
.mt-dx-warn { color: mt(caution); }
|
|
17
|
+
.mt-dx-cols, .mt-dx-cards { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); margin-bottom: 2rem; }
|
|
18
|
+
.mt-dx-col { padding: 1rem; border-radius: mt(radius-lg); background: mt(muted); }
|
|
19
|
+
.mt-dx-col h2 { margin: 0 0 .75rem; font-size: 1rem; }
|
|
20
|
+
.mt-dx-col li, .mt-dx-cards li { margin-top: .5rem; padding: .75rem 1rem; border: 1px solid mt(border); border-radius: mt(radius); background: mt(card); }
|
|
21
|
+
.mt-dx-col h3, .mt-dx-cards h2 { margin: 0; font-size: 1rem; }
|
|
22
|
+
.mt-dx-col p, .mt-dx-cards p { margin: .25rem 0 0; color: mt(muted-foreground); font-size: .9375rem; }
|
|
23
|
+
.mt-dx-cards li { position: relative; margin: 0; }
|
|
24
|
+
.mt-dx-cards li:hover { border-color: mt(primary); }
|
|
25
|
+
.mt-dx-cards a::after { content: ""; position: absolute; inset: 0; }
|
|
26
|
+
.mt-dx-letter { scroll-margin-top: 4rem; }
|
|
27
|
+
.mt-dx-terms dt { margin-top: 1rem; font-weight: 600; scroll-margin-top: 4rem; }
|
|
28
|
+
.mt-dx-terms dd { margin: .25rem 0 0; }
|
|
29
|
+
.mt-dx-syllabus > li { margin-bottom: 1rem; }
|
|
30
|
+
.mt-dx-syllabus h3 { margin: 0 0 .25rem; font-size: 1.0625rem; }
|
|
31
|
+
.mt-dx-book { display: grid; gap: 0 2rem; }
|
|
32
|
+
.mt-dx-cover { border-radius: mt(radius); box-shadow: 0 4px 16px rgba(0, 0, 0, .15); }
|
|
33
|
+
@media (min-width: 40rem) { .mt-dx-book { grid-template-columns: 200px 1fr; } .mt-dx-book > :not(.mt-dx-cover, div:first-of-type) { grid-column: 1 / -1; } }
|
|
34
|
+
.mt-dx-chapters ol { padding-inline-start: 0; list-style: none; }
|
|
35
|
+
.mt-dx-chapters li { padding: .5rem 0; border-bottom: 1px solid mt(border); }
|
|
36
|
+
@media print { .mt-dx-toc, .mt-dx-letters { display: none; } .mt-dx-col, .mt-dx-member, .mt-dx-release { break-inside: avoid; } }
|
|
37
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@import "../tools/img-dark";
|
|
2
|
+
// Showcase hero layout: copy on the left, scene on the right, one image behind both (dark mode via CSS filter only).
|
|
3
|
+
@include mt-layer(components) {
|
|
4
|
+
:where(:root) { --mt-hero-filter-dark: brightness(.42) saturate(.7) contrast(1.08); }
|
|
5
|
+
.mt-hero:has(> .mt-showcase) {
|
|
6
|
+
display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); column-gap: 1.5rem; align-content: center; clear: both;
|
|
7
|
+
position: relative; isolation: isolate; overflow: clip; border-radius: mt(radius-lg); padding: 3rem clamp(1.25rem, 4vw, 3rem); min-height: 28rem;
|
|
8
|
+
}
|
|
9
|
+
.mt-hero:has(> .mt-showcase) > :not(.mt-showcase) { grid-column: 1; }
|
|
10
|
+
.mt-hero:has(> .mt-showcase) :is(h1, p) { word-break: keep-all; }
|
|
11
|
+
.mt-hero:has(> .mt-showcase) h1 { font-size: unquote("clamp(2rem, 1.4rem + 1.6vw, 2.75rem)"); }
|
|
12
|
+
.mt-hero:has(> .mt-showcase) .mt-actions a { min-height: 44px; }
|
|
13
|
+
.mt-showcase { display: contents; }
|
|
14
|
+
.mt-showcase-bg { position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover; }
|
|
15
|
+
.mt-showcase-art { grid-column: 2; grid-row: 1 / span 9; align-self: center; position: relative; aspect-ratio: 4 / 3; }
|
|
16
|
+
.mt-hero:has(> .mt-showcase)::before {
|
|
17
|
+
content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
|
|
18
|
+
background: linear-gradient(100deg, unquote("color-mix(in srgb, var(--mt-background) 70%, transparent)") 0 35%, transparent 80%);
|
|
19
|
+
}
|
|
20
|
+
.mt-showcase-art svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
|
|
21
|
+
.mt-showcase-still { display: none; }
|
|
22
|
+
@media (prefers-reduced-motion: reduce) { .mt-showcase-motion { display: none; } .mt-showcase-still { display: block; } }
|
|
23
|
+
@media (max-width: 48rem) {
|
|
24
|
+
.mt-hero:has(> .mt-showcase) { grid-template-columns: minmax(0, 1fr); padding: 2rem 1.25rem; min-height: 0; }
|
|
25
|
+
.mt-showcase-art { grid-column: 1; grid-row: auto; width: min(100%, 22rem); justify-self: center; margin-top: 1.5rem; }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
@include mt-img-dark(".mt-showcase-bg", $filter: var(--mt-hero-filter-dark, var(--mt-img-filter-dark)));
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Showcase SVG scene colours: every fill and stroke is a --mt-* token, so light and dark follow the theme.
|
|
2
|
+
@include mt-layer(components) {
|
|
3
|
+
.mt-showcase-card { filter: drop-shadow(0 6px 10px rgba(31, 35, 40, .18)); }
|
|
4
|
+
.mt-showcase { --mt-sc-win: var(--mt-foreground); --mt-sc-ink: var(--mt-background); }
|
|
5
|
+
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .mt-showcase { --mt-sc-win: var(--mt-card); --mt-sc-ink: var(--mt-foreground); } }
|
|
6
|
+
:root[data-theme="dark"] .mt-showcase { --mt-sc-win: var(--mt-card); --mt-sc-ink: var(--mt-foreground); }
|
|
7
|
+
.mt-showcase-win { fill: var(--mt-sc-win); stroke: var(--mt-border); }
|
|
8
|
+
.mt-showcase-dot1 { fill: var(--mt-caution); } .mt-showcase-dot2 { fill: var(--mt-warning); } .mt-showcase-dot3 { fill: var(--mt-tip); }
|
|
9
|
+
.mt-showcase-c1 { stroke: var(--mt-code-keyword); } .mt-showcase-c2 { stroke: var(--mt-code-string); }
|
|
10
|
+
.mt-showcase-c3 { stroke: var(--mt-code-function); } .mt-showcase-c4 { stroke: var(--mt-code-comment); }
|
|
11
|
+
.mt-showcase-caret { fill: var(--mt-sc-ink); }
|
|
12
|
+
.mt-showcase-panel { fill: var(--mt-card); stroke: var(--mt-border); }
|
|
13
|
+
.mt-showcase-skel { fill: var(--mt-muted-foreground); opacity: .35; }
|
|
14
|
+
.mt-showcase-s1 { stop-color: var(--mt-primary); } .mt-showcase-s2 { stop-color: var(--mt-brand); stop-opacity: .6; }
|
|
15
|
+
.mt-showcase-trail { fill: none; stroke: var(--mt-brand); stroke-width: 1.5; stroke-dasharray: 4 6; opacity: .5; }
|
|
16
|
+
.mt-showcase-chip { fill: var(--mt-primary); }
|
|
17
|
+
.mt-showcase-chipt { fill: var(--mt-primary-foreground); font: 600 12px mt(font-mono); }
|
|
18
|
+
.mt-showcase-cursor { fill: var(--mt-foreground); stroke: var(--mt-background); stroke-width: 1.2; }
|
|
19
|
+
.mt-showcase-sparks { fill: var(--mt-brand); }
|
|
20
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Shared link-button look for the optional layout bundles (same as the core CTA): @include mt-kit-button(".sel").
|
|
2
|
+
@mixin mt-kit-button($sel, $primary: true) {
|
|
3
|
+
#{$sel} { display: inline-flex; align-items: center; gap: .5rem; min-height: 2.75rem; padding: 0 1.25rem; border-radius: mt(radius);
|
|
4
|
+
border: 1px solid mt(border); background: mt(background); color: mt(foreground); font: inherit; font-size: .9375rem;
|
|
5
|
+
font-weight: 600; text-decoration: none; cursor: pointer; }
|
|
6
|
+
@if $primary { #{$sel}:first-child { background: mt(primary); border-color: mt(primary); color: mt(primary-foreground); } }
|
|
7
|
+
#{$sel}:focus-visible { outline: 2px solid mt(ring); outline-offset: 2px; }
|
|
8
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Page meta line: last updated date and "Edit this page" link (modootoday/page-meta.html).
|
|
2
|
+
@include mt-layer(layout) {
|
|
3
|
+
.mt-page-meta { display: flex; flex-wrap: wrap; align-items: center; gap: .25rem .5rem; margin: mt(space-section) 0 0; padding-top: 1.25rem;
|
|
4
|
+
border-top: 1px solid mt(border); font-size: .875rem; color: mt(muted-foreground); }
|
|
5
|
+
.mt-page-meta time { font-variant-numeric: tabular-nums; color: mt(foreground); }
|
|
6
|
+
.mt-page-meta a { color: mt(muted-foreground); text-decoration: none; display: inline-flex; align-items: center; gap: .35rem; border-radius: mt(radius); }
|
|
7
|
+
.mt-page-meta a:hover { color: mt(primary); text-decoration: underline; text-underline-offset: .2em; }
|
|
8
|
+
.mt-page-meta + .mt-pagination { margin-top: 1.25rem; padding-top: 0; border-top: 0; }
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Safe area (iOS notch, home indicator, rounded corners) with viewport-fit=cover. Insets flow through
|
|
2
|
+
// --mt-safe-* (used by the shell, reset and menus) so sites and tests can override them; --mt-gutter is
|
|
3
|
+
// the page side padding before the inset (1rem below 48rem, in the shell).
|
|
4
|
+
// env() is unquoted for Ruby Sass 3.7 (github-pages).
|
|
5
|
+
@include mt-layer(layout) {
|
|
6
|
+
:root { --mt-gutter: 1.5rem;
|
|
7
|
+
--mt-safe-top: #{unquote("env(safe-area-inset-top)")}; --mt-safe-right: #{unquote("env(safe-area-inset-right)")};
|
|
8
|
+
--mt-safe-bottom: #{unquote("env(safe-area-inset-bottom)")}; --mt-safe-left: #{unquote("env(safe-area-inset-left)")}; }
|
|
9
|
+
}
|