body {
    background-color: #FFFFFF;
    color: #1E293B;
}

/* Apple M1 Light Theme Radial Light Burst Background */
.m1-ray-burst {
    background:
        radial-gradient(circle at 20% 30%, rgba(240, 125, 56, 0.14) 0%, transparent 45%),
        radial-gradient(circle at 15% 75%, rgba(230, 43, 104, 0.12) 0%, transparent 45%),
        radial-gradient(circle at 80% 30%, rgba(0, 180, 216, 0.15) 0%, transparent 45%),
        radial-gradient(circle at 85% 75%, rgba(100, 38, 217, 0.14) 0%, transparent 45%),
        radial-gradient(circle at 50% 50%, rgba(255, 214, 232, 0.25) 0%, transparent 55%);
}

.m1-gradient-text {
    background: linear-gradient(135deg, #F07D38 0%, #E62B68 35%, #00B4D8 70%, #6426D9 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.m1-gradient-btn {
    background: linear-gradient(135deg, #E62B68 0%, #6426D9 50%, #00B4D8 100%);
}

.m1-gradient-amber-cyan {
    background: linear-gradient(135deg, #F07D38 0%, #E62B68 50%, #00B4D8 100%);
}

/* Soft brand gradient for large sections — same hue family as buttons, much lower contrast */
.m1-gradient-soft {
    background: linear-gradient(135deg, #FCE7F3 0%, #EDE9FE 50%, #CFFAFE 100%);
}

/* Pricing / CTA buy button — brand gradient with sheen sweep + lift on hover. */
.m1-pricing-btn {
    position: relative;
    background: linear-gradient(135deg, #F07D38 0%, #E62B68 40%, #6426D9 75%, #00B4D8 100%);
    background-size: 200% 100%;
    background-position: 0% 50%;
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.28),
        0 10px 22px -8px rgba(100, 38, 217, 0.55);
    transition: background-position 0.45s ease, box-shadow 0.25s ease, transform 0.15s ease;
    cursor: pointer;
}
.m1-pricing-btn:hover {
    background-position: 100% 50%;
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.35),
        0 16px 30px -10px rgba(230, 43, 104, 0.6);
    transform: translateY(-1px);
}
.m1-pricing-btn:focus-visible {
    outline: 2px solid rgba(100, 38, 217, 0.5);
    outline-offset: 2px;
}
.m1-pricing-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
    transform: none;
    box-shadow: none;
}

/* Pricing buy button — animated gradient border (scoped to pricing frontend).
   Markup: <a class="... m1-pricing-btn m1-gborder ..."><span>Label</span></a>
   SSOT lives here; renderPriceCard in scripts/build.mjs (+ partials/pricing-card.html
   reference). Base .m1-pricing-btn stays untouched for dashboard/services buttons.
   Layers: ::before = oversized rotating brand conic (visible only as the 2px
   rim), ::after = button face (white, soft pastel wash on hover), > span =
   dark label. No blur anywhere, so hues stay crisp and text contrast is always
   strong on the light theme. Border drifts slowly at idle, speeds up on hover. */
.m1-pricing-btn.m1-gborder {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: none;
    text-decoration: none;
    background-color: #fff;
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.9),
        0 10px 24px -12px rgba(100, 38, 217, 0.35);
    transition: box-shadow 0.25s ease, transform 0.15s ease;
}
.m1-pricing-btn.m1-gborder::before {
    content: "";
    position: absolute;
    z-index: 0;
    width: 400px;
    height: 400px;
    left: 50%;
    top: 50%;
    background: conic-gradient(#F07D38, #E62B68, #6426D9, #00B4D8, #F07D38);
    animation: m1-gborder-spin 6s linear infinite;
}
.m1-pricing-btn.m1-gborder::after {
    content: "";
    position: absolute;
    z-index: 1;
    inset: 2px;
    border-radius: 10px;
    background-color: #fff;
    transition: background-color 0.25s ease;
}
.m1-pricing-btn.m1-gborder > span {
    position: relative;
    z-index: 2;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    color: #0F172A;
}
.m1-pricing-btn.m1-gborder:hover::before {
    animation-duration: 2.5s;
}
.m1-pricing-btn.m1-gborder:hover::after {
    background-color: #FAF5FF;
}
.m1-pricing-btn.m1-gborder:hover {
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.9),
        0 14px 30px -10px rgba(230, 43, 104, 0.5);
}
@keyframes m1-gborder-spin {
    from { transform: translate(-50%, -50%) rotate(0deg); }
    to { transform: translate(-50%, -50%) rotate(360deg); }
}
@media (prefers-reduced-motion: reduce) {
    .m1-pricing-btn.m1-gborder::before { animation: none; }
}

.m1-glass-card {
    background: rgba(255, 255, 255, 0.85);
    backdrop-filter: blur(20px);
    -webkit-backdrop-filter: blur(20px);
    border: 1px solid rgba(15, 23, 42, 0.08);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.04);
}

