/* --------------------------
    GLOBAL STYLES
    -------------------------- */

/*
    Start customizing how your website look by tweaking these values!
*/

@font-face {
    font-family: 'Main';
    font-weight: 300;
    font-display: swap;
    src: url(fonts/Lexend-VariableFont_wght.ttf) format('truetype');
}

:root {
    /* Main colors */
    --bg: #171a29;
    --accentl: #c8f3ca;
    --accent: #576091;
    --accent2: #3a406e;
    --accent3: #23283b;
    --white: #fff;

    /* Base color palette */
    --color-0: #00000000;
    --color-1: #82D173;
    --color-2: #E43F6F;
    --color-3: #E3B505;
    --color-4: #9ba2ff;
    --color-5: #ff6f59;
    --color-6: #8cc0f0;


    /* Layout variables */
    --menu-radius: 150px;
    --menu-orbit-scale-x: 1;
    --menu-orbit-scale-y: 1;
    --menu-stage-scale: 1;
    --button-size: 120px;
    --ring-rotation-duration: 60s;
    --overlay-transition: 700ms;
    --card-scale: 0.825;
    --card-scale-mini: 0.6;
    --card-scale-banner: 0.5;
    --card-gap: 10px;
    --card-padding: 14px;
    --rounding: 1;
    --grid-max-columns: 6;
    --grid-cascade-transition-speed: 30ms;
    --layout-transition-speed: 300ms;

    /* Menu specific variables */
    --menu-button-sub: var(--white);
    --menu-button-sub-shadow: rgba(0, 0, 0, 0.6);
    --menu-button-color: #111;
    --menu-button-shadow: rgba(0, 0, 0, 0.6);
    --menu-button-thumb-inset-shadow: rgba(0, 0, 0, 0.4);
    --menu-button-thumb-scale: 1.1375;
    --menu-center-text-shadow: rgba(0, 0, 0, 0.5);

    /* Ring/orbit variables */
    --ring: var(--accent2);
    --ring-inset-shadow: var(--accent3);

    /* Card variables */
    --card-bg: color-mix(in srgb, var(--accent2) 40%, transparent);
    --card-inset-shadow: color-mix(in srgb, var(--accent2) 50%, transparent);
    --card-text-bg: color-mix(in srgb, var(--bg) 70%, transparent);
    --card-excerpt-color: color-mix(in srgb, var(--accentl) 75%, transparent);
    --card-link-bg: color-mix(in srgb, var(--bg) 60%, transparent);
    --card-link-border: color-mix(in srgb, var(--accent) 50%, transparent);
    --card-link-text-bg: color-mix(in srgb, var(--accent2) 50%, transparent);
    --card-noclick-border: color-mix(in srgb, var(--accent) 25%, transparent);
    --card-banner-hover: var(--accentl);
    --card-banner-hover-mix: 95%;

    /* Content view variables */
    --content-view-bg: color-mix(in srgb, color-mix(in srgb, var(--accent3) 50%, var(--bg)) 90%, transparent);
    --content-sub-color: color-mix(in srgb, var(--accentl) 75%, transparent);

    /* Panel variables */
    --panel-right-bg: color-mix(in srgb, var(--accent2) 30%, transparent);
    --details-open-bg: color-mix(in srgb, var(--bg) 60%, transparent);
    --hr-color: color-mix(in srgb, var(--accent) 50%, transparent);

    /* Detail area variables */
    --detail-text-color: var(--white);
    --detail-li-color: color-mix(in srgb, var(--accentl) 75%, transparent);
    --detail-small-color: color-mix(in srgb, var(--accentl) 75%, transparent);
    --detail-img-hover-shadow: rgba(0, 0, 0, 0.5);
    --detail-caption-color: var(--accentl);

    /* Focused layout variables */
    --focused-layout-bg: color-mix(in srgb, color-mix(in srgb, var(--accent3) 50%, var(--bg)) 90%, transparent);

    /* Button variables */
    --ui-btn-bg: var(--white);
    --ui-btn-color: var(--bg);
    --ui-btn-border: rgba(255, 255, 255, 0.06);
    --ui-btn-scale: 1;
    --ui-btn-scale-mini: 0.8;
    --hide-btn-border: var(--accent2);

    /* Form variables */
    --searchbox-bg: color-mix(in srgb, var(--accent3) 50%, transparent);
    --searchbox-shadow: rgba(0, 0, 0, 0.8);
    --searchbox-backdrop: color-mix(in srgb, var(--bg) 50%, transparent);
    --search-text-bg: color-mix(in srgb, var(--bg) 70%, transparent);
    --search-text-border: var(--accent2);
    --search-text-focus-border: var(--accent);
    --form-button-bg: var(--accent);
    --form-button-shadow: rgba(0, 0, 0, 0.3);
    --form-button-alt-bg: color-mix(in srgb, var(--accent2) 50%, transparent);

    /* Textarea variables */
    --textarea-bg: color-mix(in srgb, var(--bg) 70%, transparent);
    --textarea-border: var(--accent2);

    /* Keyboard layout variables */
    --keyboard-bg: color-mix(in srgb, var(--accent2) 30%, transparent);
    --keycap-bg: var(--accent3);
    --keycap-border: var(--accent2);
    --keycap-hover-bg: color-mix(in srgb, var(--accent2) 60%, transparent);
    --keycap-active-shadow: rgba(0, 0, 0, 0.3);
    --keycap-active-inset-shadow: rgba(0, 0, 0, 0.2);

    /* Image preview variables */
    --img-preview-bg: color-mix(in srgb, var(--bg) 90%, transparent);
    --img-preview-shadow: rgba(0, 0, 0, 0.6);

    /* Lazy loading variables */
    --lazy-placeholder-bg: rgba(21, 27, 51, 0.5);

    /* Starfield variables */
    --star-bg: var(--accent2);

    /* Splash text variables */
    --splash-text-shadow: var(--bg);
    --info-text-color: color-mix(in srgb, var(--accentl) 75%, transparent);

    /* Ticker variables */
    --ticker-bg: color-mix(in srgb, var(--bg) 70%, transparent);
    --ticker-color: var(--white);

    /* Copy link variables */
    --copy-link-stroke: var(--accentl);
    --copy-link-copied-stroke: var(--color-6);

    /* system variables (DO NOT EDIT) */
    --offset-main-menu-on-open: -25vw;
}

