/* NOUNUniversity Theme 17.1.2 — Portal public inverse-surface contract
 *
 * Theme 17's broad public-plugin readability rules deliberately normalise
 * ordinary Portal cards. Deliberately dark Portal sections are different:
 * they must own their complete inverse palette so host-theme heading/link
 * rules cannot repaint their text with light-page colours.
 */

/* Free academic tools — the live regression reported on /student-services/. */
html body.ns17.nsp-public-page .nsp-public-free-tools,
html body.ns17 .nsp-public-page .nsp-public-free-tools {
    background:#13263c !important;
    border:1px solid #2d4659 !important;
    color:#f7fbf9 !important;
    -webkit-text-fill-color:#f7fbf9 !important;
    box-shadow:0 18px 48px rgba(9,29,42,.12) !important;
}
html body.ns17.nsp-public-page .nsp-public-free-tools :is(h1,h2,h3,strong),
html body.ns17 .nsp-public-page .nsp-public-free-tools :is(h1,h2,h3,strong) {
    color:#ffffff !important;
    -webkit-text-fill-color:#ffffff !important;
}
html body.ns17.nsp-public-page .nsp-public-free-tools p,
html body.ns17 .nsp-public-page .nsp-public-free-tools p {
    color:#d5e2e8 !important;
    -webkit-text-fill-color:#d5e2e8 !important;
}
html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-kicker,
html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-kicker {
    color:#91e5b8 !important;
    -webkit-text-fill-color:#91e5b8 !important;
}
html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid a,
html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid a {
    background:rgba(255,255,255,.075) !important;
    border:1px solid rgba(255,255,255,.18) !important;
    color:#f7fbf9 !important;
    -webkit-text-fill-color:#f7fbf9 !important;
    text-decoration:none !important;
    box-shadow:none !important;
}
html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid a:hover,
html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid a:focus-visible,
html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid a:hover,
html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid a:focus-visible {
    background:rgba(255,255,255,.135) !important;
    border-color:rgba(145,229,184,.72) !important;
    color:#ffffff !important;
    -webkit-text-fill-color:#ffffff !important;
}
html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid a > span,
html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid a > span {
    background:rgba(145,229,184,.13) !important;
    color:#a9ecc8 !important;
    -webkit-text-fill-color:#a9ecc8 !important;
}
html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid :is(svg,path,circle,line,rect,polyline),
html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-tool-grid :is(svg,path,circle,line,rect,polyline) {
    color:inherit !important;
    stroke:currentColor !important;
    opacity:1 !important;
}
html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-btn-secondary,
html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-btn-secondary {
    background:#f8fbf9 !important;
    border:1px solid #f8fbf9 !important;
    color:#10261d !important;
    -webkit-text-fill-color:#10261d !important;
    box-shadow:0 8px 24px rgba(0,0,0,.16) !important;
}
html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-btn-secondary:hover,
html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-btn-secondary:focus-visible,
html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-btn-secondary:hover,
html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-btn-secondary:focus-visible {
    background:#dff7e9 !important;
    border-color:#91e5b8 !important;
    color:#073d2a !important;
    -webkit-text-fill-color:#073d2a !important;
}

/* Other Portal inverse sections use the same contract. This closes the root
 * issue instead of fixing only the one heading captured in the screenshot. */
html body.ns17.nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta),
html body.ns17 .nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta) {
    color:#f7fbf9 !important;
    -webkit-text-fill-color:#f7fbf9 !important;
}
html body.ns17.nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta) :is(h1,h2,h3,strong),
html body.ns17 .nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta) :is(h1,h2,h3,strong) {
    color:#ffffff !important;
    -webkit-text-fill-color:#ffffff !important;
}
html body.ns17.nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta) p,
html body.ns17 .nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta) p {
    color:#d8e5eb !important;
    -webkit-text-fill-color:#d8e5eb !important;
}
html body.ns17.nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta) .nsp-public-kicker,
html body.ns17 .nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta) .nsp-public-kicker {
    color:#91e5b8 !important;
    -webkit-text-fill-color:#91e5b8 !important;
}

/* Confidence cards are also deliberate inverse surfaces. */
html body.ns17.nsp-public-page .nsp-public-confidence > div,
html body.ns17 .nsp-public-page .nsp-public-confidence > div {
    color:#f7fbf9 !important;
    -webkit-text-fill-color:#f7fbf9 !important;
}
html body.ns17.nsp-public-page .nsp-public-confidence > div strong,
html body.ns17 .nsp-public-page .nsp-public-confidence > div strong {
    color:#ffffff !important;
    -webkit-text-fill-color:#ffffff !important;
}
html body.ns17.nsp-public-page .nsp-public-confidence > div small,
html body.ns17 .nsp-public-page .nsp-public-confidence > div small {
    color:#d7e4e9 !important;
    -webkit-text-fill-color:#d7e4e9 !important;
}

/* Keep inverse components coherent in the explicit Dark theme too. They are
 * intentionally dark in both schemes; Dark Mode slightly deepens the shell
 * rather than flipping their text back to ordinary page tokens. */
html[data-theme="dark"] body.ns17.nsp-public-page .nsp-public-free-tools,
html[data-theme="dark"] body.ns17 .nsp-public-page .nsp-public-free-tools {
    background:#0b1a2a !important;
    border-color:#385065 !important;
}

/* One-SVG appearance control introduced by 17.1.2. The browser can no longer
 * reveal a sun and moon simultaneously because only one glyph exists. */
body.ns17 #ns-dm-btn .ns17h-theme-glyph {
    display:block !important;
    width:20px !important;
    height:20px !important;
    min-width:20px !important;
    max-width:20px !important;
    flex:0 0 20px !important;
    color:currentColor !important;
    stroke:currentColor !important;
    fill:none !important;
    opacity:1 !important;
    visibility:visible !important;
}

@media (max-width:720px) {
    html body.ns17.nsp-public-page .nsp-public-free-tools,
    html body.ns17 .nsp-public-page .nsp-public-free-tools {
        padding:26px 20px !important;
        border-radius:20px !important;
    }
    html body.ns17.nsp-public-page .nsp-public-free-tools-head,
    html body.ns17 .nsp-public-page .nsp-public-free-tools-head {
        gap:16px !important;
        margin-bottom:18px !important;
    }
    html body.ns17.nsp-public-page .nsp-public-free-tools .nsp-public-btn-secondary,
    html body.ns17 .nsp-public-page .nsp-public-free-tools .nsp-public-btn-secondary {
        width:100% !important;
    }
}

@media (forced-colors:active) {
    html body.ns17.nsp-public-page .nsp-public-free-tools,
    html body.ns17 .nsp-public-page .nsp-public-free-tools,
    html body.ns17.nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta),
    html body.ns17 .nsp-public-page :is(.nsp-public-next,.nsp-public-final-cta) {
        background:Canvas !important;
        border:2px solid CanvasText !important;
        color:CanvasText !important;
        -webkit-text-fill-color:CanvasText !important;
    }
    html body.ns17.nsp-public-page .nsp-public-free-tools :is(h1,h2,h3,p,strong,.nsp-public-kicker,a),
    html body.ns17 .nsp-public-page .nsp-public-free-tools :is(h1,h2,h3,p,strong,.nsp-public-kicker,a) {
        color:CanvasText !important;
        -webkit-text-fill-color:CanvasText !important;
    }
}
