:root{--bg: #0a0a0f;--surface: #0d0d18;--surface-2: #11111d;--border: rgba(200, 180, 255, .1);--border-strong: rgba(200, 180, 255, .25);--purple: #c8b4ff;--cyan: #b4f0ff;--pink: #ffb4e6;--green: #b4ffda;--text: #ffffff;--body: #c8c4e0;--muted: #6b6b8a;--danger: #ff8a8a;--font-display: "Fraunces", "Times New Roman", serif;--font-mono: "JetBrains Mono", ui-monospace, monospace;--font-ui: "Inter", system-ui, -apple-system, sans-serif;--max: 1100px}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);color:var(--text);font-family:var(--font-display);font-weight:400;line-height:1.55;-webkit-font-smoothing:antialiased}body{min-height:100vh;background-image:radial-gradient(circle at 15% 10%,rgba(200,180,255,.06),transparent 40%),radial-gradient(circle at 85% 90%,rgba(180,240,255,.04),transparent 40%);overflow-x:hidden}a{color:inherit;text-decoration:none}a:hover{color:var(--cyan)}button{font:inherit;cursor:pointer;background:none;border:none;color:inherit}img{max-width:100%;display:block}.wrap{max-width:var(--max);margin:0 auto;padding:0 28px}.reveal{opacity:0;transform:translateY(20px);transition:opacity .6s ease,transform .6s ease}.reveal.visible{opacity:1;transform:translateY(0)}.nav{display:flex;justify-content:space-between;align-items:center;padding:22px 28px;max-width:var(--max);margin:0 auto;font-family:var(--font-mono);font-size:13px;position:relative}.nav:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(to bottom,transparent 0,transparent 3px,rgba(200,180,255,.02) 3px,rgba(200,180,255,.02) 4px);pointer-events:none}.nav .brand{font-family:var(--font-display);font-size:18px;font-weight:500;letter-spacing:-.01em;color:var(--text)}.nav .brand .sb{color:var(--purple)}.nav ul{display:flex;gap:24px;list-style:none}.nav a{color:var(--muted);transition:color .2s}.nav a:hover{color:var(--text)}.nav a.active{color:var(--purple)}.nav a.active:before{content:"· "}.hero{padding:100px 0 90px;position:relative;overflow:hidden}.hero:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(200,180,255,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(200,180,255,.04) 1px,transparent 1px);background-size:36px 36px;animation:grid-drift 24s linear infinite;pointer-events:none;mask-image:linear-gradient(to bottom,black 30%,transparent 100%);-webkit-mask-image:linear-gradient(to bottom,black 30%,transparent 100%)}.hero:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(to bottom,transparent 0,transparent 3px,rgba(200,180,255,.018) 3px,rgba(200,180,255,.018) 4px);pointer-events:none;animation:flicker 8s infinite}@keyframes grid-drift{0%{background-position:0 0}to{background-position:36px 36px}}@keyframes flicker{0%,to{opacity:1}48%{opacity:1}50%{opacity:.92}52%{opacity:1}}.hero .wrap{position:relative;z-index:1}.hero .label{font-family:var(--font-mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--cyan);margin-bottom:24px}.hero .label:before{content:"> ";color:var(--purple)}.hero h1{font-size:clamp(48px,8vw,96px);font-weight:500;line-height:1;letter-spacing:-.035em;margin-bottom:18px;color:var(--text)}.hero h1 .accent{color:var(--purple)}.glitch{position:relative;display:inline-block;animation:glitch-main 4s infinite}.glitch:before,.glitch:after{content:attr(data-text);position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.glitch:before{color:var(--purple);animation:glitch-top 4s infinite;clip-path:polygon(0 0,100% 0,100% 38%,0 38%);opacity:0}.glitch:after{color:var(--cyan);animation:glitch-bot 4s infinite;clip-path:polygon(0 62%,100% 62%,100% 100%,0 100%);opacity:0}@keyframes glitch-main{0%,92%,to{transform:none}93%{transform:translate(-2px)}94%{transform:translate(2px,-1px)}95%{transform:translateY(1px)}96%{transform:none}}@keyframes glitch-top{0%,90%,to{transform:none;opacity:0}91%{transform:translate(-3px,-2px);opacity:.85}93%{transform:translate(3px);opacity:.7}95%{opacity:0}}@keyframes glitch-bot{0%,90%,to{transform:none;opacity:0}92%{transform:translate(3px,2px);opacity:.7}94%{transform:translate(-2px);opacity:.6}96%{opacity:0}}.hero .tagline{font-size:22px;font-style:italic;color:var(--muted);margin-bottom:18px;max-width:600px}.hero .sub{font-family:var(--font-mono);font-size:14px;color:var(--body);line-height:1.8;max-width:540px;margin-bottom:40px}.hero .badges{display:flex;gap:10px;flex-wrap:wrap}.badge{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:6px 12px;border:1px solid var(--border-strong);background:#c8b4ff0d;color:var(--purple)}.badge.cyan{color:var(--cyan);border-color:#b4f0ff40;background:#b4f0ff0d}.badge.pink{color:var(--pink);border-color:#ffb4e640;background:#ffb4e60d}section.block{padding:80px 0;border-top:1px solid var(--border);position:relative}.section-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:44px;flex-wrap:wrap;gap:16px}.section-head h2{font-size:clamp(28px,3.6vw,44px);font-weight:500;letter-spacing:-.02em;color:var(--text)}.section-head .num{font-family:var(--font-mono);font-size:12px;color:var(--muted);letter-spacing:.1em}.about-grid{display:grid;grid-template-columns:1fr 2fr;gap:60px}.about-grid .aside{font-family:var(--font-mono);font-size:12px;line-height:1.8}.about-grid .aside div{margin-bottom:18px}.about-grid .aside strong{display:block;color:var(--purple);text-transform:uppercase;letter-spacing:.08em;font-weight:500;font-size:11px;margin-bottom:4px}.about-grid .aside span{color:var(--body)}.about-grid .body p{font-size:18px;line-height:1.75;margin-bottom:18px;max-width:620px;color:var(--body)}.about-grid .body p:first-child:first-letter{font-size:56px;float:left;line-height:.9;padding:8px 10px 0 0;font-weight:600;color:var(--purple)}.skills-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1px;background:var(--border);border:1px solid var(--border)}.skill-cell{background:var(--surface);padding:24px 22px}.skill-cell h4{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;margin-bottom:14px}.skill-cell.c-purple h4{color:var(--purple)}.skill-cell.c-cyan h4{color:var(--cyan)}.skill-cell.c-pink h4{color:var(--pink)}.skill-cell.c-green h4{color:var(--green)}.skill-cell ul{list-style:none}.skill-cell li{font-size:15px;padding:5px 0;color:var(--body);border-bottom:1px solid rgba(255,255,255,.04)}.skill-cell li:last-child{border-bottom:none}.proj-list{display:flex;flex-direction:column;gap:10px}.proj-row{position:relative;display:grid;grid-template-columns:60px 1fr auto;gap:24px;padding:24px 20px;border:1px solid var(--border);background:#c8b4ff05;align-items:center;cursor:pointer;transition:border-color .2s,padding-left .25s ease,transform .15s;overflow:hidden}.proj-row:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(to bottom,var(--purple),var(--cyan));opacity:0;transition:opacity .2s}.proj-row:hover{border-color:var(--border-strong);padding-left:32px}.proj-row:hover:before{opacity:1}.proj-row .idx{font-family:var(--font-mono);font-size:12px;color:var(--muted)}.proj-row h3{font-size:clamp(20px,2.4vw,28px);font-weight:500;letter-spacing:-.02em;margin-bottom:4px;color:var(--text)}.proj-row .tag{font-size:14px;color:var(--muted);font-style:italic}.proj-row .arrow{font-family:var(--font-mono);font-size:13px;color:var(--purple);opacity:0;transition:opacity .2s}.proj-row:hover .arrow{opacity:1}.work-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:22px;margin-top:20px}.work-card{display:flex;flex-direction:column;text-align:left;padding:0;border:1px solid var(--border);background:var(--surface);cursor:pointer;overflow:hidden;transition:border-color .2s,transform .2s,box-shadow .2s;position:relative}.work-card:hover{border-color:var(--border-strong);transform:translateY(-4px);box-shadow:0 10px 30px #c8b4ff14}.work-card:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgba(200,180,255,.06),transparent 50%);opacity:0;transition:opacity .25s;pointer-events:none;z-index:1}.work-card:hover:before{opacity:1}.work-card-thumb{position:relative;aspect-ratio:16 / 9;background:var(--surface-2);border-bottom:1px solid var(--border);overflow:hidden}.work-card-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .4s ease}.work-card:hover .work-card-thumb img{transform:scale(1.04)}.work-card-thumb-empty{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-image:linear-gradient(rgba(200,180,255,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(200,180,255,.05) 1px,transparent 1px);background-size:22px 22px}.work-card-thumb-empty span{font-family:var(--font-display);font-size:64px;font-weight:600;color:var(--purple);opacity:.4;letter-spacing:-.04em}.work-card-num{position:absolute;top:12px;left:14px;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;color:var(--cyan);background:#00000080;padding:3px 8px;border:1px solid var(--border-strong);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:2}.work-card-body{padding:22px;display:flex;flex-direction:column;gap:8px;position:relative;z-index:2}.work-card-title{font-family:var(--font-display);font-size:22px;font-weight:500;letter-spacing:-.02em;color:var(--text);line-height:1.2}.work-card-tag{font-size:14px;color:var(--muted);font-style:italic;margin-bottom:4px}.work-card-meta{display:flex;flex-wrap:wrap;gap:14px;font-family:var(--font-mono);font-size:11px;color:var(--muted);letter-spacing:.04em;margin-top:2px}.work-card-meta span:not(:last-child):after{content:"·";margin-left:14px;color:#c8b4ff33}.work-card-cta{margin-top:10px;font-family:var(--font-mono);font-size:12px;color:var(--purple);letter-spacing:.06em;text-transform:uppercase}.work-back{font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--purple);padding:8px 16px;border:1px solid var(--border-strong);background:#c8b4ff0d;margin-bottom:24px;cursor:pointer;transition:background .15s}.work-back:hover{background:#c8b4ff26}@media (max-width: 720px){.work-grid{grid-template-columns:1fr;gap:16px}}.proj-detail{padding:60px 0 80px;border-top:1px solid var(--border)}.proj-detail:first-of-type{border-top:none}.proj-detail .head{display:grid;grid-template-columns:1fr 1fr;gap:40px;margin-bottom:36px;align-items:end}.proj-detail h2{font-size:clamp(32px,4.4vw,54px);font-weight:500;letter-spacing:-.025em;line-height:1.05;color:var(--text)}.proj-detail .meta-block{font-family:var(--font-mono);font-size:12px;color:var(--muted);line-height:1.9}.proj-detail .meta-block strong{color:var(--purple);text-transform:uppercase;letter-spacing:.08em;font-weight:500}.proj-detail .desc{font-size:18px;line-height:1.7;max-width:700px;margin-bottom:24px;color:var(--body)}.proj-detail .highlights{list-style:none;border-left:1px solid var(--purple);padding-left:20px;margin:24px 0;max-width:680px}.proj-detail .highlights li{padding:6px 0;font-size:16px;color:var(--body)}.proj-detail .stack{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.proj-detail .stack span{font-family:var(--font-mono);font-size:11px;padding:4px 10px;border:1px solid var(--border-strong);color:var(--cyan);letter-spacing:.04em}.proj-detail .links{margin-top:20px;display:flex;gap:18px;font-family:var(--font-mono);font-size:13px}.proj-detail .links a{color:var(--cyan)}.post-body{margin:32px 0 24px}.post-text{color:var(--body);line-height:1.8;margin:0 0 26px;white-space:pre-wrap;max-width:760px}.post-text.size-small{font-size:15px;max-width:620px}.post-text.size-medium{font-size:18px;max-width:760px}.post-text.size-large{font-size:22px;max-width:820px;line-height:1.7}.post-text.size-full{font-size:22px;max-width:none;line-height:1.7}.post-image{margin:36px 0;border:1px solid var(--border);background:var(--surface);overflow:hidden;cursor:zoom-in;transition:border-color .2s,transform .15s}.post-image:hover{border-color:var(--purple);transform:translateY(-2px)}.post-image img{width:100%;height:auto;display:block}.post-image.size-small{max-width:420px}.post-image.size-medium{max-width:760px}.post-image.size-large{max-width:960px}.post-image.size-full{max-width:none}.blocks-list{display:flex;flex-direction:column;gap:10px;margin-bottom:8px}.block-card{border:1px solid var(--border-strong);background:#c8b4ff08;padding:12px}.block-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.block-type{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--purple)}.block-actions{display:flex;gap:6px}.block-actions button{font-family:var(--font-mono);font-size:12px;padding:3px 9px;border:1px solid var(--border-strong);color:var(--body);background:transparent}.block-actions button:disabled{opacity:.3;cursor:not-allowed}.block-actions button.rm{color:var(--danger);border-color:#ff8a8a4d}.block-size{font-family:var(--font-mono);font-size:11px;padding:3px 6px;background:#ffffff0a;border:1px solid var(--border-strong);color:var(--body);outline:none;letter-spacing:.04em}.block-size:focus{border-color:var(--purple)}.block-card textarea,.block-card input[type=url],.block-card input[type=text]{width:100%;background:#ffffff08;border:1px solid var(--border-strong);padding:10px 12px;font-family:var(--font-mono);font-size:14px;color:var(--body);outline:none}.block-card textarea:focus,.block-card input[type=url]:focus{border-color:var(--purple)}.block-preview{margin-top:10px;border:1px solid var(--border);background:var(--surface);padding:6px}.block-preview img{width:100%;max-height:260px;object-fit:contain;display:block}.img-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:28px 0 8px}.img-thumb{position:relative;aspect-ratio:16 / 9;border:1px solid var(--border);background:var(--surface);cursor:zoom-in;overflow:hidden;transition:border-color .2s,transform .15s}.img-thumb:hover{border-color:var(--purple);transform:translateY(-2px)}.img-thumb img{width:100%;height:100%;object-fit:cover}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000eb;display:flex;align-items:center;justify-content:center;z-index:1000;padding:40px}.lightbox img{max-width:90vw;max-height:90vh;object-fit:contain;border:1px solid var(--border-strong)}.lightbox .lb-close{position:absolute;top:20px;right:24px;font-family:var(--font-mono);font-size:12px;color:var(--purple);letter-spacing:.08em;text-transform:uppercase;padding:6px 12px;border:1px solid var(--border-strong);background:#00000080}.lightbox .lb-prev,.lightbox .lb-next{position:absolute;top:50%;transform:translateY(-50%);font-family:var(--font-mono);font-size:22px;color:var(--purple);padding:10px 16px;border:1px solid var(--border-strong);background:#00000080}.lightbox .lb-prev{left:24px}.lightbox .lb-next{right:24px}.lightbox .lb-count{position:absolute;bottom:24px;left:50%;transform:translate(-50%);font-family:var(--font-mono);font-size:11px;color:var(--muted);letter-spacing:.08em}.contact-grid{display:grid;grid-template-columns:2fr 1fr;gap:40px;align-items:end}.contact-grid .lead{font-size:clamp(26px,3.4vw,40px);font-weight:500;letter-spacing:-.02em;line-height:1.15;max-width:640px;color:var(--text)}.contact-grid .lead em{font-style:italic;color:var(--muted)}.contact-list{font-family:var(--font-mono);font-size:13px}.contact-list a{display:block;padding:6px 0;color:var(--cyan)}footer{padding:40px 28px;margin-top:60px;border-top:1px solid var(--border);font-family:var(--font-mono);font-size:11px;color:var(--muted);display:flex;justify-content:space-between;max-width:var(--max);margin-left:auto;margin-right:auto}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:20px}.auth-card{width:100%;max-width:380px;padding:40px;border:1px solid var(--border-strong);background:var(--surface)}.auth-card h1{font-size:28px;font-weight:500;letter-spacing:-.02em;margin-bottom:6px;color:var(--text)}.auth-card .hint{font-family:var(--font-mono);font-size:11px;color:var(--muted);margin-bottom:28px}.field{margin-bottom:18px}.field label{display:block;font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--purple);margin-bottom:6px}.field input,.field textarea,.field select{width:100%;background:#ffffff08;border:1px solid var(--border-strong);padding:10px 12px;font:inherit;font-size:14px;color:var(--body);outline:none;font-family:var(--font-mono)}.field textarea{min-height:100px;resize:vertical}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--purple)}.btn{display:inline-block;font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;padding:12px 22px;background:#c8b4ff1f;color:var(--purple);border:1px solid var(--border-strong);transition:background .15s}.btn:hover{background:#c8b4ff38}.btn.ghost{background:transparent}.btn.danger{color:var(--danger);border-color:#ff8a8a4d}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-row{display:flex;gap:10px;margin-top:14px}.error{color:var(--danger);font-family:var(--font-mono);font-size:12px;margin-top:8px}.success{color:var(--green);font-family:var(--font-mono);font-size:12px;margin-top:8px}.admin-head{display:flex;justify-content:space-between;align-items:baseline;padding:40px 0 30px;border-bottom:1px solid var(--border);margin-bottom:30px}.admin-head h1{font-size:36px;font-weight:500;letter-spacing:-.02em;color:var(--text)}.admin-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:30px}.admin-tab{font-family:var(--font-mono);font-size:12px;padding:10px 18px;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;letter-spacing:.06em;text-transform:uppercase}.admin-tab:hover{color:var(--body)}.admin-tab.active{color:var(--purple);border-bottom-color:var(--purple)}.admin-row{display:grid;grid-template-columns:60px 1fr auto;gap:20px;padding:18px 16px;border:1px solid var(--border);background:#c8b4ff05;align-items:center;margin-bottom:8px}.admin-row .idx{font-family:var(--font-mono);font-size:12px;color:var(--muted)}.admin-row h4{font-size:16px;font-weight:500;color:var(--text)}.admin-row .tag{font-size:13px;color:var(--muted);margin-top:2px}.admin-row .actions{display:flex;gap:8px}.admin-row .actions button{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;padding:6px 12px;border:1px solid var(--border-strong);color:var(--purple);background:transparent}.admin-row .actions .del{color:var(--danger);border-color:#ff8a8a4d}.editor{border:1px solid var(--border-strong);background:var(--surface);padding:32px;margin-top:20px}.editor h3{font-size:22px;font-weight:500;margin-bottom:24px;letter-spacing:-.02em;color:var(--text)}.img-upload-zone{border:1px dashed var(--border-strong);padding:18px;background:#c8b4ff08;margin-bottom:12px}.img-upload-zone .lbl{font-family:var(--font-mono);font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;display:block}.img-upload-zone .url-row{display:flex;gap:8px;margin-bottom:10px}.img-upload-zone .url-row input{flex:1}.img-chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.img-chip{font-family:var(--font-mono);font-size:11px;background:#c8b4ff14;border:1px solid var(--border-strong);color:var(--purple);padding:4px 10px;display:inline-flex;align-items:center;gap:6px}.img-chip button{color:var(--danger);font-size:12px;padding:0 0 0 4px}.sub-list{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.sub-row{display:grid;grid-template-columns:1fr 1fr 120px auto;gap:8px;align-items:center}.sub-row.two{grid-template-columns:1fr 1fr auto}.sub-row.three{grid-template-columns:1fr 1fr 120px auto}.sub-row button.rm{color:var(--danger);font-family:var(--font-mono);font-size:11px;padding:6px 8px;border:1px solid rgba(255,138,138,.25)}@media (max-width: 720px){.about-grid{grid-template-columns:1fr;gap:30px}.proj-detail .head{grid-template-columns:1fr;gap:18px}.contact-grid{grid-template-columns:1fr;gap:20px}.proj-row{grid-template-columns:40px 1fr;padding:20px 16px}.proj-row .arrow{display:none}.hero{padding:60px 0}.nav ul{gap:16px}.admin-row{grid-template-columns:1fr}.admin-row .actions{justify-self:start}.img-gallery{grid-template-columns:repeat(2,1fr)}.sub-row,.sub-row.two,.sub-row.three{grid-template-columns:1fr}}
