/** * DruksCode brand theme. * Accent is a confident blue that reads well in both light and dark mode. * deliberately flat: no hero glow, no gradient text — plain color only. * Buttons stay black in both themes: dark background, light text. */ :root { --vp-c-brand-1: #2563eb; --vp-c-brand-2: #3b82f6; --vp-c-brand-3: #60a5fa; --vp-c-brand-soft: rgba(59, 130, 246, 0.14); --vp-home-hero-name-color: var(--vp-c-brand-1); --vp-home-hero-image-background-image: none; --vp-home-hero-image-filter: none; } .dark { --vp-c-brand-1: #60a5fa; --vp-c-brand-2: #3b82f6; --vp-c-brand-3: #2563eb; --vp-c-brand-soft: rgba(96, 165, 250, 0.16); --vp-home-hero-name-color: var(--vp-c-brand-1); --vp-home-hero-image-background-image: none; --vp-home-hero-image-filter: none; } /* Buttons: black in light and dark mode instead of the blue accent. */ :root, .dark { --vp-button-brand-bg: #171717; --vp-button-brand-hover-bg: #262626; --vp-button-brand-active-bg: #262626; --vp-button-brand-text: #ffffff; --vp-button-brand-hover-text: #ffffff; --vp-button-brand-active-text: #ffffff; --vp-button-alt-bg: #2b2b2b; --vp-button-alt-hover-bg: #383838; --vp-button-alt-active-bg: #383838; --vp-button-alt-text: #ffffff; --vp-button-alt-hover-text: #ffffff; --vp-button-alt-active-text: #ffffff; } /* * Homepage content below the features grid. The markdown lives inside * VPHomeContent's 1280px container; .dkc-home narrows to 1152px so the * custom sections line up with the features grid above. */ .dkc-home { max-width: 1152px; margin: 0 auto; padding: 8px 0 48px; } .dkc-home h2 { margin-top: 56px; margin-bottom: 20px; padding-top: 0; border-top: none; font-size: 28px; } /* Three-step getting started: numbered cards in a responsive row. */ .dkc-steps { counter-reset: dkc-step; } .dkc-steps ol { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin: 0; padding: 0; list-style: none; } @media (max-width: 959px) { .dkc-steps ol { grid-template-columns: 1fr; } } .dkc-steps li { counter-increment: dkc-step; position: relative; padding: 20px 20px 16px 62px; border: 1px solid var(--vp-c-divider); border-radius: 12px; background-color: var(--vp-c-bg-soft); } .dkc-steps li::before { content: counter(dkc-step); position: absolute; left: 18px; top: 20px; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; background-color: #171717; color: #ffffff; font-size: 14px; font-weight: 700; } .dark .dkc-steps li::before { background-color: #2e2e2e; } .dkc-steps li p { margin: 0 0 8px; } .dkc-steps li p:last-child { margin-bottom: 0; color: var(--vp-c-text-2); font-size: 14px; } .dkc-steps li a { font-weight: 500; text-decoration: none; } /* Tile grids: app types and toolbox, mirroring the features card language. */ .dkc-types { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; } @media (max-width: 959px) { .dkc-types { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 639px) { .dkc-types { grid-template-columns: 1fr; } } .dkc-types > div { border: 1px solid var(--vp-c-divider); border-radius: 12px; background-color: var(--vp-c-bg-soft); padding: 16px 20px; transition: border-color 0.25s, background-color 0.25s; } .dkc-types > div:hover { border-color: var(--vp-c-text-1); } .dkc-types p { margin: 0; padding: 4px 0; line-height: 1.7; font-size: 14px; color: var(--vp-c-text-2); } .dkc-types p > a { color: var(--vp-c-text-1); font-weight: 600; text-decoration: none; transition: color 0.25s; } .dkc-types p > a:hover { color: var(--vp-c-brand-1); } /* Stat strip: number + label pairs in a flat row. */ .dkc-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; } @media (max-width: 767px) { .dkc-stats { grid-template-columns: repeat(2, 1fr); } } .dkc-stat { display: flex; flex-direction: column; align-items: center; padding: 24px 12px; border: 1px solid var(--vp-c-divider); border-radius: 12px; background-color: var(--vp-c-bg-soft); } .dkc-stat b { font-size: 32px; font-weight: 700; line-height: 1.2; color: var(--vp-c-text-1); } .dkc-stat span { margin-top: 4px; font-size: 13px; color: var(--vp-c-text-2); } /* Closing call-to-action. */ .dkc-cta { margin-top: 56px; padding: 32px 24px; text-align: center; border: 1px solid var(--vp-c-divider); border-radius: 12px; background-color: var(--vp-c-bg-soft); } .dkc-cta p { margin: 0 0 16px; font-size: 18px; font-weight: 600; color: var(--vp-c-text-1); } .dkc-cta a { display: inline-block; padding: 6px 20px; border-radius: 20px; background-color: #171717; color: #ffffff !important; font-size: 14px; font-weight: 600; text-decoration: none; transition: background-color 0.25s; } .dkc-cta a:hover { background-color: #262626; } .dark .dkc-cta a { background-color: #2e2e2e; } .dark .dkc-cta a:hover { background-color: #3a3a3a; } /* Feature cards: calmer hover that matches the flat look. */ .VPFeature.link:hover { border-color: var(--vp-c-text-1); } /* * Hero download button, rendered through the home-hero-actions-after slot. * Shares the black-pill grammar of the brand buttons above. */ .dkc-release { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 8px 12px; margin-top: 20px; } /* * On homepages the LatestRelease slot follows the hero actions container in * the same inline formatting context. Because the shrink-to-fit .main column * is narrower than buttons + pill together, the pill usually wraps to its * own row right below the actions (it stays inline when they do fit); * margin-top minus .actions' -6px bottom margin leaves a small gutter there. * The pill must be inline-flex, not inline: an inline box's line box is * sized by font metrics, so the 40px button bleeds above it into the actions * row — that was the overlap bug. Baseline alignment keeps the pill's text * on the buttons' text baseline when they share a row. Row alignment * (centered below 960px, left above) follows .container's text-align, * matching how VitePress aligns the actions row itself. */ .VPHero .actions { display: inline-flex; } .VPHero .dkc-release { display: inline-flex; vertical-align: baseline; margin-top: 12px; } .dkc-release-btn { display: inline-flex; align-items: center; gap: 8px; padding: 0 20px; line-height: 38px; border: 1px solid transparent; border-radius: 20px; background-color: #171717; color: #ffffff; font-size: 14px; font-weight: 600; white-space: nowrap; text-decoration: none; transition: background-color 0.25s; } .dkc-release-btn:hover { background-color: #262626; } .dark .dkc-release-btn { background-color: #2e2e2e; } .dark .dkc-release-btn:hover { background-color: #3a3a3a; } .dkc-release-btn svg { width: 16px; height: 16px; flex-shrink: 0; } .dkc-release-meta { font-size: 12px; color: var(--vp-c-text-3); } /* Install-download block for guide pages. */ .dkc-install { margin: 16px 0; padding: 20px 24px; border: 1px solid var(--vp-c-divider); border-radius: 12px; background-color: var(--vp-c-bg-soft); } .dkc-install p { margin: 0 0 12px; font-weight: 600; color: var(--vp-c-text-1); } .dkc-install p:last-child { margin-bottom: 0; font-weight: 400; font-size: 14px; color: var(--vp-c-text-2); } .dkc-install .dkc-release { justify-content: flex-start; margin-top: 4px; }