/* Landscape mode: */
@media only screen and (orientation: portrait) {
    :root {
        --menu-radius: 150px;
        --menu-orbit-scale-x: 1;
        --menu-orbit-scale-y: 1;
    }
}






/* --------------------------
    HTML
    -------------------------- */

* {
    box-sizing: border-box;
    /* outline: 1px solid red !important; */
}


html,
body {
    height: 100%;
    margin: 0;
    background: var(--bg);
    color: var(--white);
    font-family: 'Main', 'Ubuntu', verdana, sans-serif;
}

.app {
    height: 100vh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: relative;
    position: fixed;
    inset: 0;
    overflow: hidden;
    touch-action: none;
}

code {
    font-family: 'Courier New', Courier, monospace;
}

/* Scrollbar */
::-webkit-scrollbar {
    width: 10px;
    height: 10px;
}

::-webkit-scrollbar-track {
    background: none;
}

::-webkit-scrollbar-thumb {
    background: var(--accent2);
    border-radius: 10px;
}

::-webkit-scrollbar-thumb:hover {
    background: var(--accent2);
}

hr {
    border: none;
    border-top: 3px solid var(--hr-color);
    margin: 12px 0;
}





/* --------------------------
    MAIN MENU
    -------------------------- */

/* logo and menu text */
.main-menu-center {
    position: absolute;
    left: 50%;
    top: 50%;
    pointer-events: none;
}

.logo {
    display: flex;
    flex-direction: column;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    z-index: 15;
    width: 200px;
    pointer-events: auto;
    transition: transform 0.1s ease-in-out;
    cursor: pointer;
}

.logo:hover {
    transform: translate(-50%, -50%) scale(1.05);
}

.logo-text {
    display: flex;
    flex-direction: column;
    position: absolute;
    left: 50%;
    top: 50%;
    width: 300px;
    color: var(--white);
    font-weight: 800;
    text-align: center;
    text-shadow: 0 2px 8px var(--menu-center-text-shadow);
    z-index: 15;
    font-family: 'Main', 'Ubuntu', verdana, sans-serif;
    transform: translate(-50%, calc(-50% + 110px));
    pointer-events: auto;
}

.logo-text * {
    animation: logoTextBobbing 3s ease-in-out infinite;
}

.logo-text .info {
    font-size: 12px;
    font-weight: 400;
    margin-top: 4px;
    color: var(--info-text-color);
    text-shadow: 0 1px 4px var(--menu-center-text-shadow);
    animation-delay: -2750ms;
}

@keyframes logoTextBobbing {

    0%,
    100% {
        translate: 0 0;
    }

    50% {
        translate: 0 -5px;
    }
}

/* loading indicator */
#loading {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}

/* main menu container */
#mainMenu,
#mainMenu * {
    .menu-item-title {
        position: absolute;
        top: calc(100% + 8px);
        left: 50%;
        transform: translateX(-50%) rotate(0deg);
        white-space: nowrap;
        font-size: 16px;
        color: var(--menu-button-sub);
        text-shadow: 0 2px 8px var(--menu-button-sub-shadow);
        font-family: 'Main', 'Ubuntu', verdana, sans-serif;
        pointer-events: none;
    }

    user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
}

