/* Palette, paper grid, serif headings, and woven stripes follow OpenFormosa. */
:root{color-scheme:light;--paper:#f2eadc;--light:#fff9ed;--ink:#17120d;--muted:#64584c;--red:#c64332;--green:#0b6b50;--blue:#154f83;--ochre:#a36e12;--line:rgba(23,18,13,.2);--serif:Georgia,'Times New Roman',serif;--sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--max:1180px}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:104px}body{margin:0;color:var(--ink);font-family:var(--sans);line-height:1.6;background-color:var(--paper);background-image:linear-gradient(90deg,rgba(23,18,13,.035) 1px,transparent 1px),linear-gradient(180deg,rgba(23,18,13,.035) 1px,transparent 1px),linear-gradient(180deg,var(--light),var(--paper));background-size:28px 28px,28px 28px,100% 100%}a{color:inherit;text-decoration:none}button{font:inherit}a,button{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}a:focus-visible,button:focus-visible{outline:3px solid var(--blue);outline-offset:5px}a:hover .store-link,.text-link:hover{color:var(--red)}p,h1,h2,h3{margin:0}img{display:block;max-width:100%;height:auto}[hidden]{display:none!important}::selection{background:#c64332;color:#fff9ed}.wrap{width:min(var(--max),calc(100% - 64px));margin-inline:auto}.skip-link{position:absolute;top:-80px;left:16px;z-index:100;background:var(--ink);color:var(--light);padding:12px 20px}.skip-link:focus{top:12px}
.site-header{position:sticky;top:0;z-index:20;background:var(--light);border-bottom:2px solid var(--ink)}.nav-wrap{width:min(1280px,calc(100% - 64px));min-height:78px;margin:auto;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:16px}.brand{display:flex;align-items:center;gap:12px;white-space:nowrap;font:700 22px var(--serif)}.brand-mark{display:grid;place-items:center;width:43px;height:43px;border:2px solid var(--ink);border-radius:3px;font-size:26px;color:var(--green)}nav{display:flex;align-items:center;justify-self:end;gap:5px}nav a{white-space:nowrap}nav a{font-size:13px;font-weight:650;padding:9px 12px;border:1px solid transparent;border-radius:3px}nav a:hover{border-color:var(--ink);background:#fff}nav .nav-github{margin-left:12px;background:var(--ink);color:var(--light);border-color:var(--ink)}nav .nav-github:hover{background:var(--green);color:#fff}
.hero{display:grid;grid-template-columns:1.2fr 1fr;gap:72px;padding-block:80px 64px;align-items:center}.eyebrow{text-transform:uppercase;letter-spacing:.13em;font-size:11px;line-height:1.5;font-weight:750;margin-bottom:24px}.hero h1{font-family:var(--serif);font-size:clamp(64px,7.5vw,104px);font-weight:700;line-height:.98;letter-spacing:-.065em}.name-dot{color:var(--red)}.academic-name{margin-top:14px;font-size:14px;letter-spacing:.05em;color:var(--muted)}.hero-statement{font-family:var(--serif);font-size:clamp(27px,3vw,39px);line-height:1.15;letter-spacing:-.035em;margin-top:30px;font-weight:500}.lede{font-size:15px;line-height:1.85;max-width:520px;margin-top:22px;color:#50463c}.hero-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}.button{display:inline-flex;align-items:center;justify-content:center;gap:18px;border:2px solid var(--ink);border-radius:3px;padding:11px 17px;font-size:12px;font-weight:750;min-height:46px;background:var(--light);transition:background .15s,color .15s,transform .15s}.button:hover{transform:translateY(-2px);background:#fff}.button.primary{background:var(--ink);color:var(--light)}.button.primary:hover{background:var(--green)}.affiliation{display:flex;flex-direction:column;border-top:1px solid var(--line);margin-top:32px;padding-top:18px;font-size:11px;line-height:1.9;color:var(--muted)}.affiliation strong{font-weight:600;color:var(--ink)}
.hero-feature{align-self:center;background:#fff7e8;border:2px solid var(--ink);border-radius:4px;box-shadow:7px 7px 0 var(--ink);overflow:hidden}.woven-stripe{height:22px;border-bottom:2px solid var(--ink);background:linear-gradient(90deg,var(--red) 0 28%,var(--green) 28% 62%,var(--blue) 62%)}.feature-top{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:20px 24px 0;font-size:10px;text-transform:uppercase;letter-spacing:.1em;font-weight:750}.feature-role{padding:4px 8px;border:1px solid var(--green);border-radius:3px;color:var(--green)}.feature-art{display:block;padding:6px 36px}.feature-art img{width:100%;max-height:348px;object-fit:contain;mix-blend-mode:multiply;transition:transform .25s}.feature-art:hover img{transform:rotate(-2deg) scale(1.015)}.feature-caption{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding:20px 24px;gap:16px}.feature-caption h2{font:700 31px var(--serif);letter-spacing:-.04em}.feature-caption p{font-size:12px;color:var(--muted);margin-top:3px}.circle-link{width:43px;height:43px;display:grid;place-items:center;border:1px solid var(--ink);border-radius:50%;font-size:24px}.circle-link:hover{background:var(--green);color:#fff}
.directory{display:grid;grid-template-columns:repeat(3,1fr);border:2px solid var(--ink);border-radius:3px;overflow:hidden;background:var(--light)}.directory a{display:flex;align-items:center;gap:16px;padding:22px 24px;font-size:13px;font-weight:700}.directory a+a{border-left:1px solid var(--ink)}.directory a>:last-child{margin-left:auto}.directory a:hover{background:#fff}.directory-num{font-family:var(--serif);font-size:18px;color:var(--red)}.directory a:nth-child(2) .directory-num{color:var(--blue)}.directory a:nth-child(3) .directory-num{color:var(--green)}
.section{padding-block:88px}.section-head{display:grid;grid-template-columns:1.2fr 1fr;gap:72px;align-items:end;margin-bottom:38px}.section-head h2,.formosa-intro h2{font:700 clamp(34px,4.5vw,53px)/1.05 var(--serif);letter-spacing:-.045em}.section-head .eyebrow{margin-bottom:18px}.section-aside{padding-bottom:3px}.section-aside p{max-width:410px;color:var(--muted);font-size:14px;line-height:1.85}.text-link{font-size:12px;font-weight:750;display:inline-flex;gap:12px;align-items:center;margin-top:17px;text-decoration:underline;text-underline-offset:5px;text-decoration-thickness:1px}.red{color:var(--red)}.blue{color:var(--blue)}.green{color:var(--green)}
.papers{list-style:none;padding:0;margin:0;border-top:2px solid var(--ink)}.paper{padding:23px 0 24px;border-bottom:1px solid var(--line)}.paper-meta{display:flex;gap:14px;font-size:10px;color:var(--muted);margin-bottom:8px}.paper-meta>:first-child{color:var(--red);font-weight:750}.paper-meta>:last-child{border-left:1px solid var(--line);padding-left:14px}.paper h3{font-size:17px;font-weight:600;line-height:1.5;max-width:1050px}.paper h3 a{display:block}.paper h3 a:hover{color:var(--green)}.paper h3 span{display:inline-block;margin-left:5px;color:var(--muted);font-size:18px}
.formosa-band{background:var(--green);color:var(--light);border-block:2px solid var(--ink);padding-block:70px}.formosa-intro{display:grid;grid-template-columns:1.2fr 1fr;gap:72px;align-items:center}.formosa-intro .eyebrow{color:#d3e7d5;margin-bottom:20px}.formosa-copy p{font-size:15px;line-height:1.9;color:#eff5e9;max-width:425px}.formosa-copy .button{margin-top:22px}.button.light{border-color:var(--light);background:var(--light);color:var(--ink)}.button.light:hover{background:#fff}.model-grid{display:grid;grid-template-columns:repeat(3,1fr);margin-top:42px;border:1px solid #ffffff65;border-radius:3px;overflow:hidden}.model{padding:26px;display:flex;flex-direction:column;align-items:flex-start}.model+.model{border-left:1px solid #ffffff65}.model-kind{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:#d3e7d5}.model h3{font:700 25px var(--serif);margin:9px 0 12px;letter-spacing:-.03em;overflow-wrap:anywhere}.model p{font-size:12px;line-height:1.85;color:#eff5e9;margin-bottom:20px}.model .text-link{margin-top:auto;font-size:11px}.model .text-link:hover{color:#fff;text-decoration-thickness:2px}
.app-filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:24px}.app-filters button{cursor:pointer;border:1px solid var(--line);background:var(--light);padding:9px 15px;border-radius:3px;font-size:12px;font-weight:600;min-height:40px}.app-filters button.active{background:var(--ink);color:var(--light);border-color:var(--ink)}.app-filters button:hover{border-color:var(--ink)}.filter-count{margin-left:auto;font-size:11px;color:var(--muted)}.app-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.app-card{--accent:var(--red);display:flex;flex-direction:column;background:var(--light);padding:23px;border:1px solid var(--ink);border-radius:3px;transition:box-shadow .16s,transform .16s;min-width:0}.app-card:hover{box-shadow:4px 4px 0 var(--ink);transform:translate(-2px,-2px)}.accent-red{--accent:var(--red)}.accent-green{--accent:var(--green)}.accent-blue{--accent:var(--blue)}.accent-ochre{--accent:var(--ochre)}.app-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}.app-mark{width:49px;height:49px;flex-shrink:0;display:grid;place-items:center;font:700 26px var(--serif);background:var(--accent);color:#fff9ed;border-radius:10px;border:1px solid var(--ink)}.platform{font-size:9px;color:var(--muted);text-align:right;max-width:150px}.app-card h3{font-family:var(--serif);font-size:25px;line-height:1.2;letter-spacing:-.04em;overflow-wrap:anywhere}.app-card p{font-size:12px;line-height:1.9;margin:12px 0 24px;color:var(--muted)}.card-bottom{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:10px;padding-top:15px;border-top:1px solid var(--line);margin-top:auto}.card-bottom>:first-child{color:var(--muted)}.store-link{font-weight:750;white-space:nowrap}.apps-section{border-bottom:2px solid var(--ink)}
.repo-groups{border-top:2px solid var(--ink)}
.repo-group{--accent:var(--green);display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.5fr);gap:48px;padding:27px 0;border-bottom:1px solid var(--line)}
.repo-group:nth-child(2){--accent:var(--blue)}
.repo-group:nth-child(3){--accent:var(--red)}
.repo-group:nth-child(4){--accent:var(--ochre)}
.repo-group h3{padding-top:9px;font:700 25px/1.25 var(--serif);letter-spacing:-.035em;max-width:320px;color:var(--accent)}
.repo-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;gap:3px 28px;list-style:none;margin:0;padding:0}
.repo-link{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 0;min-height:44px;font-size:13px;font-weight:600}
.repo-link span:first-child{overflow-wrap:anywhere}
.repo-link span[aria-hidden]{flex-shrink:0;font-size:17px;color:var(--muted)}
.repo-link:hover{color:var(--accent);text-decoration:underline;text-underline-offset:5px}
.repo-more{display:flex;justify-content:flex-end;padding-top:8px}
.connect{border-top:2px solid var(--ink);padding-block:48px 64px}.connect .eyebrow{margin-bottom:15px;color:var(--red)}.connect-row{display:flex;align-items:center;justify-content:space-between;gap:30px}.connect h2{font:700 clamp(25px,3vw,36px)/1.15 var(--serif);letter-spacing:-.04em}.connect .button{flex-shrink:0}footer{background:#e7dbc8;border-top:2px solid var(--ink)}.footer-inner{display:grid;grid-template-columns:auto 1fr;column-gap:32px;row-gap:18px;padding-block:32px}.footer-name{font:700 26px var(--serif);letter-spacing:-.04em}.footer-name span{color:var(--red)}.footer-links{display:flex;justify-content:flex-end;align-items:center;flex-wrap:wrap;gap:20px;font-size:10px;font-weight:600}.footer-links a:hover{color:var(--red)}footer p{grid-column:1/-1;color:var(--muted);font-size:10px;border-top:1px solid var(--line);padding-top:16px}
/* Bilingual navigation keeps proper names intact and uses Taiwan Chinese fonts. */
:root:lang(zh-Hant){--serif:'Noto Serif TC','Songti TC','PMingLiU',Georgia,serif;--sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,'PingFang TC','Noto Sans TC','Microsoft JhengHei',sans-serif}
.brand,.hero h1,.feature-caption h2,.app-card h3,.model h3,.footer-name{font-family:Georgia,'Times New Roman',serif}
.hero-statement,.section-head h2,.formosa-intro h2{white-space:pre-line}
:root:lang(zh-Hant) .hero-statement,:root:lang(zh-Hant) .section-head h2,:root:lang(zh-Hant) .formosa-intro h2,:root:lang(zh-Hant) .repo-group h3,:root:lang(zh-Hant) .connect h2{letter-spacing:0;line-height:1.35}
:root:lang(zh-Hant) .eyebrow{letter-spacing:.1em}
:root:lang(zh-Hant) .academic-name{letter-spacing:0}
.language-switch{display:inline-flex;align-items:center;justify-self:end;border:1px solid var(--ink);border-radius:3px;background:var(--light);padding:2px;gap:2px}
.language-switch button{border:0;border-radius:1px;background:transparent;color:var(--muted);font-size:11px;font-weight:700;line-height:1.2;min-height:36px;min-width:37px;padding:7px;cursor:pointer}
.language-switch button[aria-pressed="true"]{background:var(--ink);color:var(--light)}
.language-switch button:hover{background:var(--green);color:var(--light)}
@media(min-width:1000px){.app-card:first-child{grid-column:span 2;display:grid;grid-template-columns:1fr 1fr;column-gap:32px;background:#f4e2d5}.app-card:first-child .app-top{grid-column:1/-1}.app-card:first-child h3{font-size:46px;align-self:center}.app-card:first-child p{margin:0 0 22px}.app-card:first-child .card-bottom{grid-column:1/-1}}
@media(max-width:1000px){.hero,.section-head,.formosa-intro{gap:38px}.hero{padding-top:56px}.hero-feature{box-shadow:5px 5px 0 var(--ink)}.feature-top{padding-inline:16px}.feature-art{padding-inline:24px}.feature-caption{padding:17px}.feature-caption h2{font-size:27px}nav a{padding:9px 8px;font-size:11px}.model{padding:20px}.model h3{font-size:21px}.hero-actions .button{padding:10px 12px;font-size:11px}.app-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:720px){html{scroll-padding-top:128px}.wrap,.nav-wrap{width:calc(100% - 40px)}.nav-wrap{flex-direction:column;gap:10px;align-items:flex-start;padding:14px 0 12px;min-height:0}.brand{font-size:20px}.brand-mark{width:32px;height:32px;font-size:21px}nav{width:100%;justify-content:space-between;gap:2px}nav a{padding:6px 3px;font-size:10px}nav .nav-github{margin-left:0;padding-inline:8px}.hero{grid-template-columns:1fr;gap:38px;padding-block:44px}.hero .eyebrow{font-size:9px;margin-bottom:22px}.hero h1{font-size:76px}.hero-statement{font-size:34px;margin-top:23px}.lede{font-size:14px}.hero-feature{max-width:470px;width:100%;justify-self:center}.feature-art img{max-height:310px}.feature-caption h2{font-size:30px}.directory{grid-template-columns:1fr}.directory a{padding:16px 20px}.directory a+a{border-left:0;border-top:1px solid var(--ink)}.section{padding-block:58px}.section-head,.formosa-intro{grid-template-columns:1fr;gap:22px}.section-head{margin-bottom:28px}.section-head h2,.formosa-intro h2{font-size:39px}.section-aside p{font-size:13px}.paper{padding-block:20px}.paper-meta{font-size:9px;gap:9px;flex-wrap:wrap}.paper-meta>:last-child{padding-left:9px}.paper h3{font-size:15px}.formosa-band{padding-block:50px}.formosa-copy p{font-size:14px}.model-grid{grid-template-columns:1fr;margin-top:30px}.model{padding:23px}.model+.model{border-left:0;border-top:1px solid #ffffff65}.model h3{font-size:26px}.model p{max-width:450px}.model .text-link{margin-top:0}.app-filters{gap:6px}.app-filters button{font-size:10px;padding:8px 11px}.filter-count{width:100%;margin:4px 0 0}.app-card{padding:20px}.app-card h3{font-size:25px}.app-top{margin-bottom:16px}.platform{font-size:9px}.repo-group{grid-template-columns:1fr;gap:12px;padding-block:24px}.repo-group h3{font-size:23px;max-width:none;padding-top:0}.repo-links{column-gap:22px}.connect-row{align-items:flex-start;flex-direction:column;gap:22px}.connect{padding-block:36px 44px}.footer-inner{grid-template-columns:1fr;gap:18px}.footer-links{justify-content:flex-start;gap:13px 18px}.footer-name{font-size:25px}}
@media(max-width:460px){.app-grid,.repo-links{grid-template-columns:1fr}.app-grid{gap:12px}.app-card{padding:23px}.app-card p{font-size:13px}.hero h1{font-size:70px}.hero-statement{font-size:30px}.hero-actions{gap:8px}.hero-actions .button{font-size:10px;gap:9px}.section-head h2,.formosa-intro h2{font-size:35px}}
@media(max-width:900px){html{scroll-padding-top:128px}.nav-wrap{grid-template-columns:minmax(0,1fr) auto;gap:10px;min-height:0;padding-block:12px;align-items:center}.brand{grid-column:1;grid-row:1}.language-switch{grid-column:2;grid-row:1}nav{grid-column:1/-1;grid-row:2;justify-self:stretch;width:100%;justify-content:space-between;gap:4px}nav a{padding:6px 3px;font-size:11px}nav .nav-github{margin-left:0;padding-inline:8px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important;animation:none!important}}
