.psy-page {
    padding-inline: clamp(20px, 4vw, 64px);
}

.psy-selection {
    min-height: 1.5em;
    color: var(--link-color);
}

.psy-tree-scroll {
    width: 100%;
    overflow-x: auto;
    margin: 20px 0 36px;
    border: 1px solid var(--border-color);
    background-color: var(--spoiler-content-bg);
    scrollbar-color: var(--border-color) var(--bg-color);
}

.psy-tree {
    position: relative;
    width: var(--tree-width, 1390px);
    height: var(--tree-height, 1240px);
    margin: 0 auto;
}

.psy-node {
    position: absolute;
    left: calc(var(--x) * 1px);
    top: calc(var(--y) * 1px);
    z-index: 2;
    display: flex;
    width: 200px;
    height: 134px;
    padding: 10px 12px;
    transform: translateX(-50%);
    flex-direction: column;
    justify-content: center;
    gap: 3px;
    border: 1px solid var(--border-color);
    background-color: var(--bg-color);
    color: var(--text-color);
    font: inherit;
    line-height: 1.25;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    overflow: hidden;
    transition: border-color 0.15s, background-color 0.15s, opacity 0.15s;
}

.psy-node strong {
    color: var(--link-color);
    font-size: 0.92em;
    line-height: 1.15;
}

.psy-node span {
    font-size: 0.72em;
}

.psy-node span:first-of-type {
    display: -webkit-box;
    overflow: hidden;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
}

.psy-node:hover,
.psy-node:focus-visible,
.psy-node.is-selected {
    border-color: var(--link-color);
    background-color: var(--spoiler-header-hover);
    text-decoration: none;
}

.psy-node.is-prerequisite {
    border-color: var(--heading-color);
}

.psy-node.is-reference {
    border-style: dashed;
}

.psy-node.is-reference span:last-child {
    color: var(--heading-color);
}

.psy-root {
    background-color: var(--table-header-bg);
}

.psy-lines {
    position: absolute;
    inset: 0;
    z-index: 1;
    width: 100%;
    height: 100%;
    overflow: visible;
    pointer-events: none;
}

.psy-lines .psy-connection {
    fill: none;
    stroke: var(--border-color);
    stroke-width: 2;
    marker-end: url("#psy-arrow");
    vector-effect: non-scaling-stroke;
}

.psy-lines .psy-connection.is-active {
    stroke: var(--link-color);
    stroke-width: 3;
    marker-end: url("#psy-arrow-active");
}

.psy-lines #psy-arrow path {
    fill: var(--border-color);
}

.psy-lines #psy-arrow-active path {
    fill: var(--link-color);
}

.psy-mobile-tree {
    display: none;
}

.psy-source-note {
    padding: 10px 12px;
    border-left: 3px solid var(--heading-color);
    background-color: var(--spoiler-content-bg);
}

.psy-power {
    margin: 14px 0;
    border: 1px solid var(--border-color);
    background-color: var(--spoiler-content-bg);
    scroll-margin-top: 20px;
}

.psy-power summary {
    display: flex;
    justify-content: space-between;
    gap: 20px;
    padding: 12px 16px;
    background-color: var(--spoiler-header-bg);
    color: var(--link-color);
    font-weight: bold;
    cursor: pointer;
}

.psy-power summary:hover {
    background-color: var(--spoiler-header-hover);
}

.psy-power[open] summary {
    border-bottom: 1px solid var(--border-color);
}

.psy-power-body {
    padding: 4px 18px 18px;
}

.psy-profile {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1px;
    margin: 18px 0;
    border: 1px solid var(--border-color);
    background-color: var(--border-color);
}

.psy-profile > div {
    display: grid;
    grid-template-columns: minmax(145px, 0.42fr) 1fr;
    background-color: var(--bg-color);
}

.psy-profile dt,
.psy-profile dd {
    margin: 0;
    padding: 8px 10px;
}

.psy-profile dt {
    color: var(--table-header-color);
    font-weight: bold;
}

.psy-attack-profile {
    margin: 18px 0;
}

.psy-back-link {
    text-align: right;
}

@media (max-width: 768px) {
    .psy-page {
        padding-inline: 14px;
    }

    .psy-selection,
    .psy-tree-scroll {
        display: none;
    }

    .psy-mobile-tree {
        display: grid;
        gap: 10px;
        margin: 18px 0 30px;
    }

    .psy-mobile-tree a {
        display: flex;
        flex-direction: column;
        gap: 4px;
        padding: 12px;
        border: 1px solid var(--border-color);
        background-color: var(--spoiler-content-bg);
    }

    .psy-mobile-tree a span {
        color: var(--text-color);
        font-size: 0.88em;
    }

    .psy-profile {
        grid-template-columns: 1fr;
    }

    .psy-profile > div {
        grid-template-columns: 1fr;
    }

    .psy-profile dd {
        padding-top: 0;
    }
}