#mainMenu {
    opacity: 0;
    position: absolute;
    transition: filter var(--layout-transition-speed), transform 0.5s cubic-bezier(.2, .9, .2, 1), opacity 1000ms;
}

/* main menu rings */
.menu-ring {
    position: relative;
    width: 520px;
    height: 520px;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 10;
    transition: filter 0.5s, transform 0.5s cubic-bezier(.2, .9, .2, 1), scale 1000ms;
    pointer-events: none;
}

.orbit-ring {
    position: absolute;
    left: 50%;
    top: 50%;
    border-radius: 50%;
    border: 3px solid var(--ring);
    box-shadow: 0 0 12px var(--ring-inset-shadow) inset;
    pointer-events: auto;
    z-index: -1;
    transform-origin: center center;
    transition:
        transform 0.5s cubic-bezier(.2, .9, .2, 1),
        opacity 0.6s ease;

    animation: ringPulse 2s ease-in-out infinite;
}

@keyframes ringPulse {

    0%,
    100% {
        opacity: 0.2;
    }

    50% {
        opacity: 0.6;
    }
}

/* individual orbiting menu buttons */
.menu-item {
    --size: var(--button-size);
    width: var(--size);
    height: var(--size);
    border-radius: 50%;
    position: absolute;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    box-shadow: 0 6px 18px var(--menu-button-shadow);
    transition:
        transform 150ms,
        opacity 300ms,
        box-shadow 0.2s;

    user-select: none;
    font-weight: 700;
    color: var(--menu-button-color);
    margin: auto;
    border: 0px;
    z-index: 12;
    pointer-events: auto;
}

.menu-item:hover {
    box-shadow: 0 0 50px var(--glow, rgba(255, 255, 255, 0.75));
}

.menu-item-inner {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    flex-direction: column;
}

.menu-item-thumb img {
    width: 100%;
    aspect-ratio: 1 / 1;
    border-radius: 50%;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    scale: var(--menu-button-thumb-scale);
}





/* --------------------------
    CONTENT VIEW
    -------------------------- */

/* content view layout */
.content-view {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    max-width: 50%;
    margin: 0 0 0 50%;
    padding: 36px;
    gap: 0;
    z-index: 25;
    align-items: stretch;
    justify-content: flex-start;
    overflow-y: auto;
    overscroll-behavior: contain;
    background: var(--content-view-bg);
    box-shadow: 30px var(--content-view-bg);
    border: 4px solid var(--content-view-bg);

    transform: translateY(0%);
    opacity: 1;
    transition: opacity var(--layout-transition-speed) ease-in-out, box-shadow var(--layout-transition-speed) ease-in-out, transform var(--layout-transition-speed);
}

.content-view a {
    pointer-events: auto;
    position: relative;
    z-index: 50;
}

.content-view-grid {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-content: flex-start;
    gap: var(--card-gap);
    margin-bottom: 80px;
    flex: 0 0 auto;
    max-width: calc((250px * var(--card-scale) * var(--grid-max-columns, 3)) + (var(--card-gap) * (var(--grid-max-columns, 3) - 1)));
    margin-left: auto;
    margin-right: auto;
}

.content-view-header {
    gap: 12px;
    align-items: center
}

.content-view-title {
    font-size: 24px;
    font-weight: 700
}

.content-view-subtitle {
    color: var(--content-sub-color)
}

/* cards */
.card {
    background: var(--card-bg);
    padding: calc(var(--card-padding) * var(--card-scale));
    border-radius: calc(10px * var(--card-scale) * var(--rounding));
    cursor: pointer;
    width: calc(240px * var(--card-scale));
    height: calc(300px * var(--card-scale));
    margin: 0;
    display: flex;
    flex-direction: column;
    transition: transform 150ms, translate 450ms, scale 450ms, opacity 300ms, filter 100ms, background 100ms;
    justify-content: flex-start;
    align-items: center;
    text-align: center;
    overflow: hidden;
    position: relative;
    backdrop-filter: blur(2rem);
    box-shadow: inset 0 0 30px var(--card-inset-shadow);
    flex: 0 0 auto;
}

.card:hover {
    transform: scale(1.075);
}

.card .thumb {
    width: 100%;
    max-width: 500px;
    aspect-ratio: 1/1;
    flex-shrink: 0;
    background-size: cover;
    background-position: center;
    border-radius: calc(5px * var(--card-scale) * var(--rounding));
    margin: 0 auto calc(11px * var(--card-scale)) auto;
    display: block;
    object-fit: cover;
}

