@font-face{font-family:Inter;font-style:normal;font-weight:300 600;font-display:optional;src:url(/fonts/Inter-VariableFont_opsz,wght.woff2)format("woff2")}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:300 600;font-display:optional;src:url(/fonts/SourceSerif4-VariableFont_opsz,wght.woff2)format("woff2")}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:300 600;font-display:optional;src:url(/fonts/SourceSerif4-Italic-VariableFont_opsz,wght.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:optional;src:url(/fonts/JetBrainsMono-Regular.woff2)format("woff2")}:root{--font-body:"Inter", system-ui, sans-serif;--font-display:"Source Serif 4", Georgia, serif;--font-mono:"JetBrains Mono", monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.25rem;--text-xl:2rem}*,:before,:after{box-sizing:border-box;margin:0;padding:0}::selection{color:#f5f3f0;background:#1a1a1a}body{font-family:var(--font-body);color:#1a1a1a;-webkit-font-smoothing:antialiased;background:#f5f3f0;font-size:16px;line-height:1.6}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}.page{max-width:640px;margin:0 auto;padding:80px 24px}.header{margin-bottom:64px}.header-top{align-items:flex-start;gap:24px;margin-bottom:28px;display:flex}.avatar{object-fit:cover;border-radius:50%;flex-shrink:0;width:80px;height:80px}.top-nav{justify-content:flex-end;gap:20px;margin-bottom:48px;display:flex}.top-nav a{font-size:var(--text-base);color:#1a1a1a;letter-spacing:.01em;transition:color .2s}.top-nav a:hover{color:#666}.header-top h1{font-family:var(--font-display);font-size:var(--text-xl);letter-spacing:-.02em;margin-bottom:4px;font-weight:600;line-height:1.2}.subtitle{font-size:var(--text-base);color:#666}.bio{color:#444;margin-bottom:24px;line-height:1.7}.bio .highlight{-webkit-box-decoration-break:clone;box-decoration-break:clone;background:linear-gradient(104deg,#dcbf6700 .9%,#dcbf6752 2.4%,#dcbf6747 5.8%,#dcbf6714 93%,#dcbf6747 96%,#dcbf6700 98%);border-radius:3px 8px 5px 7px;margin:0 -.1em;padding:.05em .2em;text-decoration:none;transition:background .2s}.bio .highlight:hover{background:linear-gradient(104deg,#dcbf6700 .9%,#dcbf677a 2.4%,#dcbf676b 5.8%,#dcbf671f 93%,#dcbf676b 96%,#dcbf6700 98%)}.links{flex-wrap:wrap;gap:20px;display:flex}.links a{font-size:var(--text-base);color:#666;align-items:center;gap:5px;transition:color .2s;display:inline-flex}.links a:hover{color:#1a1a1a}.photos{grid-template-columns:repeat(2,1fr);gap:12px;margin-bottom:64px;display:grid}.photo-card{cursor:pointer}.photo-frame{aspect-ratio:4/3;background:#e8e5e0;border-radius:8px;overflow:hidden}.photo-frame img{object-fit:cover;width:100%;height:100%;transition:transform .3s}.photo-card:hover .photo-frame img{transform:scale(1.05)}.photo-caption{font-size:var(--text-xs);color:#999;margin-top:6px;font-style:italic}.photo-caption a{text-underline-offset:2px;-webkit-text-decoration:underline #d4d0cb;text-decoration:underline #d4d0cb;transition:text-decoration-color .2s}.photo-caption a:hover{text-decoration-color:#999}.lightbox{z-index:100;cursor:pointer;background:#000000d1;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.lightbox img{object-fit:contain;cursor:default;border-radius:8px;max-width:100%;max-height:90vh}.lightbox-close{color:#fff9;cursor:pointer;background:0 0;border:none;font-size:1.8rem;line-height:1;transition:color .2s;position:absolute;top:16px;right:16px}.lightbox-close:hover{color:#fff}section{margin-bottom:64px}section h2{font-family:var(--font-display);font-size:var(--text-lg);letter-spacing:-.01em;border-bottom:1px solid #d4d0cb;margin-bottom:24px;padding-bottom:8px;font-weight:600}.job+.job{margin-top:28px}.job-header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 12px;margin-bottom:4px;display:flex}.job-company{color:inherit;font-weight:500;text-decoration:none}.job-company:hover{text-decoration:underline}.job-badge{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.06em;color:#888;background:#e8e5e0;border-radius:3px;margin-left:8px;padding:2px 7px}.job-period{font-size:var(--text-base);color:#888}.job-role{font-size:var(--text-base);color:#666;margin-bottom:4px}.job-desc{font-size:var(--text-base);color:#555;line-height:1.65}.projects-grid{grid-template-columns:repeat(2,1fr);gap:24px;display:grid}.project-card{flex-direction:column;display:flex}.project-img{aspect-ratio:4/3;background:#e8e5e0;border-radius:8px;margin-bottom:10px;overflow:hidden}.project-img img{object-fit:cover;width:100%;height:100%}.project-video{aspect-ratio:4/3;background:#e8e5e0;border-radius:8px;margin-bottom:10px;overflow:hidden}.project-video video{object-fit:cover;border:none;width:100%;height:100%}.project-title{color:inherit;margin-bottom:4px;font-weight:500;text-decoration:none}a.project-title:hover{text-decoration:underline}.project-desc{font-size:var(--text-base);color:#888;line-height:1.55}.recs{list-style:none}.rec{padding:4px 0}.rec a{font-size:var(--text-base);color:#444;align-items:baseline;gap:12px;text-decoration:none;transition:color .2s;display:inline-flex;position:relative}.rec a:hover{color:#1a1a1a}.rec-category{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.04em;color:#999;flex-shrink:0;width:22ch;display:inline-block}.rec-name{text-underline-offset:2px;font-weight:500;-webkit-text-decoration:underline #d4d0cb;text-decoration:underline #d4d0cb;transition:text-decoration-color .2s}.rec a:hover .rec-name{text-decoration-color:#1a1a1a}.rec-external{font-size:var(--text-xs);color:#aaa;vertical-align:baseline;margin-left:4px;transition:color .2s}.rec a:hover .rec-external{color:#666}.rec-tooltip{-webkit-backdrop-filter:blur(8px);color:#f5f3f0;font-size:var(--text-sm);pointer-events:none;opacity:0;z-index:10;background:#1a1a1ad9;border-radius:6px;width:max-content;max-width:240px;padding:8px 14px;line-height:1.5;transition:opacity .2s;position:absolute;top:50%;left:calc(100% + 12px);transform:translateY(-50%)}.rec-tooltip:after{content:"";border:5px solid #0000;border-right-color:#1a1a1ad9;position:absolute;top:50%;right:100%;transform:translateY(-50%)}.rec a:hover .rec-tooltip{opacity:1}footer{border-top:1px solid #d4d0cb;padding-top:32px}footer p{font-size:var(--text-base);color:#888}.footer-links{gap:20px;margin-top:12px;display:flex}.footer-links a{font-size:var(--text-base);color:#666;align-items:center;gap:5px;transition:color .2s;display:inline-flex}.footer-links a:hover{color:#1a1a1a}.tools-shell{position:relative}.tools-column{max-width:640px;margin:0 auto;padding:80px 24px;position:relative}.tools-sidebar{width:140px;position:absolute;top:136px;right:calc(100% + 32px)}.tools-nav{flex-direction:column;gap:1px;display:flex;position:sticky;top:80px}.tools-nav-item{font-size:var(--text-base);color:#888;text-align:right;padding:5px 0;transition:color .2s;display:block}.tools-nav-item:hover{color:#1a1a1a}.tools-nav-item--active{color:#1a1a1a;font-weight:500}.tool-page-title{font-family:var(--font-display);font-size:var(--text-lg);letter-spacing:-.01em;border-bottom:1px solid #d4d0cb;margin-bottom:16px;padding-bottom:8px;font-weight:600}.tool-page-desc{font-size:var(--text-base);color:#555;margin-bottom:28px;line-height:1.65}.tool-page-hint{font-size:var(--text-base);color:#999;font-style:italic}.tool-panel{flex-direction:column;gap:20px;display:flex}.tool-inputs{flex-direction:column;gap:16px;display:flex}.tool-input-group{flex-direction:column;gap:6px;display:flex}.tool-label{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.05em;color:#888}.tool-file-input{display:none}.tool-upload-btn{font-size:var(--text-base);color:#555;cursor:pointer;background:0 0;border:1px solid #d4d0cb;border-radius:6px;align-self:flex-start;align-items:center;gap:8px;padding:8px 14px;font-family:inherit;transition:border-color .2s,color .2s;display:inline-flex}.tool-upload-btn:hover{color:#1a1a1a;border-color:#1a1a1a}.tool-paste-area{min-height:80px;font-size:var(--text-base);color:#1a1a1a;background:0 0;border:1px solid #d4d0cb;border-radius:6px;outline:none;padding:12px 14px;font-family:inherit;transition:border-color .2s}.tool-paste-area:focus{border-color:#1a1a1a}.tool-paste-placeholder{color:#bbb;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:var(--text-sm)}.tool-paste-area:focus .tool-paste-placeholder{opacity:.6}.tool-result{border:1px solid #d4d0cb;border-radius:6px;padding:14px 16px;transition:border-color .2s,background .2s}.tool-result-text{font-size:var(--text-base);color:#555;word-break:break-all;line-height:1.55}.tool-result-link{color:inherit;text-underline-offset:2px;-webkit-text-decoration:underline #d4d0cb;text-decoration:underline #d4d0cb;transition:text-decoration-color .2s}.tool-result-link:hover{text-decoration-color:#1a1a1a}.qr-hidden{display:none}.qr-tabs{border-bottom:1px solid #d4d0cb;gap:0;margin-bottom:24px;display:flex}.qr-tab{font-size:var(--text-base);color:#888;cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 16px;font-family:inherit;transition:color .2s,border-color .2s}.qr-tab:hover{color:#1a1a1a}.qr-tab--active{color:#1a1a1a;border-bottom-color:#1a1a1a;font-weight:500}.qr-section{margin-bottom:28px}.qr-textarea{width:100%;font-size:var(--text-base);color:#1a1a1a;resize:vertical;background:0 0;border:1px solid #d4d0cb;border-radius:6px;outline:none;margin-top:6px;padding:10px 14px;font-family:inherit;line-height:1.6;transition:border-color .2s}.qr-textarea:focus{border-color:#1a1a1a}.qr-textarea::placeholder{color:#bbb}.qr-input{width:100%;font-size:var(--text-base);color:#1a1a1a;background:0 0;border:1px solid #d4d0cb;border-radius:6px;outline:none;padding:7px 10px;font-family:inherit;transition:border-color .2s}.qr-input:focus{border-color:#1a1a1a}.qr-input::placeholder{color:#bbb}.qr-input:disabled{opacity:.4}.qr-input--mono{font-family:var(--font-mono);font-size:var(--text-sm)}.qr-presets{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}.qr-preset-btn{font-size:var(--text-sm);color:#888;cursor:pointer;background:0 0;border:1px solid #d4d0cb;border-radius:4px;padding:4px 10px;font-family:inherit;transition:border-color .2s,color .2s}.qr-preset-btn:hover{color:#1a1a1a;border-color:#1a1a1a}.qr-main{grid-template-columns:1fr 1fr;align-items:start;gap:32px;display:grid}.qr-preview-section{flex-direction:column;gap:12px;display:flex}.qr-preview{border:1px solid #d4d0cb;border-radius:8px;justify-content:center;align-items:center;min-height:200px;padding:16px;display:flex}.qr-preview img{max-width:100%;height:auto;display:block}.qr-preview-msg{font-size:var(--text-sm);color:#bbb;text-align:center}.qr-quick-styles{flex-direction:column;gap:6px;display:flex}.qr-actions{gap:8px;display:flex}.qr-btn{font-size:var(--text-base);cursor:pointer;border:1px solid #0000;border-radius:6px;padding:8px 16px;font-family:inherit;transition:border-color .2s,color .2s,background .2s}.qr-btn:disabled{opacity:.35;cursor:default}.qr-btn--primary{color:#f5f3f0;background:#1a1a1a;border-color:#1a1a1a}.qr-btn--primary:hover:not(:disabled){background:#333}.qr-btn--outline{color:#555;background:0 0;border-color:#d4d0cb}.qr-btn--outline:hover:not(:disabled){color:#1a1a1a;border-color:#1a1a1a}.qr-btn--full{text-align:center;width:100%}.qr-options-section{flex-direction:column;gap:8px;display:flex}.qr-details{border:1px solid #d4d0cb;border-radius:6px;overflow:hidden}.qr-details summary{font-size:var(--text-base);cursor:pointer;justify-content:space-between;align-items:center;padding:10px 14px;font-weight:500;list-style:none;transition:color .2s;display:flex}.qr-details summary::-webkit-details-marker{display:none}.qr-details summary:after{content:"+";color:#999;font-size:1rem;font-weight:300;transition:transform .2s}.qr-details[open] summary:after{content:"−"}.qr-details summary:hover{color:#1a1a1a}.qr-details-body{flex-direction:column;gap:10px;padding:0 14px 14px;display:flex}.qr-range-row{justify-content:space-between;align-items:baseline;display:flex}.qr-range-value{font-size:var(--text-sm);color:#888;font-family:var(--font-mono)}.qr-range{appearance:none;background:#d4d0cb;border-radius:2px;outline:none;width:100%;height:4px}.qr-range::-webkit-slider-thumb{-webkit-appearance:none;cursor:pointer;background:#1a1a1a;border-radius:50%;width:14px;height:14px}.qr-range::-moz-range-thumb{cursor:pointer;background:#1a1a1a;border:none;border-radius:50%;width:14px;height:14px}.qr-btn-group{border:1px solid #d4d0cb;border-radius:6px;gap:0;display:flex;overflow:hidden}.qr-btn-group--wrap{flex-wrap:wrap}.qr-btn-group-item{font-size:var(--text-sm);color:#888;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-right:1px solid #d4d0cb;flex:1;padding:6px 8px;font-family:inherit;transition:background .15s,color .15s}.qr-btn-group-item:last-child{border-right:none}.qr-btn-group-item:hover{color:#1a1a1a}.qr-btn-group-item--active{color:#f5f3f0;background:#1a1a1a}.qr-btn-group-item--active:hover{color:#f5f3f0}.qr-btn-group--wrap .qr-btn-group-item{border-bottom:1px solid #d4d0cb;flex:0 0 calc(33.333% - .67px)}.qr-btn-group--wrap .qr-btn-group-item:nth-child(3){border-right:none}.qr-btn-group--wrap .qr-btn-group-item:nth-child(n+4){border-bottom:none}.qr-btn-group--wrap .qr-btn-group-item:nth-child(6){border-right:none}.qr-color-row{grid-template-columns:1fr 1fr;gap:12px;display:grid}.qr-color-field{flex-direction:column;gap:6px;display:flex}.qr-color-input{align-items:stretch;gap:6px;display:flex}.qr-color-swatch{cursor:pointer;border:1px solid #d4d0cb;border-radius:4px;flex-shrink:0;width:36px;height:34px;padding:1px}.qr-color-swatch:disabled{opacity:.4}.qr-checkbox-label{font-size:var(--text-sm);color:#888;cursor:pointer;align-items:center;gap:6px;display:flex}.qr-checkbox-label input[type=checkbox]{accent-color:#1a1a1a}.qr-logo-preview{align-items:center;gap:12px;display:flex}.qr-logo-thumb{object-fit:contain;border:1px solid #d4d0cb;border-radius:4px;width:48px;height:48px}.qr-logo-drop{text-align:center;font-size:var(--text-sm);color:#bbb;cursor:pointer;border:1px dashed #d4d0cb;border-radius:6px;padding:20px;transition:border-color .2s,color .2s}.qr-logo-drop:hover,.qr-logo-drop--active{color:#888;border-color:#1a1a1a}.qr-hint{font-size:var(--text-sm);color:#999;font-style:italic}.qr-vcard-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}.qr-field{flex-direction:column;gap:4px;display:flex}.qr-vcard-preview{font-family:var(--font-mono);font-size:var(--text-xs);color:#888;white-space:pre-wrap;background:#e8e5e0;border-radius:6px;margin-top:12px;padding:10px 14px;line-height:1.6;overflow-x:auto}.qr-batch-list{flex-direction:column;gap:8px;display:flex}.qr-batch-row{align-items:center;gap:8px;display:flex}.qr-batch-num{font-size:var(--text-sm);color:#999;text-align:right;flex-shrink:0;width:20px}.qr-batch-input{flex:1}.qr-batch-thumb{border-radius:3px;flex-shrink:0;width:28px;height:28px}.qr-batch-status{font-size:var(--text-sm);color:#888;text-align:center;flex-shrink:0;width:28px}.qr-batch-status--error{color:#8b3a3a;font-weight:600}.qr-batch-remove{color:#bbb;cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:1.1rem;line-height:1;transition:color .2s}.qr-batch-remove:hover{color:#8b3a3a}.qr-batch-actions{gap:8px;margin-top:8px;margin-bottom:12px;display:flex}.json-tabs{border-bottom:1px solid #d4d0cb;gap:0;margin-bottom:24px;display:flex}.json-panel{margin-bottom:16px}.json-panel-header{justify-content:space-between;align-items:baseline;margin-bottom:6px;display:flex}.json-panel-actions{align-items:baseline;gap:10px;display:flex}.json-action-btn{font-size:var(--text-sm);color:#888;cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit;transition:color .2s}.json-action-btn:hover:not(:disabled){color:#1a1a1a}.json-action-btn:disabled{opacity:.35;cursor:default}.json-status{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.04em;color:#bbb}.json-status--valid{color:#6a8f6a}.json-status--invalid{color:#a06060}.json-textarea{width:100%;font-family:var(--font-mono);font-size:var(--text-sm);color:#1a1a1a;resize:vertical;tab-size:2;background:0 0;border:1px solid #d4d0cb;border-radius:6px;outline:none;padding:12px 14px;line-height:1.55;transition:border-color .2s}.json-textarea:focus{border-color:#1a1a1a}.json-textarea::placeholder{color:#bbb;font-family:var(--font-body);font-size:var(--text-sm)}.json-textarea--output{color:#444;background:#00000004}.json-error{font-family:var(--font-mono);font-size:var(--text-sm);color:#8b3a3a;border:1px solid #c9a0a0;border-radius:6px;margin-bottom:16px;padding:10px 14px;line-height:1.5}.json-stats{font-size:var(--text-sm);color:#888;font-family:var(--font-mono);align-items:baseline;gap:8px;margin-bottom:16px;display:flex}.json-stats-arrow{color:#d4d0cb}.json-stats-saved{color:#6a8f6a;font-family:var(--font-body);font-size:var(--text-xs)}.sp-panels{border-bottom:1px solid #d4d0cb;flex-wrap:wrap;gap:0;margin-bottom:20px;display:flex}.sp-panel-btn{font-size:var(--text-sm);color:#888;cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 14px;font-family:inherit;transition:color .2s,border-color .2s}.sp-panel-btn:hover{color:#1a1a1a}.sp-panel-btn--active{color:#1a1a1a;border-bottom-color:#1a1a1a;font-weight:500}.sp-tray{border:1px solid #d4d0cb;border-radius:6px;flex-direction:column;gap:12px;margin-bottom:20px;padding:14px 16px;display:flex}.sp-tray-actions{flex-wrap:wrap;gap:6px;display:flex}.sp-find-row{grid-template-columns:1fr 1fr;gap:8px;display:grid}.sp-find-input{min-width:0}.sp-find-footer{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.sp-match-count{font-size:var(--text-sm);color:#888;font-family:var(--font-mono)}.sp-find-spacer{flex:1}.sp-extracted{flex-direction:column;gap:8px;display:flex}.sp-extracted-header{justify-content:space-between;align-items:baseline;display:flex}.sp-extracted-count{font-size:var(--text-sm);color:#888}.sp-extracted-list{max-height:128px;font-family:var(--font-mono);font-size:var(--text-xs);color:#555;background:#e8e5e0;border-radius:6px;padding:10px 12px;line-height:1.65;overflow-y:auto}.sp-extracted-item{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.sp-editor{width:100%;min-height:420px;font-family:var(--font-mono);font-size:var(--text-sm);color:#1a1a1a;resize:vertical;tab-size:2;background:0 0;border:1px solid #d4d0cb;border-radius:6px;outline:none;padding:16px 18px;line-height:1.7;transition:border-color .2s}.sp-editor:focus{border-color:#1a1a1a}.sp-editor::placeholder{color:#bbb;font-family:var(--font-body);font-size:var(--text-sm)}.sp-status{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;margin-top:8px;display:flex}.sp-stats{font-size:var(--text-xs);color:#999;font-family:var(--font-mono);align-items:baseline;gap:6px;display:flex}.sp-stats-sep{color:#d4d0cb}.sp-actions{align-items:baseline;gap:12px;display:flex}.sp-saved{font-size:var(--text-xs);color:#bbb}@media (width<=880px){.tools-sidebar{border-bottom:1px solid #d4d0cb;width:100%;margin-bottom:24px;padding-bottom:12px;position:static}.tools-nav{flex-flow:wrap;gap:4px 16px;position:static}.tools-nav-item{text-align:left}}@media (width<=640px){.page{padding:48px 20px;overflow-x:hidden}.tools-column{padding:48px 20px}.header-top h1{font-size:1.5rem}.avatar{width:64px;height:64px}.projects-grid{grid-template-columns:1fr}.rec-tooltip{display:none}.qr-main,.qr-vcard-grid,.qr-color-row,.sp-find-row{grid-template-columns:1fr}}
