Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/publish-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,9 @@ jobs:
- name: Record deployed revision
run: printf '%s\n' "$GITHUB_SHA" > docs/_site/deployment-revision.txt

- name: Remove internal DocFX build manifest
run: rm -- docs/_site/manifest.json

- name: Upload GitHub Pages artifact
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with:
Expand Down
3 changes: 2 additions & 1 deletion docs/docfx.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,11 @@
"_appLogoPath": "images/asibackbone-icon-50.png",
"_appFaviconPath": "images/favicon.ico",
"_enableSearch": true,
"_deferSearch": true,
"_canonicalBaseUrl": "https://asibackbone.github.io/Learning/",
"_structuredDataSiteName": "ASI Backbone Learning",
"_structuredDataSiteAlternateName": "Accountable Systems Infrastructure (ASI) Backbone Learning",
"_structuredDataSiteDescription": "Accountable Systems Infrastructure (ASI) Backbone Learning provides practical .NET architecture tutorials, labs, and reference patterns for governed execution, secure applications, AI integration, and policy-driven systems.",
"_structuredDataSiteDescription": "Practical .NET architecture tutorials, labs, and reference patterns for governed execution, secure applications, AI integration, and policy-driven systems.",
"_structuredDataPublisherName": "ASI Backbone",
"_structuredDataPublisherAlternateName": "Accountable Systems Infrastructure (ASI) Backbone",
"_structuredDataPublisherUrl": "https://github.com/AsiBackbone",
Expand Down
369 changes: 160 additions & 209 deletions docs/index.md

Large diffs are not rendered by default.