.card[data-is-menu] .thumb {
    animation: cardThumbOsc 2s ease-in-out infinite;
}

@keyframes cardThumbOsc {
    0%,
    100% {
        scale: 0.95;
    }
    50% {
        scale: 1.0;
    }
}

.card .thumb.card-thumb-flip {
    margin: calc(11px * var(--card-scale)) auto 0 auto;
}

.card .card-text {
    background: var(--card-text-bg);
    width: 100%;
    min-height: calc(50px * var(--card-scale));
    padding: calc(8px * var(--card-scale));
    border-radius: calc(5px * var(--card-scale) * var(--rounding));
    box-sizing: border-box;
    flex: 0 0 auto;
    max-height: calc(60px * var(--card-scale));
    overflow: hidden;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.card .card-text .card-text-title {
    display: block;
    font-size: calc(16px * var(--card-scale));
    font-weight: bold;
}

.card:not(:has(.thumb)) .card-text .card-text-excerpt {
    white-space: normal;
}

.card .card-text .card-text-excerpt {
    font-size: calc(12px * var(--card-scale));
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: var(--card-excerpt-color)
}

.card .card-text.full {
    flex: 1;
    max-height: none;
    padding: 1rem;
    display: flex;
    justify-content: center;
    text-align: center;
    align-items: center;
    flex-direction: column;
    align-content: center;
}

.card:has(.caption) {
    height: calc(340px * var(--card-scale));
}

.card .caption {
    margin: calc(6px * var(--card-scale)) auto;
    font-size: calc(20px * var(--card-scale));
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transform: translateY(calc(-6px * var(--card-scale)))
}

.imgContainer:has(.card) {
    align-items: center;
}

/* special cards */
.card[data-url] {
    background: var(--card-link-bg);
    cursor: pointer;
    border: calc(4px * var(--card-scale)) solid var(--card-link-border);

    .card-text {
        background: var(--card-link-text-bg);
        mix-blend-mode: screen;
    }
}

.card[data-url]::after {
    content: url("data:image/svg+xml,%3Csvg fill='%23ffffff' width='20px' height='20px' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.293,20.707a1,1,0,0,1,0-1.414L17.586,5H12a1,1,0,0,1,0-2h8a1,1,0,0,1,1,1v8a1,1,0,0,1-2,0V6.414L4.707,20.707a1,1,0,0,1-1.414,0Z'/%3E%3C/svg%3E%0A");
    position: absolute;
    top: calc(12px * var(--card-scale));
    right: calc(20px * var(--card-scale));
    font-size: calc(30px * var(--card-scale));
    opacity: 1;
    scale: calc(1.5 * var(--card-scale));
}

.card[data-is-unclickable="true"] {
    background: var(--card-link-bg);
    cursor: auto;
    border: calc(4px * var(--card-scale)) solid var(--card-noclick-border);

    .card-text {
        background: transparent;
        max-height: 100%;
        flex-wrap: wrap;

        .excerpt,
        small {
            white-space: normal;
            overflow: visible;
            text-overflow: clip;
        }
    }
}

.card[data-is-unclickable="true"] .card-text .excerpt,
.card.active .card-text .excerpt {
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
    word-break: break-word;
    overflow-wrap: anywhere;
}

.card[data-is-unclickable="true"]:hover {
    transform: scale(1) !important;
}

.card[data-blank="true"] {
    justify-content: center;

    .thumb {
        aspect-ratio: 240/300;
    }
}

.card[data-is-banner="true"] {
    width: 100%;
    height: calc(300px * var(--card-scale) * var(--card-padding));
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    /* text-align: left; */
    overflow: hidden;

    .thumb {
        width: calc(300px * var(--card-scale) * var(--card-scale-banner));
        height: 100%;
        max-height: 100%;
        aspect-ratio: 1/1;
        flex-shrink: 0;
        margin: 0;
        border-radius: calc(5px * var(--card-scale) * var(--rounding));
        background-size: cover;
        background-position: center;
    }

    .card-text {
        width: 50%;
        height: 100%;
        padding-left: 24px;
        /* background: transparent; */
        flex: 1;
        max-height: none;
    }
}

.card[data-is-banner="true"] .card-text .card-text-title {
    font-size: calc(52px * var(--card-scale-banner) * var(--card-scale));
    margin-bottom: calc(12px * var(--card-scale-banner) * var(--card-scale));
}

.card[data-is-banner="true"] .card-text .card-text-excerpt {
    font-size: calc(32px * var(--card-scale-banner) * var(--card-scale));
    white-space: normal;
}

/* replace the textonly thing that doesnt work */
.card .card-text .card-text-title.textonly  {
    font-size: calc(26px * var(--card-scale));
    margin-bottom: calc(6px * var(--card-scale));
}

.card .card-text .card-text-excerpt.textonly  {
    font-size: calc(16px * var(--card-scale));
    white-space: normal;
}

/*.card[data-textonly="true"] .card-text .card-text-title {
    font-size: calc(26px * var(--card-scale));
    margin-bottom: calc(6px * var(--card-scale));
}

.card[data-textonly="true"] .card-text .card-text-excerpt {
    font-size: calc(16px * var(--card-scale));
    white-space: normal;
}*/

.card[data-is-banner="true"]:hover {
    transform: scale(1);
    background-color: color-mix(in srgb, var(--card-bg) var(--card-banner-hover-mix), var(--card-banner-hover));
}

.card[data-is-banner="true"][data-is-unclickable="true"]:hover {
    background: var(--card-link-bg) !important;
}

/* card separators */
.card-separator {
    width: 100%;
    pointer-events: none;
    margin: calc(12px * var(--card-scale)) auto;
}

.card-separator-title {
    font-size: 18px;
    font-weight: bold;
}

.card-separator-subtitle {
    font-size: 14px;
    color: var(--card-excerpt-color);
}





/* --------------------------
    DETAIL VIEW
    -------------------------- */

/* detail view layout */
.detail-view {
    height: 100vh;
    position: fixed;
    inset: 0;
    display: flex;
    align-items: stretch;
    justify-content: center;
    max-width: 50%;
    margin: 0 0 0 50%;
    padding-top: 72px;
    padding-bottom: 90px;
    padding-left: 50px;
    padding-right: 50px;
    overflow-y: auto;
    z-index: 25;
    background: var(--focused-layout-bg);

    transform: translateY(0%);
    opacity: 1;
    transition: opacity var(--layout-transition-speed) ease-in-out, box-shadow var(--layout-transition-speed) ease-in-out, transform var(--layout-transition-speed);
}

/* detail view header */
.detail-view-header {
    min-width: 200px;
    max-width: 200px;
    transition: transform 400ms, opacity 300ms;
    --card-scale: 0.875;
}

/* selected card -> active and put on .detail-view-header */
.card.active {
    transform: translateX(-6px);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.6);
    height: 100%;
    width: 100%;
    cursor: auto;
    justify-content: flex-start;

    .thumb {
        aspect-ratio: 1/1;
    }
}

