.projects-tree{touch-action:none;-webkit-user-select:none;user-select:none;background:linear-gradient(#16181a 0%,#1a1c1e 50%,#1b1d1f 100%);flex:auto;width:100%;min-height:0;position:relative;overflow:hidden}.projects-tree__svg{cursor:grab;touch-action:none;width:100%;height:100%;display:block}.projects-tree__svg:active{cursor:grabbing}.certificates-islands{z-index:20;position:absolute;top:24px;right:24px}.certificates-trigger{color:#f5c453;cursor:pointer;pointer-events:auto;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#1b1d1feb;border:1px solid #f5c45373;border-radius:14px;align-items:center;gap:9px;min-height:42px;padding:0 15px;font-size:13px;font-weight:600;transition:background .2s,border-color .2s;display:inline-flex;box-shadow:0 8px 22px #00000047}.certificates-trigger:hover,.certificates-trigger:focus-visible{background:#252729;border-color:#f5c453}.certificates-trigger__count{background:#f5c45329;border-radius:999px;place-items:center;min-width:20px;height:20px;font-size:11px;display:grid}.certificate-gallery{z-index:20000;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);pointer-events:auto;opacity:0;background:#080a0bd6;justify-content:center;align-items:center;padding:24px;transition:opacity .26s;display:flex;position:fixed;inset:0}.certificate-gallery[data-state=open]{opacity:1;animation:.26s ease-out both certificate-gallery-enter}.certificate-gallery[data-state=closing]{animation:.26s ease-in both certificate-gallery-exit}.certificate-gallery__panel{background:radial-gradient(at 92% 0,#f5c45317,#0000 34%),linear-gradient(145deg,#1d2021,#121415 72%);border:1px solid #ffffff17;border-radius:26px;flex-direction:column;width:min(1120px,100%);height:min(780px,100%);min-height:0;padding:clamp(22px,3.2vw,42px);transition:transform .32s cubic-bezier(.2,.75,.25,1);display:flex;overflow:hidden;transform:translateY(14px)scale(.985);box-shadow:0 32px 100px #0000009e}.certificate-gallery[data-state=open] .certificate-gallery__panel{animation:.28s cubic-bezier(.2,.75,.25,1) both certificate-panel-enter;transform:translateY(0)scale(1)}.certificate-gallery[data-state=closing] .certificate-gallery__panel{animation:.26s ease-in both certificate-panel-exit}.certificate-gallery__header{flex:none;justify-content:space-between;align-items:center;gap:24px;padding-bottom:26px;display:flex}.certificate-gallery__eyebrow{color:#f5c453;letter-spacing:.2em;font-size:10px;font-weight:700}.certificate-gallery__header h2{color:#fff;letter-spacing:-.035em;margin-top:8px;font-size:clamp(26px,3vw,38px);font-weight:700}.certificate-gallery__header p{color:#ffffff85;margin-top:7px;font-size:14px}.certificate-gallery__close:hover,.certificate-gallery__close:focus-visible{color:#f5c453;background:#f5c4531f;border-color:#f5c4538c}.certificate-gallery__close{color:#fff;cursor:pointer;background:#ffffff14;border:1px solid #ffffff24;border-radius:13px;flex:none;place-items:center;width:44px;height:44px;transition:background .2s,border-color .2s,color .2s;display:grid}.certificate-category-tabs{border-bottom:1px solid #ffffff14;flex:none;gap:8px;padding:0 0 18px;display:flex;overflow-x:auto}.certificate-category-tab{color:#ffffff94;cursor:pointer;background:#ffffff0b;border:1px solid #0000;border-radius:999px;flex:none;align-items:center;gap:10px;min-height:40px;padding:0 15px;font-size:12px;font-weight:600;transition:color .2s,background .2s,border-color .2s;display:inline-flex}.certificate-category-tab[data-active=true]{color:#f5c453;background:#f5c4531f;border-color:#f5c45357}.certificate-category-tab>span{min-width:21px;height:21px;color:inherit;background:#ffffff14;border-radius:999px;place-items:center;font-size:10px;display:grid}.certificate-gallery__content{scrollbar-color:#f5c45359 transparent;scrollbar-width:thin;flex-direction:column;flex:1;min-height:0;padding-top:20px;display:flex;overflow-y:auto}.certificate-gallery__section-title{flex:none;justify-content:space-between;align-items:baseline;gap:16px;padding-bottom:14px;display:flex}.certificate-gallery__section-title h3{color:#fff;font-size:17px;font-weight:650}.certificate-gallery__section-title>span{color:#fff6;font-size:11px}.certificate-card-grid{grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;gap:16px;padding:2px 2px 10px;display:grid}.certificate-card{background:linear-gradient(150deg,#ffffff12,#ffffff06);border:1px solid #ffffff17;border-radius:16px;flex-direction:column;min-width:0;transition:transform .2s,border-color .2s,box-shadow .2s;animation:.3s ease-out both certificate-card-enter;display:flex;overflow:hidden;box-shadow:0 12px 30px #0003}.certificate-card:hover{border-color:#f5c4534d;transform:translateY(-3px);box-shadow:0 18px 34px #00000052}.certificate-card__preview{aspect-ratio:1.58;background:radial-gradient(circle,#fff 0%,#f6f6f4 72%,#e8e8e6 100%);flex:none;place-items:center;padding:10px;display:grid;overflow:hidden}.certificate-card__preview img,.certificate-card__preview iframe{object-fit:contain;border:0;width:100%;height:100%;display:block}.certificate-card__caption{flex-direction:column;flex:1;min-height:138px;padding:15px 16px 14px;display:flex}.certificate-card__caption h4{color:#f5c453;font-size:14px;font-weight:650;line-height:1.4}.certificate-card__caption p{color:#ffffff80;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:6px;font-size:11px;line-height:1.5;display:-webkit-box;overflow:hidden}.certificate-card__footer{justify-content:space-between;align-items:center;gap:8px;margin-top:auto;padding-top:13px;display:flex}.certificate-card__footer>span{color:#ffffff61;font-size:10px}.certificate-card__footer a{color:#f5c453;flex:none;font-size:11px;font-weight:600;text-decoration:none;transition:color .2s}.certificate-card__footer a:hover{color:#ffe08a}.certificate-gallery__empty{color:#ffffff8c;text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:16px;display:flex}.certificate-gallery__empty>svg{color:#f5c453;font-size:42px}.certificate-gallery__empty code{color:#f5c453}@keyframes certificate-card-enter{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes certificate-gallery-enter{0%{opacity:0}to{opacity:1}}@keyframes certificate-gallery-exit{0%{opacity:1}to{opacity:0}}@keyframes certificate-panel-enter{0%{opacity:0;transform:translateY(18px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes certificate-panel-exit{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(18px)scale(.98)}}@media (width<=767px){.certificates-islands{top:12px;right:12px}.certificates-trigger{min-height:38px;padding:0 12px;font-size:12px}.certificate-gallery__panel{border-radius:20px;width:100%;height:min(760px,100%);padding:20px 16px 14px}.certificate-gallery__header{gap:12px;padding-bottom:18px}.certificate-gallery__header p{font-size:12px}.certificate-gallery__close{width:40px;height:40px}.certificate-category-tabs{margin:0 -16px;padding:0 16px 14px}.certificate-gallery__content{padding-top:16px}.certificate-card-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.certificate-card__preview{aspect-ratio:1.25;padding:7px}.certificate-card__caption{min-height:142px;padding:12px}.certificate-card__caption h4{font-size:12px}.certificate-card__footer{flex-direction:column;align-items:flex-start;gap:5px;padding-top:10px}}@media (prefers-reduced-motion:reduce){.certificate-gallery,.certificate-gallery__panel,.certificate-card{scroll-behavior:auto;transition:none;animation-duration:.01ms!important}}@media (width<=430px){.certificate-gallery{padding:10px}.certificate-gallery__panel{padding-left:12px;padding-right:12px}.certificate-card-grid{grid-template-columns:minmax(0,1fr)}.certificate-card__preview{aspect-ratio:1.55}.certificate-card__caption{min-height:0}.certificate-card__footer{flex-direction:row;align-items:center}}.tree-edge{fill:none;stroke:url(#edgeGradient);stroke-width:2.5px;stroke-linecap:round;pointer-events:none;stroke-dasharray:1;stroke-dashoffset:1px;opacity:0;transition:stroke-dashoffset 1s cubic-bezier(.65, 0, .35, 1) var(--edge-delay,0s), opacity .5s ease var(--edge-delay,0s), stroke-width .4s ease, filter .4s ease}.tree-node{transform-box:fill-box;transform-origin:50%;opacity:0;transition:opacity .4s ease var(--node-delay,0s), transform .6s cubic-bezier(.34, 1.56, .64, 1) var(--node-delay,0s), filter .3s ease;transform:scale(.3)}.projects-tree.is-ready .tree-edge{stroke-dashoffset:0;opacity:1}.projects-tree.is-ready .tree-node{opacity:1;transform:scale(1)}@keyframes edge-pulse{0%,to{filter:drop-shadow(0 0 2px #f5c45333)}50%{filter:drop-shadow(0 0 6px #f5c45380)}}@keyframes root-pulse{0%,to{stroke-opacity:.6;filter:drop-shadow(0 0 6px #f5c45380)}50%{stroke-opacity:1;filter:drop-shadow(0 0 14px #f5c453e6)}}@keyframes core-glow{0%,to{fill-opacity:.8;filter:drop-shadow(0 0 10px #f5c453b3)}50%{fill-opacity:1;filter:drop-shadow(0 0 20px #f5c453)}}@keyframes dot-shimmer{0%,to{filter:drop-shadow(0 0 3px #35f0a080)}50%{filter:drop-shadow(0 0 8px #35f0a0e6)}}.projects-tree.is-ready .tree-edge{animation:4s ease-in-out infinite edge-pulse}.projects-tree.is-ready .tree-node--root .ring{animation:3s ease-in-out infinite root-pulse}.projects-tree.is-ready .tree-node--root .core{animation:2.5s ease-in-out infinite core-glow}.projects-tree.is-ready .tree-node--project .dot{animation:3s ease-in-out infinite dot-shimmer}.tree-node--root .ring{fill:none;stroke:#f5c453;stroke-width:2.5px;filter:drop-shadow(0 0 8px #f5c45399)}.tree-node--root .core{fill:#f5c453;filter:drop-shadow(0 0 12px #f5c453cc)}.tree-edge.is-hovered{stroke:url(#edgeGradientHover);stroke-width:3px;filter:drop-shadow(0 0 8px #f5c453b3);animation:none!important}.tree-edge.is-active{stroke:url(#edgeGradientActive);stroke-width:3.5px;filter:drop-shadow(0 0 12px #35f0a0e6);animation:2s ease-in-out infinite active-flow!important}@keyframes active-flow{0%,to{filter:drop-shadow(0 0 10px #35f0a0cc)}50%{filter:drop-shadow(0 0 16px #35f0a0)}}.has-selection .tree-edge:not(.is-active){opacity:.15}.tree-label{letter-spacing:.02em;fill:#a0a8b0;pointer-events:none;-webkit-user-select:none;user-select:none;font-family:inherit;font-size:13px;transition:fill .3s,opacity .3s}.tree-label--category{fill:#f5c453;letter-spacing:.08em;text-transform:uppercase;filter:drop-shadow(0 1px 3px #0006);font-size:14px;font-weight:600}.has-selection .tree-label--project:not(.is-highlighted){opacity:.4}.tree-node--category circle{fill:#1b1d1f;stroke:#f5c453;stroke-width:2.5px;filter:drop-shadow(0 0 4px #f5c45366);transition:all .3s}.tree-node--category:hover circle{fill:#f5c45333;stroke-width:3px;filter:drop-shadow(0 0 12px #f5c453e6)}.tree-node--category:hover .tree-label--category{fill:#fff;filter:drop-shadow(0 0 6px #f5c453cc)}.tree-node--project{cursor:pointer;outline:none}.tree-node--project .hit{fill:#0000;pointer-events:all}.tree-node--project .dot{fill:#1b1d1f;stroke:#35f0a0;stroke-width:2.5px;pointer-events:none;filter:drop-shadow(0 0 4px #35f0a099);transition:all .3s cubic-bezier(.34,1.56,.64,1)}.tree-node--project:hover .dot{fill:#35f0a04d;stroke-width:3.5px;filter:drop-shadow(0 0 16px #35f0a0);animation:none!important}.tree-node--project:hover .tree-label--project{fill:#fff;filter:drop-shadow(0 0 4px #35f0a099);font-weight:700}.tree-node--project.is-selected .dot{fill:#35f0a0;stroke:#35f0a0;stroke-width:4px;animation:1.5s ease-in-out infinite selected-glow!important}@keyframes selected-glow{0%,to{filter:drop-shadow(0 0 12px #35f0a0e6)}50%{filter:drop-shadow(0 0 24px #35f0a0)}}.tree-node--project.is-selected .tree-label--project{fill:#fff;filter:drop-shadow(0 0 6px #35f0a0cc);font-weight:700;opacity:1!important}.tree-node.is-dimmed{opacity:.2;transition:opacity .3s}.tree-node.is-dimmed .dot,.tree-node.is-dimmed circle{filter:none!important;stroke:#555!important}.projects-tree__controls{z-index:5;gap:8px;display:flex;position:absolute;bottom:24px;left:24px}.projects-tree__controls button{color:#f5c453;cursor:pointer;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#1b1d1fe6;border:1.5px solid #f5c45366;border-radius:10px;place-items:center;width:40px;height:40px;transition:all .3s;display:grid;box-shadow:0 4px 12px #0000004d}.projects-tree__controls button:hover{color:#35f0a0;background:#1b1d1f;border-color:#35f0a0;transform:scale(1.1);box-shadow:0 0 20px #35f0a080}.projects-tree__controls button:active{transform:scale(.95)}.projects-tree__panel{z-index:8;border-radius:1.25rem;width:min(400px,38%);height:min(76vh,100% - 48px);max-height:76vh;margin-block:auto;animation:.5s cubic-bezier(.34,1.56,.64,1) panel-in;position:absolute;top:24px;bottom:24px;right:24px;overflow:hidden}@keyframes panel-in{0%{opacity:0;transform:translate(32px)scale(.95)}to{opacity:1;transform:translate(0)scale(1)}}@keyframes panel-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}@media (width<=767px){.projects-tree__controls{flex-direction:column;gap:6px;inset:50% 14px auto auto;transform:translateY(-50%)}.has-selection .projects-tree__controls{top:22%}.projects-tree__controls button{touch-action:manipulation;border-radius:12px;width:44px;height:44px}.projects-tree__panel{border-radius:20px;width:auto;height:min(82dvh,100% - 24px);max-height:82dvh;margin-block:auto;animation:.4s cubic-bezier(.34,1.56,.64,1) panel-up;position:absolute;inset:12px;transform:none;box-shadow:0 8px 48px #000c}.tree-label{font-size:11px}.tree-label--category{font-size:12px}}.projects-tree__tech-label{z-index:20;color:#fff;white-space:nowrap;pointer-events:none;opacity:0;visibility:hidden;background:#111415;border:1px solid #ffffff29;border-radius:7px;padding:5px 8px;font-size:11px;font-weight:500;line-height:1.2;transition:opacity .16s,transform .16s,visibility .16s;position:absolute;bottom:calc(100% + 7px);left:50%;transform:translate(-50%,4px);box-shadow:0 5px 14px #00000059}.projects-tree__tech:hover .projects-tree__tech-label,.projects-tree__tech:focus-visible .projects-tree__tech-label,.projects-tree__tech-label.is-open{opacity:1;visibility:visible;transform:translate(-50%)}.projects-tree__svg [role=button]{outline:none}.projects-tree__svg [role=button]:focus-visible .tree-node--project .dot{stroke:#fff;stroke-width:2.5px;filter:drop-shadow(0 0 7px #35f0a0e6)}@keyframes tooltip-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}@keyframes search-in{0%{opacity:0;transform:translateY(-20px)scale(.95)}to{opacity:1;transform:none}}.animate-tooltip-in{animation:.2s ease-out tooltip-in}.animate-search-in{animation:.3s cubic-bezier(.16,1,.3,1) search-in}:root{--bgcolor:#1c1e1f;--green:#70ea58;--yellow:#ffd138;--pink:#f472b6}*{box-sizing:border-box;color:#fff;cursor:url(/cursor.cur),auto;scroll-behavior:smooth;margin:0;padding:0;scroll-padding-top:6rem;font-family:Inter,sans-serif}a,button{cursor:url(/pixel-link.cur),pointer}.photo-glitch{isolation:isolate}.photo-base,.photo-layer{object-fit:contain;object-position:center;width:100%;height:100%;position:absolute;inset:0}.photo-base{z-index:1;animation:.25s photo-enter}.photo-layer{z-index:2;opacity:0;visibility:hidden;pointer-events:none}.is-glitching .photo-layer{visibility:visible}.photo-red{filter:grayscale()sepia()saturate(10000%)hue-rotate(315deg)}.photo-green{filter:grayscale()sepia()saturate(10000%)hue-rotate(85deg)}.photo-blue{filter:grayscale()sepia()saturate(10000%)hue-rotate(190deg)}.is-glitching .photo-red{opacity:.85;animation:.38s steps(2,end) glitch-red}.is-glitching .photo-green{opacity:.75;animation:.38s steps(2,end) glitch-green}.is-glitching .photo-blue{opacity:.8;animation:.38s steps(2,end) glitch-blue}@keyframes glitch-red{0%,to{clip-path:inset(0);transform:translate(0)}20%{clip-path:inset(15% 0 65%);transform:translate(-7px)}50%{clip-path:inset(55% 0 20%);transform:translate(6px)}75%{clip-path:inset(35% 0 40%);transform:translate(-4px)}}@keyframes glitch-green{0%,to{clip-path:inset(0);transform:translate(0)}25%{clip-path:inset(60% 0 10%);transform:translate(6px)}55%{clip-path:inset(20% 0 55%);transform:translate(-5px)}80%{clip-path:inset(75% 0 5%);transform:translate(3px)}}@keyframes glitch-blue{0%,to{clip-path:inset(0);transform:translate(0)}15%{clip-path:inset(45% 0 35%);transform:translate(8px)}45%{clip-path:inset(10% 0 70%);transform:translate(-6px)}70%{clip-path:inset(65% 0 15%);transform:translate(5px)}}@keyframes photo-enter{0%{opacity:.4}to{opacity:1}}html{scroll-behavior:smooth;scroll-padding-top:6rem}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
