:root{--bg:#fff;--bg-alt:#f2f2f0;--card:#fff;--ink:#111;--ink-soft:#545454;--line:#dfdfdc;--green:#255528;--green-hover:#1a3f1e;--gray-fill:#f1f1ef;--accent:#255528;--green-soft:#25552817;--mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--serif:"Fraunces", Georgia, serif;--maxw:1120px;--sidebar-w:320px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;line-height:1.6}a{color:inherit}::selection{background:var(--gray-fill);color:var(--green)}.wrap{max-width:var(--maxw);margin:0 auto;padding:0 28px}.cover{border-bottom:1px solid var(--line);background-image:url(/images/cover-photo-3.jpg);background-position:50% 30%;background-size:cover;height:230px;position:relative;overflow:hidden}@media (width<=780px){.cover{height:170px}}.layout{grid-template-columns:var(--sidebar-w) 1fr;z-index:2;align-items:start;gap:36px;padding-bottom:60px;display:grid;position:relative}@media (width<=900px){.layout{grid-template-columns:1fr}}.sidebar{background:var(--bg);border:1px solid var(--ink);border-radius:0;margin-top:-84px;padding:30px 26px;position:sticky;top:24px}@media (width<=900px){.sidebar{margin-top:-60px;position:static}}.sidebar-header{align-items:center;gap:14px;margin-bottom:14px;display:flex}.avatar{background:var(--gray-fill);border-radius:50%;flex-shrink:0;width:68px;height:68px;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%;display:block}.sidebar-name{font-family:var(--serif);letter-spacing:-.01em;font-size:24px;font-weight:600;line-height:1.15}.sidebar-role{color:var(--ink-soft);align-items:flex-start;gap:6px;margin-bottom:16px;font-size:14px;line-height:1.4;display:flex}.sidebar-role .ico{width:15px;height:15px;color:var(--green);flex-shrink:0;margin-top:2px}.contact-row-inline{flex-wrap:wrap;gap:8px 16px;margin-bottom:16px;display:flex}.contact-row-inline a,.contact-row-inline span{color:var(--ink-soft);align-items:center;gap:6px;font-size:13px;text-decoration:none;display:flex}.contact-row-inline a:hover{color:var(--green)}.contact-row-inline .ico{width:15px;height:15px;color:var(--green);flex-shrink:0}.status-row{align-items:flex-start;gap:9px;margin-bottom:22px;display:flex}.status-dot{background:var(--green);border-radius:50%;flex-shrink:0;width:8px;height:8px;margin-top:7px}.status-text{letter-spacing:-.01em;color:var(--ink);font-size:16px;font-weight:700;line-height:1.3}.sidebar-actions{flex-direction:column;gap:10px;margin-bottom:26px;display:flex}.btn{font-family:var(--mono);border:1px solid var(--ink);border-radius:999px;justify-content:center;align-items:center;gap:8px;padding:12px 22px;font-size:13.5px;text-decoration:none;transition:all .15s;display:inline-flex}.btn-primary{background:var(--green);color:#fff;border-color:var(--green)}.btn-primary:hover{filter:brightness(.93)}.btn-ghost{color:var(--ink)}.btn-ghost:hover{border-color:var(--green);color:var(--green)}.sidebar-block{border-top:1px solid var(--line);margin-top:20px;padding-top:20px}.sidebar-block h3{font-family:var(--mono);letter-spacing:.5px;color:var(--ink-soft);text-transform:uppercase;margin-bottom:12px;font-size:12px}.sidebar-bio{color:var(--ink-soft);font-size:14.5px}.content{padding-top:32px}.tabs{border-bottom:1px solid var(--line);background:var(--bg);z-index:10;scrollbar-width:thin;flex-wrap:nowrap;gap:26px;margin-bottom:40px;padding-top:4px;display:flex;position:sticky;top:0;overflow-x:auto}.tabs::-webkit-scrollbar{height:4px}.tabs::-webkit-scrollbar-thumb{background:var(--line);border-radius:999px}.tab-link{font-family:var(--mono);color:var(--ink-soft);white-space:nowrap;border-bottom:2px solid #0000;flex-shrink:0;padding:12px 2px;font-size:13.5px;text-decoration:none;transition:color .15s}.tab-link.active{color:var(--ink);border-bottom-color:var(--green);font-weight:600}.content-section{margin-bottom:60px;padding-top:6px;scroll-margin-top:110px}.section-title{align-items:center;gap:12px;margin-bottom:26px;font-size:21px;display:flex}.section-title .icon-badge{flex-shrink:0;width:36px;height:36px}.section-title .icon-badge svg{width:100%;height:100%;display:block}.section-placeholder{color:var(--ink-soft);font-size:14.5px}.skills-intro{color:var(--ink-soft);max-width:560px;margin-bottom:6px;font-size:14.5px}.project-card{border-top:1px solid var(--line);border-right:1px solid var(--line);border-bottom:1px solid var(--line);border-left:3px solid var(--line);background:var(--card);margin-bottom:14px;transition:border-left-color .2s;position:relative}.project-card[open]{border-left-color:var(--green)}.project-card summary{cursor:pointer;-webkit-tap-highlight-color:transparent;flex-direction:column;gap:16px;padding:26px 28px;list-style:none;transition:background .15s;display:flex}.project-card summary:hover{background:var(--bg-alt)}.project-card summary::-webkit-details-marker{display:none}.project-card summary::marker{content:""}.project-summary-top{justify-content:space-between;align-items:center;gap:14px;display:flex}.project-head{align-items:flex-start;gap:14px;display:flex}.project-num{width:36px;height:36px;font-family:var(--mono);color:var(--ink);background:var(--gray-fill);border:1px solid var(--line);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:13px;display:flex}.project-head-text{flex-direction:column;gap:5px;display:flex}.project-title{letter-spacing:-.02em;margin:0;font-size:19px;font-weight:600}.project-tagline{color:var(--ink-soft);margin:0;font-size:13.5px}.status-pill{font-family:var(--mono);border:1px dashed var(--ink-soft);color:var(--ink-soft);border-radius:999px;align-items:center;gap:6px;width:fit-content;margin-top:8px;padding:4px 10px;font-size:10.5px;display:inline-flex}.status-pill .dot{background:var(--ink-soft);border-radius:50%;flex-shrink:0;width:6px;height:6px}.project-view-btn{font-family:var(--mono);border:1px solid var(--ink);color:var(--ink);white-space:nowrap;border-radius:999px;flex-shrink:0;align-items:center;gap:8px;padding:9px 16px;font-size:12px;transition:border-color .15s,color .15s;display:inline-flex}.project-card summary:hover .project-view-btn,.project-card[open] .project-view-btn{border-color:var(--green);color:var(--green)}.view-btn-open,.project-card[open] .view-btn-closed{display:none}.project-card[open] .view-btn-open{display:inline}.project-view-btn .view-chevron{flex-shrink:0;width:11px;height:11px}.project-view-btn .view-chevron svg{width:100%;height:100%;transition:transform .2s;display:block}.project-card[open] .project-view-btn .view-chevron svg{transform:rotate(180deg)}.project-stack{flex-wrap:wrap;gap:8px;margin-left:50px;display:flex}.tag{font-family:var(--mono);color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:999px;padding:5px 12px;font-size:11.5px}.project-body{border-top:1px solid var(--line);flex-direction:column;gap:20px;margin-top:-4px;margin-left:50px;padding:4px 28px 30px;display:flex}.project-tabs{border-bottom:1px solid var(--line);scrollbar-width:thin;flex-wrap:nowrap;gap:20px;display:flex;overflow-x:auto}.project-tabs::-webkit-scrollbar{height:4px}.project-tabs::-webkit-scrollbar-thumb{background:var(--line);border-radius:999px}.ptab-btn{font-family:var(--mono);color:var(--ink-soft);cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-bottom:2px solid #0000;flex-shrink:0;margin-bottom:-1px;padding:12px 2px;font-size:12px;transition:color .15s}.ptab-btn:hover{color:var(--ink)}.ptab-btn.active{color:var(--ink);border-bottom-color:var(--green);font-weight:600}.project-panel{display:none}.project-panel.active{display:block}.project-panel p{color:var(--ink-soft);max-width:640px;margin:0;font-size:14.5px;line-height:1.6}.project-panel ul{color:var(--ink-soft);margin:0;padding-left:18px;font-size:14.5px}.project-panel li{margin-bottom:7px}.project-panel li::marker{color:var(--green)}.project-link{color:var(--ink);align-items:center;gap:8px;font-size:14px;text-decoration:none;display:inline-flex}.project-link:hover{color:var(--green)}.project-link .link-icon{flex-shrink:0;width:16px;height:16px}.project-summary-media{border:1px solid var(--line);aspect-ratio:7/4;max-width:480px;overflow:hidden}.project-summary-media img{object-fit:cover;width:100%;height:100%;display:block}.project-diagram{border:1px solid var(--line);width:100%;max-width:620px;margin-bottom:10px;display:block}.diagram-caption{color:var(--ink-soft);max-width:620px;margin:0 0 18px;font-size:12.5px}.edu-card{background:var(--card);border:1px solid var(--line);border-radius:0;flex-direction:column;gap:26px;padding:34px;display:flex}.edu-left{align-items:center;gap:18px;display:flex}.edu-badge{border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;width:64px;height:64px;display:flex}.edu-badge-placeholder{background:var(--gray-fill);color:var(--ink-soft)}.edu-badge-placeholder svg{width:26px;height:26px}.edu-badge-image{object-fit:cover;border-radius:10px;width:100%;height:100%}.edu-school{letter-spacing:-.02em;margin-bottom:7px;font-size:19px;font-weight:600}.edu-degree{color:var(--ink-soft);font-size:14.5px;line-height:1.6}.edu-right{border-top:1px solid var(--line);padding-top:22px}.edu-label{font-family:var(--mono);letter-spacing:.5px;text-transform:uppercase;color:var(--ink-soft);margin:0 0 14px;font-size:11px}.edu-tags{flex-wrap:wrap;gap:8px;display:flex}.edu-tags .tag{background:var(--gray-fill)}.skills-categories{flex-direction:column;gap:10px;margin-bottom:12px;display:flex}.skill-category{border-top:1px solid var(--line);border-right:1px solid var(--line);border-bottom:1px solid var(--line);border-left:3px solid var(--line);background:var(--card);transition:border-left-color .2s;position:relative}.skill-category[open]{border-left-color:var(--green)}.skill-category summary{cursor:pointer;-webkit-tap-highlight-color:transparent;justify-content:space-between;align-items:center;padding:16px 20px;list-style:none;transition:background .15s;display:flex}.skill-category summary:hover{background:var(--bg-alt)}.skill-category summary::-webkit-details-marker{display:none}.skill-category summary::marker{content:""}.cat-head{align-items:center;gap:12px;display:flex}.cat-icon{background:var(--gray-fill);width:30px;height:30px;color:var(--ink);box-sizing:border-box;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:6px;display:flex}.cat-icon svg{width:100%;height:100%;display:block}.cat-name{letter-spacing:-.01em;font-size:15px;font-weight:600}.cat-right{align-items:center;gap:14px;display:flex}.cat-count{font-family:var(--mono);color:var(--green);background:var(--green-soft);border-radius:999px;padding:4px 11px;font-size:11px;font-weight:600}.cat-chevron{width:14px;height:14px;color:var(--ink-soft);flex-shrink:0}.cat-chevron svg{width:100%;height:100%;transition:transform .2s;display:block}.skill-category[open] .cat-chevron svg{transform:rotate(180deg)}.skill-items{border-top:1px solid var(--line);margin-top:0;padding:2px 20px 16px}.skill-row{border-bottom:1px solid var(--bg-alt);align-items:center;gap:12px;padding:10px 2px;font-size:14px;display:flex}.skill-row:last-child{border-bottom:none}.skill-name{align-items:center;gap:11px;display:flex}.skill-flag{background:var(--gray-fill);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:27px;height:27px;font-size:15px;line-height:1;display:flex}.skill-icon{box-sizing:content-box;background:var(--gray-fill);width:15px;height:15px;color:var(--ink);border-radius:50%;flex-shrink:0;padding:6px;transition:background .18s,color .18s,transform .18s}.skill-row:hover .skill-icon{background:var(--green-soft);color:var(--green);transform:scale(1.08)}[data-reveal]{opacity:0;transition:opacity .5s,transform .5s;transform:translateY(14px)}[data-reveal].in{opacity:1;transform:translateY(0)}.admin-shell{background:var(--bg);min-height:100vh;font-family:var(--sans)}.admin-shell-centered{justify-content:center;align-items:center;display:flex}.admin-topbar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:18px 28px;display:flex}.admin-topbar-left{align-items:center;gap:32px;display:flex}.admin-topbar-title{font-family:var(--mono);color:var(--ink-soft);font-size:14px}.admin-nav{gap:20px;display:flex}.admin-nav-link{font-family:var(--mono);color:var(--ink-soft);border-bottom:2px solid #0000;padding-bottom:2px;font-size:13px;text-decoration:none}.admin-nav-link:hover{color:var(--ink)}.admin-nav-link.router-link-active{color:var(--ink);border-bottom-color:var(--green);font-weight:600}.admin-content{max-width:var(--maxw);margin:0 auto;padding:32px 28px}.admin-content-header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.admin-section-title{letter-spacing:-.01em;font-size:22px;font-weight:600}.admin-placeholder{color:var(--ink-soft);font-size:14.5px}.admin-table{border-collapse:collapse;width:100%}.admin-table th{text-align:left;font-family:var(--mono);text-transform:uppercase;letter-spacing:.5px;color:var(--ink-soft);border-bottom:1px solid var(--ink);padding:10px 12px;font-size:11px}.admin-table td{border-bottom:1px solid var(--line);padding:14px 12px;font-size:14px}.admin-table-actions{justify-content:flex-end;gap:8px;display:flex}.admin-btn{font-family:var(--mono);border:1px solid var(--ink);background:var(--bg);color:var(--ink);cursor:pointer;border-radius:999px;padding:10px 18px;font-size:13px;transition:all .15s}.admin-btn:hover{border-color:var(--green);color:var(--green)}.admin-btn:disabled{opacity:.5;cursor:not-allowed}.admin-btn-primary{background:var(--green);color:#fff;border-color:var(--green)}.admin-btn-primary:hover{filter:brightness(.93);color:#fff}.admin-btn-danger{color:#831820;border-color:#831820}.admin-btn-danger:hover{color:#fff;background:#831820}.admin-btn-small{padding:6px 12px;font-size:12px}.admin-login-card{border:1px solid var(--ink);flex-direction:column;gap:18px;width:100%;max-width:360px;padding:34px;display:flex}.admin-login-title{font-family:var(--serif);margin:0;font-size:22px;font-weight:600}.admin-error{color:#831820;margin:0;font-size:13.5px}.admin-field{flex-direction:column;gap:6px;display:flex}.admin-field-row{gap:16px;display:flex}.admin-field-row .admin-field{flex:1}.admin-label{font-family:var(--mono);text-transform:uppercase;letter-spacing:.5px;color:var(--ink-soft);font-size:11px}.admin-input,.admin-textarea{font-family:var(--sans);border:1px solid var(--line);background:var(--bg);color:var(--ink);box-sizing:border-box;border-radius:0;width:100%;padding:10px 12px;font-size:14px}.admin-input:focus,.admin-textarea:focus{border-color:var(--green);outline:none}.admin-password-field{position:relative}.admin-password-field .admin-input{padding-right:40px}.admin-password-toggle{width:24px;height:24px;color:var(--ink-soft);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.admin-password-toggle:hover{color:var(--ink)}.admin-password-toggle svg{width:20px;height:20px}.admin-textarea{resize:vertical;min-height:80px;font-family:var(--sans)}.admin-modal-overlay{z-index:100;background:#11111180;justify-content:center;align-items:flex-start;padding:40px 20px;display:flex;position:fixed;inset:0;overflow-y:auto}.admin-modal{background:var(--bg);border:1px solid var(--ink);flex-direction:column;gap:18px;width:100%;max-width:640px;padding:32px;display:flex}.admin-modal-title{font-family:var(--serif);margin:0;font-size:20px;font-weight:600}.admin-modal-actions{border-top:1px solid var(--line);justify-content:flex-end;gap:10px;padding-top:8px;display:flex}.admin-image-list{flex-direction:column;gap:12px;display:flex}.admin-image-block{border:1px solid var(--line);background:var(--bg-alt);flex-direction:column;gap:10px;padding:12px;display:flex}.admin-image-block-header{justify-content:space-between;align-items:center;display:flex}.admin-textarea-small{min-height:50px}.admin-dropzone{text-align:center;border:1px dashed var(--ink-soft);color:var(--ink-soft);cursor:pointer;justify-content:center;align-items:center;padding:16px;font-size:13px;transition:border-color .15s,color .15s;display:flex;position:relative}.admin-dropzone:hover{border-color:var(--green);color:var(--green)}.admin-dropzone-input{opacity:0;cursor:pointer;position:absolute;inset:0}.admin-image-preview{object-fit:contain;border:1px solid var(--line);max-width:100%;max-height:180px;display:block}.admin-single-upload{flex-direction:column;gap:8px;display:flex}.admin-single-upload-preview{align-items:center;gap:12px;display:flex}.admin-single-upload-preview img{object-fit:cover;border:1px solid var(--line);width:64px;height:64px}.admin-icon-picker{border:1px solid var(--line);background:var(--bg-alt);padding:10px}.admin-icon-picker-tabs{gap:6px;margin-bottom:10px;display:flex}.admin-icon-tab{font-family:var(--mono);border:1px solid var(--line);background:var(--bg);color:var(--ink-soft);cursor:pointer;padding:6px 10px;font-size:11.5px}.admin-icon-tab:hover{border-color:var(--green);color:var(--green)}.admin-icon-tab.active{border-color:var(--ink);color:var(--ink);background:var(--bg);font-weight:600}.admin-icon-picker-body{align-items:center;gap:12px;display:flex}.admin-icon-picker-body .admin-input,.admin-icon-picker-body .admin-dropzone{flex:1}.admin-icon-picker-preview{box-sizing:content-box;background:var(--gray-fill);width:28px;height:28px;color:var(--ink);object-fit:contain;border-radius:50%;flex-shrink:0;padding:5px}.admin-skill-block{border:1px solid var(--line);flex-direction:column;gap:8px;margin-bottom:10px;padding:10px;display:flex}.admin-skill-block .admin-field-row{align-items:center}.admin-skill-block .admin-field-row .admin-input{flex:1}.admin-extra-section{border:1px solid var(--line);flex-direction:column;gap:10px;margin-bottom:10px;padding:14px;display:flex}.admin-extra-section .admin-field-row{align-items:center}.admin-extra-section .admin-field-row .admin-input{flex:1}