.card.active .card-text {
    max-height: 100%;
}

.card.active .card-text .card-text-title {
    font-size: 16px;
}

.card.active .card-text .card-text-excerpt {
    font-size: 12px;
    white-space: normal;
}

.card.active .thumb {
    width: 100%;
}

/* detail view content and formatting */
.detail-view-content {
    flex: 1;
    background: var(--panel-right-bg);
    border-radius: calc(10px * var(--rounding));
    padding: 16px;
    max-width: 1100px;
    min-height: 220px;
    overflow: auto;
    backdrop-filter: blur(2rem);
    transition: transform 150ms, translate 450ms
}

.detail-view-content * {
    color: var(--detail-text-color);
}

.detail-view-content li {
    color: var(--detail-li-color);
}

a,
a:link,
a:visited,
a:hover,
a:active {
    color: var(--white);
    opacity: 1;
    text-decoration: underline;
    transition: color 0.2s, opacity 0.2s;
    z-index: 999;
}

a[data-open-card] {
    cursor: pointer;
    text-decoration: underline;
}

.card-parent-link {
    font-size: 16px;
}

.detail-view-content,
.detail-view-content small,
.detail-view-content small a,
.detail-view-content details {
    color: var(--detail-small-color);
}

.detail-view-content img {
    display: block;
    margin: auto;
    max-width: 60%;
    max-height: 60%;
    border-radius: calc(10px * var(--rounding));
    cursor: zoom-in;
    transition: transform 0.3s ease, box-shadow 0.2s ease, opacity 0.4s ease-out;
}

.detail-view-content img.thumb {
    cursor: pointer;
}

.detail-view-content img:hover {
    transform: scale(1.03);
}

/* horizontally-scrollable container */
.imgContainer {
    margin: 16px auto;
    display: flex;
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    gap: 12px;
    padding: 12px 16px;
    scroll-behavior: smooth;
    max-width: 100%;
    box-sizing: border-box;
    justify-content: center;
}

.imgContainer:has(> :nth-child(4)) {
    justify-content: flex-start;
}

.imgContainer img {
    flex: 0 0 auto;
    max-width: 30%;
    margin: auto 0;
    height: auto;
    border-radius: calc(10px * var(--rounding));
    object-fit: cover;
    user-select: none;
    pointer-events: auto;
    transition: transform 0.3s ease, opacity 0.4s ease;
}

