.cool-button{border-radius:10px;border:1px solid transparent;padding:.5em;font-size:1em;font-weight:500;font-family:inherit;color:inherit;background-color:var(--bg-raised);cursor:pointer;display:flex;justify-content:start;align-items:center;transition:color .2s ease-out,border-color .25s,background .2s ease-out;-webkit-tap-highlight-color:transparent}.cool-button:hover{border-color:var(--accent);background-color:var(--accent-soft)}.cool-button:disabled:hover{border-color:transparent;background-color:var(--bg-raised);cursor:not-allowed}.cool-button:focus,.cool-button:focus-visible{outline:4px auto -webkit-focus-ring-color}.cool-button>*{margin-right:.4em}.cool-button>:last-child{margin-right:0}.notification{border-radius:10px;padding:1em;font-size:.8em;word-wrap:break-word;background-color:#16161ed9;color:var(--text);margin-bottom:1em;position:relative;border:1px solid var(--border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;flex-direction:column;width:max-content;min-width:5rem;max-width:20rem}.notification-title{font-weight:700}.notification-success{background-color:#142d1ed9;border-color:#4ade8059;color:var(--text)}.notification-error{background-color:#30161ad9;border-color:#f8717159;color:var(--text)}.notification-info{background-color:#181428d9;border-color:var(--accent-border);color:var(--text)}@keyframes notification-fadeout{0%{opacity:1}to{opacity:0}}.notification[data-active=false]{animation:notification-fadeout 1s forwards linear}.notification-close{position:absolute;opacity:0;transition:opacity .3s ease,border-color .3s ease;border:1px solid transparent;border-radius:10px;width:100%;height:100%;left:0;top:0;display:flex;justify-content:center;align-items:center;background-color:#00000080}.notification .notification-close:hover{opacity:1;border-color:var(--accent-border);cursor:pointer}.skill{position:relative;display:inline-flex;align-items:baseline;vertical-align:baseline;gap:.45em;line-height:1;padding:3px .35em;border-radius:.35em;color:inherit;text-decoration:none;background:#ffffff0d;box-shadow:inset 0 0 0 1px #ffffff0f;cursor:default;transition:background .15s ease,box-shadow .15s ease}a.skill{cursor:pointer}a.skill:hover{background:#ffffff1a;box-shadow:inset 0 0 0 1px #ffffff26}.skill svg{width:.75em;height:.75em;opacity:.8;transform:translateY(.5px)}.skill-disliked{color:#ffffff8c;text-decoration:line-through;text-decoration-thickness:1px}.skill-disliked:hover{color:#ffffffbf}.skill-sep{display:inline-block;margin:0 .1em;color:#ffffff4d;-webkit-user-select:none;user-select:none}.rich-editor{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--bg-raised);overflow:hidden}.rich-editor-toolbar{display:flex;flex-wrap:wrap;gap:.1em;padding:.3em .4em;border-bottom:1px solid var(--border);background:#ffffff05}.rich-editor-tool{display:inline-flex;align-items:center;justify-content:center;min-width:1.8em;height:1.8em;padding:0 .4em;border:none;border-radius:4px;background:transparent;color:inherit;font-family:inherit;font-size:.9em;cursor:pointer;transition:background .12s ease,color .12s ease}.rich-editor-tool:hover{background:#ffffff14}.rich-editor-tool:focus{outline:none}.rich-editor-tool:focus-visible{outline:1px solid var(--accent-border);outline-offset:1px}.rich-editor-surface{min-height:6em;padding:.6em .8em;font-family:inherit;font-size:inherit;line-height:1.4;outline:none;white-space:pre-wrap;overflow-wrap:anywhere}.rich-editor-surface[contenteditable=false]{opacity:.4;cursor:not-allowed}.rich-editor-surface:empty:before{content:attr(data-placeholder);color:var(--text-faint);pointer-events:none}.rich-editor-surface code{padding:0 .25em;border-radius:3px;background:#ffffff14;font-family:inherit;font-size:.9em}.rich-editor-surface a{color:var(--accent);text-decoration:underline;text-decoration-color:var(--accent-border);text-underline-offset:2px}.site-footer{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.4em;font-size:.8em;font-weight:300;color:#ffffff80;text-align:center;width:100%}.site-footer-socials{color:#ffffffd9}.site-footer-socials{display:flex;flex-wrap:wrap;justify-content:center;gap:.25em;margin-bottom:.5em;font-size:1.35em;line-height:1.6;color:#ffffffd9}.site-footer-socials .skill{padding:5px .55em;gap:.55em}.site-footer-socials .skill svg{width:1em;height:1em}.site-footer-credits{line-height:1.9}.site-footer-stamp{margin-top:.6em;color:#ffffff73;font-family:Cascadia Code,monospace}.site-footer-stamp code{padding:0 .3em;border-radius:3px;background:#ffffff0f}.site-footer-stamp a{text-decoration:none;color:inherit}.site-footer-stamp a:hover code{background:#ffffff1f}.skills-layout{display:flex;flex-direction:row;align-items:center;gap:2em}.skills-layout-reverse{flex-direction:row-reverse}.skills-main{flex:1;min-width:0}.skills-prose{line-height:1.7}.skills-divider{margin:1.4em 0}.skills-photo{flex:0 0 auto;width:min(200px,30vw)}.skills-photo-flip .skills-photo-text{right:auto;left:12px;text-align:left}.skills-photo-flip .skills-photo-cell:hover .skills-photo-text{transform:translate(20%,-20%) scale(1.2)}.skills-photo-cell{position:relative;width:100%;aspect-ratio:1;border-radius:24px;overflow:hidden;background-color:#0009;outline:1px solid var(--border);transition:outline-color .2s ease}.skills-photo-cell:hover{outline-color:var(--accent)}.skills-photo-cell:hover .skills-photo-image{filter:blur(4px);transform:scale(1.05)}.skills-photo-image{position:absolute;top:0;left:0;right:0;bottom:0;background-size:cover;background-position:center;opacity:.4;z-index:1;transition:filter .2s ease-in-out,transform .2s ease-in-out;transition-delay:.1s}.skills-photo-text{position:absolute;bottom:10px;right:12px;z-index:2;display:flex;flex-direction:column;text-align:right;transition:transform .3s ease;transition-delay:.1s}.skills-photo-text-desc{font-size:.7rem;color:#fff9}.skills-photo-cell:hover .skills-photo-text{transform:translate(-20%,-20%) scale(1.2)}.letterbox-counter{margin-top:.3em;text-align:right;font-variant-numeric:tabular-nums;color:#fff6;transition:color .15s ease}.letterbox-counter[data-state=warn]{color:var(--warn)}.letterbox-counter[data-state=over]{color:var(--danger)}.letterbox-reply{display:flex;align-items:flex-start;gap:.6em;margin-bottom:.6em;padding:.6em .8em;border-radius:8px;border-left:2px solid var(--accent);background:var(--accent-soft)}.letterbox-reply-body{flex:1;min-width:0}.letterbox-reply-label{font-size:.7em;opacity:.5;margin-bottom:.2em}.letterbox-reply-preview{font-size:.9em;opacity:.8;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.letterbox-reply-cancel{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.6em;height:1.6em;padding:0;border:none;background:transparent;color:inherit;font-family:inherit;font-size:1.1em;line-height:1;opacity:.5;cursor:pointer;transition:opacity .15s ease}.letterbox-reply-cancel:hover{opacity:1}.letterbox-reply-cancel:focus{outline:none}.letterbox-reply-cancel:focus-visible{opacity:1;outline:none}.shoutbox-container{display:flex;flex-direction:column;gap:.4em}.shoutbox-message{position:relative;display:flex;flex-direction:column;flex-wrap:wrap;border-radius:10px;padding:20px;background-color:var(--bg-raised)}.shoutbox-message:has(.shoutbox-admin-menu-popover){z-index:10}.shoutbox-message-pinned{border-left:3px solid var(--accent)}@keyframes shoutbox-message-flash{0%{background-color:var(--accent-soft)}to{background-color:var(--bg-raised)}}.shoutbox-message-flash{animation:shoutbox-message-flash 1.5s ease-out}.shoutbox-message-pin{font-size:.7em;opacity:.5;margin-bottom:.4em;pointer-events:none}.shoutbox-message-text{white-space:pre-line;overflow-wrap:anywhere}.shoutbox-message-text:before{content:"";float:right;width:4.5em;height:1.4em}.shoutbox-message-admin .shoutbox-message-text:before{width:7em}.shoutbox-message-admin .shoutbox-message-quote{margin-right:7em}.shoutbox-message-quote{display:block;margin-bottom:.5em;margin-right:5em;padding:.2em 0 .2em .6em;border-left:2px solid var(--accent-border);font-size:.85em;opacity:.6;text-decoration:none;color:inherit;overflow-wrap:anywhere}.shoutbox-message-quote:hover{opacity:.9}.shoutbox-message-reply-highlight{color:var(--accent);opacity:.85}.shoutbox-message-quote-attach{align-self:flex-start;margin-bottom:.5em;text-align:left;max-width:100%;overflow-wrap:anywhere}.shoutbox-message-quote-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.shoutbox-message-meta{display:flex;align-items:center;justify-content:space-between;gap:.6em;flex-wrap:wrap;margin-top:.6em}.shoutbox-message-actions{position:absolute;top:20px;right:20px;z-index:1;display:flex;gap:.6em}.shoutbox-message-reply{background:transparent;border:none;padding:0;font-family:inherit;font-size:.8em;color:inherit;opacity:.3;cursor:pointer;transition:opacity .15s ease,color .15s ease}.shoutbox-message-reply:hover{opacity:.9;color:var(--accent)}.shoutbox-message-reply:focus{outline:none}.shoutbox-message-reply:focus-visible{opacity:.9;outline:none}.shoutbox-message-date{font-size:.7em;opacity:.3;text-decoration:none;white-space:nowrap}.shoutbox-message-meta-right{display:flex;align-items:baseline;gap:.4em}.shoutbox-message-meta-sep{font-size:.7em;opacity:.3}.shoutbox-message-admin-badge{font-size:.7em;color:var(--accent);opacity:.85;text-transform:lowercase;letter-spacing:.02em}.shoutbox-admin-menu{position:relative}.shoutbox-admin-menu-toggle-open{opacity:.9}.shoutbox-admin-menu-popover{position:absolute;top:calc(100% + .3em);right:0;z-index:2;display:flex;flex-direction:column;min-width:11em;padding:.3em 0;border-radius:8px;background:var(--bg-raised);border:1px solid var(--border);box-shadow:0 6px 18px #0006}.shoutbox-admin-menu-item{background:transparent;border:none;padding:.35em .8em;font-family:inherit;font-size:.8em;color:inherit;text-align:left;cursor:pointer;opacity:.8;transition:background .12s ease,opacity .12s ease}.shoutbox-admin-menu-item:hover{background:#ffffff0f;opacity:1}.shoutbox-admin-menu-item-danger{color:var(--danger)}.shoutbox-admin-menu-item-highlight{color:var(--accent)}.shoutbox-answer{display:flex;flex-direction:column;gap:.2em;margin-top:.6em;padding:.1em 0 .1em .8em;border-left:2px solid var(--border-strong);white-space:pre-line;overflow-wrap:anywhere}.shoutbox-answer .shoutbox-answer{margin-top:.4em}.shoutbox-answer-flat,.shoutbox-answer-flat .shoutbox-answer{padding-left:0;border-left:none;margin-top:.4em}.shoutbox-answer-date{font-size:.7em;opacity:.3;text-decoration:none}.shoutbox-answer-meta{display:flex;align-items:center;gap:.8em;flex-wrap:wrap}.shoutbox-admin-inline{display:flex;gap:.4em}.shoutbox-admin-action{background:transparent;border:none;padding:0;font-family:inherit;font-size:.75em;color:inherit;opacity:.35;cursor:pointer;transition:opacity .15s ease}.shoutbox-admin-action:hover:not(:disabled){opacity:.9}.shoutbox-admin-action:disabled{cursor:not-allowed;opacity:.2}.shoutbox-admin-action:focus{outline:none}.shoutbox-admin-action-danger{color:var(--danger)}.shoutbox-admin-add-answer{margin-top:.4em}.shoutbox-admin-editor{display:flex;flex-direction:column;gap:.4em;margin:.2em 0}.shoutbox-admin-editor .rich-editor{border-radius:6px;border:1px solid var(--border)}.shoutbox-admin-editor .rich-editor-surface{min-height:3em}.shoutbox-admin-textarea{min-height:3em;padding:.5em .7em;border-radius:6px;border:1px solid var(--border);font-family:inherit;font-size:.9em;background:#0000004d;color:inherit;resize:vertical}.shoutbox-admin-textarea:focus{outline:none;border-color:var(--accent-border)}.shoutbox-admin-editor-actions{display:flex;gap:.6em}.shoutbox-pagination{display:flex;gap:.4em;justify-content:center;align-items:center}.shoutbox-pagination-status{font-size:.9em;opacity:.6;font-variant-numeric:tabular-nums;padding:0 .4em}.centered{display:flex;flex-direction:column;align-items:center;padding:1em;border-radius:10px;background-color:var(--bg-raised)}.shoutbox-reactions{display:flex;flex-wrap:wrap;gap:.3em}.shoutbox-reaction{display:inline-flex;align-items:center;gap:.3em;padding:2px 8px;border-radius:999px;font-size:.85em;font-family:inherit;background:#ffffff0a;border:1px solid var(--border);color:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .12s ease}.shoutbox-reaction:hover{background:#ffffff1a;border-color:var(--accent-border)}.shoutbox-reaction:focus{outline:none}.shoutbox-reaction:focus-visible{outline:1px solid var(--accent-border);outline-offset:1px}.shoutbox-reaction:active{transform:scale(.95)}.shoutbox-reaction-empty{opacity:.5}.shoutbox-reaction-empty:hover{opacity:1}.shoutbox-reaction-mine{background:var(--accent-soft);border-color:var(--accent-border);opacity:1}.shoutbox-reaction-mine:hover{background:#a78bfa33}.shoutbox-reaction-emoji{width:1.3em;height:1.3em;line-height:1;image-rendering:-webkit-optimize-contrast;vertical-align:middle}.shoutbox-reaction-count{font-variant-numeric:tabular-nums;color:var(--text);opacity:.7}.wall-card{display:flex;flex-direction:column;gap:.8em;padding:1.2em 1em;border-radius:12px;background:#ffffff05}.wall-card>section{gap:.4em}.wall-divider{margin:.2em 0}@keyframes cycling-greeting-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.cycling-greeting{display:inline-block;animation:cycling-greeting-in .26s ease}@keyframes project-card-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes noise-drift{0%{background-position:0px 0px}25%{background-position:-40px 30px}50%{background-position:60px -50px}75%{background-position:-30px -20px}to{background-position:0px 0px}}.project-card{--accent-from: #a78bfa;--accent-to: #0b0b0f;--i: 0;-webkit-tap-highlight-color:transparent;position:relative;isolation:isolate;display:flex;flex-direction:column;gap:12px;padding:20px;border-radius:10px;color:inherit;text-decoration:none;background:linear-gradient(135deg,rgb(from var(--accent-from) r g b / .14),rgb(from var(--accent-to) r g b / .14)),#0a0a0f66;opacity:0;animation:project-card-enter .4s ease forwards;animation-delay:calc(var(--i) * 60ms);transition:box-shadow .2s ease,background .2s ease,transform .12s ease}.project-card:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;pointer-events:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");opacity:.08;mix-blend-mode:screen;animation:noise-drift 1.2s steps(4) infinite;z-index:0}@media (prefers-reduced-motion: reduce){.project-card:before{animation:none}}.project-card>*{position:relative;z-index:1}.project-card:hover{box-shadow:0 0 0 1px rgb(from var(--accent-from) r g b / .4),0 8px 24px -12px rgb(from var(--accent-from) r g b / .35);background:linear-gradient(135deg,rgb(from var(--accent-from) r g b / .22),rgb(from var(--accent-to) r g b / .22)),#0a0a0f66}.project-card:focus-visible{outline:none;box-shadow:0 0 0 2px rgb(from var(--accent-from) r g b / .6),0 8px 24px -12px rgb(from var(--accent-from) r g b / .35)}.project-card:active{transform:scale(.99)}.project-header{color:#ffffff80;display:inline-flex;align-items:center;gap:8px}.project-header-title{color:#fff}.project-link{display:inline-flex;align-items:center;color:inherit}.project-link svg{width:14px;height:14px}.project-footer{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.project-lang{display:inline-flex;align-items:center;justify-content:center;color:#ffffffbf}.project-lang svg{width:16px;height:16px}.project-footer-separator{color:#ffffff4d;-webkit-user-select:none;user-select:none}.project-tag{font-size:.75em;padding:2px 8px;border-radius:6px;border:1px solid rgb(255 255 255 / .1);background:#ffffff0a;color:#ffffffb3}.project-tag[data-tag=telegram]{color:#22d3ee;border-color:#22d3ee4d;background:#22d3ee14}.project-tag[data-tag=current]{color:#4ade80;border-color:#4ade804d;background:#4ade8014}.project-tag[data-tag=wip]{color:#fbbf24;border-color:#fbbf244d;background:#fbbf2414}.project-tag[data-tag=stale]{color:#fb923c;border-color:#fb923c40;background:#fb923c0f}.project-tag[data-tag=beta]{color:#a78bfa;border-color:#a78bfa4d;background:#a78bfa14}.project-tag[data-tag=new]{color:#67e8f9;border-color:#67e8f94d;background:#67e8f914}.project-tag[data-tag=deprecated]{color:#f87171;border-color:#f871714d;background:#f8717114}.project-tag[data-tag=archived]{color:#fff6}.project-body{margin-top:auto;font-size:.85em}.project-body code{padding:0 .3em;background:#ffffff14;border-radius:.3em;font-family:inherit;-webkit-box-decoration-break:clone;box-decoration-break:clone}.project-body mark{padding:0 2px;background:rgb(from var(--accent-from) r g b / .22);color:inherit;border-radius:2px}.project-body .rich-muted{opacity:.6}.project-body .rich-link{color:rgb(from var(--accent-from) r g b / .95);text-decoration:underline;text-decoration-color:rgb(from var(--accent-from) r g b / .4);text-underline-offset:2px}.project-body .rich-link:hover{text-decoration-color:rgb(from var(--accent-from) r g b / .8)}#what-do-i-do h2{margin-bottom:1rem}.projects-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;margin-bottom:1rem}@media (max-width: 640px){.projects-grid{grid-template-columns:1fr}}.projects-fallback{margin-bottom:1rem;font-size:.9em}#app{max-width:min(880px,100vw);width:100%;margin:0 auto;padding:2rem;gap:1.5em;display:flex;flex-direction:column;overflow-x:clip;box-sizing:border-box}#app>*{min-width:0}hr{height:1px;margin:1em 0;border:none;background:linear-gradient(to right,transparent 0%,var(--border-strong) 20%,var(--accent-border) 50%,var(--border-strong) 80%,transparent 100%)}.letterbox-container{display:flex;column-gap:.4em}.letterbox-container>*{border:var(--bg) 2px solid;outline:var(--bg-raised) 2px solid;border-radius:10px}textarea{padding:10px;min-height:48px;resize:none;background-color:var(--bg-raised);flex-grow:1;color:var(--text);font-family:inherit}textarea:focus{outline:none}.text-half-visible{opacity:.3}.text-small{font-size:.8em}.text-large{font-size:3em;line-height:1em}ul{list-style-type:none;padding-left:0}ul li:before{content:"- ";opacity:.3}section{display:flex;flex-direction:column;gap:.2em}footer{font-size:.8em;font-weight:300;opacity:.5;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;width:100%}@keyframes rotate{0%{rotate:0deg}to{rotate:360deg}}.spinning-loader{animation:rotate 1s infinite}.info-line{font-size:.9em;color:var(--text);line-height:1.7}.info-label{color:var(--text-dim);margin-right:.2em}.with-note{position:relative}.with-note[data-note]:after{content:attr(data-note);position:absolute;bottom:calc(100% + 4px);left:50%;transform:translate(-50%) translateY(4px);padding:4px 8px;border-radius:4px;font-size:.7rem;line-height:1.3;max-width:min(280px,90vw);width:max-content;white-space:normal;overflow-wrap:anywhere;word-break:break-all;text-align:center;background:var(--bg-raised);color:var(--text);border:1px solid var(--accent-border);box-shadow:0 4px 12px #0006;pointer-events:none;opacity:0;transition:opacity .15s ease,transform .15s ease}.with-note[data-note]:hover:after,.with-note[data-note]:focus:after,.with-note[data-note]:focus-within:after{opacity:1;transform:translate(-50%) translateY(0)}.with-note[tabindex]{-webkit-tap-highlight-color:transparent}.with-note[tabindex]:focus,.with-note[tabindex]:focus-visible{outline:none}.notification-container{position:fixed;top:0;right:0;padding:2em;z-index:9999;display:flex;flex-direction:column;align-items:end}.rich-link{color:var(--accent);text-decoration:underline;text-decoration-color:var(--accent-border);text-underline-offset:2px}.rich-muted{opacity:.6}@font-face{font-family:Cascadia Code;src:url(/CascadiaCode.woff2) format("woff2");font-style:normal;font-display:swap}@font-face{font-family:Cascadia Code;src:url(/CascadiaCodeItalic.woff2) format("woff2");font-style:italic;font-display:swap}:root{--bg: #0b0b0f;--bg-raised: #16161e;--bg-sunken: #08080b;--border: rgb(255 255 255 / .08);--border-strong: rgb(255 255 255 / .16);--text: rgba(255, 255, 255, .87);--text-dim: rgb(255 255 255 / .5);--text-faint: rgb(255 255 255 / .3);--accent: #a78bfa;--accent-2: #22d3ee;--accent-soft: rgb(167 139 250 / .12);--accent-border: rgb(167 139 250 / .4);--success: #4ade80;--danger: #f87171;--warn: #fbbf24;font-family:Cascadia Code,Courier New,Courier,monospace;line-height:1.5;font-weight:400;color-scheme:dark;color:var(--text);background-color:var(--bg);transition:background-color 2s ease;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root[data-tod=dawn]{background-color:#100d16}:root[data-tod=day]{background-color:#0c0f16}:root[data-tod=dusk]{background-color:#140e16}:root[data-tod=evening]{background-color:#110d14}:root[data-tod=night]{background-color:#0b0b0f}input,button{font-size:inherit;font-family:inherit}svg{display:block}a{color:inherit;text-decoration:inherit}*{margin:0}body{display:flex;justify-content:flex-start;min-width:320px;min-height:100vh;overflow-x:clip}section>h1{font-size:2em;line-height:1.1}section>h1:before{content:"# ";opacity:.5;color:var(--accent)}section>h2{font-size:1.5em;line-height:1.1}section>h2:before{content:"## ";opacity:.5;color:var(--accent)}section>h3{font-size:1em;line-height:1.1;margin-top:8px}section>h3:before{content:"### ";opacity:.5;color:var(--accent)}button{border-radius:10px;border:1px solid transparent;padding:.5em;font-size:1em;font-weight:500;font-family:inherit;color:inherit;background-color:var(--bg-raised);cursor:pointer;transition:border-color .25s}button:hover{border-color:var(--accent)}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}
