/* /Components/KnowledgeGraph.razor.rz.scp.css */
.knowledge-graph[b-v5gfhgom7r] {
    animation: knowledge-graph-appear-b-v5gfhgom7r 2.4s ease-out 0.15s both;
    display: block;
    height: auto;
    max-width: 100%;
    overflow: visible;
    pointer-events: auto;
    shape-rendering: geometricPrecision;
    width: 100%;
}

@keyframes knowledge-graph-appear-b-v5gfhgom7r {
    from {
        opacity: 0;
    }

    to {
        opacity: 0.78;
    }
}

.knowledge-graph__graph[b-v5gfhgom7r] {
    color: var(--graph-node);
    filter: drop-shadow(0 1.5rem 2.5rem rgba(63, 115, 145, 0.14));
}

.knowledge-graph__motion[b-v5gfhgom7r] {
    animation: knowledge-graph-flow-b-v5gfhgom7r 19s ease-in-out infinite alternate;
    transform-box: fill-box;
    transform-origin: center;
    will-change: transform;
}

.knowledge-graph.is-dragging .knowledge-graph__motion[b-v5gfhgom7r] {
    animation-play-state: paused;
}

.knowledge-graph__outline[b-v5gfhgom7r] {
    fill: none;
    opacity: 0.58;
    stroke: var(--graph-edge);
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 7.2;
}

.knowledge-graph__swoop[b-v5gfhgom7r] {
    fill: var(--graph-edge);
    opacity: 0.42;
    stroke: none;
}

.knowledge-graph__origin[b-v5gfhgom7r] {
    fill: var(--graph-node);
    opacity: 0.85;
}

.knowledge-graph__traces .knowledge-graph__trace[b-v5gfhgom7r] {
    fill: none;
    opacity: 0.45;
    stroke: var(--graph-edge);
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 5.4;
}

.knowledge-graph__core-spine[b-v5gfhgom7r] {
    fill: none;
    opacity: 0.55;
    stroke: var(--graph-node);
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 18;
}

.knowledge-graph__core-body[b-v5gfhgom7r] {
    fill: var(--graph-node);
    opacity: 0.55;
    stroke: none;
}

.knowledge-graph__core-stub[b-v5gfhgom7r] {
    opacity: 0.4;
    stroke: var(--graph-edge);
    stroke-linecap: round;
    stroke-width: 4.95;
}

.knowledge-graph__node[b-v5gfhgom7r] {
    cursor: grab;
    pointer-events: all;
    touch-action: none;
}

.knowledge-graph__node--trace[b-v5gfhgom7r] {
    fill: var(--graph-node);
    opacity: 0.62;
    stroke: var(--graph-edge);
    stroke-width: 1.4;
}

.knowledge-graph__node--core[b-v5gfhgom7r] {
    fill: var(--graph-node);
    opacity: 0.55;
    stroke: none;
}

.knowledge-graph.is-dragging[b-v5gfhgom7r],
.knowledge-graph__node:active[b-v5gfhgom7r],
.knowledge-graph__node.is-dragging[b-v5gfhgom7r] {
    cursor: grabbing;
}

.knowledge-graph__node:hover[b-v5gfhgom7r] {
    opacity: 0.95;
}

.knowledge-graph__glow[b-v5gfhgom7r] {
    opacity: 0.26;
}

.knowledge-graph__glow-node[b-v5gfhgom7r] {
    fill: var(--graph-glow);
    opacity: 0.8;
    stroke: none;
}

.knowledge-graph__node--trace.knowledge-graph__node--pulse-a[b-v5gfhgom7r] {
    animation: knowledge-graph-pulse-a-b-v5gfhgom7r 22s ease-in-out -4s infinite alternate;
}

.knowledge-graph__node--trace.knowledge-graph__node--pulse-b[b-v5gfhgom7r] {
    animation: knowledge-graph-pulse-b-b-v5gfhgom7r 18s ease-in-out -9s infinite alternate;
}

.knowledge-graph__node--trace.knowledge-graph__node--pulse-c[b-v5gfhgom7r] {
    animation: knowledge-graph-pulse-c-b-v5gfhgom7r 26s ease-in-out -15s infinite alternate;
}

@keyframes knowledge-graph-flow-b-v5gfhgom7r {
    from {
        transform: translate(0, 0);
    }

    50% {
        transform: translate(18px, -12px) scale(1.012);
    }

    to {
        transform: translate(-15px, 10px) scale(1);
    }
}

@keyframes knowledge-graph-pulse-a-b-v5gfhgom7r {
    from {
        opacity: 0.62;
    }

    to {
        opacity: 0.9;
    }
}