/* internal cards */
.card.internal {
    margin: var(--card-gap) auto;
}

.card.internal.active {
    margin: auto;
}

.card.internal img {
    max-width: 100%;
    max-height: 100%;
    transform: scale(1);
}

.imgContainer:has(.card.internal) {
    flex-wrap: wrap;
    justify-content: center;
}

.imgContainer .card.internal {
    --card-scale: 0.75;
    flex: 0 0 auto;
    margin: auto 0;
    border-radius: calc(10px * var(--rounding));
    object-fit: cover;
    user-select: none;
    pointer-events: auto;
    transition: transform 0.2s ease;
}

/* instacard */
#instaCard iframe {
    width: 100%;
    height: 500px;
    border-radius: calc(20px * var(--rounding));
    font-family: 'Main', 'Ubuntu', verdana, sans-serif;
}


/* preview mode */
.detail-view.preview-mode img {
    cursor: auto;
}





/* --------------------------
    IMAGES
    -------------------------- */

/* image previewer layout */
.image-view {
    height: 100vh;
    position: fixed;
    inset: 0;
    background: var(--img-preview-bg);
    backdrop-filter: blur(4px);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    z-index: 9999;

    opacity: 1;
    transition: opacity calc(var(--layout-transition-speed) / 2) ease-in-out;
}

.image-view img {
    max-width: 95%;
    max-height: 95%;
    border-radius: calc(5px * var(--rounding));
    box-shadow: 0 0 30px var(--img-preview-shadow);
    cursor: zoom-out;
    transition: transform 0.3s ease, opacity 0.4s ease;
}

.image-view img[data-hasCaption="true"] {
    max-width: 80%;
    max-height: 80%;
}

.image-view img:hover {
    transform: scale(1.01);
}

/* lazy images */
img[data-src] {
    display: block;
    aspect-ratio: 4 / 5;
    width: 90%;
    object-fit: cover;
    background-color: var(--bg);
    opacity: 0.5;
}

img {
    transition: opacity 0.4s ease;
}






/* --------------------------
    Interactives
    -------------------------- */

/* searchbox */
#searchBox {
    border: none;
    border-radius: calc(20px * var(--rounding));
    padding: 0;
    background: var(--searchbox-bg);
    box-shadow: 0 0 40px var(--searchbox-shadow);
    backdrop-filter: blur(15px);
    color: var(--white);
    width: min(90%, 420px);
    max-width: 420px;
    animation: fadeInDialog 0.2s ease-out;
    transition: transform 0.3s ease, opacity 0.3s ease;
}

#searchBox[open] {
    opacity: 1;
    transform: scale(1);
}

#searchBox::backdrop {
    background: var(--searchbox-backdrop);
}

#searchForm {
    display: flex;
    flex-direction: column;
    padding: 24px;
    gap: 16px;
    text-align: center;
}

#searchForm h2 {
    font-size: 1.5rem;
    font-weight: 800;
    color: var(--accentl);
    margin-bottom: 4px;
}

#searchText {
    background: var(--search-text-bg);
    border: 2px solid var(--search-text-border);
    border-radius: calc(12px * var(--rounding));
    padding: 10px 14px;
    font-size: 1rem;
    color: var(--white);
    outline: none;
    transition: border-color 0.2s, box-shadow 0.2s;
}

#searchText:focus {
    border-color: var(--search-text-focus-border);
}

/* Buttons */
.form-buttons {
    display: flex;
    justify-content: center;
    gap: 12px;
    margin-top: 8px;
}

#searchForm button,
button {
    background: var(--form-button-bg);
    color: var(--white);
    border: none;
    border-radius: 999px;
    padding: 8px 16px;
    font-size: 1rem;
    font-family: 'Main', 'Ubuntu', verdana, sans-serif;
    cursor: pointer;
    transition: background 0.3s, transform 0.2s;
    box-shadow: 0 0 12px var(--form-button-shadow);
}

.card button {
    margin: 4px;
    font-size: calc(1rem * var(--card-scale));
    padding: calc(8px * var(--card-scale)) calc(16px * var(--card-scale));
}

#searchForm button:hover {
    background: var(--accent);
    transform: translateY(-2px);
}

.detail-view-content button button:hover,
.card button:hover {
    transform: scale(1.05);
}

#searchForm button[type="button"] {
    background: var(--form-button-alt-bg);
}

@keyframes fadeInDialog {
    from {
        opacity: 0;
        transform: scale(0.9);
    }

    to {
        opacity: 1;
        transform: scale(1);
    }
}

