:root {
    --bg:       #2b2d30;
    --bg-card:  #323438;
    --bg-light: #34363a;
    --line:     #46494e;
    --text:     #c4c6ca;
    --text-dim: #8d9096;
    --heading:  #e2e4e8;
    --glitch-a: #e1e0e4;   
    --glitch-b: #030a1a;   
    user-select: none;

}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: "VT323", monospace;
    font-size: 18px;
    line-height: 1.5;
    background: #1f2023;
    color: var(--text);
}
.projects-grid {
    display: flex;
    flex-wrap: wrap;   
    gap: 14px;
}

a {
    color: var(--text-dim);
    text-decoration: none;
}
a:hover { color: var(--heading); }

.page {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 16px;
    min-height: 100vh;
    background: var(--bg);
    border-left: 1px solid var(--line);
    border-right: 1px solid var(--line);
}


h2, h3, h4 {
    font-family: "Silkscreen", monospace;
    color: var(--heading);
    text-transform: uppercase;
    letter-spacing: 1px;
}

h2, h3 {
    display: inline-block;
    margin-bottom: 14px;
    padding-bottom: 6px;
    border-bottom: 2px solid;
    border-image: linear-gradient(to right, var(--text-dim), transparent) 1;
}
h2 { font-size: 18px; }
h3 { font-size: 14px; }

section { margin-bottom: 40px; }

.gothic {
    position: relative;
    overflow: hidden;
    border-bottom: 2px solid;
    border-image: linear-gradient(to right, transparent, var(--line), transparent) 1;
}

.gothic svg {
    display: block;
    width: 100%;
    height: 120px;
    animation: glitch 7s steps(1) infinite;
}

.base {
    fill: none;
    stroke: var(--line);
    stroke-width: 2;
}


.g {
    fill: none;
    stroke: var(--text);
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-dasharray: 100;
    stroke-dashoffset: 100;
    animation: gdraw 10s ease-in-out infinite;
    animation-delay: calc(var(--i, 0) * 0.3s);
}
.g.red { stroke: var(--glitch-b); }

@keyframes gdraw {
    0%       { stroke-dashoffset: 100; }
    30%, 70% { stroke-dashoffset: 0; }
    100%     { stroke-dashoffset: -100; }
}


.rose {
    transform-box: fill-box;
    transform-origin: center;
    animation: rose-flicker 5s linear infinite;
}
.spokes {
    transform-box: fill-box;
    transform-origin: center;
    animation: gdraw 10s ease-in-out infinite, spin 30s linear infinite;
    animation-delay: calc(var(--i, 0) * 0.3s), 0s;
}
@keyframes spin { to { transform: rotate(360deg); } }

@keyframes rose-flicker {
    0%, 100%   { filter: drop-shadow(0 0 4px var(--glitch-b)); opacity: 1; }
    50%        { filter: drop-shadow(0 0 12px var(--glitch-b)); }
    61%        { opacity: 1; }
    62%        { opacity: .2; }
    63%        { opacity: 1; }
    64%        { opacity: .4; }
    65%        { opacity: 1; }
}

@keyframes glitch {
    0%, 100% { transform: none; filter: none; }

    18%  { transform: translateX(-6px);
           filter: drop-shadow(5px 0 0 var(--glitch-b)) drop-shadow(-5px 0 0 var(--glitch-a)); }
    19%  { transform: translateX(8px) skewX(10deg);
           filter: drop-shadow(-7px 0 0 var(--glitch-b)) drop-shadow(7px 0 0 var(--glitch-a)); }
    20%  { transform: none; filter: none; }

    52%  { transform: translateY(-3px);
           filter: drop-shadow(0 4px 0 var(--glitch-a)) drop-shadow(0 -4px 0 var(--glitch-b)); }
    53%  { transform: none; filter: none; }

    81%  { transform: translateX(10px) skewX(-14deg);
           filter: drop-shadow(-6px 0 0 var(--glitch-b)) drop-shadow(6px 0 0 var(--glitch-a)); }
    82%  { transform: translateX(-4px);
           filter: drop-shadow(4px 0 0 var(--glitch-a)); }
    83%  { transform: none; filter: none; }
}