@keyframes knowledge-graph-pulse-b-b-v5gfhgom7r {
    from {
        opacity: 0.5;
    }

    to {
        opacity: 0.82;
    }
}

@keyframes knowledge-graph-pulse-c-b-v5gfhgom7r {
    from {
        opacity: 0.68;
    }

    to {
        opacity: 0.96;
    }
}

@media (prefers-reduced-motion: reduce) {
    .knowledge-graph[b-v5gfhgom7r] {
        animation: none;
    }

    .knowledge-graph__motion[b-v5gfhgom7r],
    .knowledge-graph__node[b-v5gfhgom7r] {
        animation: none;
        will-change: auto;
    }
}
/* /Layout/MainLayout.razor.rz.scp.css */
/* hugsa.fo shell: header, navigation and footer.

   The palette, the buttons and the theme/language switches live in the shared
   brand.css. This file owns only the arrangement of this site's shell. */

.site-shell[b-9kani45gek] {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

main[b-9kani45gek] {
    flex: 1;
    width: 100%;
}

.site-header[b-9kani45gek] {
    align-items: center;
    background: var(--header-gradient);
    display: flex;
    gap: 1rem 1.5rem;
    padding: 1.1rem max(var(--page-gutter), calc((100% - var(--content-max-width)) / 2 + var(--page-gutter)));
    position: relative;
    z-index: 2;
}

.site-header[b-9kani45gek]::after {
    background: linear-gradient(
        90deg,
        transparent,
        var(--border-color) 18%,
        var(--border-color) 82%,
        transparent
    );
    bottom: 0;
    content: "";
    height: 1px;
    left: 0;
    position: absolute;
    right: 0;
}

.site-nav[b-9kani45gek] {
    align-items: center;
    display: flex;
    flex-wrap: nowrap;
    gap: clamp(0.75rem, 2vw, 1.5rem);
    margin-left: auto;
}

[b-9kani45gek] .site-nav a:not(.site-nav__cta) {
    align-items: center;
    color: var(--text);
    display: inline-flex;
    font-size: var(--font-size-small);
    font-weight: 700;
    min-height: 2.75rem;
    position: relative;
    text-decoration: none;
}

[b-9kani45gek] .site-nav a:not(.site-nav__cta):hover {
    color: var(--link-hover);
    text-decoration: underline;
    text-decoration-color: var(--accent-soft);
    text-decoration-thickness: 0.16em;
}

[b-9kani45gek] .site-nav a:not(.site-nav__cta).active {
    text-decoration: none;
}

[b-9kani45gek] .site-nav a:not(.site-nav__cta).active::after {
    background: var(--accent);
    border-radius: var(--radius-pill);
    bottom: 0.15rem;
    content: "";
    height: 0.15rem;
    left: 0;
    position: absolute;
    right: 0;
}

.site-header__tools[b-9kani45gek] {
    align-items: center;
    display: flex;
    flex: 0 0 auto;
    gap: 0.5rem;
}

.site-nav__cta[b-9kani45gek] {
    margin-left: 0.25rem;
    white-space: nowrap;
}

/* ---------------------------------------------------------------- footer */

.site-footer[b-9kani45gek] {
    background: var(--footer-surface);
    border-top: 1px solid var(--border-color);
    color: var(--muted-text);
    display: grid;
    gap: var(--space-3) var(--space-4);
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr) minmax(0, 1fr);
    margin-top: auto;
    padding: 2rem max(var(--page-gutter), calc((100% - var(--content-max-width)) / 2 + var(--page-gutter))) 2.5rem;
    width: 100%;
}

.site-footer p[b-9kani45gek] {
    margin: 0;
    max-width: none;
}

.site-footer__name[b-9kani45gek] {
    color: var(--text);
    font-size: 1.25rem;
    font-weight: 700;
    letter-spacing: -0.03em;
}

.site-footer__tagline[b-9kani45gek] {
    font-size: var(--font-size-small);
    margin-top: 0.15rem !important;
}

.site-footer__nav[b-9kani45gek],
.site-footer__contact[b-9kani45gek] {
    display: grid;
    gap: 0.4rem;
    justify-items: start;
}

.site-footer__nav a[b-9kani45gek],
.site-footer__contact a[b-9kani45gek] {
    color: var(--text);
    font-weight: 600;
    padding-block: 0.15rem;
    text-decoration: none;
}

.site-footer__nav a:hover[b-9kani45gek],
.site-footer__contact a:hover[b-9kani45gek] {
    text-decoration: underline;
    text-decoration-color: var(--accent-soft);
    text-decoration-thickness: 0.16em;
}

.site-footer__support[b-9kani45gek] {
    font-weight: 700 !important;
}