/* text area */
textarea {
    width: 100%;
    min-height: 100px;
    background: var(--textarea-bg);
    border: 2px solid var(--textarea-border);
    border-radius: calc(12px * var(--rounding));
    padding: 10px 14px;
    font-size: 1rem;
    color: var(--white);
    outline: none;
    transition: border-color 0.2s, box-shadow 0.2s;
    font-family: Main, Ubuntu, verdana, sans-serif;
    resize: vertical;
}

/* keyboard layout */
.keyboardLayout {
    display: flex;
    flex-wrap: wrap;
    place-content: flex-start center;
    gap: 5px;
    margin-top: 10px;
    padding: 12px;
    background: var(--keyboard-bg);
    border-radius: calc(12px * var(--rounding));
    backdrop-filter: blur(1rem);
    max-width: 700px;
    margin-left: auto;
    margin-right: auto;
}

.keycap {
    background: var(--keycap-bg);
    border: 2px solid var(--keycap-border);
    border-radius: calc(10% * var(--rounding));
    color: var(--white);
    padding: 12px 8px;
    cursor: pointer;
    transition: 0.2s;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 50px;
    min-width: 35px;
    user-select: none;
}

.keycap:hover {
    background: var(--keycap-hover-bg);
    transform: translateY(2px);
}

.keycap:active {
    transform: translateY(5px);
    box-shadow: 0 2px 4px var(--keycap-active-shadow), inset 0 2px 4px var(--keycap-active-inset-shadow);
}

.genotheta {
    font-family: Genotheta, Main, Ubuntu, verdana, sans-serif;
    font-size: 2rem;
}

textarea#genothetaOutput,
textarea#genothetaOutputEx {
    font-family: Genotheta, Main, Ubuntu, verdana, sans-serif;
    font-size: 2rem;
}

.starstroke {
    font-family: starstroke, Main, Ubuntu, verdana, sans-serif;
    font-size: 2rem;
}

textarea#starstrokeOutput {
    font-family: starstroke, Main, Ubuntu, verdana, sans-serif;
    font-size: 1.5rem;
}

.nadirune {
    font-family: nadirune, Main, Ubuntu, verdana, sans-serif;
    font-size: 2rem;
}

textarea#nadiruneOutput {
    font-family: nadirune, Main, Ubuntu, verdana, sans-serif;
    font-size: 1.5rem;
}

.zenpen {
    font-family: zenpen, Main, Ubuntu, verdana, sans-serif;
    font-size: 2rem;
}

textarea#zenpenOutput {
    font-family: zenpen, Main, Ubuntu, verdana, sans-serif;
    font-size: 1.5rem;
}

/* copy link button */
.copy-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    margin-left: 8px;
    opacity: 0.7;
    cursor: pointer;
    transition: opacity 0.2s;
    scale: 2;
}

.copy-link:hover {
    opacity: 1;
}

.copy-link svg {
    width: 16px;
    height: 16px;
    stroke: var(--copy-link-stroke);
    stroke-width: 1.5;
    transition: stroke 0.3s ease, transform 0.2s ease, stroke-width 0.2s ease;
}

.copy-link.copied svg {
    stroke: var(--copy-link-copied-stroke);
    stroke-width: 2.5;
    transform: scale(1.2);
}





/* --------------------------
    INTERFACE
    -------------------------- */

/* individual ui buttons */
.ui-btn {
    background: var(--ui-btn-bg);
    color: var(--ui-btn-color);
    padding: calc(12px * var(--ui-btn-scale)) calc(14px * var(--ui-btn-scale));
    border-radius: 999px;
    min-height: calc(40px * var(--ui-btn-scale));
    border: calc(1px * var(--ui-btn-scale)) solid var(--ui-btn-border);
    cursor: pointer;
    z-index: 80;
    display: flex;
    align-items: center;
    gap: calc(8px * var(--ui-btn-scale));
    pointer-events: auto;
    transition: opacity 300ms, transform 100ms;
    font-family: 'Main', 'Ubuntu', verdana, sans-serif;
}

.ui-btn:hover {
    transform: scale(1.1);
}

.ui-btn:active {
    transform: scale(0.95);
}

.ui-btn span {
    font-size: calc(14px * var(--ui-btn-scale));
}

.back-btn svg {
    width: calc(13px * var(--ui-btn-scale));
}

/* ui panels */
#UIPanelBottom,
#UIPanelTop {
    z-index: 100;
    display: flex;
    flex-direction: row;
    justify-content: flex-end;
    gap: calc(16px * var(--ui-btn-scale));
    align-items: center;
    padding: calc(24px * var(--ui-btn-scale));
    position: fixed;
    bottom: 0px;
    width: 100%;
    overflow: hidden;
    pointer-events: none;
    white-space: nowrap;
}