.gothic::before,
.gothic::after {
    content: "";
    position: absolute;
    inset: 0;
    pointer-events: none;
}
.gothic::before {
    background: repeating-linear-gradient(to bottom,
        rgba(0,0,0,.18) 0, rgba(0,0,0,.18) 1px, transparent 1px, transparent 3px);
}
.gothic::after {
    height: 28px;
    inset: auto 0 auto 0;
    background: linear-gradient(to bottom, transparent, rgba(255,255,255,.07), transparent);
    animation: scan 5s linear infinite;
}
@keyframes scan {
    from { transform: translateY(-30px); }
    to   { transform: translateY(130px); }
}
.layout {
    display: grid;
    grid-template-columns: 300px 1fr;
    padding-top: 24px;
}

.sidebar {
    order: -1;
    padding-right: 24px;
    border-right: 1px solid var(--line);
}

.content {
    padding-left: 24px;
}


.about {
    display: grid;
    grid-template-columns: 1fr 1fr;
    align-items: center;
    gap: 20px;
}

.about-text {
    font-size: 18px;
    text-transform: uppercase;
}
.about-text p { margin-bottom: 10px; }

.profile-image {
    width: 250px;
    max-width: 100%;
    height: auto;
    border-radius: 20px;
    justify-self: center;
}


.faq-item { margin-bottom: 10px; }

.faq-question {
    width: 100%;
    text-align: left;
    padding: 10px 16px;
    background: var(--bg-light);
    color: var(--heading);
    border: 1px solid var(--line);
    border-radius: 8px;
    font-family: inherit;
    font-size: 19px;
    cursor: pointer;
}
.faq-question:hover { border-color: var(--text-dim); }

.faq-content {
    display: grid;
    grid-template-rows: 0fr;          
    opacity: 0;
    padding: 0 16px;
    font-size: 18px;
    color: var(--text-dim);
    transition: grid-template-rows .35s ease,
                opacity .35s ease,
                padding .35s ease;
}
.faq-inner { overflow: hidden; }

.faq-content.active {
    grid-template-rows: 1fr;         
    opacity: 1;
    padding: 12px 16px;
}


.side-links, .friends-links  { list-style: none; }
.side-links li,.friends-links li { margin-bottom: 4px; }
.glitch {
    position: relative;
    display: inline-block;
    color: var(--heading);
}


.glitch::before,
.glitch::after {
    content: attr(data-text);
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    pointer-events: none;
}

.glitch::before {
    color: var(--glitch-b);
    animation: glitch-a 4s steps(1) infinite;
}

.glitch::after {
    color: var(--glitch-a);
    animation: glitch-b 4s steps(1) infinite;
}

@keyframes glitch-a {
    0%, 100% { transform: none; clip-path: inset(0 0 100% 0); }
    10% { transform: translate(-3px, 1px); clip-path: inset(0 0 55% 0); }
    13% { transform: translate(2px, 0);    clip-path: inset(40% 0 20% 0); }
    16% { transform: none; clip-path: inset(0 0 100% 0); }
    62% { transform: translate(-4px, 0);   clip-path: inset(10% 0 60% 0); }
    65% { transform: none; clip-path: inset(0 0 100% 0); }
}

@keyframes glitch-b {
    0%, 100% { transform: none; clip-path: inset(100% 0 0 0); }
    11% { transform: translate(3px, -1px); clip-path: inset(50% 0 0 0); }
    14% { transform: translate(-2px, 0);   clip-path: inset(20% 0 40% 0); }
    17% { transform: none; clip-path: inset(100% 0 0 0); }
    63% { transform: translate(4px, 0);    clip-path: inset(60% 0 5% 0); }
    66% { transform: none; clip-path: inset(100% 0 0 0); }
}
.side-links a,.friends-links a {
    font-size: 18px;
    text-transform: uppercase;
}
.side-links a::before { content: "⁜ "; }

.card {
    padding: 14px 16px;
    margin-bottom: 12px;
    background: var(--bg-card);
}

.card h4 { font-size: 13px; }

.card time {
    display: block;
    margin: 4px 0 8px;
    font-size: 15px;
    text-transform: uppercase;
    color: var(--text-dim);
}

.card p {
    font-size: 17px;
    text-transform: uppercase;
}

