starlight-theme-next
Version:
Starlight theme inspired by the Next.js docs.
652 lines (523 loc) • 14.3 kB
CSS
@layer starlight, nextjs;
@layer nextjs {
:root {
--sl-font: "Geist Sans", sans-serif;
--sl-font-mono: "Geist Mono", monospace;
--sl-mobile-toc-height: 3.5rem;
}
/* Dark mode colors. */
:root {
--sl-color-accent-low: #142245;
--sl-color-accent: #305adf;
--sl-color-accent-high: #b3c8f7;
--sl-color-white: #ffffff;
--sl-color-gray-1: #dcdcdc;
--sl-color-gray-2: #a8a8a8;
--sl-color-gray-3: #737373;
--sl-color-gray-4: #4a4a4a;
--sl-color-gray-5: #2f2f2f;
--sl-color-gray-6: #1b1b1b;
--sl-color-gray-7: #111111;
--sl-color-black: #0e0e0e;
--sl-color-bg-sidebar: var(--sl-color-black);
--sl-nextjs-header-bg-color: rgba(14, 14, 14, 0.6);
--sl-text-h1: var(--sl-text-3xl);
--sl-text-h2: var(--sl-text-2xl);
--sl-text-h3: var(--sl-text-xl);
--sl-text-h4: var(--sl-text-lg);
--sl-text-h5: unset;
--temp--toc-total-width: calc(
var(--__toc-width, var(--sl-sidebar-width))
/* actual sidebar width or fallback */ +
(2 * var(--__toc-width, 1.5rem))
/* extra padding/margins for TOC area */
);
--temp--available-space: calc(
100% - var(--temp--toc-total-width)
/* subtract full sidebar+TOC width */ -
var(--sl-content-inline-start, 0rem) /* subtract content indent */ -
var(--sl-content-width) /* subtract content block width */
);
/* finally center that remaining space (divide by 2) and subtract fixed 1.5rem gap */
--sidebar-margin-left: max(
0rem,
calc((var(--temp--available-space) / 2) - 1.5rem)
);
}
@media (min-width: 800px) {
:root {
--sl-nav-pad-x: calc(1.5rem + var(--sidebar-margin-left));
}
}
/* Light mode colors. */
:root[data-theme="light"] {
--sl-color-accent-low: #c7d7fa;
--sl-color-accent: #325ce1;
--sl-color-accent-high: #192d66;
--sl-color-white: #181818;
--sl-color-gray-1: #272727;
--sl-color-gray-2: #383838;
--sl-color-gray-3: #585858;
--sl-color-gray-4: #8b8b8b;
--sl-color-gray-5: #c2c2c2;
--sl-color-gray-6: #eeeeee;
--sl-color-gray-7: #f6f6f6;
--sl-color-black: #ffffff;
--sl-nextjs-header-bg-color: rgba(255, 255, 255, 0.5);
}
/* Header */
header.header {
-webkit-backdrop-filter: blur(1rem);
backdrop-filter: blur(1rem);
background-color: var(--sl-nextjs-header-bg-color);
color: var(--sl-color-white);
border-bottom: 1px solid var(--sl-color-hairline);
}
@media (min-width: 800px) {
header.header > .header > div.sl-flex:has(site-search) {
justify-self: end;
min-width: 15rem;
}
header.header
> .header
> div.sl-flex:has(site-search)
> site-search
> button {
color: var(--sl-color-gray-1);
}
header.header
> .header
> div.sl-flex:has(site-search)
> site-search:hover
> button {
background-color: var(--sl-color-gray-6);
border-color: var(--sl-color-gray-5);
color: var(--sl-color-gray-1);
}
.social-icons {
gap: 1.5rem;
margin-right: 1rem;
}
.social-icons::after {
display: none;
}
.social-icons > a {
border: 1px solid var(--sl-color-gray-5);
border-radius: 0.5rem;
height: 100%;
padding: 0.69rem;
color: var(--sl-color-gray-1);
}
.social-icons > a:hover {
opacity: 1;
background-color: var(--sl-color-gray-6);
}
header.header > .header > .right-group {
gap: 0;
}
:is(starlight-theme-select, starlight-lang-select) {
color: var(--sl-color-gray-1);
border-radius: 0.5rem;
border: 1px solid var(--sl-color-gray-5);
padding-inline-start: 0.5rem;
}
:is(starlight-theme-select, starlight-lang-select) > label > select {
padding-block: 0.5rem;
}
:is(starlight-theme-select, starlight-lang-select):hover {
background-color: var(--sl-color-gray-6);
}
:is(starlight-theme-select, starlight-lang-select):hover > label {
color: var(--sl-color-gray-1);
}
}
@media (min-width: 1152px) {
.social-icons {
gap: 2rem;
}
header.header > .header > .right-group {
gap: 0.5rem;
}
}
/* Sidebar */
.sidebar-pane {
border-inline-end: 0;
}
@media (min-width: 800px) {
.sidebar-pane {
margin-left: var(--sidebar-margin-left);
}
}
@media (min-width: 50rem) {
:root {
--sl-sidebar-pad-x: 1.25rem;
}
}
.sidebar-content {
padding-top: 1.5rem;
}
.sidebar-content summary {
display: flex;
flex-direction: row;
justify-content: space-between;
gap: 0.25rem;
padding-left: 0;
padding-right: 0;
font-weight: 700;
}
/* .sidebar-content .caret {
display: none;
}
@media (min-width: 50rem) {
.sidebar-content summary {
--caret-adjustment: 0.5px;
transform: translateY(var(--caret-adjustment));
}
.sidebar-content .group-label {
transform: translateY(calc(-1 * var(--caret-adjustment)));
}
} */
.sidebar-content li {
border: 0;
--sl-sidebar-item-padding-inline: 0.45rem;
/* margin: 0; */
padding: 0;
}
.sidebar-content .top-level {
display: flex;
flex-direction: column;
gap: 4px;
}
.sidebar-content .top-level > * {
margin-block: 0;
}
.sidebar-content .top-level > li:has(details) {
margin-block: 0.5rem;
}
.sidebar-content .large {
padding-left: 0.75rem;
padding-right: 0.75rem;
font-size: 0.875rem;
}
@media (min-width: 50rem) {
.sidebar-content .large {
font-size: var(--sl-text-sm);
}
}
.sidebar-content a.large {
font-size: 0.875rem;
}
.sidebar-content a {
padding-left: 0.75rem;
padding-right: 0.75rem;
padding-top: 0.5rem;
padding-bottom: 0.5rem;
font-size: 0.875rem;
}
.sidebar-content a[aria-current="page"] {
background-color: transparent;
color: var(--sl-color-accent-high);
}
[data-theme="light"] .sidebar-content a[aria-current="page"] {
color: var(--sl-color-accent);
}
.sidebar-content a[aria-current="page"]:hover {
color: var(--sl-color-white);
}
main {
position: relative;
}
/* Banner */
.sl-banner {
background-color: var(--sl-color-accent-low);
border: 1px solid var(--sl-color-accent-high);
border-radius: 0.5rem;
box-shadow: none;
color: var(--sl-color-white);
line-height: 1.4;
margin-block: 2rem -0.5rem;
margin-inline: var(--sl-content-pad-x);
max-width: var(--sl-content-width);
padding: 1rem;
text-align: start;
text-wrap: initial;
a {
color: var(--sl-color-green-accent);
text-underline-offset: 0.25em;
&:is(:hover, :focus-visible) {
color: var(--sl-color-accent-high);
}
}
@media (min-width: 72rem) {
margin-bottom: -1rem;
margin-inline: auto;
[data-has-sidebar] & {
justify-self: end;
margin-inline: var(--sl-content-pad-x);
}
}
}
[data-has-sidebar] main:has(.sl-banner) {
display: grid;
}
/* Content */
@media (min-width: 1152px) {
:root {
--sl-mobile-toc-height: 0rem;
}
}
.main-pane > main > .content-panel:last-of-type {
border-top: none;
padding-top: 0;
}
.content-panel {
padding-top: 1rem;
}
.content-panel + .content-panel {
border-top: none;
padding-top: 0;
}
.content-panel h1 {
margin-top: 0.5rem;
}
@media (min-width: 72rem) {
.content-panel h1 {
margin-top: 1rem;
}
}
.meta {
align-items: center;
flex-direction: row-reverse;
}
.meta a {
border: 1px solid var(--sl-color-gray-5);
border-radius: 0.5rem;
padding: 0.25rem 0.5rem;
}
.meta a:is(:hover, :focus-visible) {
border-color: var(--sl-color-gray-2);
color: var(--sl-color-gray-2);
}
/* Markdown */
.sl-markdown-content a:not(:where(.not-content *)) {
color: var(--sl-color-white);
text-underline-offset: 0.25em;
}
.sl-markdown-content
a:is(:hover, :focus-visible):not(:where(.not-content *)) {
color: var(--sl-color-accent-high);
}
.sl-markdown-content code:not(:where(.not-content *)) {
border-radius: 5px;
}
.sl-markdown-content tr:nth-child(2n):not(:where(.not-content *)) {
background-color: var(--sl-color-gray-7);
}
.sl-markdown-content :is(th, td):not(:where(.not-content *)) {
border: none;
}
.sl-markdown-content th:not(:where(.not-content *)) {
border-bottom: 1px solid var(--sl-color-white);
}
.sl-markdown-content td:not(:where(.not-content *)) {
border-bottom: 1px solid var(--sl-color-gray-5);
}
.sl-markdown-content details:not(:where(.not-content *)) {
--sl-details-border-color--hover: var(--sl-color-accent-high);
border-inline-start-width: 1px;
}
.sl-markdown-content .expressive-code .has-title {
--ec-uiPadBlk: 0.375rem;
}
.sl-markdown-content .expressive-code .frame.is-terminal .header {
border-bottom: 1px solid var(--sl-color-gray-5);
}
/* Tabs */
starlight-tabs .tablist-wrapper {
overflow-y: hidden;
}
starlight-tabs ul[role="tablist"] {
border-bottom-width: 1px;
}
starlight-tabs ul[role="tablist"] a[role="tab"] {
padding-block: 0.25rem;
}
starlight-tabs
ul[role="tablist"]
a[role="tab"]:not([aria-selected="true"]):hover {
border-color: var(--sl-color-white);
color: var(--sl-color-white);
}
/* Cards */
.sl-markdown-content .card-grid.stagger {
--stagger-height: 2.5rem;
}
.sl-markdown-content .card {
--sl-text-h1: var(--sl-text-4xl);
--sl-text-h2: var(--sl-text-3xl);
--sl-text-h3: var(--sl-text-2xl);
--sl-text-h4: var(--sl-text-xl);
--sl-text-h5: var(--sl-text-lg);
border-radius: 0.5rem;
padding: clamp(1rem, calc(0.125rem + 1.5vw), 2.5rem);
}
.sl-markdown-content .card .title .icon {
font-size: 1.875rem;
}
.sl-markdown-content .sl-link-card {
box-shadow: none;
}
.sl-markdown-content .sl-link-card:hover {
background: initial;
}
.sl-markdown-content .sl-link-card .title {
color: var(--sl-color-white);
}
.sl-markdown-content .sl-link-card .description {
color: var(--sl-color-gray-3);
}
.sl-markdown-content .sl-link-card:is(:hover, :focus-visible) .description {
color: var(--sl-color-gray-2);
}
.sl-markdown-content .sl-link-card .icon {
color: var(--sl-color-gray-2);
}
/* Asides */
.starlight-aside {
border: 1px solid var(--sl-color-asides-border);
border-radius: 0.5rem;
color: var(--sl-color-asides-text-accent);
}
.starlight-aside tr:nth-child(2n) {
background-color: color-mix(
in srgb,
var(--sl-color-asides-border) 25%,
var(--sl-color-black)
);
}
/* File Tree */
.sl-markdown-content starlight-file-tree {
background-color: var(--sl-color-black);
border: 1px solid var(--sl-color-accent-high);
border-radius: 0.5rem;
}
.sl-markdown-content
starlight-file-tree
.directory
> details
> summary:hover
~ ul {
border-color: var(--sl-color-accent-high);
}
/* Notices */
.content-panel:first-of-type p.sl-flex:not(:where(.sl-markdown-content *)) {
border-radius: 0.5rem;
padding: 1rem;
}
.content-panel:first-of-type
p.sl-flex:not(:where(.sl-markdown-content *))
svg {
flex-shrink: 0;
}
/* Steps */
.sl-steps > li:last-of-type::after {
--guide-width: 1px;
background: linear-gradient(
to bottom,
var(--sl-color-hairline-light),
var(--sl-color-bg) 85%
);
bottom: var(--bullet-margin);
content: "";
inset-inline-start: calc((var(--bullet-size) - var(--guide-width)) / 2);
position: absolute;
top: calc(var(--bullet-size) + var(--bullet-margin));
width: var(--guide-width);
}
/* Link Buttons */
:is(.hero, .sl-markdown-content) .sl-link-button {
padding: 0.75rem 1rem;
}
:is(.hero, .sl-markdown-content) .sl-link-button svg {
font-size: 1.25rem;
}
:is(.hero, .sl-markdown-content) .sl-link-button.primary {
background-color: var(--sl-color-accent-low);
border: 1px solid var(--sl-color-accent);
color: var(--sl-color-accent-high);
}
:is(.hero, .sl-markdown-content)
.sl-link-button.primary:is(:hover, :focus-visible) {
border-color: var(--sl-color-accent-low);
color: var(--sl-color-white);
}
:is(.hero, .sl-markdown-content) .sl-link-button.secondary {
border-color: var(--sl-color-gray-2);
color: var(--sl-color-gray-2);
}
:is(.hero, .sl-markdown-content)
.sl-link-button.secondary:is(:hover, :focus-visible) {
border-color: var(--sl-color-accent-high);
color: var(--sl-color-accent-high);
}
:is(.hero, .sl-markdown-content) .sl-link-button.minimal {
padding-inline: 0.25rem;
}
:is(.hero, .sl-markdown-content)
.sl-link-button.minimal:is(:hover, :focus-visible) {
color: var(--sl-color-accent-high);
}
/* Pagination Links */
.pagination-links {
gap: 0;
}
.pagination-links > a {
align-items: end;
border: none;
box-shadow: none;
padding-inline: 0;
color: var(--sl-color-gray-2);
}
[data-theme="light"] .pagination-links > a {
color: var(--sl-color-gray-3);
}
.pagination-links > a > span {
font-size: 0.85em;
}
.pagination-links > a > svg {
margin-bottom: 0.15rem;
}
.pagination-links .link-title {
font-size: var(--sl-text-lg);
}
/* Table of Contents */
.right-sidebar {
border-inline-start: none;
}
.right-sidebar h2 {
font-size: var(--sl-text-xs);
font-weight: 600;
padding-left: 0.5rem;
margin-bottom: 0.45rem;
margin-top: 1rem;
}
.right-sidebar a {
padding-bottom: 0.45rem;
}
.right-sidebar a[aria-current="true"] {
font-weight: 500;
color: var(--sl-color-accent-high);
}
[data-theme="light"] .right-sidebar a[aria-current="true"] {
color: var(--sl-color-accent);
}
.right-sidebar a:hover {
color: var(--sl-color-white);
}
.right-sidebar mobile-starlight-toc > nav {
border-top: none;
-webkit-backdrop-filter: blur(1rem);
backdrop-filter: blur(1rem);
background-color: var(--sl-nextjs-header-bg-color);
}
}