.m1-glass-card-hover {
    transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}

.m1-glass-card-hover:hover {
    border-color: rgba(0, 180, 216, 0.4);
    box-shadow: 0 15px 35px rgba(230, 43, 104, 0.12), 0 10px 25px rgba(0, 0, 0, 0.05);
    transform: translateY(-4px);
}

/* Product feature showcase — rows keep text-first DOM order so mobile always
   stacks the title above the image; .showcase-flip swaps the two columns on
   md screens and up to preserve the alternating desktop layout. */
@media (min-width: 768px) {
    .showcase-flip > :first-child { order: 2; }
    .showcase-flip > :last-child { order: 1; }
}

/* Pricing cards — thicker purple border on hover (border-box: no layout shift) */
.pricing-slot {
    transition: border-color 0.3s ease, border-width 0.3s ease, box-shadow 0.3s ease, transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}
.pricing-slot:hover {
    border-width: 2px;
    border-color: rgba(100, 38, 217, 0.6);
}

.m1-chip-badge {
    background: rgba(255, 255, 255, 0.95);
    border: 1px solid rgba(100, 38, 217, 0.2);
    box-shadow: 0 4px 20px rgba(100, 38, 217, 0.12);
}

/* Pricing price stays crisp — static fallback values are shown at full opacity
   until /api/pricing hydrates them; no blur/pulse animation. */

/* Custom Scrollbar */
::-webkit-scrollbar {
    width: 8px;
}
::-webkit-scrollbar-track {
    background: #FFFFFF;
}
::-webkit-scrollbar-thumb {
    background: #E2E8F0;
    border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
    background: #E62B68;
}

/* Collapsible component (SSOT) — native <details>, height animated via site.js (WAAPI).
   Usage: [collapsible title="Question?"]Answer HTML[/collapsible] (+ open="1" for default-open).
   No-JS / prefers-reduced-motion fallback: instant native toggle, still fully usable. */
.collapsible > summary {
    list-style: none;
}
.collapsible > summary::-webkit-details-marker {
    display: none;
}
.collapsible > summary::marker {
    content: '';
}
.collapsible .collapsible-chev {
    transition: transform 0.28s ease;
    flex-shrink: 0;
}
.collapsible[open] .collapsible-chev {
    transform: rotate(180deg);
}
/* Animation target for site.js (overflow hidden so height WAAPI never shows a scrollbar). */
.collapsible__body {
    overflow: hidden;
}
.collapsible.is-animating {
    overflow: hidden;
}
@media (prefers-reduced-motion: reduce) {
    .collapsible .collapsible-chev {
        transition: none;
    }
}

/* Form field (SSOT) — replaces long Tailwind input/textarea/select chains.
   Usage: <input class="field">, <textarea class="field">, <select class="field"> */
