@font-face { font-family: 'Iosevka Web'; src: url('/fonts/iosevka-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: 'Iosevka Web'; src: url('/fonts/iosevka-Bold.woff2') format('woff2'); font-weight: 700; font-style: normal; font-display: swap; } @font-face { font-family: 'Iosevka Web'; src: url('/fonts/iosevka-Italic.woff2') format('woff2'); font-weight: 400; font-style: italic; font-display: swap; } :root { --bg: #1a1b26; --bg-secondary: #1f2335; --bg-tertiary: #292e42; --fg: #c0caf5; --fg-muted: #a9b1d6; --fg-subtle: #565f89; --border: #292e42; --link: #7aa2f7; --link-hover: #7dcfff; --green: #9ece6a; --red: #f7768e; --yellow: #e0af68; --orange: #ff9e64; --purple: #bb9af7; --cyan: #7dcfff; --ml-base: #1f2335; --ml-mid: #3b4261; --ml-accent: #7aa2f7; --ml-accent-fg: #1a1b26; --blk: #292e42; --blu: #7aa2f7; --grn: #9ece6a; --ylw: #e0af68; --mag: #bb9af7; --cyn: #7dcfff; --brblk: #565f89; --tokyonight-bg: #1a1b26; --tokyonight-fg: #c0caf5; --tokyonight-blue: #7aa2f7; --tokyonight-green: #9ece6a; --tokyonight-red: #f7768e; --tokyonight-yellow: #e0af68; --tokyonight-comment: #565f89; } /* ===== reskinned original site.css (sizing preserved) ===== */ ::root { box-sizing: border-box; } html { font-size: 16px; /* font-weight: bold; */ } .container { margin-right: auto; margin-left: auto; padding-right: 0.75rem; padding-left: 0.75rem; max-width: 80rem; } @media screen and (max-width: 767px) { html { font-size: 16px; } .logo { max-width: 200px; } .row .column:not(:last-child) { margin-bottom: 1rem; } .video { width: 100%; } .list-form { width: 90%; } .newsletter-text { font-size: 0.42em; } blockquote { margin: 1rem 0rem; } aside.content-panel { display: none; } .container { margin-right: auto; margin-left: auto; padding-right: 1rem; padding-left: 1rem; max-width: 100%; } } /* sm */ @media screen and (min-width: 768px) { html { font-size: 16px; } .logo { max-width: 200px; } .row { display: flex; flex-direction: row; padding: 0; width: 100%; } .row .column { display: block; flex: 1 1 auto; max-width: 100%; width: 100%; } .row .column:not(:last-child) { margin-right: 10px; } .align-right { text-align: right; } .video { width: 70%; } .list-form { width: 60%; } .newsletter-text { font-size: 0.9em; } blockquote { margin: 1rem 2rem; } } /* md */ @media screen and (min-width: 992px) { html { font-size: 18px; } .logo { max-width: 300px; } blockquote { margin: 1rem 4rem; } } /* lg */ @media screen and (min-width: 2560px) { html { font-size: 18px; } } body { background-color: var(--tokyonight-bg); color: var(--tokyonight-fg); /* font-family: 'Iosevka Web', ui-monospace, monospace; */ font-family: 'Iosevka Web', ui-monospace, monospace; margin: 0; line-height: 1.5; } p { margin-top: 0; margin-bottom: 1rem; } b { font-weight: 700; } blockquote { background-color: #1f2335; font-style: italic; border: 1px solid; border-radius: 4px; border-image: linear-gradient(45deg, #ff9e64, #e0af68) 1; padding: 1.4rem 1.4rem 0.4rem 1.4rem; } blockquote p { margin-bottom: 0.6rem; } dt { font-weight: bold; } dd { border-left: 3px solid #7aa2f7; margin: 10px 40px; padding-left: 10px; } .nav { display: flex; flex-wrap: wrap; justify-content: center; } .subnav { background-color: #1f2335; display: flex; flex-wrap: wrap; justify-content: center; margin-top: 2rem; margin-bottom: 2rem; font-weight: bold; padding-top: 0.75rem; padding-bottom: 0.75rem; border-top: 0.05rem solid #9ece6a; border-bottom: 0.05rem solid #9ece6a; } .subnav a { /* margin-top: 2rem; */ /* margin-bottom: 2rem; */ margin-left: 0.5rem; margin-right: 0.5rem; } h1, h2, h3, h4, h5, h6 { color: var(--tokyonight-blue); font-weight: 600; line-height: 1.3; margin-top: 1.3rem; margin-bottom: 0.5rem; } h1 { color: var(--tokyonight-blue); font-size: 1.3rem; font-family: 'Iosevka Web', ui-monospace, monospace; } h2 { color: var(--cyn); line-height: 1.2; font-family: 'Iosevka Web', ui-monospace, monospace; } h3 { color: var(--tokyonight-blue); line-height: 1.1; } h4 { line-height: 1.0; color: #9ece6a; } a { color: var(--tokyonight-blue); } a:hover, a:focus { text-decoration: underline; color: #7aa2f7; } .anchor { color: #292e42; float: left; padding-right: 4px; margin-left: -23px; } .anchor:hover { text-decoration: none; } h2:hover .anchor, h3:hover .anchor, h4:hover .anchor { color: inherit; } kbd { font-family: 'Iosevka Web', ui-monospace, monospace; font-weight: 200; } pre { border: 1px solid var(--tokyonight-blue); background-color: #1f2335; padding: 1em; overflow-x: scroll; max-width: 100%; box-sizing: border-box; } code { color: var(--mag); word-break: break-word; white-space: pre-wrap; } pre, code { /* font-size: 0.75em; */ font-family: 'Iosevka Web', ui-monospace, monospace; } strong { font-weight: 700; } .content { margin-top: } .logo { display: block; padding-top: 0.5rem; padding-bottom: 0.5rem; margin-left: auto; margin-right: auto; text-align: center; } /* Nav links */ .nav-link { position: relative; padding: 0rem; font-size: 1.1rem; margin: 0.4rem 0.8rem 0.4rem 0rem; font-weight: bold; color: #c0caf5; } .nav-link:hover, .nav-link:focus { color: #c0caf5; background-color: transparent; } /* Active state gets a caret at the bottom */ .nav-link.active { color: #c0caf5; font-weight: bolder; } .nav-icon { float: right; } .nav-icons { width: auto; } .site-header { display: flex; flex-direction: column; justify-content: flex-end; font-weight: bold; /* background-image: url("/img/header_bg.png"); */ /* background-image: url("/img/samarkand-bg.png"); */ /* background-image: url("/img/castle-bg.png"); */ background-image: url("/img/forrest-1-bg.png"); /* background-image: url("/img/forrest-2-bg.png"); */ /* background-image: url("/img/mountain-3-bg.png"); */ /* background-image: url("/img/mountain-as-is-bg.png"); */ /* background-image: url("/img/mountain-bg.png"); */ background-size: cover; background-position: center; color: #1a1b26; border-bottom: 1px solid #292e42; min-height: 160px; padding: 0; } .site-masthead { font-family: 'Iosevka Web', ui-monospace, monospace; font-weight: bold; margin-bottom: 0; background-color: rgba(28, 31, 38, 0.5); border-bottom: 0.05rem solid var(--cyn); -webkit-box-shadow: inset 0 -0.1rem 0.25rem rgba(0, 0, 0, 0.1); box-shadow: inset 0 -0.1rem 0.25rem rgba(0, 0, 0, 0.1); } .site-title { margin-bottom: 0rem; font-size: 2rem; font-weight: bold; color: #7aa2f7; } .site-description { font-size: 1.5rem; color: #565f89; } @media (max-width: 40em) { .site-description { margin-bottom: 1rem; } } /* * Site pages */ .site-post { margin-bottom: 2rem; } .site-post-title { font-size: 2.2rem; } .site-post-meta { color: #a9b1d6; } .site-post-tags { margin-top: 3rem; margin-bottom: 1.25rem; font-size: 1.1rem; color: #565f89; } /* * Footer */ .site-footer { padding: 1.3rem 0; margin-top: 1rem; color: #c0caf5; font-size: 0.8rem; background-color: #1f2335; border-top: 0.05rem solid #9ece6a; } .site-footer p:last-child { margin-bottom: 0; } .site-footer-right { text-align: right; } .site-footer-line { margin-bottom: 0.4rem; } .video { position: relative; overflow: hidden; margin-left: auto; margin-right: auto; text-align: center; } .center { display: block; margin-left: auto; margin-right: auto; text-align: center; } .bold { font-weight: bold; } hr { border-bottom: 0.05rem solid #9ece6a; } .video::after { display: block; content: ""; padding-top: 56.25%; } .video iframe { position: absolute; top: 0; left: 0; border: 0; width: 100%; height: 100%; } .cta { width: 80%; padding: 1rem; margin-top: 1rem; margin-bottom: 1rem; border: 1px solid #ff9e64; border-radius: 4px; background-color: #1f2335; } .cta p { margin: 5px; } .stream-time { width: 80%; padding: 1rem; margin-top: 1rem; margin-bottom: 1rem; border: 1px solid #bb9af7; border-radius: 4px; background-color: #1f2335; } .list-form { font-size: 0.8rem; padding: 1rem; margin-bottom: 1rem; border: 1px solid #9ece6a; border-radius: 4px; background-color: #1f2335; } .list-form-title { font-weight: 600; font-size: 1.1rem; margin-bottom: 0.5rem; color: #9ece6a; } .list-form-label { margin-top: 0.8rem; font-weight: bold; } .list-form input[type="text"] { width: 100%; padding: 7px 7px; margin: 8px 0; box-sizing: border-box; border: 1px solid #9ece6a; border-radius: 4px; background-color: #1f2335; color: #c0caf5; } .list-form input[type="submit"] { width: 50%; padding: 10px 10px; margin: 8px 0; box-sizing: border-box; border: 1px solid #7aa2f7; border-radius: 4px; background-color: #7aa2f7; color: #1f2335; } .newsletter-text { } .register-button { width: 60%; padding: 10px 10px; border: 1px solid #7aa2f7; border-radius: 4px; background-color: #7aa2f7; color: #1f2335; } a:hover.register-button, a:focus.register-button { color: #1f2335; } aside.content-panel { margin-top: 0.75rem; background-color: #1f2335; border: 1px solid #565f89; border-radius: 6px; padding: 1rem; font-size: 0.9rem; } #tableOfContentContainer nav { padding-left: 0; } #tableOfContentContainer nav ul, #tableOfContentContainer nav ol { list-style: none; padding-left: 0; } #tableOfContentContainer nav ol li > ol, #tableOfContentContainer nav ul li > ul { margin-left: 1rem; padding-left: 0.5rem; border-left: 1px solid #565f89; } #tableOfContentContainer nav li { margin-bottom: 0.5rem; } #tableOfContentContainer nav a { color: var(--tokyonight-blue); text-decoration: none; } #tableOfContentContainer nav a:hover { text-decoration: underline; } .row { flex-wrap: wrap; } .row .column { min-width: 0; box-sizing: border-box; } .post-hero { margin: 1.5rem 0; text-align: center; } .post-hero img { width: 100%; max-width: 100%; height: auto; border-radius: 8px; border: 1px solid #3b4261; /* optional tokyonight border */ } .tutorial-grid { display: grid; grid-template-columns: repeat(3, 1fr); /* max of 3 */ gap: 2rem; max-width: 1280px; margin: 0 auto; padding: 0 1rem; } @media (max-width: 1024px) { .tutorial-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 600px) { .tutorial-grid { grid-template-columns: 1fr; overflow-x: auto; scroll-snap-type: x mandatory; display: grid; } .tutorial-card { scroll-snap-align: start; } } /* .tutorial-grid { */ /* display: grid; */ /* grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); */ /* gap: 2rem; */ /* max-width: 1280px; */ /* margin: 0 auto; */ /* padding: 0 1rem; */ /* } */ .tutorial-card-title { font-size: 1.2rem; color: #7aa2f7; margin-bottom: 0.5rem; } .tutorial-card-title a { text-decoration: none; color: inherit; } .tutorial-card-title a:hover { text-decoration: underline; } .tutorial-card-date { font-size: 0.875rem; color: #565f89; margin-bottom: 0.5rem; } .tutorial-card-description { font-size: 0.95rem; color: #c0caf5; } .tutorial-card { width: 426px; /* max-width: 480px; */ background-color: var(--blk); border: 1px solid var(--blu); border-radius: 8px; padding: 1rem; color: #c0caf5; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); box-sizing: border-box; } @media (max-width: 768px) { .tutorial-card { width: 100%; } } .tutorial-card-image { width: 100%; aspect-ratio: 16 / 9; border: 1px solid var(--blu); border-radius: 4px; margin-bottom: 1rem; background-color: #16161e; box-sizing: border-box; } .btn-primary { display: inline-block; padding: 0.5rem 1.25rem; border: 2px solid var(--blu); color: var(--blu); text-decoration: none; border-radius: 0.25rem; font-weight: 600; } .btn-primary:hover { background-color: var(--blu); color: #000; } .btn-outline { display: inline-block; padding: 0.5rem 1.25rem; border: 2px solid var(--cyn); color: var(--cyn); text-decoration: none; border-radius: 0.25rem; font-weight: 600; } .btn-outline-secondary { display: inline-block; padding: 0.5rem 1.25rem; border: 2px solid var(--mag); color: var(--mag); text-decoration: none; border-radius: 0.25rem; font-weight: 600; } .btn-outline-secondary:hover { background-color: var(--mag); color: #000; } .btn-outline:hover { background-color: var(--cyn); color: #000; } .recent-tutorials-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 2rem; max-width: 1280px; margin: 0 auto; padding: 0 1rem; } table { border-collapse: collapse; width: 100%; margin: 1.5rem 0; font-size: 0.95rem; } th, td { border: 1px solid #565f89; padding: 0.5rem 0.75rem; text-align: left; } th { background-color: #1a1b26; /* or your Tokyonight bg */ color: #c0caf5; /* Tokyonight fg */ } td { background-color: #1f2335; /* Slightly lighter bg */ color: #a9b1d6; } @media screen and (max-width: 768px) { table, thead, tbody, th, td, tr { display: block; } tr { margin-bottom: 1rem; } th { display: none; } td { border: none; position: relative; padding-left: 1.5rem; } td::before { content: attr(data-label); position: absolute; left: 0; top: 0; font-weight: bold; color: #7aa2f7; } } /* ---- vim modeline (from forums.tonybtw.com) ---- */ body { padding-bottom: 2.5rem; } footer.modeline { position: fixed; left: 0; right: 0; bottom: 0; z-index: 50; background: var(--bg); border-top: 1px solid var(--border); font-size: 0.85rem; line-height: 1.9; overflow: hidden; } .ml-row { display: flex; align-items: stretch; white-space: nowrap; } .ml-a, .ml-b, .ml-c { padding: 0 0.6rem; } .ml-a { background: var(--ml-accent); color: var(--ml-accent-fg); font-weight: 700; } .ml-b { background: var(--ml-mid); color: var(--fg-muted); } .ml-c { background: var(--ml-base); color: var(--fg-muted); } .ml-fill { flex: 1; background: var(--bg); min-width: 1rem; } .ml-sep::before { display: inline-block; } .ml-fwd::before { content: "\e0b0"; } .ml-bwd::before { content: "\e0b2"; } .sep-a-b { color: var(--ml-accent); background: var(--ml-mid); } .sep-b-c { color: var(--ml-mid); background: var(--ml-base); } .sep-c-bar { color: var(--ml-base); background: var(--bg); } .sep-bar-c { color: var(--ml-base); background: var(--bg); } .sep-c-b { color: var(--ml-mid); background: var(--ml-base); } .sep-b-a { color: var(--ml-accent); background: var(--ml-mid); } /* code blocks: ONE box. plain
and the pandoc wrapper both get exactly one border. */
pre { border: 1px solid var(--border); background-color: var(--bg-secondary); overflow-x: auto; }
div.sourceCode {
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: 6px;
margin: 1rem 0;
overflow: hidden;
}
pre.sourceCode {
margin: 0;
padding: 0.85rem 1rem;
background: none;
border: none;
border-radius: 0;
overflow-x: auto;
}
pre.sourceCode code, div.sourceCode code { color: var(--fg); white-space: pre; word-break: normal; }
.sourceCode a { color: inherit; text-decoration: none; }
/* pandoc/skylighting token colours -> tokyo night */
.sourceCode .kw, .sourceCode .cf { color: var(--purple); }
.sourceCode .fu, .sourceCode .ex, .sourceCode .bu { color: var(--link); }
.sourceCode .dt { color: var(--cyan); }
.sourceCode .st, .sourceCode .ch, .sourceCode .vs, .sourceCode .ss { color: var(--green); }
.sourceCode .co { color: var(--fg-subtle); font-style: italic; }
.sourceCode .dv, .sourceCode .bn, .sourceCode .fl, .sourceCode .cn { color: var(--orange); }
.sourceCode .va { color: var(--yellow); }
.sourceCode .at, .sourceCode .pp { color: var(--cyan); }
.sourceCode .op { color: var(--fg-muted); }
/* ===== overrides: forums-style header + sticky TOC + responsive cards ===== */
.site-header {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 1rem;
background-color: var(--bg-secondary);
background-image: none;
border-bottom: 1px solid var(--border);
min-height: 0;
padding: 1rem 2rem;
color: var(--fg);
}
.site-masthead {
background-color: transparent;
box-shadow: none;
border: none;
width: 100%;
}
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
flex-wrap: wrap;
gap: 1rem;
padding: 0;
}
.navbar-brand {
font-size: 1.15rem;
font-weight: 700;
background: linear-gradient(to right, var(--link), var(--purple));
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
text-decoration: none;
}
.navbar-brand:hover { text-decoration: none; filter: brightness(1.15); }
.nav-menu {
display: flex;
align-items: center;
gap: 1.25rem;
list-style: none;
margin: 0;
padding: 0;
flex-wrap: wrap;
}
.nav-menu a { color: var(--fg-muted); text-decoration: none; }
.nav-menu a:hover { color: var(--fg); }
.nav-menu a.discord {
background: var(--link);
color: var(--ml-accent-fg);
padding: 0.3rem 0.8rem;
border-radius: 4px;
font-weight: 700;
}
.nav-menu a.discord:hover { text-decoration: none; background: var(--link-hover); }
/* hamburger (pure CSS, no JS): hidden on desktop */
.nav-toggle { display: none; }
@media (max-width: 768px) {
.nav-toggle {
display: block;
background: none;
border: none;
cursor: pointer;
color: var(--fg);
font-size: 1.6rem;
line-height: 1;
padding: 0 0.25rem;
order: 2;
}
.nav-menu {
display: none;
flex-basis: 100%;
flex-direction: column;
align-items: stretch;
gap: 0;
order: 3;
margin-top: 0.5rem;
}
.nav-toggle-cb:checked ~ .nav-menu { display: flex; }
.nav-menu li { width: 100%; }
.nav-menu li a {
display: block;
padding: 0.7rem 0.25rem;
border-top: 1px solid var(--border);
}
.nav-menu a.discord {
display: inline-block;
width: auto;
margin: 0.6rem 0.25rem 0;
border-top: none;
}
}
.site-post-title { text-align: center; }
.site-post-meta { text-align: center; margin-bottom: 1.5rem; }
main.container > .row {
display: flex;
flex-wrap: nowrap;
align-items: flex-start;
gap: 2rem;
}
main.container > .row > .column { flex: 1 1 auto; min-width: 0; width: auto; max-width: none; }
aside.content-panel {
flex: 0 0 260px;
align-self: flex-start;
position: sticky;
top: 1.5rem;
max-height: calc(100vh - 3rem);
overflow-y: auto;
}
.content-panel .toc-label {
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--fg-subtle);
display: block;
margin-bottom: 0.5rem;
}
@media (max-width: 900px) {
main.container > .row { flex-direction: column; }
aside.content-panel { display: none; }
}
/* cards: drop the fixed 426px width so the grid is responsive */
.tutorial-card { width: auto; }
.tutorial-card:hover { border-color: var(--link); }
/* ---- tag chips ---- */
.card-tags { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.6rem; }
.ctag {
font-size: 0.75rem;
color: var(--cyan);
border: 1px solid var(--border);
border-radius: 3px;
padding: 0 0.4rem;
text-decoration: none;
}
.ctag:hover { border-color: var(--cyan); text-decoration: none; }
/* ---- TOC list (pandoc emits a bare