@media (max-width: 800px) {
    .layout { grid-template-columns: 1fr; }

    .sidebar {
        padding: 0 0 24px;
        border-right: none;
        border-bottom: 1px solid var(--line);
    }

    .content { padding-left: 0; padding-top: 24px; }
    .about { grid-template-columns: 1fr; }
}
.side-links a {
    position: relative;
    display: inline-block;
    transition: color .1s;
}

.side-links a:hover {
    color: #fff;
    animation: text-glitch .35s steps(1) infinite;
}

.side-links a::after {
    content: attr(data-text);
    position: absolute;
    left: 0;
    top: 0;
    padding-left: 3ch;           
    color: var(--glitch-a);
    opacity: 0;
    pointer-events: none;
    mix-blend-mode: screen;
}

.side-links a:hover::after {
    opacity: 1;
    animation: ghost .19s steps(1) infinite;
}

@keyframes text-glitch {
    0%   { text-shadow: 4px 0 var(--glitch-b), -4px 0 var(--glitch-a); transform: translateX(-3px); }
    15%  { text-shadow: -6px 0 var(--glitch-b), 6px 0 var(--glitch-a); transform: translateX(4px) skewX(-15deg); }
    30%  { text-shadow: 2px 0 var(--glitch-b), -2px 0 var(--glitch-a); transform: translateX(0); }
    45%  { text-shadow: -8px 0 var(--glitch-b), 8px 0 var(--glitch-a); transform: translateX(-5px) skewX(12deg); }
    60%  { text-shadow: 3px 0 var(--glitch-b), -3px 0 var(--glitch-a); transform: translateX(3px); }
    75%  { text-shadow: -5px 0 var(--glitch-b), 5px 0 var(--glitch-a); transform: translateX(-2px) skewX(-8deg); }
    100% { text-shadow: 4px 0 var(--glitch-b), -4px 0 var(--glitch-a); transform: translateX(2px); }
}

@keyframes ghost {
    0%   { transform: translate(-6px, 2px);  clip-path: inset(0 0 60% 0); }
    20%  { transform: translate(7px, -2px);  clip-path: inset(50% 0 0 0); }
    40%  { transform: translate(-4px, 0);    clip-path: inset(25% 0 45% 0); }
    60%  { transform: translate(12px, 1px);   clip-path: inset(0 0 30% 0); }
    80%  { transform: translate(-8px, -1px); clip-path: inset(60% 0 0 0); }
    100% { transform: translate(5px, 0);     clip-path: inset(10% 0 50% 0); }
}
.project-card {
    display: block;
    width: 220px;
    padding: 0;
    background: var(--bg-card);
    border: 1px solid var(--line);
    cursor: pointer;
    font-family: inherit;
    text-align: left;
    transition: border-color .2s, transform .2s;
}
.project-card:hover {
    border-color: var(--text-dim);
    transform: translateY(-3px);
}
.project-card img {
    display: block;
    width: 100%;
    height: 130px;
    object-fit: cover;
}
.project-title {
    display: block;
    padding: 10px 12px;
    color: var(--heading);
    font-size: 19px;
    text-transform: uppercase;
}


.modal {
    margin: auto;                 
    width: min(700px, 92vw);
    max-height: 85vh;
    padding: 0;
    overflow-y: auto;
    background: var(--bg);
    color: var(--text);
    border: 1px solid var(--line);
}
.modal[open] { animation: modal-in .25s ease; }
.modal::backdrop { background: rgba(0, 0, 0, .75); }

@keyframes modal-in {
    from { opacity: 0; transform: translateY(14px) scale(.97); }
    to   { opacity: 1; transform: none; }
}

.modal-body { padding: 56px 24px 24px; }   
.modal-body p { margin-bottom: 16px; }

.modal-images {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
    gap: 10px;
}
.modal-images img {
    width: 100%;
    display: block;
    border: 1px solid var(--line);
}


.close {
    position: absolute;
    top: 10px;
    left: 10px;
    width: 34px;
    height: 34px;
    background: var(--bg-light);
    color: var(--heading);
    border: 1px solid var(--line);
    font-size: 18px;
    cursor: pointer;
    transition: background .15s, color .15s;
}
.close:hover {
    background: var(--glitch-b);
    color: #fff;
}


body:has(dialog[open]) { overflow: hidden; }