#UIPanelTop {
    bottom: auto;
    top: 0px;
}

#UIPanelBottom *[id],
#UIPanelTop *[id] {
    padding: calc(12px * var(--ui-btn-scale)) calc(14px * var(--ui-btn-scale));
    display: block;
    cursor: pointer;
    opacity: 1;
    visibility: visible;
    max-height: none;
    position: static;
    pointer-events: auto;
}

#UIPanelBottom *[id].hidden,
#UIPanelTop *[id].hidden {
    opacity: 0;
    visibility: hidden;
    max-height: 0;
    position: fixed;
    pointer-events: none;
}





/* --------------------------
    LAYOUT VISIBILITY
    -------------------------- */

.no-transition {
    transition: none;
}

.no-transition-at-all * {
    transition: none !important;
}

.hidden {
    opacity: 0;
    transform: translateY(100%);
    pointer-events: none;
}

.image-view.hidden {
    transform: none;
}

.ui-hide {
    opacity: 0 !important;
    pointer-events: none !important;
    display: none !important;
}





/* --------------------------
    Stars
    -------------------------- */

#starfield {
    position: absolute;
    inset: 0;
    overflow: hidden;
    transition: filter var(--layout-transition-speed);
}

.star-layer {
    position: absolute;
    inset: 0;
}

.star {
    position: absolute;
    background: var(--star-bg);
    animation: twinkle 5s infinite ease-in-out;
}


@keyframes twinkle {

    0%,
    100% {
        opacity: 0.2;
    }

    50% {
        opacity: 1;
    }
}





/* --------------------------
    Ticker
    -------------------------- */

.ticker-bar {
    position: relative;
    overflow: hidden;
    width: 100%;
    height: 2em;
    background: var(--ticker-bg);
    color: var(--ticker-color);
    font-size: 1.1em;
    white-space: nowrap;
    display: flex;
    align-items: center;
    padding-left: 0.5em;
    box-sizing: border-box;
}

.ticker-text {
    position: absolute;
    white-space: nowrap;
    will-change: transform;
    animation-timing-function: linear;
}





/* --------------------------
    Blur
    -------------------------- */

.blur {
    filter: blur(0.5rem)
}





/* --------------------------
    Responsive layout
    -------------------------- */

/* non-wide screens */
@media (max-width:2160px) {
    :root {
        --offset-main-menu-on-open: 0;
    }

    .content-view,
    .detail-view {
        max-width: 100%;
        margin: 0;
    }
}

/* small screens */
@media (max-width:700px) {
    :root {
        --menu-stage-scale: 0.75;
        --card-scale: var(--card-scale-mini);
        --ui-btn-scale: var(--ui-btn-scale-mini);
        --card-gap: 10px;
    }

    .content-view {
        padding-left: 15px;
        padding-right: 15px;
    }

    .detail-view-header {
        max-width: 100%;
        margin: 12px;
        margin-top: -50px;
    }

    .detail-view-content {
        min-height: 320px;
        margin-bottom: 60px;
    }

    .detail-view {
        display: flex;
        flex-direction: column;
        padding-top: 72px;
        padding-bottom: 48px;
        padding-left: 0px;
        padding-right: 0px;

        img {
            max-width: 100%;
            border-radius: calc(10px * var(--rounding));
            padding: 0px;
        }
    }

    .detail-view-content img:not([class]) {
        max-width: 80%;
        max-height: 80%;
    }

    .detail-view-content .imgContainer {
        gap: 2%;
    }

    .detail-view-content .imgContainer img:not([class]) {
        max-width: 35%;
    }

    .imgContainer .card.internal {
        --card-scale: 0.55;
    }

    .card.active {
        width: 100% !important;
        height: auto;
        flex-direction: row;
        align-items: center;
        justify-content: flex-start;
        text-align: left;
        padding: 12px;
    }

    .card.active .thumb {
        width: 20%;
        height: auto;
        aspect-ratio: 1 / 1;
        margin: 0;
        flex-shrink: 0;
    }

    .card.active .card-text {
        width: 50%;
        padding-left: 12px;
        background: transparent;
        flex: 1;
        text-align: left;
        max-height: none;
    }

    .card.active .card-text strong {
        font-size: 20px;
    }

    .card.active .card-text .excerpt {
        font-size: 14px;
        white-space: normal;
    }
}

/* --------------------------
    404 page
    -------------------------- */

.notFound {
    animation: shakeV 5s ease-in-out infinite;
}

@keyframes shakeV {

    0%,
    100% {
        transform: translateY(0);
    }

    25%,
    75% {
        transform: translateY(-5px);
    }

    50% {
        transform: translateY(5px);
    }
}