.field {
    width: 100%;
    padding: 0.75rem 1rem;
    border-radius: 0.75rem;
    border: 1px solid #E2E8F0;
    font-size: 0.875rem;
    line-height: 1.25rem;
    background: #fff;
    color: #1E293B;
    outline: none;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.field::placeholder {
    color: #94A3B8;
}
.field:focus {
    border-color: #6426D9;
    box-shadow: 0 0 0 2px rgba(100, 38, 217, 0.2);
}
/* Custom select caret (SSOT) — the native arrow hugs the edge and ignores
   padding, so hide it and draw our own chevron 1rem from the right.
   Covers every dropdown using .field (dashboard, services forms). */
select.field {
    appearance: none;
    -webkit-appearance: none;
    padding-right: 2.5rem;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='16'%20height='16'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%2394a3b8'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='m6%209%206%206%206-6'/%3E%3C/path%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 1rem center;
    background-size: 1rem 1rem;
}
select.field::-ms-expand {
    display: none;
}
.field-flex {
    flex: 1 1 0%;
    width: auto;
    min-width: 0;
}
.form-label {
    font-size: 0.75rem;
    font-weight: 700;
    color: #334155;
    display: block;
    margin-bottom: 0.375rem;
}

/* OTP 6-box input (SSOT) — large single-digit boxes, auto-advance via App.otpInit.
   Markup: <div id="xOtp" class="otp-wrap"><input class="otp-box" …>×6</div><input id="x" type="hidden"> */
.otp-wrap {
    display: flex;
    gap: 0.5rem;
    justify-content: center;
}
.otp-box {
    width: 3.25rem;
    height: 3.75rem;
    padding: 0;
    text-align: center;
    font-size: 1.5rem;
    font-weight: 800;
    font-family: Consolas, Menlo, monospace;
    border-radius: 0.75rem;
    border: 1px solid #E2E8F0;
    background: #fff;
    color: #1E293B;
    outline: none;
    caret-color: #6426D9;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.otp-box:focus {
    border-color: #6426D9;
    box-shadow: 0 0 0 2px rgba(100, 38, 217, 0.2);
}
@media (max-width: 380px) {
    .otp-box {
        width: 2.75rem;
        height: 3.25rem;
        font-size: 1.25rem;
    }
}

/* Ticket thread bodies — admin pakai .md-body (markdown), user pakai .plain-body (teks polos). */
.md-body, .plain-body { overflow-wrap: anywhere; word-break: break-all; white-space: pre-wrap; min-width: 0; max-width: 100%; overflow: hidden; }
.md-body a, .plain-body a { overflow-wrap: anywhere; word-break: break-all; max-width: 100%; }
.md-body .md-code { font-family: Consolas, Menlo, monospace; font-size: 12px; background: rgba(15, 23, 42, .07); padding: 1px 5px; border-radius: 4px; }
.md-body .md-pre { font-family: Consolas, Menlo, monospace; font-size: 12px; background: #0f172a; color: #e2e8f0; padding: 8px 10px; border-radius: 6px; overflow-x: auto; white-space: pre-wrap; max-width: 100%; }
.md-body .md-quote { display: block; border-left: 3px solid #bfdbfe; padding-left: 8px; color: #475569; font-style: italic; }
#thread { min-width: 0; }
#thread > div { min-width: 0; overflow: hidden; }

/* White CTA button (SSOT) — used by [cta-band] shortcode output */
.btn-white {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 1rem 2rem;
    border-radius: 0.75rem;
    background: #fff;
    color: #0F172A;
    font-weight: 800;
    font-size: 1rem;
    line-height: 1.5rem;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
    transition: background 0.15s ease, transform 0.15s ease;
}
.btn-white:hover {
    background: #F1F5F9;
}

/* Markdown docs (SSOT) — styles for .md pages rendered by scripts/build.mjs.
   Authors write plain markdown; this layer maps it to the docs look, so no
   per-page Tailwind classes are needed in the content. */
.docs-md {
    color: #334155;
    font-size: 0.875rem;
    line-height: 1.7;
    overflow-x: auto;
}
.docs-md > :first-child { margin-top: 0; }
.docs-md > :last-child { margin-bottom: 0; }

.docs-md h2 {
    font-size: 1.5rem;
    line-height: 1.3;
    font-weight: 800;
    color: #0F172A;
    margin: 2.5rem 0 1rem;
    border-top: 1px solid #E2E8F0;
    padding-top: 1.5rem;
}
.docs-md > h2:first-child {
    border-top: 0;
    padding-top: 0;
}
.docs-md hr {
    border: 0;
    border-top: 1px solid #E2E8F0;
    margin: 2.5rem 0;
}
.docs-md h3 {
    font-size: 1.125rem;
    line-height: 1.4;
    font-weight: 700;
    color: #0F172A;
    margin: 1.75rem 0 0.75rem;
}
.docs-md p { margin: 1rem 0; }
.docs-md ul, .docs-md ol { margin: 1rem 0; padding-left: 1.5rem; }
.docs-md ul { list-style: disc; }
.docs-md ol { list-style: decimal; }
.docs-md li { margin: 0.4rem 0; }
.docs-md li > ul, .docs-md li > ol { margin: 0.4rem 0; }
.docs-md a { color: #6426D9; font-weight: 700; text-decoration: none; }
.docs-md a:hover { text-decoration: underline; }
.docs-md .docs-cards a:hover { text-decoration: none; }
.docs-md strong { color: #0F172A; font-weight: 700; }
.docs-md code {
    font-family: 'JetBrains Mono', monospace;
    font-size: 0.8125rem;
    background: rgba(15, 23, 42, 0.07);
    padding: 0.1rem 0.35rem;
    border-radius: 0.25rem;
}
.docs-md pre {
    background: #0F172A;
    color: #E2E8F0;
    padding: 1rem;
    border-radius: 0.75rem;
    overflow-x: auto;
    margin: 1rem 0;
}
.docs-md pre code { background: none; padding: 0; color: inherit; }
.docs-md blockquote {
    margin: 1.25rem 0;
    background: rgba(240, 125, 56, 0.1);
    border: 1px solid rgba(240, 125, 56, 0.3);
    border-radius: 0.75rem;
    padding: 1rem 1.25rem;
    font-size: 0.8125rem;
    color: #334155;
}
.docs-md blockquote > :first-child { margin-top: 0; }
.docs-md blockquote > :last-child { margin-bottom: 0; }

.docs-table {
    overflow-x: auto;
    border: 1px solid #E2E8F0;
    border-radius: 0.75rem;
    margin: 1.25rem 0;
}
.docs-table table { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
.docs-table th {
    background: #F8FAFC;
    font-family: 'JetBrains Mono', monospace;
    font-size: 0.6875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: #64748B;
    text-align: left;
    padding: 0.75rem 1rem;
    border-bottom: 1px solid #E2E8F0;
}
.docs-table td {
    padding: 0.75rem 1rem;
    color: #334155;
    border-bottom: 1px solid #E2E8F0;
    vertical-align: top;
}
.docs-table tbody tr:last-child td { border-bottom: 0; }

.docs-md img {
    width: 100%;
    border-radius: 0.75rem;
    border: 1px solid #E2E8F0;
}
.docs-md figure { margin: 1.25rem 0; }
.docs-md figcaption {
    margin-top: 0.5rem;
    font-size: 0.75rem;
    color: #64748B;
}

/* Confirm/modal dialog (SSOT for frontend) — markup is built by App.confirm /
   App.modal in assets/app.js. Admin pages use the equivalent block in
   assets/admin.css (dark wp-admin theme); this is the light frontend twin. */
.modal-backdrop {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 60;
    align-items: center;
    justify-content: center;
    padding: 16px;
    background: rgba(15, 23, 42, 0.5);
    -webkit-backdrop-filter: blur(2px);
    backdrop-filter: blur(2px);
}
.modal-backdrop.open {
    display: flex;
    animation: m1-fade 0.15s ease;
}
.modal {
    background: #fff;
    border: 1px solid #E2E8F0;
    border-radius: 16px;
    box-shadow: 0 20px 50px rgba(2, 6, 23, 0.25);
    width: 100%;
    max-width: 440px;
    max-height: 90vh;
    overflow-y: auto;
    box-sizing: border-box;
    animation: m1-pop 0.18s ease;
}
.modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 16px 20px 0;
}
.modal-header h2 {
    font-size: 15px;
    font-weight: 800;
    margin: 0;
    color: #0F172A;
}
.modal-close {
    border: 1px solid #E2E8F0;
    background: #fff;
    color: #64748B;
    border-radius: 8px;
    width: 28px;
    height: 28px;
    line-height: 1;
    font-size: 14px;
    cursor: pointer;
    flex-shrink: 0;
}
.modal-close:hover {
    border-color: #6426D9;
    color: #6426D9;
}
.modal-body {
    padding: 14px 20px 4px;
}
.modal-hint {
    font-size: 12px;
    color: #64748B;
    padding: 0 20px;
    margin: 8px 0 0;
}
.modal-foot {
    display: flex;
    gap: 8px;
    padding: 14px 20px 18px;
}
/* Scoped to the dialog so frontend pages using .button elsewhere are untouched. */
.modal-foot .button {
    min-width: 90px;
    padding: 10px 18px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 800;
    cursor: pointer;
    border: 1px solid #E2E8F0;
    background: #fff;
    color: #334155;
    transition: background 0.15s ease, filter 0.15s ease;
}
.modal-foot .button:hover {
    background: #F8FAFC;
}
.modal-foot .button-primary {
    border: none;
    color: #fff;
    background: linear-gradient(135deg, #F07D38 0%, #E62B68 40%, #6426D9 75%, #00B4D8 100%);
    box-shadow: 0 10px 22px -8px rgba(100, 38, 217, 0.55);
}
.modal-foot .button-primary:hover {
    background: linear-gradient(135deg, #F07D38 0%, #E62B68 40%, #6426D9 75%, #00B4D8 100%);
    filter: brightness(1.08);
}
.modal-confirm-msg {
    font-size: 13px;
    color: #334155;
    padding: 12px 20px 0;
    margin: 0;
    line-height: 1.6;
    overflow-wrap: anywhere;
}
@keyframes m1-fade {
    from { opacity: 0; }
    to { opacity: 1; }
}
@keyframes m1-pop {
    from { opacity: 0; transform: translateY(8px) scale(0.98); }
    to { opacity: 1; transform: none; }
}
@media (max-width: 480px) {
    .modal-backdrop { padding: 12px; align-items: flex-end; }
    .modal { max-width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
    .modal-backdrop.open, .modal { animation: none; }
}

/* Dark glass card (SSOT) — for content on dark navy sections (e.g. home #why).
   Usage: <div class="dark-card p-7">…</div> (+ spacing/typography utilities). */
.dark-card {
    background: linear-gradient(
        180deg,
        rgba(255,255,255,.08),
        rgba(255,255,255,.04)
    );
    border: 1px solid rgba(255,255,255,.08);
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    border-radius: 18px;
    box-shadow:
        inset 0 1px rgba(255,255,255,.06),
        0 12px 32px rgba(0,0,0,.25);
}

/* Site footer — dark navy closer (SSOT). Content/links live in
   partials/footer.html; this layer owns only the atmosphere: navy base,
   corner glows, a straight hairline divider on top and faint arc lines.
   Pair with .site-footer-dark on the <footer> element. */
.site-footer-dark {
    position: relative;
    overflow: hidden;
    color: #CBD5E1;
    background:
        radial-gradient(ellipse at 15% 100%, rgba(75, 65, 180, 0.35), transparent 45%),
        radial-gradient(ellipse at 85% 30%, rgba(35, 170, 230, 0.20), transparent 40%),
        linear-gradient(135deg, #070b25 0%, #10163b 45%, #082b4b 100%);
    border-top: 1px solid rgba(255, 255, 255, 0.12);
    padding: 5.5rem 0 3rem;
}
.site-footer-dark > div {
    position: relative;
    z-index: 1;
}
.site-footer-dark::after {
    content: "";
    position: absolute;
    inset: auto -10% 0;
    height: 120px;
    background:
        repeating-radial-gradient(ellipse at 50% 100%, transparent 0, transparent 18px, rgba(120, 130, 255, 0.12) 19px, transparent 20px);
    opacity: .7;
    pointer-events: none;
}

/* Docs article layout (mockup-style) — SSOT for renderDocsPage/Nav/Topbar/
   Hero/Highlights/Footer in scripts/build.mjs. Brand palette only
   (m1-purple active states, slate text); no new hues. */
.docs-topbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
}
.docs-back {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.8125rem;
    font-weight: 600;
    color: #64748B;
}
.docs-back:hover {
    color: #6426D9;
}
.docs-nav-group {
    border-top: 1px solid #E2E8F0;
    padding: 0.65rem 0;
}
.docs-nav-group:first-child {
    border-top: 0;
}
.docs-nav-group > summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    font-size: 0.875rem;
    font-weight: 800;
    color: #0F172A;
    cursor: pointer;
    list-style: none;
    padding: 0.15rem 0;
}
.docs-nav-group > summary::-webkit-details-marker {
    display: none;
}
.docs-nav-group > summary::marker {
    content: '';
}
.docs-nav-chev {
    color: #94A3B8;
    transition: transform 0.2s ease;
    flex-shrink: 0;
}
.docs-nav-group[open] .docs-nav-chev {
    transform: rotate(180deg);
}
.docs-nav-group ul {
    margin-top: 0.5rem;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.docs-nav-item {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 0.45rem 0.75rem;
    border-radius: 0.65rem;
    font-size: 0.8125rem;
    font-weight: 600;
    color: #475569;
}
.docs-nav-item:hover {
    background: #F1F5F9;
    color: #0F172A;
}
.docs-nav-dot {
    width: 7px;
    height: 7px;
    border-radius: 9999px;
    border: 1.5px solid #CBD5E1;
    flex-shrink: 0;
}
.docs-nav-item.is-active {
    background: rgba(100, 38, 217, 0.08);
    color: #6426D9;
    font-weight: 800;
}
.docs-nav-item.is-active .docs-nav-dot {
    background: #6426D9;
    border-color: #6426D9;
}
.docs-back:focus-visible,
.docs-nav-group > summary:focus-visible,
.docs-nav-item:focus-visible,
.docs-feedback-btns button:focus-visible,
.docs-pager-link:focus-visible {
    outline: 2px solid rgba(100, 38, 217, 0.5);
    outline-offset: 2px;
}
.docs-eyebrow {
    font-family: 'JetBrains Mono', monospace;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: #94A3B8;
}
.docs-feedback {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    font-size: 0.75rem;
    font-weight: 600;
    color: #64748B;
}
.docs-feedback-btns {
    display: flex;
    gap: 0.4rem;
}
.docs-feedback-btns button {
    width: 2rem;
    height: 2rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 9999px;
    border: 1px solid #E2E8F0;
    color: #64748B;
    background: #FFFFFF;
    transition: border-color 0.2s ease, color 0.2s ease;
}
.docs-feedback-btns button:hover {
    border-color: #6426D9;
    color: #6426D9;
}
.docs-feedback-thanks {
    color: #6426D9;
    font-weight: 700;
}
.docs-pager {
    display: flex;
    align-items: stretch;
    justify-content: space-between;
    gap: 1rem;
    border-top: 1px solid #E2E8F0;
    margin-top: 2.5rem;
    padding-top: 1.5rem;
}
.docs-pager-link {
    display: inline-flex;
    align-items: center;
    gap: 0.75rem;
    color: #64748B;
    min-width: 0;
}
.docs-pager-next {
    text-align: right;
}
.docs-pager-dir {
    display: block;
    font-size: 0.75rem;
    font-weight: 600;
}
.docs-pager-title {
    display: block;
    font-size: 0.9375rem;
    font-weight: 700;
    color: #334155;
}
.docs-pager-link:hover .docs-pager-title {
    color: #6426D9;
}