15 changes: 9 additions & 6 deletions docs/templates/layout/_master.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
<meta http-equiv="refresh" content="0;URL='{{redirect_url}}'">
{{/redirect_url}}
{{^redirect_url}}
<title>{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}</title>
<title>{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}}{{#_appTitle}} | {{_appTitle}}{{/_appTitle}}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="google-site-verification" content="R9IrfghOCGIgoGKd3mtDyPs_iTMXCVltPrGBNPVnFtA" />
<meta name="msvalidate.01" content="531C86B7ADD51375BAF3F1A3845AF815" />
<meta name="title" content="{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}">
<meta name="title" content="{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}}{{#_appTitle}} | {{_appTitle}}{{/_appTitle}}">
{{#_description}}<meta name="description" content="{{_description}}">{{/_description}}
{{#description}}<meta name="description" content="{{description}}">{{/description}}
{{#_canonicalUrl}}<link rel="canonical" href="{{_canonicalUrl}}">{{/_canonicalUrl}}
Expand Down Expand Up @@ -43,12 +43,14 @@
{{#_structuredDataJson}}<script type="application/ld+json">{{{_structuredDataJson}}}</script>{{/_structuredDataJson}}
<link rel="icon" href="{{_rel}}{{{_appFaviconPath}}}{{^_appFaviconPath}}favicon.ico{{/_appFaviconPath}}">
<link rel="alternate" type="application/rss+xml" title="ASI Backbone Learning" href="{{_rel}}feed.xml">
{{#_appLogoPath}}<link rel="preload" as="image" href="{{_rel}}{{{_appLogoPath}}}">{{/_appLogoPath}}
<link rel="stylesheet" href="{{_rel}}public/docfx.min.css">
<link rel="stylesheet" href="{{_rel}}public/main.css">
<meta name="docfx:navrel" content="{{_navRel}}">
<meta name="docfx:tocrel" content="{{_tocRel}}">
{{^_disableToc}}<meta name="docfx:tocrel" content="{{_tocRel}}">{{/_disableToc}}
{{#_noindex}}<meta name="searchOption" content="noindex">{{/_noindex}}
{{#_enableSearch}}<meta name="docfx:rel" content="{{_rel}}">{{/_enableSearch}}
{{#_deferSearch}}<meta name="docfx:defersearch" content="true">{{/_deferSearch}}
{{#_disableNewTab}}<meta name="docfx:disablenewtab" content="true">{{/_disableNewTab}}
{{#_disableTocFilter}}<meta name="docfx:disabletocfilter" content="true">{{/_disableTocFilter}}
{{#docurl}}<meta name="docfx:docurl" content="{{docurl}}">{{/docurl}}
Expand Down Expand Up @@ -86,12 +88,13 @@

{{^redirect_url}}
<body class="tex2jax_ignore" data-layout="{{_layout}}{{layout}}" data-yaml-mime="{{yamlmime}}">
<a class="skip-link" href="#main-content">Skip to content</a>
<header class="bg-body border-bottom">
{{^_disableNavbar}}
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="{{_appLogoUrl}}{{^_appLogoUrl}}{{_rel}}index.html{{/_appLogoUrl}}">
<img id="logo" class="svg" src="{{_rel}}{{{_appLogoPath}}}{{^_appLogoPath}}logo.svg{{/_appLogoPath}}" alt="{{_appName}}" >
<img id="logo" class="svg" src="{{_rel}}{{{_appLogoPath}}}{{^_appLogoPath}}logo.svg{{/_appLogoPath}}" alt="" width="50" height="50">
{{_appName}}
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
Expand All @@ -101,7 +104,7 @@
<div id="navbar">
{{#_enableSearch}}
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<i class="bi bi-search" aria-hidden="true"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="{{__global.search}}" autocomplete="off" aria-label="Search">
</form>
{{/_enableSearch}}
Expand All @@ -112,7 +115,7 @@
{{/_disableNavbar}}
</header>

<main class="container-xxl">
<main class="container-xxl" id="main-content" tabindex="-1">
{{^_disableToc}}
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
Expand Down
245 changes: 245 additions & 0 deletions docs/templates/public/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,248 @@
margin-top: 0.25rem;
font-size: 0.95rem;
}

.skip-link {
position: fixed;
top: 0.5rem;
left: 0.5rem;
z-index: 1100;
padding: 0.65rem 1rem;
border-radius: 0.375rem;
background: var(--bs-body-bg);
color: var(--bs-link-color);
font-weight: 600;
box-shadow: 0 0 0 3px var(--bs-focus-ring-color);
transform: translateY(-150%);
transition: transform 120ms ease-in-out;
}

.skip-link:focus {
transform: translateY(0);
}

.home-hero {
margin: 0.75rem 0 2rem;
padding: clamp(1.25rem, 4vw, 2.5rem);
border: 1px solid var(--bs-border-color);
border-radius: 1rem;
background: linear-gradient(135deg, rgba(var(--bs-primary-rgb), 0.12), transparent 65%);
}

.home-kicker {
margin-bottom: 0.5rem;
color: var(--bs-primary-text-emphasis);
font-size: 0.875rem;
font-weight: 700;
letter-spacing: 0.045em;
text-transform: uppercase;
}

.home-summary {
max-width: 52rem;
margin-bottom: 1.25rem;
font-size: clamp(1.1rem, 2.5vw, 1.4rem);
line-height: 1.55;
}

.home-actions {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
}

.home-actions .btn {
min-width: 9rem;
font-weight: 600;
}

.home-principle {
max-width: 54rem;
margin: 1.25rem 0 0;
padding-top: 1rem;
border-top: 1px solid var(--bs-border-color);
font-weight: 600;
}

.entry-point-grid,
.learning-path-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1rem;
margin: 1rem 0 2rem;
}

.entry-point {
display: flex;
flex-direction: column;
gap: 0.35rem;
padding: 1rem 1.1rem;
border: 1px solid var(--bs-border-color);
border-radius: 0.75rem;
color: var(--bs-body-color);
text-decoration: none;
transition: border-color 120ms ease-in-out, box-shadow 120ms ease-in-out, transform 120ms ease-in-out;
}

.entry-point:hover,
.entry-point:focus-visible {
border-color: var(--bs-primary);
box-shadow: 0 0.3rem 0.9rem rgba(var(--bs-primary-rgb), 0.12);
color: var(--bs-body-color);
transform: translateY(-2px);
}

.entry-point strong {
color: var(--bs-link-color);
}

.entry-point span {
color: var(--bs-secondary-color);
}

.process-flow {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 1.5rem 1rem;
margin: 1.25rem 0 2rem;
padding: 0;
list-style-position: inside;
}

.process-flow li {
position: relative;
min-height: 5rem;
padding: 1.65rem 0.75rem 1rem;
border: 1px solid var(--bs-border-color);
border-radius: 0.75rem;
background: var(--bs-tertiary-bg);
font-weight: 600;
text-align: center;
}

.process-flow li::marker {
color: var(--bs-primary);
font-weight: 700;
}

.process-flow li span {
display: block;
margin-left: 0.3rem;
color: var(--bs-secondary-color);
font-size: 0.8rem;
font-weight: 400;
}

.process-flow-short {
grid-template-columns: repeat(7, minmax(0, 1fr));
}

.learning-path-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}

.learning-path-card {
display: flex;
min-width: 0;
flex-direction: column;
padding: 1.25rem;
border: 1px solid var(--bs-border-color);
border-radius: 0.75rem;
background: var(--bs-body-bg);
}

.learning-path-card h3 {
margin: 0.35rem 0 0.65rem;
font-size: 1.2rem;
}

.learning-path-card p {
flex: 1;
color: var(--bs-secondary-color);
}

.learning-path-card > a {
align-self: flex-start;
font-weight: 600;
}

.path-level {
color: var(--bs-primary-text-emphasis);
font-size: 0.75rem;
font-weight: 700;
letter-spacing: 0.035em;
text-transform: uppercase;
}

.home-details {
margin: 2rem 0;
padding: 1rem 1.25rem;
border: 1px solid var(--bs-border-color);
border-radius: 0.75rem;
background: var(--bs-tertiary-bg);
}

.home-details summary {
cursor: pointer;
font-weight: 600;
}

.home-details[open] summary {
margin-bottom: 1rem;
}

@media (max-width: 991.98px) {
.learning-path-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}

.process-flow,
.process-flow-short {
grid-template-columns: repeat(2, minmax(0, 1fr));
}

.process-flow li:nth-child(4)::after {
right: -1.15rem;
bottom: auto;
transform: none;
}

.process-flow li:nth-child(even):not(:last-child)::after {
right: 50%;
bottom: -1.45rem;
transform: translateX(50%) rotate(90deg);
}
}

@media (max-width: 575.98px) {
.home-hero {
margin-top: 0.25rem;
padding: 1.1rem;
}

.home-actions .btn {
width: 100%;
}

.entry-point-grid,
.learning-path-grid,
.process-flow,
.process-flow-short {
grid-template-columns: 1fr;
}

.process-flow li:not(:last-child)::after,
.process-flow li:nth-child(4)::after,
.process-flow-short li:nth-child(4)::after {
right: 50%;
bottom: -1.45rem;
transform: translateX(50%) rotate(90deg);
}
}

@media (prefers-reduced-motion: reduce) {
.skip-link,
.entry-point {
transition: none;
}
}
Loading
Loading