.site-footer[data-astro-cid-gcn2mc3v]{padding:24px 24px calc(20px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--border-color);background:var(--background);text-align:center;color:var(--cv-text-muted);font-size:var(--cv-fs-meta);line-height:var(--cv-lh-base)}.site-footer__langs[data-astro-cid-gcn2mc3v]{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 14px;margin:0 0 14px}.site-footer__langs[data-astro-cid-gcn2mc3v] a[data-astro-cid-gcn2mc3v]{color:var(--cv-text-muted);text-decoration:none}.site-footer__langs[data-astro-cid-gcn2mc3v] a[data-astro-cid-gcn2mc3v]:hover{color:var(--cv-text-primary)}.site-footer__langs[data-astro-cid-gcn2mc3v] a[data-astro-cid-gcn2mc3v][aria-current=page]{color:var(--cv-text-primary);font-weight:600}.site-footer__updated[data-astro-cid-gcn2mc3v]{margin:0;font-variant-numeric:tabular-nums lining-nums}@media (max-width: 600px){.site-footer[data-astro-cid-gcn2mc3v]{padding:18px 16px calc(14px + env(safe-area-inset-bottom,0px));font-size:var(--cv-fs-caption)}.site-footer__langs[data-astro-cid-gcn2mc3v]{display:none}}@media print{.site-footer[data-astro-cid-gcn2mc3v]{display:none}}:root{--primary-color: #333333;--text-color: #333333;--light-text: #666666;--background: #ffffff;--card-bg: #ffffff;--link-color: #1a5490;--border-color: #e5e5e5;--header-line-color: #999999;--tag-text: #555555;--hover-bg: #f8f8f8;--focus-ring: #1a5490;--cv-font-body: "Source Serif 4", Georgia, "Times New Roman", serif;--cv-fs-caption: .75rem;--cv-fs-meta: .8125rem;--cv-fs-small: .875rem;--cv-fs-date: var(--cv-fs-small);--cv-fs-body: 1rem;--cv-fs-copy: clamp(.875rem, .82rem + .2vw, .9375rem);--cv-fs-entry-role: clamp(.875rem, .8rem + .25vw, .9375rem);--cv-fs-entry-title: clamp(.9375rem, .85rem + .25vw, 1rem);--cv-fs-h2: clamp(1rem, .9rem + .25vw, 1.0625rem);--cv-fs-h1: clamp(1.375rem, 1.05rem + 1.1vw, 2rem);--cv-fs-dialog-title: 1.25rem;--cv-fs-dialog-title-mobile: 1.125rem;--cv-fs-dialog-copy: 1rem;--cv-fs-dialog-copy-mobile: .9375rem;--cv-dialog-backdrop: rgba(17, 24, 39, .55);--cv-dialog-radius: 14px;--cv-dialog-shadow: 0 24px 72px rgba(17, 24, 39, .22);--cv-lh-heading: 1.35;--cv-lh-tight: 1.4;--cv-lh-meta: 1.5;--cv-lh-base: 1.6;--cv-lh-copy: 1.7;--cv-lh-prose: 1.75;--cv-lh-loose: 1.8;--cv-text-primary: var(--text-color);--cv-text-secondary: #555555;--cv-text-muted: var(--light-text);--cv-text-subtle: #777777}html[lang=zh-CN]{--cv-font-body: "Source Serif 4", "Noto Serif SC", serif}html[lang=zh-TW],html[lang=zh-HK]{--cv-font-body: "Source Serif 4", "Noto Serif TC", serif}html[lang=ko]{--cv-font-body: "Source Serif 4", "Noto Serif KR", serif}html[lang=ja]{--cv-font-body: "Source Serif 4", "Noto Serif JP", "Hiragino Mincho ProN", "Yu Mincho", serif}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;font-size:100%;-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;padding:0;padding-bottom:env(safe-area-inset-bottom,0px);background:var(--background);color:var(--cv-text-primary);font-size:var(--cv-fs-body);line-height:var(--cv-lh-base);font-family:var(--cv-font-body);overflow-x:hidden;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.skip-link{position:absolute;top:-100px;left:8px;padding:8px 16px;background:var(--primary-color);color:var(--background);z-index:200;border-radius:4px;font-size:var(--cv-fs-small);text-decoration:none}.skip-link:focus{top:8px;opacity:1}a:focus-visible,button:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px;border-radius:2px}a:focus:not(:focus-visible),button:focus:not(:focus-visible){outline:none}a{text-decoration:none;transition:color .15s ease}a:hover{color:#123e6b}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cv-toolbar{position:fixed;top:14px;right:14px;z-index:100;display:flex;align-items:center;gap:2px;padding:4px 6px;border:1px solid var(--border-color);border-radius:999px;background:#ffffffeb;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font-size:var(--cv-fs-caption);line-height:1}.cv-toolbar button,.cv-toolbar-save,.cv-lang-label{border:0;background:transparent;color:var(--cv-text-muted);font:inherit;padding:5px 7px;border-radius:999px;cursor:pointer}.cv-toolbar button:hover,.cv-toolbar-save:hover,.cv-lang:hover .cv-lang-label{color:var(--cv-text-primary);background:#f1f5f9}.cv-toolbar button:focus-visible,.cv-toolbar-save:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.cv-lang:has(.cv-lang-select:focus-visible) .cv-lang-label{outline:2px solid var(--focus-ring);outline-offset:2px}.cv-lang{position:relative;display:inline-flex;align-items:center}.cv-lang-label{display:inline-flex;align-items:center;gap:6px;pointer-events:none}.cv-lang-label:after{content:"";width:6px;height:6px;margin-top:-2px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg)}.cv-lang-select{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;font-size:16px}.cv-lang-fallback{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px 8px;max-width:280px;padding:0 6px;color:var(--cv-text-muted);font-size:var(--cv-fs-caption)}.cv-lang-fallback a{color:inherit;text-decoration:none}.cv-lang-fallback a:hover{color:var(--cv-text-primary)}.cv-toolbar-divider{width:1px;height:14px;margin:0 2px;background:var(--border-color)}@media (max-width: 1099px){body{padding-bottom:calc(72px + env(safe-area-inset-bottom,0px))}.cv-toolbar{position:fixed;top:auto;right:12px;bottom:12px;width:fit-content;max-width:calc(100% - 24px);margin:0;padding:5px 6px;background:#fff;box-shadow:0 4px 18px #00000014}.cv-lang-label,.cv-toolbar button,.cv-toolbar-save{min-height:44px;padding:0 12px;font-size:var(--cv-fs-small)}.cv-lang-fallback{min-height:44px;max-width:220px;font-size:var(--cv-fs-small)}.cv-toolbar-save{display:inline-flex;align-items:center;justify-content:center}}@media print{.cv-toolbar{display:none!important}}.icon{width:14px;height:14px;vertical-align:-.125em;display:inline-block;flex-shrink:0}@media print{body{background:#fff}.skip-link{display:none!important}}@media (hover: none),(pointer: coarse){a:focus,a:focus-visible,button:focus,button:focus-visible,select:focus,select:focus-visible,dialog:focus,dialog:focus-visible,[tabindex]:focus,[tabindex]:focus-visible{outline:none}.cv-toolbar button:focus,.cv-toolbar button:focus-visible,.cv-toolbar-save:focus,.cv-toolbar-save:focus-visible,.cv-lang:focus-within .cv-lang-label,.cv-lang:has(.cv-lang-select:focus-visible) .cv-lang-label,.cv-lang:has(.cv-lang-select:focus) .cv-lang-label{outline:none}}body{font-family:var(--cv-font-body);background:var(--background);color:var(--cv-text-primary);font-size:var(--cv-fs-body);line-height:var(--cv-lh-base)}.container{max-width:880px;margin:40px auto;padding:0 40px}header{text-align:center;margin-bottom:32px;padding-bottom:16px}h1{font-size:var(--cv-fs-h1);font-weight:700;margin:0 0 6px;letter-spacing:.08em}.tagline{text-align:center;font-size:var(--cv-fs-meta);letter-spacing:.08em;color:var(--cv-text-muted);margin:0 0 4px}.contact-info{display:flex;justify-content:center;flex-wrap:wrap;gap:20px;margin-top:8px;font-size:var(--cv-fs-small);color:var(--cv-text-muted)}.contact-item a{color:var(--link-color);text-decoration:none;overflow-wrap:anywhere}.contact-item a:hover{color:#123e6b}.contact-item:not(:last-child):after{content:"·";margin-left:12px;color:var(--cv-text-muted)}.personal-line{text-align:center;font-size:var(--cv-fs-caption);color:var(--cv-text-muted);margin-top:6px}.entry-header.entry-header--stacked{display:block}.entry-meta{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 12px;margin-top:2px}.entry-role{font-size:var(--cv-fs-entry-role);font-weight:600;color:var(--cv-text-secondary);letter-spacing:.01em;line-height:var(--cv-lh-meta)}.entry-summary{font-size:var(--cv-fs-copy);color:var(--cv-text-secondary);margin:0;line-height:var(--cv-lh-copy)}section{margin-bottom:32px}.container>section:last-of-type{margin-bottom:24px}h2{font-size:var(--cv-fs-h2);font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin:0 0 10px;padding-bottom:4px;border-bottom:1px solid rgba(26,84,144,.25);font-family:var(--cv-font-body)}.entry{margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--border-color)}.entry:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.entry-header{display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:8px}.entry-org{min-width:0;font-weight:600;font-size:var(--cv-fs-entry-title);color:var(--cv-text-primary);overflow-wrap:anywhere;text-wrap:balance}.entry-date{flex-shrink:0;font-size:var(--cv-fs-date);font-weight:500;color:var(--cv-text-secondary);font-variant-numeric:tabular-nums lining-nums;letter-spacing:.01em;line-height:var(--cv-lh-meta);white-space:nowrap}.entry-major{font-size:var(--cv-fs-copy);color:var(--cv-text-primary);font-weight:500;margin-top:2px}.entry-desc{font-size:var(--cv-fs-copy);color:var(--cv-text-primary);margin:6px 0 0;line-height:var(--cv-lh-copy)}.entry-title-group{display:flex;align-items:center;gap:8px}.project-entry{margin-bottom:24px;padding-bottom:20px;border-bottom:1px solid var(--border-color);scroll-margin-top:24px;cursor:pointer}.project-entry:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.project-name{min-width:0;font-weight:600;font-size:var(--cv-fs-entry-title);color:var(--cv-text-primary);overflow-wrap:anywhere;text-wrap:balance}h3.entry-org,h3.project-name{margin:0}.project-meta{font-size:var(--cv-fs-meta);color:var(--cv-text-muted);margin:8px 0;overflow-wrap:anywhere}.project-entry>.project-meta{display:none}.project-meta a{color:var(--link-color);text-decoration:none}.project-summary{margin:8px 0 0;font-size:var(--cv-fs-copy);color:var(--cv-text-secondary);line-height:var(--cv-lh-copy)}.project-name-button{display:block;width:100%;padding:0;border:0;background:none;color:inherit;font:inherit;font-weight:inherit;text-align:left;text-wrap:balance;overflow-wrap:anywhere;cursor:pointer}.project-name-button:hover{color:var(--link-color)}.project-name-button:focus-visible{outline:2px solid var(--link-color);outline-offset:2px;border-radius:2px}.project-more{display:inline-flex;align-items:center;gap:6px;margin-top:6px;padding:0;border:0;background:none;color:var(--link-color);font:inherit;font-size:var(--cv-fs-copy);line-height:var(--cv-lh-copy);cursor:pointer}.project-more__icon{width:1em;height:1em;flex-shrink:0}.project-more:hover{text-decoration:underline}.project-more:focus-visible{outline:2px solid var(--link-color);outline-offset:2px}.project-dialog{width:min(92vw,660px);max-width:none;max-height:none;margin:auto;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;overflow:visible;cursor:auto;font-family:var(--cv-font-body);font-optical-sizing:auto;text-autospace:normal;line-break:strict}.project-dialog::backdrop{background:var(--cv-dialog-backdrop);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.project-dialog__panel{display:flex;flex-direction:column;max-height:84vh;max-height:84dvh;border:1px solid var(--border-color);border-radius:var(--cv-dialog-radius);background:#fff;box-shadow:var(--cv-dialog-shadow);overflow:hidden}.project-dialog__header{position:relative;flex-shrink:0;padding:20px 72px 18px 30px;border-bottom:1px solid var(--border-color);background:#fff}.project-dialog__head{display:flex;align-items:center;gap:12px}.project-dialog__intro{padding-bottom:18px;margin-bottom:20px;border-bottom:1px solid var(--border-color)}.project-dialog__meta{display:flex;flex-direction:column;align-items:flex-start;gap:6px}.project-dialog__meta-primary{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px}.project-dialog__owner{color:var(--cv-text-primary);font-weight:500;white-space:normal}.project-dialog__tags{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px}.project-dialog__meta .project-meta-tag{margin-right:0}.project-dialog__note{color:var(--cv-text-muted);font-size:var(--cv-fs-meta);line-height:var(--cv-lh-tight);letter-spacing:.01em}.project-dialog__meta .project-meta-link{margin-left:0}.project-dialog__intro .project-meta{margin:0 0 10px;font-size:var(--cv-fs-meta);letter-spacing:.01em;line-height:var(--cv-lh-base);text-autospace:normal}.project-dialog__date{font-size:var(--cv-fs-meta);font-weight:500;color:var(--cv-text-muted);font-variant-numeric:tabular-nums lining-nums;letter-spacing:.01em;white-space:nowrap}.project-dialog .project-meta-owner{font-weight:500;color:var(--cv-text-primary)}.project-meta-tag{display:inline-flex;align-items:center;padding:2px 7px;margin-right:4px;border-radius:4px;background:#f3f4f6;color:var(--cv-text-secondary);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Segoe UI,sans-serif;font-size:var(--cv-fs-meta);line-height:var(--cv-lh-tight);letter-spacing:.01em;vertical-align:baseline}.project-meta-link{display:inline-flex;align-items:center;gap:3px;margin-left:2px;padding:1px 7px;border:1px solid var(--border-color);border-radius:4px;color:var(--link-color);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Segoe UI,sans-serif;font-size:var(--cv-fs-meta);line-height:var(--cv-lh-tight);text-decoration:none;vertical-align:baseline;white-space:nowrap}.project-meta-link:hover{background:#f8fafc;border-color:#1a549059}@media (min-width: 601px){.project-dialog__meta .project-meta-link{padding:0;border:0;border-radius:0}.project-dialog__meta .project-meta-link:hover{background:none;text-decoration:underline;text-underline-offset:3px}}.project-meta-link:focus-visible{outline:2px solid var(--link-color);outline-offset:2px}.project-meta-link__icon{width:12px;height:12px;flex-shrink:0}.project-meta-note{color:var(--cv-text-muted);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Segoe UI,sans-serif;font-size:var(--cv-fs-meta);line-height:var(--cv-lh-tight);letter-spacing:.01em;white-space:nowrap;vertical-align:baseline}.project-meta-note:before{content:"·";margin:0 4px 0 2px;color:#bbb}.project-dialog__title{min-width:0;margin:0;font-size:var(--cv-fs-dialog-title);font-weight:600;line-height:var(--cv-lh-heading);color:var(--cv-text-primary);overflow-wrap:break-word;text-wrap:pretty}.project-dialog__logo{display:block;flex-shrink:0;height:1.15em;width:auto;max-width:9em;object-fit:contain}.project-dialog__logo-separator{display:block;flex-shrink:0;width:1px;height:1.35em;background:currentColor;opacity:.22}.project-dialog__summary{margin:16px 0 0;padding:2px 0 2px 14px;border-left:2px solid #dbe3ea;font-size:var(--cv-fs-dialog-copy);color:var(--cv-text-secondary);letter-spacing:.01em;line-height:var(--cv-lh-prose);text-wrap:pretty;overflow-wrap:break-word;widows:2;orphans:2}.project-dialog__content{padding:26px 30px 32px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;min-height:0}.project-dialog__content::-webkit-scrollbar{width:10px;height:10px}.project-dialog__content::-webkit-scrollbar-track{background:transparent}.project-dialog__content::-webkit-scrollbar-thumb{background-color:#cbd5e1;background-clip:padding-box;border:2px solid transparent;border-radius:999px}.project-dialog__content::-webkit-scrollbar-thumb:hover{background-color:#94a3b8}.project-dialog__content::-webkit-scrollbar-corner{background:transparent}@supports (-moz-appearance: none){.project-dialog__content{scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}}.project-dialog__content>.project-points{margin-top:0}.project-dialog .project-points{padding-left:0}.project-dialog .project-points li{position:relative;padding-left:1.35em;list-style:none;font-size:var(--cv-fs-dialog-copy);letter-spacing:.01em;line-height:var(--cv-lh-prose);margin-bottom:18px;text-wrap:pretty;overflow-wrap:break-word;widows:2;orphans:2}.project-dialog .project-points li>strong{display:block;margin-bottom:4px;line-height:var(--cv-lh-meta);color:var(--cv-text-primary)}.project-dialog .project-points li:before{content:"";position:absolute;top:.68em;left:0;width:5px;height:5px;border-radius:50%;background:#9ca3af}.project-dialog .project-points li:last-child{margin-bottom:0}.project-dialog__figure{margin:18px 0;border:1px solid var(--border-color);border-radius:8px;background:#fafafa;overflow:hidden}.project-dialog__figure img{display:block;width:100%;height:auto}.project-dialog__figure figcaption{padding:8px 12px;border-top:1px solid var(--border-color);font-size:var(--cv-fs-meta);line-height:var(--cv-lh-meta);color:var(--cv-text-muted)}.project-dialog__close{position:absolute;top:12px;right:16px;z-index:1;display:grid;place-items:center;width:40px;height:40px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--cv-text-muted);font-size:26px;line-height:1;cursor:pointer}.project-dialog__close:hover{background:var(--hover-bg);color:var(--cv-text-primary)}.project-dialog__close:focus-visible{outline:2px solid var(--link-color);outline-offset:2px}body.project-modal-open{overflow:hidden}.project-abstract{font-size:var(--cv-fs-copy);color:var(--cv-text-primary);margin:10px 0;padding-left:12px;border-left:2px solid var(--border-color);line-height:var(--cv-lh-copy)}.project-points{margin:8px 0 0;padding-left:18px}.project-points li{font-size:var(--cv-fs-copy);margin-bottom:8px;color:var(--cv-text-primary);line-height:var(--cv-lh-copy)}.project-points li::marker{font-size:.7em}.skills-row{margin-bottom:8px;font-size:var(--cv-fs-copy);line-height:var(--cv-lh-copy);display:flex;flex-wrap:wrap;gap:4px}.skills-label{font-weight:600;color:var(--cv-text-primary)}.skills-content{flex:1 1 0;min-width:0;color:var(--cv-text-primary)}.award-row{display:flex;justify-content:space-between;align-items:baseline;font-size:var(--cv-fs-copy);line-height:var(--cv-lh-copy);margin-bottom:8px}.award-name{color:var(--cv-text-primary);font-size:var(--cv-fs-copy)}.award-date{flex-shrink:0;font-size:var(--cv-fs-date);font-weight:500;color:var(--cv-text-secondary);font-variant-numeric:tabular-nums lining-nums;letter-spacing:.01em;line-height:var(--cv-lh-meta);white-space:nowrap}.project-section-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:6px 16px;margin:0 0 12px;padding:0 0 5px;border-bottom:1px solid rgba(26,84,144,.25)}.project-section-head h2{flex:1;margin:0;padding:0;border-bottom:0}.project-github-link{display:inline-flex;align-items:center;gap:5px;margin-left:auto;color:var(--link-color);font-size:var(--cv-fs-meta);line-height:var(--cv-lh-meta);text-decoration:none;white-space:nowrap}.project-github-link__icon{width:14px;height:14px;flex-shrink:0}.project-github-link:hover{text-decoration:underline}.project-github-link:focus-visible{outline:2px solid var(--link-color);outline-offset:2px;border-radius:2px}.project-index-title{margin:24px 0 10px;font-size:var(--cv-fs-meta);font-weight:600;letter-spacing:.04em;color:var(--cv-text-muted)}.project-index{margin:0;padding:0;list-style:none}.project-index li{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:8px;padding:0;font-size:var(--cv-fs-copy);line-height:var(--cv-lh-copy);color:var(--cv-text-muted)}.project-index li+li{margin-top:10px}.project-index-name{order:1;font-weight:600;font-size:var(--cv-fs-copy);color:var(--cv-text-primary)}.project-index-name a{color:inherit;text-decoration:none}.project-index-name a:after{content:"↗";margin-left:2px;font-size:.78em;color:var(--cv-text-muted)}.project-index-name a:hover{color:var(--link-color)}.project-index-name a:hover:after{color:currentColor}.project-index-date{order:2;color:var(--cv-text-muted);font-size:var(--cv-fs-meta);font-variant-numeric:tabular-nums;white-space:nowrap}.project-index-date:before{content:"·";margin-right:6px;color:#bbb}.project-index-desc{order:3;flex-basis:100%;color:var(--cv-text-muted)}.entry-figure{margin:12px 0 0;padding:10px;border:1px solid var(--border-color);border-radius:4px;background:#fff}.entry-figure__svg svg{display:block;width:100%;height:auto}.entry-figure__trigger{position:relative;display:block;width:100%;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:zoom-in}.entry-figure__trigger:focus-visible{outline:2px solid var(--link-color);outline-offset:2px}.entry-figure__overlay{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:flex-end;padding:8px;border-radius:2px;box-shadow:inset 0 0 0 1px #1a549073;opacity:0;pointer-events:none;transition:opacity .14s ease}.entry-figure__hint{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid rgba(26,84,144,.35);border-radius:999px;background:#fffffff5;color:var(--link-color);font-size:var(--cv-fs-meta);letter-spacing:.02em;box-shadow:0 2px 10px #1a54901f;transform:translateY(4px);transition:transform .14s ease}.entry-figure__hint-icon{width:14px;height:14px;flex-shrink:0}@media (hover: hover) and (pointer: fine){.entry-figure__trigger:hover .entry-figure__overlay{opacity:1}.entry-figure__trigger:hover .entry-figure__hint{transform:translateY(0)}}.entry-figure__trigger:focus-visible .entry-figure__overlay{opacity:1}.entry-figure__trigger:focus-visible .entry-figure__hint{transform:translateY(0)}@media (hover: none),(pointer: coarse){.entry-figure__overlay{box-shadow:none;opacity:1}.entry-figure__hint{padding:4px 10px;font-size:var(--cv-fs-caption);transform:none}}@media (prefers-reduced-motion: reduce){.entry-figure__overlay,.entry-figure__hint{transition:none}.entry-figure__hint{transform:none}}.diagram-dialog{width:min(96vw,1900px);max-width:none;max-height:92vh;margin:auto;padding:0;border:1px solid var(--border-color);border-radius:6px;background:#fff;overflow:hidden}.diagram-dialog::backdrop{background:#1118278c}.diagram-dialog__body{max-height:92vh;padding:16px;overflow:auto;background:#fff}.diagram-dialog__body svg{display:block;width:100%;min-width:1100px;height:auto}.entry-figure__svg svg text,.entry-figure__svg svg tspan,.diagram-dialog__body svg text,.diagram-dialog__body svg tspan{fill:#444!important}.diagram-dialog__close{position:absolute;top:10px;right:10px;z-index:1;display:grid;place-items:center;width:32px;height:32px;padding:0;border:1px solid var(--border-color);border-radius:50%;background:#ffffffeb;color:var(--cv-text-secondary);font-size:20px;line-height:1;cursor:pointer}.diagram-dialog__close:hover{color:#123e6b;border-color:#1a549073}.diagram-dialog__close:focus-visible{outline:2px solid var(--link-color);outline-offset:2px}body.diagram-open{overflow:hidden}@media (min-width: 1200px){.container{max-width:960px}}@media (min-width: 1400px){.container{max-width:1040px}}@media (max-width: 768px){.container{padding:0 30px}.entry-header{flex-direction:column;align-items:stretch;gap:2px}.education-entry .entry-header{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:2px 12px}.award-row{gap:8px}}@media (max-width: 600px){.container{margin:20px auto;padding:0 clamp(12px,4vw,16px)}.skills-row{display:block;margin-bottom:12px}.skills-label{display:block;margin-bottom:2px}.skills-content{word-break:keep-all}header{margin-bottom:24px;padding-bottom:12px}.contact-info{gap:4px 14px;margin-top:6px;font-size:var(--cv-fs-meta)}.contact-item:not(:last-child):after{content:none}section{margin-bottom:24px}.entry{margin-bottom:14px;padding-bottom:14px}.project-entry{margin-bottom:16px;padding-bottom:14px}.project-abstract{padding-left:10px}.project-dialog{width:100vw;max-width:none;height:100vh;height:100dvh;max-height:none;margin:0;border:0;border-radius:0}.project-dialog__panel{height:100%;max-height:none;border:0;border-radius:0;box-shadow:none}.project-dialog__header{padding:calc(18px + env(safe-area-inset-top,0px)) calc(64px + env(safe-area-inset-right,0px)) 14px calc(18px + env(safe-area-inset-left,0px))}.project-dialog__content{padding:16px calc(18px + env(safe-area-inset-right,0px)) calc(24px + env(safe-area-inset-bottom,0px)) calc(18px + env(safe-area-inset-left,0px));scrollbar-gutter:auto}.project-dialog__intro{padding-bottom:14px;margin-bottom:16px}.project-dialog__title{font-size:var(--cv-fs-dialog-title-mobile)}.project-dialog__summary{margin-top:12px}.project-dialog__summary,.project-dialog .project-points li{font-size:var(--cv-fs-dialog-copy-mobile)}.project-dialog__close{top:calc(8px + env(safe-area-inset-top,0px));right:calc(8px + env(safe-area-inset-right,0px));width:44px;height:44px}.project-dialog__meta .project-meta-link{min-height:44px;padding:3px 8px}.project-points{padding-left:16px}.diagram-dialog{width:96vw;max-height:90vh;max-height:90dvh}.diagram-dialog__body{max-height:90vh;max-height:90dvh;padding-top:60px}.diagram-dialog__close{top:8px;right:8px;width:44px;height:44px;background:#fffffff5;box-shadow:0 2px 10px #11182729}.project-dialog[open]{animation:project-dialog-in .22s ease-out}@keyframes project-dialog-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.award-row{flex-direction:column;align-items:flex-start;gap:2px;margin-bottom:16px}.award-date{font-size:var(--cv-fs-meta);color:var(--cv-text-subtle)}}@media (max-width: 360px){.project-dialog__logo,.project-dialog__logo-separator{display:none}}@media (max-width: 600px) and (prefers-reduced-motion: reduce){.project-dialog[open]{animation:none}}@media (max-height: 640px) and (min-width: 601px){.project-dialog__panel{max-height:92vh;max-height:92dvh}.project-dialog__header{padding:14px 64px 12px 18px}.project-dialog__content{padding:14px 18px calc(18px + env(safe-area-inset-bottom,0px))}.project-dialog__intro{padding-bottom:16px;margin-bottom:16px}}@media (pointer: coarse){.diagram-dialog__close{right:calc(8px + env(safe-area-inset-right,0px));width:44px;height:44px;background:#fffffff5;box-shadow:0 2px 10px #11182729}.diagram-dialog__body{padding-top:60px}.project-dialog__close{width:44px;height:44px}.project-dialog__meta .project-meta-link{min-height:44px;padding:3px 8px}}@media (max-width: 600px),(max-height: 640px){.project-dialog__content{padding-bottom:calc(24px + env(safe-area-inset-bottom,0px) + 2rem)}}@media print{@page{size:A4;margin:1.2cm 1.5cm}html{font-size:10pt}body{font-size:9pt;line-height:1.45;color:#000}.container{margin:0;padding:0;max-width:100%}a{color:#000;text-decoration:none}header{margin-bottom:14px;padding-bottom:10px}h1{font-size:16pt}.tagline{font-size:8.5pt;margin-bottom:2px}.contact-info{font-size:8pt;gap:0;margin-top:6px}.contact-item:not(:last-child):after{margin:0 10px}section{margin-bottom:14px;break-inside:auto}h2{font-size:9.5pt;border-bottom-color:#bbb;margin-bottom:8px;padding-bottom:3px;break-after:avoid}.entry-org,.project-name{font-size:9.5pt}.entry-date{font-size:8pt}.entry-major,.entry-role{font-size:8.5pt}.entry-summary{font-size:8.5pt;margin-top:3px}.project-meta{font-size:8pt}.entry{break-inside:auto;margin-bottom:10px;padding-bottom:8px}.entry-figure{break-inside:avoid;margin-top:8px;padding:6px}.entry-figure__trigger{cursor:default}.entry-figure__overlay{display:none}.diagram-dialog{display:none!important}.project-entry{break-inside:avoid;margin-bottom:10px;padding-bottom:8px}.entry-header,.project-meta{break-after:avoid}.project-abstract{margin:6px 0;font-size:9pt}.project-points{margin-top:4px}.project-points li{margin-bottom:3px;font-size:9pt}.entry-desc{font-size:9pt;margin-top:4px}.skills-row,.award-row{margin-bottom:3px;font-size:9pt}.award-name{font-size:9pt}.award-date{font-size:8pt}p,li{widows:3;orphans:3}}