.site-footer__legal[b-9kani45gek] {
    border-top: 1px solid var(--border-color);
    display: flex;
    flex-wrap: wrap;
    font-size: var(--font-size-small);
    gap: 0.5rem;
    grid-column: 1 / -1;
    padding-top: var(--space-2);
}

/* ---------------------------------------------------------------- responsive */

/* Below the width that fits the wordmark, the full navigation, both controls
   and the contact action on one line, the navigation takes its own row and the
   controls stay beside the wordmark. The header is a wrapping flex row rather
   than a two-column grid: the wordmark never shrinks, and when the controls no
   longer fit beside it they move to a row of their own instead of overlapping
   it. */
@media (max-width: 64rem) {
    .site-header[b-9kani45gek] {
        align-items: center;
        column-gap: 0.75rem;
        display: flex;
        flex-wrap: wrap;
        padding-block: 0.9rem;
        row-gap: 0.5rem;
    }

    .brand[b-9kani45gek] {
        flex: 0 0 auto;
        order: 1;
    }

    .site-header__tools[b-9kani45gek] {
        margin-left: auto;
        order: 2;
    }

    .site-nav[b-9kani45gek] {
        flex: 1 0 100%;
        gap: 0.5rem 0.9rem;
        justify-content: flex-start;
        margin-left: 0;
        order: 3;
    }

    [b-9kani45gek] .site-nav a:not(.site-nav__cta) {
        font-size: 0.875rem;
        min-height: 2.5rem;
    }

    .site-nav__cta[b-9kani45gek] {
        font-size: 0.875rem;
        margin-left: auto;
        min-height: 2.5rem;
        padding: 0.45rem 0.85rem;
    }

    .site-footer[b-9kani45gek] {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    }

    .site-footer__contact[b-9kani45gek] {
        justify-items: start;
    }
}

/* Phones: the links spread evenly across one row and the contact action takes
   a line of its own, instead of squeezing the links into a second line. */
@media (max-width: 48rem) {
    .site-nav[b-9kani45gek] {
        flex-wrap: wrap;
        justify-content: space-between;
        row-gap: 0.4rem;
    }

    .site-nav__cta[b-9kani45gek] {
        flex-basis: 100%;
        margin-left: 0;
    }
}

/* Very narrow screens: the two controls take their own row in both sites, so
   the wordmark keeps the full width and the controls stay right-aligned. */
@media (max-width: 22rem) {
    .site-header__tools[b-9kani45gek] {
        flex-basis: 100%;
        justify-content: flex-end;
    }
}

@media (max-width: 44rem) {
    .site-header[b-9kani45gek] {
        align-items: flex-start;
    }
}

@media (max-width: 34rem) {
    .site-footer[b-9kani45gek] {
        grid-template-columns: minmax(0, 1fr);
    }

    /* On a phone the identification line stacks, so a separator can never start a wrapped line. */
    .site-footer__legal[b-9kani45gek] {
        display: grid;
        gap: 0.2rem;
    }

    .site-footer__legal > [aria-hidden="true"][b-9kani45gek] {
        display: none;
    }
}

@media (prefers-reduced-motion: reduce) {
    .site-nav a.active[b-9kani45gek]::after {
        transition: none;
    }
}

@media (forced-colors: active) {
    .site-header[b-9kani45gek] {
        border-bottom: 1px solid CanvasText;
    }

    .site-header[b-9kani45gek]::after {
        display: none;
    }
}
/* /Pages/NotFound.razor.rz.scp.css */
/* The not-found page.

   It shares the inner-page composition from app.css and adds only the small
   status marker above the heading, so the humour stays in the words rather than
   in the decoration. */

/* The status code sits on a quiet rule: it names the error without competing
   with the heading, and the rule carries the eye across to the text. */
.not-found__code[b-n7vefq0ujq] {
    align-items: center;
    color: var(--accent);
    display: flex;
    font-size: var(--font-size-small);
    font-weight: 700;
    gap: var(--space-2);
    letter-spacing: 0.14em;
    margin: 0 0 var(--space-3);
    max-width: none;
}

.not-found__code[b-n7vefq0ujq]::after {
    background: var(--border-color);
    content: "";
    flex: 1;
    height: 1px;
}

.not-found__action[b-n7vefq0ujq] {
    margin: var(--space-4) 0 0;
}

/* The help line belongs to the action above it, not to a separate section. */
.not-found .page-note[b-n7vefq0ujq] {
    margin-top: var(--space-4);
}

@media (max-width: 34rem) {
    /* One action on a phone reads better at the full width of the column than
       as a small target floating on its own line. */
    .not-found__action .button[b-n7vefq0ujq] {
        width: 100%;
    }
}
