@font-face{font-family:Affairs;src:url("fonts/affairs-regular.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap}
@font-face{font-family:Affairs;src:url("fonts/affairs-italic.woff2") format("woff2");font-style:italic;font-weight:400;font-display:swap}
@font-face{font-family:"Affairs Mono";src:url("fonts/affairs-mono.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap}
:root{--bg:#ffffff;--ink:#22231f;--muted:#777972;--line:#d9dad3;--accent:#d8fd5a;--sans:"Affairs","PingFang SC","Microsoft YaHei",sans-serif;--serif:"Affairs","PingFang SC","Microsoft YaHei",sans-serif;--mono:"Affairs Mono",monospace}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:14px;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}button,a{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible{outline:2px solid #667c21;outline-offset:6px}button:disabled{opacity:.25;cursor:default}img{display:block;max-width:100%}header{height:100px;padding:0 42px;display:flex;align-items:center;justify-content:space-between;position:relative;z-index:10}.brand{font:30px var(--serif);display:flex;align-items:center;gap:14px;letter-spacing:-1px}.brand span{font:14px var(--sans);letter-spacing:2px}.dot{width:7px;height:7px;background:#7c922e;border-radius:50%;margin-left:1px}nav{display:flex;gap:38px;align-items:center;font:19px var(--serif)}nav a{position:relative}nav a.active:after{content:"";position:absolute;bottom:-8px;left:0;width:100%;height:1px;background:var(--ink)}nav sup{font:10px var(--sans);position:relative;top:-4px;margin-left:3px}.contact{font:12px var(--sans);margin-left:28px}footer{padding:25px 42px;display:flex;justify-content:space-between;color:var(--muted);font-size:11px;letter-spacing:.01em}.skip{position:fixed;top:-100px;background:var(--ink);color:white;padding:12px;z-index:100}.skip:focus{top:0}.work-page{min-height:calc(100svh - 162px);display:flex;flex-direction:column;justify-content:center;overflow:hidden}.gallery-intro{display:flex;justify-content:space-between;align-items:end;padding:20px 42px 0}.eyebrow{font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}.gallery-intro h1{font:400 23px var(--serif);margin:8px 0 0}.view-toggle{display:flex;gap:15px}.view-toggle button{border:0;background:none;padding:5px 0;font-size:11px;color:var(--muted)}.view-toggle button.active{color:var(--ink);border-bottom:1px solid}.gallery{display:flex;align-items:center;gap:30px;padding:35px max(42px,calc((100vw - 620px)/2)) 30px;overflow-x:auto;scrollbar-width:none;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;width:100%;min-height:440px}.gallery::-webkit-scrollbar{display:none}.project-card{flex:0 0 min(620px,66vw);scroll-snap-align:center;min-width:0;transition:opacity .3s}.project-link{display:block}.art{position:relative;aspect-ratio:1.55;overflow:hidden;isolation:isolate;transition:transform .55s cubic-bezier(.2,.65,.2,1)}.project-link:hover .art{transform:translateY(-5px)}.view-tag{position:absolute;right:18px;bottom:18px;padding:12px 16px;background:var(--bg);border-radius:30px;font-size:11px;opacity:0;transform:translateY(6px);transition:.25s;z-index:5}.project-link:hover .view-tag{opacity:1;transform:none}.caption{display:flex;justify-content:space-between;gap:20px;padding-top:18px}.caption h2{font:400 20px var(--serif);margin:0 0 6px}.caption p{font-size:11px;color:var(--muted);margin:0;line-height:1.6}.caption .arrow{font-size:23px;transition:transform .25s}.project-link:hover .arrow{transform:translate(3px,-3px)}.dewu-art{background:#dae9e8;color:#1e4746}.cover-type{position:absolute;left:7%;top:9%;font:11px var(--sans);letter-spacing:.12em}.dewu-art h3{position:absolute;left:7%;top:22%;font:400 clamp(30px,4vw,52px)/1.05 var(--serif);letter-spacing:-2px;margin:0}.cover-sub{position:absolute;left:7%;bottom:11%;font-size:11px;line-height:1.8}.phone-display{position:absolute;width:300px;height:650.382px;transform:scale(.49) rotate(-7deg);transform-origin:top left;left:59%;top:9%;box-shadow:25px 35px 65px #507c7950;border-radius:26px;overflow:hidden}.phone-display iframe{border:0;width:300px;height:651px;pointer-events:none}.dewu-orbit{position:absolute;width:440px;height:440px;border:1px solid #91b6b14d;border-radius:50%;top:5%;left:40%}.dewu-orbit:after{content:"";position:absolute;inset:50px;border:1px solid #91b6b14d;border-radius:50%}.tiktok-art{background:#181b1b;color:#fff}.tiktok-art .cover-type{color:#b0d5d1}.tiktok-art h3{position:absolute;left:7%;top:18%;font:400 38px var(--serif);letter-spacing:-1px;margin:0}.tiktok-art .screen{position:absolute;left:19%;top:39%;width:76%;border:6px solid #050505;border-radius:7px;box-shadow:0 25px 50px #0008;transform:rotate(-5deg)}.tiktok-art .tiny{position:absolute;bottom:9%;left:7%;font-size:10px;writing-mode:vertical-rl;color:#bdc4c0}.oneplus-art{background:#e6e4df;color:#242522}.oneplus-art h3{position:absolute;left:7%;top:14%;font:400 45px/1.05 var(--serif);letter-spacing:-2px;margin:0;z-index:2}.oneplus-art .phone-back{position:absolute;right:18%;top:6%;height:88%;width:auto}.oneplus-art .phone-front{position:absolute;right:4%;top:14%;height:88%;width:auto}.oneplus-art .cover-sub{bottom:10%}.team-art{background:#e7e5dc;display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:30px}.team-art img{width:100%;height:100%;object-fit:cover}.team-art .team-label{position:absolute;left:42px;bottom:42px;background:var(--accent);padding:12px 16px;font:22px var(--serif);z-index:2}.gallery-controls{margin:0 42px;display:flex;align-items:center;justify-content:space-between;padding:8px 0 25px}.gallery-controls .hint{font-size:11px;color:var(--muted)}.paging{display:flex;align-items:center;gap:22px}.paging span{font-size:11px;font-variant-numeric:tabular-nums}.paging button{width:36px;height:36px;border:1px solid var(--line);background:transparent;border-radius:50%;font-size:18px}.paging button:hover:not(:disabled){background:var(--accent);border-color:var(--accent)}.index-list{padding:40px 42px 60px;min-height:470px}.index-list a{display:grid;grid-template-columns:50px 1fr 1fr 20px;gap:20px;align-items:center;padding:30px 0;border-bottom:1px solid var(--line)}.index-list a:hover{color:#5f7622}.index-list .index-title{font:30px var(--serif)}.index-list .index-meta{color:var(--muted);font-size:12px}.index-list .index-num{font-size:11px}.info-page,.case-page{max-width:1440px;margin:auto;padding:65px 7vw 70px}.info-top{display:grid;grid-template-columns:1.4fr 1fr;gap:10%;align-items:start}.info-top h1{font:400 clamp(52px,7vw,100px)/1.05 var(--serif);letter-spacing:-4px;margin:23px 0 30px}.info-top h1 em{font-weight:400;color:#7a7c70}.intro-zh{font-size:21px;line-height:1.9;max-width:550px;font-weight:400}.intro-small{color:var(--muted);font-size:14px;line-height:1.9;max-width:480px}.portrait{height:490px;position:relative;overflow:hidden;background:#dddcd6}.portrait img{width:100%;height:100%;object-fit:cover;object-position:center 68%}.photo-note{display:flex;justify-content:space-between;font-size:10px;color:var(--muted);margin-top:12px}.info-section{display:grid;grid-template-columns:1fr 2fr;gap:10%;border-top:1px solid var(--line);margin-top:90px;padding-top:30px}.info-section h2{font:26px var(--serif);margin:0}.experience{padding:0 0 25px;margin-bottom:25px;border-bottom:1px solid var(--line)}.experience:last-child{border:0}.experience h3{font-size:17px;font-weight:400;margin:0 0 10px;display:flex;justify-content:space-between;gap:20px}.experience h3 span{font-size:11px;color:var(--muted);white-space:nowrap}.experience p{font-size:13px;color:var(--muted);line-height:1.9;margin:0}.skills{display:flex;flex-wrap:wrap;gap:10px}.skills span{border:1px solid var(--line);border-radius:30px;padding:12px 17px;font-size:12px}.contact-block{padding-top:60px;margin-top:70px;border-top:1px solid var(--line)}.contact-block a{font:clamp(22px,4vw,50px) var(--serif);letter-spacing:-1px;display:inline-block;margin-top:20px}.case-topline{display:flex;justify-content:space-between;align-items:center;margin-bottom:45px;color:var(--muted);font-size:12px}.back-link:hover{color:var(--ink)}.case-page h1{font:400 clamp(46px,6vw,85px)/1.05 var(--serif);letter-spacing:-3px;margin:18px 0 20px;max-width:900px}.case-subtitle{font-size:21px;font-weight:400;margin-bottom:40px}.case-meta{display:flex;gap:80px;border-top:1px solid var(--line);padding:22px 0 42px}.case-meta div{font-size:12px;line-height:1.8}.case-meta span{display:block;color:var(--muted);font-size:10px;margin-bottom:6px}.case-hero{width:100%;max-height:680px;aspect-ratio:1.75}.case-hero .phone-display{transform:scale(.8) rotate(-7deg);left:64%;top:10%}.case-hero .dewu-orbit{width:700px;height:700px}.case-hero h3{font-size:clamp(45px,6vw,85px)}.case-hero .cover-type{font-size:13px}.case-hero .cover-sub{font-size:16px}.case-hero.team-art{padding:40px}.case-section{margin:85px 0}.section-copy{display:grid;grid-template-columns:1fr 2fr;gap:7%;margin-bottom:35px}.section-copy h2{font:28px var(--serif);margin:0;line-height:1.3}.section-copy .body-copy{font-size:16px;line-height:1.95}.body-copy p{margin:0 0 18px}.body-copy p:last-child{margin-bottom:0}.media-panel{background:#eeeee9;padding:40px;overflow:hidden}.media-panel.white{background:white}.media-panel img{height:auto;width:100%;cursor:zoom-in}.media-caption{color:var(--muted);font-size:11px;line-height:1.8;margin-top:14px}.phone-row{display:flex;justify-content:center;align-items:flex-start;gap:7%;padding:50px;background:#eeeee9}.phone-row figure{margin:0;width:25%}.phone-row img{width:100%;height:auto;box-shadow:0 12px 25px #0000000a;cursor:zoom-in}.phone-row figcaption{font-size:12px;color:var(--muted);margin:18px 0;text-align:center}.metrics{display:grid;grid-template-columns:1fr 1fr;gap:25px;margin:45px 0}.metric{border-top:1px solid var(--line);padding-top:25px}.metric strong{font:64px var(--serif);display:block;margin-bottom:15px}.metric p{font-size:13px;color:var(--muted)}.team-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.team-grid figure{margin:0}.team-grid img{aspect-ratio:4/3;object-fit:cover;cursor:zoom-in}.team-grid figcaption{font-size:11px;margin-top:12px;color:var(--muted)}.next-project{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding:40px 0;margin-top:70px}.next-project span{color:var(--muted);font-size:11px}.next-project strong{display:block;font:36px var(--serif);font-weight:400;margin-top:12px}.next-project i{font-style:normal;font-size:40px}.principles{display:grid;grid-template-columns:repeat(3,1fr);gap:25px}.principles article{padding:25px 0;border-top:1px solid var(--line)}.principles h3{font-size:19px;font-weight:400}.principles p{font-size:13px;line-height:1.9;color:var(--muted)}dialog{border:0;padding:60px 20px 20px;background:#ffffff;max-width:95vw;max-height:95dvh}dialog::backdrop{background:#000b}dialog img{max-height:80dvh;max-width:90vw;object-fit:contain}dialog button{position:absolute;right:20px;top:20px;border:0;background:none;font-size:14px}.reveal{animation:appear .6s ease both}@keyframes appear{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@media(min-width:1700px){.gallery{padding-left:calc((100vw - 760px)/2);padding-right:calc((100vw - 760px)/2)}.project-card{flex-basis:760px}.phone-display{transform:scale(.6) rotate(-7deg)}}
@media(max-width:800px){header{height:85px;padding:0 22px}.brand{font-size:25px;gap:10px}.brand span{font-size:12px}nav{gap:24px;font-size:17px}.contact{display:none}footer{padding:25px 22px}.footer-note{display:none}.gallery-intro{padding:35px 22px 0}.gallery-intro h1{font-size:22px}.gallery{padding:32px 22px 10px;display:block;min-height:0}.project-card{margin-bottom:36px;width:100%}.art{aspect-ratio:1.42}.phone-display{left:61%;top:10%;transform:scale(.42) rotate(-7deg)}.dewu-art h3{font-size:43px}.tiktok-art h3{font-size:32px}.oneplus-art h3{font-size:40px}.cover-type{font-size:9px}.cover-sub{font-size:10px}.gallery-controls{display:none}.caption{padding-top:15px}.caption h2{font-size:21px}.index-list{padding:35px 22px;min-height:60vh}.index-list a{grid-template-columns:25px 1fr 20px;gap:10px}.index-list .index-meta{display:none}.index-list .index-title{font-size:25px}.info-page,.case-page{padding:35px 22px 40px}.info-top{grid-template-columns:1fr;gap:35px}.info-top h1{font-size:68px;letter-spacing:-3px}.intro-zh{font-size:20px}.portrait{height:500px}.info-section{margin-top:55px;grid-template-columns:1fr;gap:30px}.experience h3{font-size:16px}.case-topline{margin-bottom:35px}.case-page h1{font-size:46px;letter-spacing:-2px}.case-subtitle{font-size:17px;line-height:1.6}.case-meta{gap:35px;flex-wrap:wrap;padding-bottom:25px}.case-hero{aspect-ratio:1.42}.case-hero .phone-display{transform:scale(.42) rotate(-7deg);left:61%;top:10%}.case-hero h3{font-size:43px}.case-hero .cover-type{font-size:9px}.case-hero .cover-sub{font-size:10px}.case-section{margin:50px 0}.section-copy{grid-template-columns:1fr;gap:20px}.section-copy .body-copy{font-size:15px}.media-panel{padding:14px}.phone-row{padding:20px 14px;gap:5%}.phone-row figure{width:30%}.phone-row.two figure{width:40%}.phone-row figcaption{font-size:10px}.metrics{gap:20px}.metric strong{font-size:48px}.team-grid{grid-template-columns:repeat(2,1fr);gap:16px}.principles{grid-template-columns:1fr;gap:0}.next-project strong{font-size:28px}.team-art{padding:20px}.team-art .team-label{left:30px;bottom:30px;font-size:18px}.case-hero.team-art{padding:20px}}
@media(max-width:440px){.phone-display,.case-hero .phone-display{transform:scale(.32) rotate(-7deg)}.dewu-art h3,.case-hero.dewu-art h3{font-size:34px;letter-spacing:-1px}.tiktok-art h3,.case-hero.tiktok-art h3{font-size:28px}.oneplus-art h3,.case-hero.oneplus-art h3{font-size:33px}.caption h2{font-size:19px}.portrait{height:410px}.case-page h1{font-size:41px}.case-meta{gap:23px}.view-tag{display:none}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}

main:focus{outline:none}.dewu-art h3{max-width:58%;font-size:44px}.case-hero.dewu-art h3{font-size:clamp(35px,5vw,72px)}@media(max-width:800px){.dewu-art h3{font-size:36px}}@media(max-width:440px){.dewu-art h3{font-size:30px}}

/* Typography follows the reference site: Affairs throughout, Mono for counters. */
body{letter-spacing:-.01em;font-synthesis:none}h1,h2,h3,strong{font-weight:400}.brand,.info-top h1,.case-page h1,.art h3,.contact-block a{letter-spacing:-.01em}.paging span,.index-num,nav sup{font-family:var(--mono)}

/* Minimal masthead and quiet gallery controls. */
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.gallery-intro{justify-content:flex-end}

/* Upright, slightly larger Dewu artwork and consistent square-corner arrows. */
.phone-display{transform:scale(.55);top:5%}.case-hero .phone-display{transform:scale(.9);top:5%}
.ui-arrow{display:inline-block;width:1em;height:1em;vertical-align:-.12em;flex-shrink:0;overflow:visible}.ui-arrow--right{transform:rotate(45deg)}.ui-arrow--left{transform:rotate(225deg)}.caption .arrow{display:flex;align-items:flex-start;padding-top:2px}.paging button{display:inline-flex;align-items:center;justify-content:center}
@media(min-width:1700px){.phone-display{transform:scale(.67)}.case-hero .phone-display{transform:scale(.9)}}
@media(max-width:800px){.phone-display,.case-hero .phone-display{transform:scale(.47);top:5%}}
@media(max-width:440px){.phone-display,.case-hero .phone-display{transform:scale(.35);top:5%}}
@media(min-width:801px){.phone-display{left:64%}}
@media(min-width:801px) and (max-width:900px){.phone-display{transform:scale(.49)}}
@media(max-width:380px){.phone-display,.case-hero .phone-display{transform:scale(.31)}}
@media(max-width:340px){.phone-display,.case-hero .phone-display{transform:scale(.28)}}

/* Straight TikTok interface aligned to the requested cover area. */
.tiktok-art .screen{left:21.5%;top:33.5%;width:74.5%;height:63%;object-fit:contain;object-position:left top;transform:none;border:0;border-radius:0;box-shadow:none;filter:drop-shadow(0 12px 20px #0005)}

/* Cover typography and a shared proportional alignment frame. */
@font-face{font-family:Poppins;src:url("fonts/poppins-light.ttf") format("truetype");font-weight:300;font-style:normal;font-display:swap}
@font-face{font-family:Poppins;src:url("fonts/poppins-semibold.ttf") format("truetype");font-weight:600;font-style:normal;font-display:swap}
.art{container-type:inline-size;font-family:Poppins,"PingFang SC",sans-serif;font-weight:300}
.art .cover-type,.art .cover-sub{font-family:Poppins,"PingFang SC",sans-serif;font-weight:300;font-size:1.75cqw}
.art h3,.art .team-label{font-family:Poppins,"PingFang SC",sans-serif;font-weight:600;letter-spacing:-.035em}
.art.dewu-art h3{font-size:5.2cqw;line-height:1.18;max-width:59%;top:23%}
.art.tiktok-art h3{font-size:5.1cqw;line-height:1.2}
.art.oneplus-art h3{font-size:7.2cqw}
.art .team-label{font-size:3.2cqw}
.art.dewu-art{--align-top:9%;--align-bottom:11%}
.dewu-art .cover-type{top:var(--align-top);line-height:1}
.dewu-art .cover-sub{bottom:var(--align-bottom);line-height:1.8}
.art.dewu-art .phone-display{left:auto;right:7%;top:var(--align-top);bottom:var(--align-bottom);height:auto;width:auto;aspect-ratio:300/650.382;transform:none;border-radius:2cqw}
.phone-display iframe{position:absolute;left:0;top:0;transform-origin:top left}

/* Personal introduction: education and capabilities belong to the opening view. */
.info-top h1{font-size:clamp(42px,5.5vw,80px);letter-spacing:-.025em;line-height:1.05;margin:20px 0 22px}
.info-top .intro-zh{margin:0 0 25px;font-size:19px;line-height:1.7}
.intro-details{display:grid;gap:22px}
.intro-detail{border-top:1px solid var(--line);padding-top:15px}
.intro-detail h2{font:22px var(--serif);margin:0 0 12px}
.intro-detail .experience{padding:0;margin:0;border:0}
.intro-detail .experience h3{font-size:15px;margin-bottom:6px}
.intro-detail .experience p{font-size:12px;line-height:1.8}
.intro-detail .skills{gap:7px}
.intro-detail .skills span{font-size:11px;padding:8px 11px}
.intro-detail .intro-small{font-size:12px;margin:10px 0 0;line-height:1.5}
@media(max-width:800px){.info-top h1{font-size:clamp(38px,8.5vw,64px)}.intro-details{gap:20px}.info-top .intro-zh{font-size:18px}.intro-detail .experience h3{flex-wrap:wrap;gap:5px 15px}}

/* Quiet portrait heading and visual tool fluency. */
.portrait-column{position:relative}
.portrait-heading{display:block;text-align:right;margin:0 0 14px}
.portrait-column .portrait{height:490px}
.portrait-column .portrait img{position:absolute;top:-115%;left:0;width:100%;height:215%;object-fit:cover;object-position:55% bottom}
.tool-skills{display:flex;flex-wrap:wrap;gap:18px 24px;margin-top:20px}
.tool-skill{display:flex;align-items:center;gap:9px;font-family:"PingFang SC",sans-serif;font-size:14px;color:#666;white-space:nowrap}
.tool-skill small{font-size:11px}
.tool-icon{width:29px;height:29px;flex:none;border-radius:7px;background-image:url("assets/tool-icons-reference.png");background-size:733px 70px;background-repeat:no-repeat}
.tool-icon-0{background-position:-14.5px -16.5px}.tool-icon-1{background-position:-247px -16.5px}.tool-icon-2{background-position:-481px -16.5px}
.skill-dots{display:flex;gap:4px;margin-left:3px}.skill-dots i{width:6px;height:6px;background:#bcbcbc;border-radius:50%}
@media(max-width:800px){.portrait-column .portrait{height:auto;aspect-ratio:.95}.portrait-heading{margin-top:8px}.tool-skills{gap:16px 20px}}

/* Balanced contact details with a QR-only viewport. */
.contact-block{display:flex;align-items:center;justify-content:space-between;gap:32px;padding-top:36px}
.contact-details a{font:400 20px/1.5 var(--serif);letter-spacing:0;margin:16px 0 0}
.contact-details .intro-small{margin:8px 0 0;color:var(--ink)}
.contact-details .intro-small a{margin:0}
.wechat-qr{position:relative;width:144px;aspect-ratio:1;overflow:hidden;flex:none;background:#fff}
.wechat-qr img{position:absolute;width:129.069767%;height:auto;max-width:none;left:-14.534884%;top:-38.953488%}
@media(max-width:600px){.contact-block{flex-wrap:wrap;gap:24px}.contact-details a{font-size:20px}.wechat-qr{width:144px;margin-left:auto}}

/* Shared alignment and generous spacing in the introduction. */
.info-top h1{margin-bottom:42px}
.intro-details{gap:34px}
.intro-detail{padding-top:22px}
.intro-detail h2{margin-bottom:20px}
.intro-detail .experience h3{margin-bottom:12px}
.intro-detail .experience p{line-height:2}
.intro-detail .skills{gap:10px}
.intro-detail .skills span{padding:10px 13px}
.tool-skills{margin-top:28px;gap:22px 28px}
.contact-block{--contact-size:128px;display:grid;grid-template-columns:minmax(0,1fr) var(--contact-size);align-items:start;gap:24px}
.contact-details{height:var(--contact-size);display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start}
.contact-details .eyebrow{line-height:1.2}
.contact-details a,.contact-details .intro-small{margin:0;line-height:1.2}
.contact-details .intro-small a{line-height:1.2}
.wechat-qr{width:var(--contact-size);height:var(--contact-size);margin:0}
.wechat-qr img{width:148%;left:-24%;top:-52%}
@media(max-width:600px){.contact-block{--contact-size:104px;gap:16px}.contact-details a{font-size:clamp(14px,4.8vw,20px)}.contact-details .eyebrow{font-size:8px;letter-spacing:.08em;max-width:210px}.info-top h1{margin-bottom:32px}.intro-details{gap:30px}.tool-skills{gap:20px 24px}}

/* Skills and tools share the section's full-width alignment. */
.intro-detail{container-type:inline-size}
.intro-detail .skills{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));width:100%;gap:10px}
.intro-detail .skills span{display:flex;align-items:center;justify-content:center;padding:10px 6px;min-width:0;text-align:center;white-space:nowrap}
.intro-detail .tool-skills{width:100%;justify-content:space-between;column-gap:12px}
@container(max-width:560px){.intro-detail .skills{grid-template-columns:repeat(3,minmax(0,1fr))}.intro-detail .tool-skills{display:grid;grid-template-columns:1fr;row-gap:18px}.intro-detail .skill-dots{margin-left:auto}}
@container(max-width:300px){.intro-detail .skills{grid-template-columns:repeat(2,minmax(0,1fr))}}
