@font-face{font-family:focusFont;src:url(../media/focus_regular_subset-s.p.10iz5_2~71g_5.woff)format("woff");font-display:block;font-weight:400;font-style:normal}@font-face{font-family:focusFont;src:url(../media/focus_bold_subset-s.p.0erfcydp110--.woff)format("woff");font-display:block;font-weight:700;font-style:normal}@font-face{font-family:focusFont Fallback;src:local(Arial);ascent-override:93.64%;descent-override:20.24%;line-gap-override:9.34%;size-adjust:102.19%}.focusfont_db6c86e2-module__JEPgPq__className{font-family:focusFont,focusFont Fallback,-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,Noto Sans SC,system-ui,sans-serif}.focusfont_db6c86e2-module__JEPgPq__variable{--font-focus:"focusFont", "focusFont Fallback", -apple-system, BlinkMacSystemFont, PingFang SC, Microsoft YaHei, Noto Sans SC, system-ui, sans-serif}
:root{--color-bg-body:#f8f6ef;--color-bg-card:#fffdf6;--color-paper-wash:#fffdf6e0;--color-text-primary:#111;--color-text-secondary:#3f3f3f;--color-text-tertiary:#77736b;--color-accent:#111;--color-accent-hover:#000;--color-border:#1f1f1f;--color-border-soft:#11111138;--color-tape:#fff8b9b8;--spacing-xs:.5rem;--spacing-sm:1rem;--spacing-md:1.5rem;--spacing-lg:1rem;--spacing-xl:1.5rem;--container-width:900px;--header-height:60px;--radius-sm:13px 16px 12px 15px / 14px 12px 16px 11px;--radius-md:18px 13px 20px 12px / 11px 18px 13px 20px;--font-system:-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", system-ui, sans-serif;--font-focus-fallback:var(--font-system);--font-heading:focusFont, "focusFont Fallback", var(--font-system);--font-body:var(--font-system);--sketch-border:1.5px solid var(--color-border);--sketch-border-soft:1px solid var(--color-border-soft);--sketch-shadow:7px 8px 0 #11111114;--paper-shadow:0 18px 40px #11111114, 6px 7px 0 #11111112}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;font-size:16px}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{font-family:var(--font-body);background-color:var(--color-bg-body);color:var(--color-text-primary);-webkit-font-smoothing:antialiased;background-image:radial-gradient(#11111112 .7px,#0000 .7px),repeating-linear-gradient(0deg,#11111106 0 1px,#0000 1px 29px),repeating-linear-gradient(90deg,#11111105 0 1px,#0000 1px 31px);background-size:18px 18px,100% 29px,31px 100%;line-height:1.7;overflow-x:hidden}.app-font-root{font-family:var(--font-body)}.app-font-root :where(h1,h2,h3,h4,.btn,.btn-text,.project-period,.exp-period,.edu-period,.role,.tag-award,.tech-tag,.skill-tags span,.edu-body strong,.project-detail-kicker,.detail-text h4,.contact-item){font-family:var(--font-heading);word-spacing:-.35em}.app-font-root :where(.btn,.btn-text,.header-main h3,.project-period,.exp-period,.edu-period,.role,.tag-award,.tech-tag,.skill-tags span,.edu-body strong,.project-detail-kicker,.detail-text h4,.contact-item){word-spacing:-2.55em}html[lang=en] .hero-name,html[lang=en] :where(.section-title,.highlight-card h3,.experience-header h3,.edu-header h3,.skill-category h3,.edu-body strong){word-spacing:-2.7em}html[lang=en] .hero-tagline{word-spacing:-.25em}html[lang=en] :where(.btn,.project-period,.exp-period,.edu-period,.role,.tag-award,.tech-tag,.skill-tags span,.project-detail-kicker,.detail-text h4){word-spacing:-2.7em}html[lang=en] .edu-body strong{margin-right:.25rem}html[lang=en] .header-main h3{word-spacing:-2.72em}html[lang=en] .btn-text{word-spacing:-3.05em}img,video{max-width:100%;height:auto;display:block}[hidden]{display:none!important}a{color:inherit;border-bottom:1px solid var(--color-text-secondary);text-decoration-skip-ink:auto;text-decoration:none;transition:all .2s}a:hover{color:var(--color-accent);border-bottom-color:var(--color-accent);background-image:linear-gradient(#0000 62%,#1111111c 62%)}button{cursor:pointer;font-family:inherit}:where(a,button,[role=button],.dot,.btn-text):focus-visible{outline:2px dashed var(--color-accent);outline-offset:4px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}h1,h2,h3,h4{font-family:var(--font-heading);color:var(--color-text-primary);font-weight:700;line-height:1.2}.visually-hidden{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.container{width:100%;max-width:var(--container-width);padding:0 var(--spacing-sm);background-color:#0000;border:none;margin:0 auto}.section-padding{border-bottom:none;padding:.9rem 0}@supports (content-visibility:auto){main>section:not(.hero-section):not(.highlights-section):not(.contact-section){content-visibility:auto;contain-intrinsic-size:auto 720px}.project-card,.experience-card,.education-card,.skill-category{content-visibility:auto;contain-intrinsic-size:auto 260px}}@media (min-width:768px){.section-padding{padding:1.15rem 0}.container{padding:0 var(--spacing-xl)}}main{padding:1rem 0 0}.hero-section .container,.section-padding .container{background:linear-gradient(105deg, #ffffff9e, transparent 34%), var(--color-paper-wash);border:var(--sketch-border);border-radius:var(--radius-md);box-shadow:var(--paper-shadow);padding-top:var(--spacing-md);padding-bottom:var(--spacing-md);position:relative}.hero-section .container:before,.section-padding .container:before{content:"";background:repeating-linear-gradient(90deg, transparent 0 8px, #1111110f 8px 9px), var(--color-tape);pointer-events:none;border:1px solid #11111129;width:96px;height:24px;position:absolute;top:-12px;left:50%;transform:translate(-50%)rotate(-2deg)}.section-padding:nth-of-type(2) .container{transform:rotate(-.45deg)}.section-padding:nth-of-type(3) .container{transform:rotate(.35deg)}.section-padding:nth-of-type(4) .container{transform:rotate(-.25deg)}.section-padding:nth-of-type(5) .container{transform:rotate(.42deg)}.section-padding:nth-of-type(6) .container{transform:rotate(-.35deg)}.section-padding:nth-of-type(7) .container{transform:rotate(.24deg)}@media (min-width:960px){main>section:nth-of-type(2) .container{margin-left:calc((100vw - var(--container-width)) / 2 - 80px)}main>section:nth-of-type(5) .container{margin-left:calc((100vw - var(--container-width)) / 2 - 26px)}main>section:nth-of-type(4) .container,main>section:nth-of-type(6) .container{margin-left:calc((100vw - var(--container-width)) / 2 + 26px)}}@media (max-width:767px){main{padding-top:0}.hero-section .container,.section-padding .container{width:calc(100% - 2rem);padding-left:clamp(.875rem,4vw,1.125rem);padding-right:clamp(.875rem,4vw,1.125rem);transform:none!important}.highlights-section .container{padding-left:0;padding-right:0}}.bg-light{background-color:#0000}.btn{border-radius:var(--radius-sm);border:var(--sketch-border);background:0 0;border-bottom:none;justify-content:center;align-items:center;padding:.6rem 1.2rem;font-size:.95rem;font-weight:700;text-decoration:none;transition:color .2s,background-color .2s,transform .2s,box-shadow .2s;display:inline-flex;box-shadow:3px 3px #11111114}.btn-primary{color:var(--color-accent);border:2px solid var(--color-accent);background-color:#0000;transform:rotate(-.45deg)}.btn-primary:hover{background-color:var(--color-accent);color:var(--color-bg-card);transform:translateY(-2px);box-shadow:5px 5px #11111121}.btn-primary:active{transform:translateY(0)}.btn-outline{border:var(--sketch-border);color:var(--color-text-secondary);background-color:#0000}.btn-outline:hover{border-color:var(--color-accent);color:var(--color-accent);background:repeating-linear-gradient(-8deg,#0000 0 6px,#11111114 6px 8px);transform:rotate(.35deg)translateY(-1px)}.btn-sm{padding:.4rem .8rem;font-size:.85rem}.btn-reset{appearance:none}.hero-section{padding-top:var(--spacing-sm);border-bottom:none;padding-bottom:.9rem;animation:1s ease-out fadeIn}.hero-content{gap:var(--spacing-lg);text-align:center;flex-direction:column-reverse;align-items:center;display:flex}.profile-pic{object-fit:cover;border:2px solid var(--color-text-primary);background:var(--color-bg-card);width:150px;height:150px;box-shadow:var(--sketch-shadow);border-radius:48% 52% 45% 55%/53% 42% 58% 47%;padding:6px;transform:rotate(1.4deg)}.hero-image picture{display:block}.hero-name{margin-bottom:var(--spacing-xs);letter-spacing:0;text-transform:none;font-size:2.5rem}.hero-tagline{color:var(--color-text-secondary);margin-bottom:var(--spacing-xs);font-size:1.1rem;font-weight:400}.hero-actions{gap:var(--spacing-sm);flex-wrap:wrap;justify-content:center;margin-top:1.25rem;display:flex}@media (max-width:480px){.hero-actions{flex-direction:column;align-items:stretch}.hero-actions .btn{width:100%}}@media (min-width:768px){.hero-content{text-align:left;flex-direction:row;justify-content:space-between}.hero-text{flex:1}.hero-actions{justify-content:flex-start}.profile-pic{width:200px;height:200px}}.highlights-grid{gap:var(--spacing-md);grid-template-columns:1fr;display:grid}.highlight-card{padding:var(--spacing-sm);border-radius:var(--radius-md);border:var(--sketch-border);text-align:left;background:#fffdf6bf;position:relative;transform:rotate(-.25deg);box-shadow:5px 6px #11111112}.highlight-card:nth-child(2n){transform:rotate(.25deg)}.highlights-section .container{max-width:min(1120px,100vw - 2rem);box-shadow:none;padding-top:var(--spacing-sm);padding-bottom:var(--spacing-sm);background:0 0;border:none;border-radius:0;transform:none!important}.highlights-section .container:before{display:none}.highlight-card:after{content:"";filter:drop-shadow(2px 2px #11111129);pointer-events:none;z-index:2;background:url(/assets/generated/ui-pushpin.png) 50%/contain no-repeat;width:36px;height:36px;position:absolute;top:-20px;left:50%;transform:translate(-50%)rotate(-7deg)}.highlight-card:nth-child(2):after{transform:translate(-50%)rotate(5deg)}.highlight-card:nth-child(3):after{transform:translate(-50%)rotate(-3deg)}.highlight-card h3{color:var(--color-accent);margin-bottom:var(--spacing-xs);font-size:1.1rem}.highlight-card p{color:var(--color-text-secondary);font-size:.9rem}@media (min-width:768px){.highlights-grid{grid-template-columns:1fr 1fr 1fr;align-items:start;gap:.85rem}.highlight-card{padding:var(--spacing-sm)}.highlight-card:first-child{transform:rotate(-1.1deg)translateY(8px)}.highlight-card:nth-child(2){transform:rotate(.8deg)translateY(-2px)}.highlight-card:nth-child(3){transform:rotate(-.4deg)translateY(12px)}}.section-title{margin-bottom:var(--spacing-md);border:var(--sketch-border);background:var(--color-bg-card);border-radius:999px 16px 999px 18px/18px 999px 16px;padding:.2rem .7rem;font-size:1.75rem;display:inline-block;position:relative;transform:rotate(-.35deg);box-shadow:3px 4px #1111110f}.section-title:after,.section-title:before{display:none}.projects-grid{gap:var(--spacing-md);display:grid}#projects .container{max-width:min(1320px,100vw - 1.5rem);box-shadow:none;padding-top:var(--spacing-sm);padding-bottom:var(--spacing-sm);background:0 0;border:none;border-radius:0;transform:none!important}#projects .container:before{display:none}#projects{--projects-title-offset:clamp(5.25rem, 11vw, 10.75rem);--projects-edge-padding:clamp(.5rem, 4vw, 3rem);--projects-start-padding:calc(50vw - 50% + var(--projects-title-offset))}#projects .section-title{margin-left:var(--projects-title-offset)}#projects .projects-grid{overscroll-behavior-inline:contain;scroll-snap-type:x proximity;scroll-padding-left:var(--projects-start-padding);scroll-padding-right:var(--projects-edge-padding);padding-top:1.5rem;padding-bottom:2.5rem;padding-right:var(--projects-edge-padding);padding-left:var(--projects-start-padding);-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--color-text-primary) transparent;gap:1rem;margin:-.95rem calc(50% - 50vw) -1.35rem;display:flex;overflow:auto visible}#projects .projects-grid::-webkit-scrollbar{height:10px}#projects .projects-grid::-webkit-scrollbar-track{background:#1111110f;border-radius:999px}#projects .projects-grid::-webkit-scrollbar-thumb{background:var(--color-text-primary);border:3px solid var(--color-bg-body);border-radius:999px}.project-card{border-radius:var(--radius-md);padding:var(--spacing-md);box-shadow:var(--sketch-shadow);border:var(--sketch-border);padding-bottom:var(--spacing-md);background:#fffdf6a8;margin-bottom:0;transition:transform .3s,box-shadow .3s;position:relative;transform:rotate(-.18deg)}#projects .project-card{scroll-snap-align:start;flex-direction:column;flex:0 0 clamp(360px,43vw,560px);justify-content:stretch;min-height:340px;display:flex}#projects .project-card:first-child{flex-basis:clamp(380px,45vw,600px);margin-left:0}.project-card:last-child{margin-bottom:0}.project-card:nth-child(2n){transform:rotate(.18deg)}.project-card:nth-child(3n){transform:rotate(-.55deg)}.project-card:nth-child(4n){transform:rotate(.65deg)}.project-card:before{content:"";pointer-events:none;border:1px solid #11111124;border-radius:15px 18px 13px 16px/18px 12px 17px 13px;position:absolute;inset:8px 7px 7px 9px}.project-card:hover{transform:translateY(-2px)rotate(0);box-shadow:8px 8px #1111111a}.project-header{z-index:1;grid-template-rows:auto minmax(0,1fr) auto;gap:1rem;height:100%;display:grid;position:relative}.header-top{border-bottom:1px dashed #1111112e;grid-template-columns:minmax(0,1fr) auto;align-items:flex-start;gap:1rem;padding-bottom:.9rem;display:grid}.header-main{flex-direction:column;gap:.55rem;min-width:0;display:flex}.header-main h3{letter-spacing:0;overflow-wrap:break-word;margin:0;font-size:1.42rem;line-height:1.18}.header-sub{color:var(--color-text-secondary);flex-wrap:wrap;align-items:center;gap:.45rem .55rem;font-size:.9rem;display:flex}.header-meta{text-align:right;flex-direction:column;flex-shrink:0;align-items:flex-end;gap:.55rem;max-width:10.75rem;display:flex}.header-footer{border-top:1px dashed #1111112e;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:.9rem;margin-top:auto;padding-top:.9rem;display:grid}.project-period{min-height:1.85rem;color:var(--color-text-tertiary);font-size:.82rem;font-weight:700;line-height:1.2;font-family:var(--font-heading);white-space:nowrap;background:#fffdf6b3;border:1px dashed #11111147;border-radius:999px 14px 999px 16px/16px 999px 14px;justify-content:center;align-items:center;padding:.15rem .55rem;display:inline-flex}.project-links{flex-wrap:wrap;justify-content:flex-end;gap:.5rem;display:flex}.project-links .btn-sm{text-align:center;padding:.34rem .62rem;font-size:.78rem;line-height:1.2;box-shadow:2px 2px #11111114}@media (max-width:640px){.project-header{gap:.9rem}.header-top{grid-template-columns:1fr;gap:.75rem;padding-bottom:.75rem}.header-meta{text-align:left;flex-direction:row;justify-content:space-between;align-items:flex-start;gap:.75rem;width:100%;max-width:none}.header-main h3{font-size:1.3rem;line-height:1.22}.project-links{justify-content:flex-end}.project-period{white-space:normal;text-align:left}.header-footer{grid-template-columns:1fr;align-items:start;gap:.85rem}}.role{color:var(--color-text-secondary);background:#fffdf694;border:1px dashed #1111113d;border-radius:10px 13px 9px 12px/12px 9px 13px 10px;align-items:center;padding:.03rem .42rem;font-size:.84rem;font-style:normal;font-weight:700;line-height:1.35;display:inline-flex}.role:before{content:"ROLE/";color:var(--color-text-tertiary);letter-spacing:.04em;margin-right:.28rem;font-size:.74em}.role:after{display:none}.tag-award{color:var(--color-accent);border:1px solid var(--color-border);background:0 0;border-radius:11px 9px 12px 8px/8px 12px 9px 11px;padding:.04rem .42rem;font-size:.86rem;font-weight:700;line-height:1.35;display:inline-block;transform:rotate(-.45deg)}.tag-award:before{content:"AWARD/";letter-spacing:.04em;color:var(--color-text-tertiary);margin-right:.28rem;font-size:.75em;display:inline-block}.project-summary{width:100%;color:var(--color-text-secondary);border-left:2px solid #1111113d;align-self:start;margin:0;padding:.1rem 0 .1rem .85rem;font-size:.98rem;line-height:1.75}.tech-stack{flex-wrap:wrap;align-content:start;gap:.45rem .5rem;margin:0;display:flex}.tech-tag{color:var(--color-text-secondary);font-size:.85rem;font-family:var(--font-heading);background-color:#0000;background:linear-gradient(105deg, #ffffffad, transparent 48%), var(--color-bg-card);border:1px solid #1111114d;border-radius:999px 14px 999px 16px/16px 999px 14px;padding:.05rem .45rem;font-weight:700;line-height:1.25;display:inline-block;position:relative;transform:rotate(-1.1deg);box-shadow:1.5px 1.5px #11111117,inset 0 0 0 1px #11111114}.tech-tag:nth-child(2n){transform:rotate(.9deg)}.tech-tag:before{content:"#";color:var(--color-accent);margin-right:2px}.btn-text{color:var(--color-accent);font-size:.9rem;font-weight:600;font-family:var(--font-heading);background:0 0;border:none;align-items:center;gap:4px;padding:0;display:flex}.project-header .expand-btn{white-space:nowrap;border:1px solid #0000;border-radius:999px 12px 999px 14px/14px 999px 12px;place-self:end;min-height:2.05rem;padding:.25rem .5rem}.project-header .expand-btn:hover{background:repeating-linear-gradient(-8deg,#0000 0 7px,#11111112 7px 9px);border-color:#1111113d}@media (max-width:640px){.project-header .expand-btn{justify-self:start}}.btn-text:hover .text-content{text-underline-offset:5px;-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.arrow{font-size:.7rem;transition:transform .3s;display:inline-block}.btn-text[aria-expanded=true] .arrow{transform:rotate(180deg)}.project-details{margin-top:var(--spacing-md);padding-top:var(--spacing-md);border-top:none;animation:.4s slideDown}.project-detail-modal{z-index:1900;opacity:0;pointer-events:none;background:radial-gradient(circle at 22% 16%,#fffdf6b8,#0000 28%),#f8f6efdb;justify-content:center;align-items:center;width:100vw;height:100dvh;padding:clamp(1rem,4vw,2.5rem);transition:opacity .24s;display:flex;position:fixed;inset:0}@supports ((-webkit-backdrop-filter:blur(8px)) or (backdrop-filter:blur(8px))){.project-detail-modal{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}}.project-detail-modal[aria-hidden=false]{opacity:1;pointer-events:auto}.project-detail-window{background:linear-gradient(108deg, #ffffffad, transparent 38%), var(--color-bg-card);border:var(--sketch-border);border-radius:var(--radius-md);flex-direction:column;width:min(1080px,100%);max-height:min(86vh,860px);transition:transform .24s;display:flex;position:relative;overflow:hidden;transform:translateY(12px)rotate(-.12deg);box-shadow:12px 14px #1111111a,0 24px 70px #1113}.project-detail-modal[aria-hidden=false] .project-detail-window{transform:translateY(0)rotate(-.12deg)}.project-detail-window:before{content:"";background:repeating-linear-gradient(90deg, transparent 0 8px, #1111110f 8px 9px), var(--color-tape);pointer-events:none;border:1px solid #11111129;width:118px;height:27px;position:absolute;top:-13px;left:50%;transform:translate(-50%)rotate(1.4deg)}.project-detail-toolbar{justify-content:space-between;align-items:center;gap:var(--spacing-sm);z-index:1;background:#fffdf6f5;border-bottom:1px solid #1111112e;flex:none;padding:.9rem 1rem .75rem;display:flex;position:relative}.project-detail-kicker{font-family:var(--font-heading);color:var(--color-text-secondary);border:var(--sketch-border-soft);background:var(--color-bg-card);border-radius:999px 14px 999px 16px/16px 999px 14px;padding:.08rem .5rem;font-size:1rem;font-weight:700}.project-detail-close{border:var(--sketch-border);background:var(--color-bg-card);width:2.35rem;height:2.35rem;color:var(--color-text-primary);border-radius:50% 44% 52% 48%/48% 54% 46% 52%;place-items:center;font-size:1.85rem;line-height:1;display:inline-grid;box-shadow:2px 2px #11111114}.project-detail-close:hover{transform:rotate(-2deg)translateY(-1px)}.project-detail-modal-body{overscroll-behavior:contain;padding:clamp(1rem,3vw,1.6rem);overflow:auto}.project-detail-modal-body .project-details{opacity:1;border:0;margin:0;padding:0;animation:none}.project-detail-modal-body .detail-content{gap:clamp(1rem,3vw,2rem)}.project-detail-modal-body .detail-text{min-width:0}.project-detail-modal-body .detail-text ul:last-child{margin-bottom:0}.project-detail-modal-body .carousel{align-self:start;width:100%;max-width:560px}.project-detail-modal-body .carousel-track-container{max-height:min(52vh,440px)}@media (min-width:900px){.project-detail-modal-body .detail-content{grid-template-columns:minmax(0,1.08fr) minmax(320px,.86fr)}.project-detail-modal-body .carousel{position:sticky;top:.25rem}}@media (max-width:767px){.project-detail-modal{align-items:stretch;padding:.6rem}.project-detail-window{border-radius:18px 13px 20px 12px/11px 18px 13px 20px;width:100%;max-height:calc(100dvh - 1.2rem);transform:none}.project-detail-modal[aria-hidden=false] .project-detail-window{transform:none}.project-detail-toolbar{padding:.75rem .8rem}.project-detail-kicker{font-size:.92rem}.project-detail-close{width:2.25rem;height:2.25rem;font-size:1.75rem}.project-detail-modal-body{padding:.9rem}.project-detail-modal-body .detail-content{gap:var(--spacing-md);grid-template-columns:1fr}.project-detail-modal-body .carousel{max-width:100%}.project-detail-modal-body .detail-text h4{font-size:.98rem}.project-detail-modal-body .detail-text ul{font-size:.92rem;line-height:1.7}}@media (min-width:768px){#projects .project-card:first-child{transform:rotate(-.25deg)}#projects .project-card:nth-child(2){transform:rotate(.55deg)translateY(.7rem)}#projects .project-card:nth-child(3){transform:rotate(-.65deg)translateY(1.6rem)}#projects .project-card:nth-child(4){transform:rotate(.45deg)translateY(.2rem)}#projects .project-card:nth-child(5){transform:rotate(-.35deg)translateY(1rem)}}@media (max-width:767px){#projects .container{width:100%;max-width:none;padding-left:0;padding-right:0}#projects .section-title{margin-left:0;left:50%;transform:translate(-50%)rotate(-.35deg)}#projects .projects-grid{--projects-start-padding:clamp(1rem, 5vw, 1.25rem);--projects-edge-padding:var(--projects-start-padding);padding-left:var(--projects-start-padding);padding-right:var(--projects-edge-padding);scroll-padding-left:var(--projects-start-padding);scroll-padding-right:var(--projects-edge-padding)}#projects .project-card,#projects .project-card:first-child{flex:0 0 min(100vw - 3.25rem,390px);width:min(100vw - 3.25rem,390px);min-height:390px}}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.detail-content{gap:var(--spacing-lg);display:grid}.detail-text h4{margin-bottom:var(--spacing-sm);color:var(--color-text-primary);border:var(--sketch-border-soft);background:var(--color-bg-card);border-radius:999px 14px 999px 16px/16px 999px 14px;padding:.15rem .55rem;font-size:1rem;display:inline-block;transform:rotate(-.25deg)}.detail-text ul{color:var(--color-text-secondary);margin-bottom:var(--spacing-md);font-size:.95rem;list-style-type:none;list-style-position:inside}.detail-text li{margin-bottom:8px;padding-left:1.2rem;position:relative}.detail-text li:before{content:"-";color:var(--color-accent);font-weight:700;position:absolute;left:0}@media (min-width:768px){.detail-content{grid-template-columns:1.2fr .8fr;align-items:start}}.experience-list,.education-list{border-left:none;padding-left:0}.experience-card,.education-card{padding:var(--spacing-sm);border:var(--sketch-border);margin-bottom:var(--spacing-lg);background:#fffdf6b8;border-width:1.45px 1.2px 1.7px 1.35px;border-radius:16px 12px 18px 13px/12px 18px 11px 17px;box-shadow:5px 6px #11111112}.experience-header,.edu-header{margin-bottom:var(--spacing-sm)}.experience-header h3,.edu-header h3{margin-bottom:4px;font-size:1.2rem}.exp-role,.edu-degree{color:var(--color-text-secondary);margin-bottom:2px;font-size:1rem;display:block}.exp-period,.edu-period{color:var(--color-text-tertiary);font-size:.85rem;display:block}.experience-body ul{gap:6px;margin:0;padding-left:0;list-style:none;display:grid}.experience-body li{color:var(--color-text-secondary);margin-bottom:0;padding-left:1rem;font-size:.98rem;line-height:1.8;position:relative}.experience-body li:before{content:"-";color:var(--color-text-primary);position:absolute;left:0}.experience-list{gap:var(--spacing-md);border-left:none;padding-left:0;display:grid}.experience-card{padding:var(--spacing-md);isolation:isolate;margin-bottom:0;position:relative;transform:rotate(-.3deg)}.experience-card:last-child{padding-bottom:var(--spacing-md);transform:rotate(.35deg)}.experience-card:before,.experience-card:after,.education-card:before,.education-card:after{content:"";pointer-events:none;z-index:0;background:0 0;position:absolute}.experience-card:before,.education-card:before{border:1.25px solid #1111116b;border-radius:17px 12px 19px 14px/13px 19px 12px 17px;inset:-2px -1px -1px -2px;transform:rotate(-.22deg)skew(-.22deg)}.experience-card:after,.education-card:after{border:1px solid #11111129;border-radius:13px 18px 12px 16px/18px 12px 16px 13px;inset:2px 3px 3px 2px;transform:rotate(.18deg)skewY(.12deg)}.experience-card:nth-child(2n):before,.education-card:nth-child(2n):before{border-radius:13px 18px 12px 17px/18px 13px 17px 12px;transform:rotate(.24deg)skew(.18deg)}.experience-card:nth-child(2n):after,.education-card:nth-child(2n):after{border-radius:18px 13px 17px 12px/12px 17px 13px 18px;transform:rotate(-.16deg)skewY(-.16deg)}.experience-header{gap:4px 20px;margin-bottom:0;display:grid}.experience-header h3{letter-spacing:0;margin:0;font-size:1.24rem;line-height:1.34}.exp-role{margin-bottom:0;font-size:1rem;line-height:1.6}.exp-period{letter-spacing:.01em;font-size:.92rem;line-height:1.45}.experience-body{margin-top:12px}.edu-body p{color:var(--color-text-secondary);margin-bottom:4px;font-size:.95rem}.education-list{gap:var(--spacing-md);border-left:none;padding-left:0;display:grid}.education-card{padding:var(--spacing-md);isolation:isolate;margin-bottom:0;position:relative;transform:rotate(.3deg)}.education-card:last-child{padding-bottom:var(--spacing-md)}.edu-header{gap:4px 20px;margin-bottom:0;display:grid}.edu-header h3{letter-spacing:0;margin:0;font-size:1.24rem;line-height:1.34}.edu-degree{margin-bottom:0;font-size:1rem;line-height:1.6}.edu-period{letter-spacing:.01em;font-size:.92rem;line-height:1.45}.edu-body{gap:8px;margin-top:12px;display:grid}.edu-body p{color:var(--color-text-secondary);max-width:52rem;margin:0;font-size:.98rem;line-height:1.8}.edu-body strong{color:var(--color-text-primary);margin-right:.45rem;font-weight:600}@media (min-width:768px){.experience-list{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}.education-list{grid-template-rows:auto auto;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:1.15rem 1.25rem}.education-card:first-child{grid-area:1/1/span 2;transform:rotate(-.35deg)}.education-card:nth-child(2){grid-area:2/2;transform:rotate(.55deg)translateY(0)}.education-card:nth-child(3){grid-area:1/2;transform:rotate(-.25deg)}.experience-header{grid-template-columns:minmax(0,1fr) auto;align-items:start}.experience-header h3,.exp-role{grid-column:1}.exp-period{text-align:right;white-space:nowrap;grid-area:1/2/span 2;padding-top:.1rem}.edu-header{grid-template-columns:minmax(0,1fr);align-items:start}.edu-header h3,.edu-degree{grid-column:1}.edu-period{text-align:left;white-space:normal;grid-area:auto/1;padding-top:0}}@media (max-width:767px){.experience-list,.education-list{gap:var(--spacing-lg)}.experience-card,.education-card{padding:var(--spacing-sm);padding-bottom:var(--spacing-md)}.experience-header h3,.edu-header h3{font-size:1.16rem;line-height:1.38}.exp-role,.edu-degree{font-size:.97rem}.exp-period,.edu-period{margin-top:2px}.experience-body,.edu-body{margin-top:10px}.experience-body li,.edu-body p{font-size:.95rem;line-height:1.75}}.skills-grid{gap:var(--spacing-lg);grid-template-columns:1fr;display:grid}@media (min-width:640px){.skills-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width:900px){.skills-grid{grid-template-columns:repeat(3,1fr)}}.skill-category{border:var(--sketch-border-soft);border-radius:var(--radius-sm);padding:var(--spacing-sm);background:#fffdf68c;box-shadow:3px 3px #1111110d}.skill-category h3{margin-bottom:var(--spacing-sm);color:var(--color-text-primary);text-underline-offset:5px;font-size:1rem;text-decoration:underline;text-decoration-thickness:1px}.skill-tags{flex-wrap:wrap;gap:12px;display:flex}.skill-tags span{color:var(--color-text-secondary);font-size:.9rem;font-family:var(--font-heading);background:linear-gradient(110deg, #ffffffb3, transparent 46%), var(--color-bg-card);transform-origin:50%;border:1.35px solid #1111118c;border-radius:999px 12px 999px 16px/14px 999px 13px;padding:.08rem .52rem;font-weight:700;line-height:1.25;display:inline-block;transform:rotate(-1.1deg);box-shadow:2px 2px #11111112,inset 0 0 0 1px #11111112}.skill-tags span:nth-child(2n){border-radius:12px 999px 15px/999px 13px 999px 15px;transform:rotate(1deg)}.skill-tags span:nth-child(3n){transform:rotate(-.35deg)translateY(1px)}.skill-tags span:hover,.tech-tag:hover{color:var(--color-text-primary);transform:rotate(0)translateY(-1px)}.contact-section{z-index:30;position:relative;overflow:visible}.contact-section .container,.contact-methods{overflow:visible}.contact-methods{gap:var(--spacing-md);flex-direction:column;align-items:center;display:flex}@media (min-width:768px){.contact-methods{flex-flow:wrap;justify-content:center}}.contact-item{align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm);border:var(--sketch-border);border-bottom:var(--sketch-border);border-radius:var(--radius-sm);color:var(--color-text-primary);width:100%;max-width:400px;font-family:var(--font-heading);word-spacing:normal;background:#fffdf6b3;justify-content:flex-start;font-size:1rem;line-height:1.7;transition:color .2s,transform .2s,box-shadow .2s;display:flex;box-shadow:3px 3px #1111110f}.contact-zh-text{font-size:1.06rem}.phone-text{word-spacing:normal;white-space:nowrap}.contact-item:hover{border-color:var(--color-accent);border-bottom-color:var(--color-accent);color:var(--color-accent);background-image:none;transform:rotate(-.3deg)translateY(-1px);box-shadow:5px 5px #1111111a}.icon{width:2rem;height:2rem;color:var(--color-text-primary);flex:0 0 2rem;justify-content:center;align-items:center;transition:transform .2s;display:inline-flex}.icon-feishu{overflow:hidden}.contact-icon{width:1.75rem;height:1.75rem;display:block;overflow:visible}.contact-icon-feishu{width:2rem;height:2rem}.sketch-line{fill:none;stroke:currentColor;stroke-width:1.85px;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.sketch-line-light{stroke-width:1.35px;opacity:.84}.sketch-line-ghost{stroke-width:1.15px;opacity:.55}.sketch-dot{fill:var(--color-bg-body);stroke:currentColor;stroke-width:1.65px;vector-effect:non-scaling-stroke}.contact-item:hover .icon{color:var(--color-text-primary);transform:translate(1px)rotate(-2deg)}.feishu-contact{position:relative;overflow:visible}.feishu-hover-card{display:none}@media (hover:hover) and (pointer:fine) and (min-width:768px){.feishu-hover-card{border:var(--sketch-border);border-radius:var(--radius-sm);background:var(--color-bg-card);opacity:0;visibility:hidden;pointer-events:none;z-index:200;flex-direction:column;align-items:center;gap:10px;padding:12px;transition:opacity .2s,transform .2s;display:flex;position:absolute;top:auto;bottom:calc(100% + 12px);left:50%;transform:translate(-50%,8px)}.feishu-hover-card img{object-fit:cover;border:var(--sketch-border-soft);background:var(--color-bg-card);width:188px;height:188px;padding:4px}.feishu-hover-text{color:var(--color-text-secondary);font-size:.9rem;line-height:1.2}.feishu-contact:hover .feishu-hover-card,.feishu-contact:focus-within .feishu-hover-card{opacity:1;visibility:visible;transform:translate(-50%)}}@media (hover:none),(pointer:coarse),(max-width:767px){.feishu-hover-card{display:none!important}}footer{padding:var(--spacing-lg) 0;text-align:center;color:var(--color-text-tertiary);margin-top:var(--spacing-xl);border-top:none;font-size:.9rem}footer *{word-spacing:normal}.lightbox{z-index:2000;opacity:0;pointer-events:none;background-color:#f8f6eff2;justify-content:center;align-items:center;width:100%;height:100%;transition:opacity .3s;display:flex;position:fixed;top:0;left:0}.lightbox[aria-hidden=false]{opacity:1;pointer-events:auto}.lightbox-content{background:var(--color-bg-card);border:var(--sketch-border);border-radius:var(--radius-sm);max-width:90%;max-height:90%;padding:10px;position:relative;box-shadow:8px 8px #1111111f}.lightbox-content img,.lightbox-content video{border-radius:8px 11px 7px 10px/10px 7px 11px 8px;max-width:100%;max-height:80vh}.lightbox-close{color:var(--color-text-primary);cursor:pointer;z-index:2010;background:0 0;border:none;font-size:3rem;font-weight:100;line-height:.5;position:absolute;top:20px;right:20px}.feishu-modal{opacity:0;pointer-events:none;z-index:2200;background-color:#f8f6eff2;justify-content:center;align-items:center;transition:opacity .25s;display:flex;position:fixed;inset:0}.feishu-modal[aria-hidden=false]{opacity:1;pointer-events:auto}.feishu-modal-card{background:var(--color-bg-card);border:var(--sketch-border);border-radius:var(--radius-md);width:min(92vw,360px);box-shadow:var(--sketch-shadow);text-align:center;padding:20px 18px 18px;position:relative}.feishu-modal-card h3{margin-bottom:4px;font-size:1.1rem}.feishu-modal-card p{color:var(--color-text-secondary);margin-bottom:12px;font-size:.9rem}.feishu-modal-card img{border:var(--sketch-border-soft);background:var(--color-bg-card);width:min(72vw,240px);margin:0 auto;padding:6px}.feishu-modal-close{color:var(--color-text-secondary);background:0 0;border:none;font-size:2rem;line-height:1;position:absolute;top:6px;right:10px}.feishu-modal-close:hover{color:var(--color-accent)}.toast{background-color:var(--color-bg-card);color:var(--color-text-primary);border:var(--sketch-border);border-radius:var(--radius-sm);opacity:0;visibility:hidden;z-index:3000;padding:12px 24px;font-size:.9rem;transition:all .3s;position:fixed;bottom:30px;left:50%;transform:translate(-50%)translateY(20px)}.toast.show{opacity:1;visibility:visible;transform:translate(-50%)translateY(0)}.carousel{width:100%;max-width:600px;margin:0 auto;position:relative}.carousel-track-container{border-radius:var(--radius-sm);aspect-ratio:16/9;border:var(--sketch-border);background:#fffdf680;width:100%;position:relative;overflow:hidden;transform:rotate(-.15deg);box-shadow:4px 4px #11111112}.carousel-track{height:100%;margin:0;padding:0;list-style:none;transition:transform .6s cubic-bezier(.25,1,.5,1);display:flex}.carousel-slide{justify-content:center;align-items:center;min-width:100%;display:flex}.carousel-slide img{object-fit:contain;cursor:pointer;background:var(--color-bg-card);width:100%;height:100%}.carousel-dots{justify-content:center;gap:8px;padding-top:12px;display:flex}.dot{border:1.5px solid var(--color-text-secondary);cursor:pointer;background:0 0;border-radius:44% 56% 52% 48%/48% 53% 47% 52%;width:10px;height:10px;padding:0}.dot.current-dot{background:var(--color-accent);border-style:solid}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}section{animation:none}@media (prefers-reduced-motion:reduce){.hero-section,.project-details{animation:none}.btn-primary:hover{transform:none}}
