*{box-sizing:border-box}html{background:var(--bg);scroll-behavior:smooth}body{background:radial-gradient(circle at 80% -10%,#a78bfa1f,transparent 35rem),var(--bg);min-height:100vh;color:var(--text);margin:0;font-family:Noto Sans TC,system-ui,sans-serif;line-height:1.7}a{color:inherit}.container{width:min(1080px,100% - 40px);margin-inline:auto}.site-header{border-bottom:1px solid var(--line);backdrop-filter:blur(16px);z-index:10;background:#0f0b1ed1;position:sticky;top:0}.nav{justify-content:space-between;align-items:center;gap:2rem;min-height:72px;display:flex}.brand{color:var(--text);letter-spacing:.08em;font-weight:700;text-decoration:none}.nav-links{gap:clamp(.75rem,3vw,2rem);display:flex}.nav-links a{color:var(--muted);border-bottom:2px solid #0000;padding:1.45rem 0;font-size:.9rem;text-decoration:none;transition:all .2s}.nav-links a:hover,.nav-links a[aria-current=page]{color:var(--accent);border-color:var(--accent)}.hero{max-width:860px;padding:clamp(2rem,6vw,5rem) 0 clamp(5rem,10vw,9rem)}.home-hero{max-width:980px}.eyebrow{letter-spacing:.16em;text-transform:uppercase;font-weight:700;color:var(--accent)!important;font-size:.74rem!important}h1,h2,h3{letter-spacing:-.025em;line-height:1.22}.hero h1{margin:.5rem 0 1.5rem;font-size:clamp(2.7rem,7vw,6rem)}.hero h1 span{color:var(--accent)}.hero>p:last-child,.page-header>p:last-child,.empty-page>p:last-child{color:var(--muted);font-size:1.08rem}.home-hero .hero-intro{max-width:760px;color:var(--text);margin:0;font-size:clamp(1.05rem,2vw,1.22rem);line-height:1.95}.home-hero .hero-direction{max-width:760px;color:var(--muted);margin:1rem 0 0;font-size:.98rem;line-height:1.9}.home-actions{flex-wrap:wrap;align-items:center;gap:.75rem 1rem;margin-top:2rem;display:flex}.home-actions a{border:1px solid var(--line);justify-content:center;align-items:center;min-height:3rem;padding:.65rem 1rem;text-decoration:none;transition:border-color .2s,background .2s,color .2s,transform .2s;display:inline-flex}.home-actions a:hover{border-color:var(--accent);transform:translateY(-2px)}.home-actions .primary-action{border-color:var(--accent);background:var(--accent);color:#130d22;gap:.8rem;font-weight:700}.home-actions .primary-action:hover{color:#0f0b1e;background:#bea9ff}.home-actions .secondary-action{color:var(--text);background:#a78bfa14}.home-actions .text-action{color:var(--muted);border-color:#0000;padding-inline:.35rem}.home-actions .text-action:hover{color:var(--accent);background:0 0}.home-hero .brand-line{border-top:1px solid var(--line);color:#817993;letter-spacing:.08em;margin:2.5rem 0 0;padding-top:1rem;font-size:.82rem}.section-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:end;padding-bottom:1rem;display:flex}.section-heading h2{margin:0;font-size:1.25rem}.section-heading p{color:var(--muted);margin:0;font-size:.85rem}.post-list{margin:0;padding:0;list-style:none}.post-list li{border-bottom:1px solid var(--line)}.post-row{grid-template-columns:1fr auto;gap:2rem;padding:2rem 0;text-decoration:none;transition:transform .2s;display:grid}.post-row h2{margin:0 0 .45rem;font-size:clamp(1.2rem,3vw,1.7rem);transition:color .2s}.post-row:hover h2{color:var(--accent)}.post-row p,.post-row time{color:var(--muted);margin:0;font-size:.92rem}.post-row time{white-space:nowrap}.tags{flex-wrap:wrap;gap:.65rem;margin-top:.85rem;display:flex}.tags span{color:var(--accent);font-size:.78rem}.page-header{max-width:700px;margin-bottom:4rem}.page-header h1,.empty-page h1{margin:.25rem 0;font-size:clamp(3rem,7vw,5.8rem)}.back-link{color:var(--accent);margin-top:1rem;text-decoration:none;display:inline-block}.series-section{margin-bottom:4rem}.series-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;margin-top:1.25rem;display:grid}.series-card{border:1px solid var(--line);background:linear-gradient(145deg,#a78bfa17,#0000);min-height:170px;padding:1.35rem;text-decoration:none;transition:border-color .2s,transform .2s}.series-card:hover{border-color:var(--accent);transform:translateY(-3px)}.series-card span{color:var(--accent);letter-spacing:.12em;font-size:.72rem;font-weight:700}.series-card h3{margin:.55rem 0;font-size:1.3rem}.series-card p{color:var(--muted);margin:0;font-size:.84rem}.article-list-heading{margin-top:1rem}.work-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;display:grid}.work-card{border:1px solid var(--line);background:linear-gradient(145deg,#a78bfa14,#0000 60%);flex-direction:column;min-width:0;min-height:320px;padding:1.5rem;display:flex}.work-card-meta{justify-content:space-between;align-items:flex-start;gap:1rem;min-height:1.8rem;display:flex}.work-card-meta .eyebrow{margin:0}.work-status{color:#d8cbff;letter-spacing:.05em;background:#a78bfa1a;border:1px solid #a78bfa80;border-radius:999px;flex:none;padding:.18rem .55rem;font-size:.7rem;font-weight:700}.work-card h2{margin:.65rem 0 .4rem;font-size:clamp(1.35rem,3vw,1.75rem)}.work-description{min-height:3.4rem;color:var(--muted);margin:.25rem 0 1.25rem}.architecture{border:1px solid var(--line);background:#0f0b1eb8;align-items:center;gap:.45rem;width:100%;min-width:0;padding:1rem;display:flex;overflow-x:auto}.architecture-node{flex:1 0 max-content;color:#edeaf5;text-align:center;background:#1f1831;border:1px solid #4b3c6d;padding:.45rem .6rem;font-size:.76rem}.architecture-arrow{color:var(--accent);flex:none;font-size:.9rem}.work-tools{border-top:1px solid var(--line);margin-top:1.15rem;padding-top:1rem}.work-tools>span{color:var(--muted);letter-spacing:.1em;font-size:.72rem}.work-tools ul{flex-wrap:wrap;gap:.4rem;margin:.55rem 0 0;padding:0;list-style:none;display:flex}.work-tools li{color:#d7caff;background:#a78bfa1a;border-radius:3px;padding:.2rem .55rem;font-size:.75rem}.work-card a{color:var(--accent);margin-top:auto;text-decoration:none}.empty-page{align-content:center;min-height:55vh;display:grid}.article-shell{max-width:980px}.article-header{border-bottom:1px solid var(--line);padding-bottom:2rem}.article-header,.table-of-contents,.affiliate-disclosure,.prose>:not(table){width:min(100%,760px);margin-inline:auto}.article-header time,.article-header p{color:var(--muted)}.article-header .article-byline{margin:.5rem 0 0;font-size:.84rem}.article-header h1{margin:.5rem 0 1rem;font-size:clamp(2.4rem,6vw,4.5rem)}.series-link{color:#d8cbff;border:1px solid #a78bfa73;border-radius:999px;margin-top:.75rem;padding:.35rem .7rem;font-size:.78rem;text-decoration:none;display:inline-flex}.series-link:hover{border-color:var(--accent);background:#a78bfa1f}.table-of-contents{background:linear-gradient(145deg,#1f1831,#171126);border:1px solid #4b3c6d;border-radius:12px;margin-top:2rem;padding:1.5rem}.toc-heading{border-bottom:1px solid #493a68;justify-content:space-between;align-items:end;gap:1rem;padding-bottom:1rem;display:flex}.toc-heading p,.toc-heading h2{margin:0}.toc-heading h2{color:#fcfaff;font-size:1.2rem}.table-of-contents ol{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem 1.5rem;margin:1rem 0 0;padding-left:1.25rem;display:grid}.table-of-contents li{color:#7c689e;padding-left:.2rem}.table-of-contents a{color:#edeaf5;font-size:.9rem;text-decoration:none}.table-of-contents a:hover{color:#cbb9ff;text-underline-offset:3px;text-decoration:underline}.table-of-contents .toc-depth-3{margin-left:1rem}.table-of-contents .toc-depth-3 a{color:#beb7cc;font-size:.84rem}.affiliate-disclosure{background:#211b25;border-left:3px solid #f2c66d;margin-top:2rem;padding:1rem 1.15rem}.affiliate-disclosure strong{color:#ffe2a5}.affiliate-disclosure p{color:#d4cdd9;margin:.3rem 0 0;font-size:.88rem}.prose{padding-top:2rem;font-size:1.05rem}.prose h2,.prose h3{margin-top:2.5rem;scroll-margin-top:6rem}.prose a{color:var(--accent)}.prose blockquote{border-left:3px solid var(--accent);color:var(--muted);margin-block:2rem;padding-left:1.25rem}.prose img[src*="/nfc-water-tracking/"]{border:1px solid var(--line);cursor:zoom-in;border-radius:14px;width:auto;max-width:min(100%,320px);height:auto;margin:2rem auto;transition:transform .2s,box-shadow .2s;display:block}.prose img[src*="/nfc-water-tracking/"]:hover{transform:translateY(-2px);box-shadow:0 12px 30px #00000024}.prose img[src*="/nfc-water-tracking/"]:focus-visible{outline-offset:4px;outline:3px solid #111}.prose img[src$="/shortcuts-app-icon.jpeg"]{width:96px}.prose code{background:var(--surface);color:#d7caff;border-radius:4px;padding:.12rem .35rem}.prose pre{border:1px solid var(--line);padding:1.25rem;overflow:auto;background:var(--surface)!important}.prose table{table-layout:fixed;border-collapse:collapse;background:#110d1d;border:1px solid #51416f;border-radius:10px;width:100%;margin:2.25rem 0;font-size:.95rem;line-height:1.75;display:table;box-shadow:0 16px 40px #0000002e}.prose th,.prose td{overflow-wrap:anywhere;text-align:left;vertical-align:top;border-bottom:1px solid #493a68;border-right:1px solid #493a68;min-width:0;padding:1rem 1.1rem}.prose th:first-child,.prose td:first-child{width:25%;min-width:0}.prose th{color:#fcfaff;background:#302549;font-weight:700}.prose td{color:#e8e4f0;background:#130f21}.prose tbody tr:nth-child(2n) td{background:#1b142b}.prose tbody tr:hover td{background:#241b38}.prose td:first-child{color:#d7caff;font-weight:700}.prose tr:last-child td{border-bottom:0}.prose th:last-child,.prose td:last-child{border-right:0}.site-footer{border-top:1px solid var(--line);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:.75rem 1.5rem;padding-block:1.5rem;font-size:.82rem;display:flex}.site-footer p{margin:0}.site-footer nav{flex-wrap:wrap;gap:1rem;display:flex}.site-footer a{color:inherit;text-underline-offset:.18em}.site-footer a:hover{color:var(--text)}@media (width<=780px){.work-grid{grid-template-columns:1fr}.series-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.post-row{grid-template-columns:1fr}.post-row time{grid-row:1}.nav{flex-direction:column;align-items:flex-start;gap:0;padding-top:1rem}.nav-links{justify-content:space-between;width:100%}.nav-links a{padding:.7rem 0 1rem}.site-header{position:static}.table-of-contents ol{grid-template-columns:1fr}.prose h2,.prose h3{scroll-margin-top:1rem}}@media (width<=520px){.container{width:min(100% - 28px,1080px)}.work-grid,.series-grid{grid-template-columns:1fr}.hero{padding-top:1rem}.home-actions{flex-direction:column;align-items:stretch}.home-actions a{width:100%}.home-actions .text-action{align-self:flex-start;width:auto}.post-row{gap:.6rem}.table-of-contents{padding:1.15rem}.toc-heading{flex-direction:column-reverse;align-items:start;gap:.2rem}.prose table{width:100%;margin-inline:0}.prose th,.prose td{min-width:0;padding:.75rem .65rem}.prose th:first-child,.prose td:first-child{width:32%;min-width:0}}:root{color-scheme:light;--bg:#f7f6f2;--surface:#fff;--accent:#f6df38;--text:#111;--muted:#656565;--line:#d9d8d1}html{background:var(--bg)}body{background:var(--bg);color:var(--text);font-family:Noto Sans TC,system-ui,sans-serif}.site-header{box-shadow:none;backdrop-filter:none;background:#fff;border:0}.nav{min-height:76px}.brand{color:#111;letter-spacing:.13em;flex-direction:column;gap:.05rem;font-size:1.05rem;font-weight:900;line-height:1;display:flex}.brand small{color:#777;letter-spacing:.11em;font-size:.52rem;font-weight:700}.brand{flex:none;width:4.2rem;line-height:0;display:block}.brand-logo{width:100%;height:auto;display:block}.nav-links{gap:.4rem}.nav-links a{color:#111;letter-spacing:.03em;border:1px solid #111;padding:.34rem .55rem;font-size:.73rem;font-weight:800;line-height:1}.nav-links a:hover,.nav-links a[aria-current=page]{background:var(--accent);color:#111;border-color:#111}main.container{min-height:calc(100vh - 132px);padding-block:clamp(3rem,7vw,7rem)}.site-footer{color:#555;border-top:1px solid #111}.home-page{background:#111}.home-page .site-header{z-index:10;background:0 0;width:100%;position:absolute;top:0;left:0}.home-page .brand,.home-page .brand small,.home-page .nav-links a{color:#fff}.home-page .brand{background:#fff;padding:.2rem}.home-page .nav-links a{background:#00000024;border-color:#fff}.home-page .nav-links a:hover,.home-page .nav-links a[aria-current=page]{background:var(--accent);border-color:var(--accent);color:#111}.home-main.container{width:100%;max-width:none;margin:0;padding:0}.home-hero{isolation:isolate;color:#fff;background:#171717;align-items:flex-end;max-width:none;min-height:clamp(680px,100vh,920px);padding:clamp(7rem,12vw,10rem) clamp(1.4rem,5vw,5rem) clamp(2rem,5vw,4rem);display:flex;position:relative;overflow:hidden}.hero-art{z-index:-2;grid-template-columns:31% 37% 32%;display:grid;position:absolute;inset:0}.hero-art:after{content:"";background:linear-gradient(90deg,#00000047,#0000 40%,#0000003d),linear-gradient(#0000 46%,#0000009e);position:absolute;inset:0}.hero-art-panel{filter:grayscale()contrast(1.14)brightness(.72);background-position:50%;background-size:cover}.hero-art-panel-one{background-image:var(--hero-one);background-position:0}.hero-art-panel-two{background-image:var(--hero-two);background-position:50%}.hero-art-panel-three{background-image:var(--hero-three);background-position:100%}.hero-content{grid-template-columns:minmax(0,1fr) minmax(250px,340px);align-items:end;gap:2rem;width:min(100%,1200px);display:grid}.home-hero .eyebrow{grid-column:1/-1;align-self:start;color:var(--accent)!important;font-size:.68rem!important}.home-hero h1{color:#fff;letter-spacing:-.095em;max-width:760px;margin:0;font-size:clamp(4.4rem,10vw,9.5rem);font-weight:900;line-height:.82}.home-hero h1 span{color:var(--accent)}.hero-note{max-width:320px;margin-bottom:.25rem}.hero-note p{color:#fff;margin:0 0 1.25rem;font-size:.94rem;font-weight:700;line-height:1.55}.primary-action{background:var(--accent);color:#111;align-items:center;gap:2rem;padding:.8rem 1rem;font-size:.84rem;font-weight:900;text-decoration:none;display:inline-flex}.primary-action:hover{color:#111;background:#fff;transform:none}.latest-posts{background:var(--bg);width:100%;margin:0;padding:clamp(4rem,9vw,8rem) clamp(1.25rem,5vw,5rem)}.latest-posts .section-heading,.latest-posts .post-list{width:min(1120px,100%);margin-inline:auto}.section-heading{border-color:#111;grid-template-columns:1fr auto;align-items:end;gap:.4rem 2rem;padding-bottom:1.25rem;display:grid}.section-heading .eyebrow{grid-column:1/-1;color:#777!important}.section-heading h2{letter-spacing:-.06em;font-size:clamp(2rem,5vw,4rem);line-height:1}.section-heading p{color:#555}.post-list li{border-color:#c9c7bf}.post-row{padding:1.7rem 0}.post-row:hover{transform:translate(0)}.post-row h2{font-size:clamp(1.4rem,3vw,2.2rem)}.post-row:hover h2,.tags span,.prose a{color:#111;text-decoration-color:var(--accent);text-underline-offset:.14em;text-decoration-thickness:.18em}.post-row p,.post-row time{color:#666}.tags span{color:#555}.page-header h1,.empty-page h1,.article-header h1{color:#111}.series-card,.work-card{background:#fff;border-color:#111}.series-card:hover{box-shadow:7px 7px 0 var(--accent);border-color:#111;transform:translateY(-3px)}.work-status,.series-link{background:var(--accent);color:#111;border-color:#111;border-radius:0}.architecture,.architecture-node{color:#111;background:#fff;border-color:#111}.article-header{border-color:#111}.article-header time,.article-header p,.article-header .article-byline{color:#555}.table-of-contents{background:#fff;border-color:#111;border-radius:0}.toc-heading{border-color:#111}.toc-heading h2,.table-of-contents a{color:#111}.table-of-contents li{color:#777}.affiliate-disclosure{color:#111;background:#fff5bd}.affiliate-disclosure strong,.affiliate-disclosure p{color:#111}.prose code,.prose pre{color:#111;border-color:#111;background:#efeee9!important}.prose table{box-shadow:none;background:#fff;border-color:#111}.prose th,.prose td{color:#111;background:#fff;border-color:#bbb9b2}.prose th{background:var(--accent)}.prose tbody tr:nth-child(2n) td,.prose tbody tr:hover td{background:#f1f0eb}.prose td:first-child{color:#111}.tldr-box{background:#fff5bd;border-left-color:#111}@media (width<=780px){.home-page .site-header{background:#111;position:relative}.home-hero{min-height:680px}.hero-content{grid-template-columns:1fr;gap:1.5rem}.home-hero .eyebrow{grid-column:auto}.hero-note{max-width:360px}.home-hero h1{font-size:clamp(4rem,15vw,7rem)}.nav{flex-direction:row;align-items:center;padding:0}.nav-links{justify-content:flex-end;width:auto}.nav-links a{padding:.32rem}}@media (width<=520px){.nav{min-height:64px}.nav-links{gap:.22rem}.nav-links a{padding:.28rem;font-size:.62rem}.home-hero{min-height:620px;padding:4rem 1.25rem 2rem}.hero-art{grid-template-columns:42% 58%}.hero-art-panel-three{display:none}.latest-posts{padding-left:14px;padding-right:14px}.section-heading{grid-template-columns:1fr}.section-heading h2{font-size:2.5rem}}.filter-chips{flex-wrap:wrap;gap:.65rem;margin:1.5rem 0 2.5rem;display:flex}.filter-chip{cursor:pointer;color:#111;font:inherit;background:0 0;border:1px solid #111;border-radius:999px;padding:.55rem 1rem;font-size:.85rem;transition:background .2s,color .2s,transform .2s}.filter-chip:hover,.filter-chip.is-active{color:#fff;background:#27a9b8;border-color:#27a9b8;transform:translateY(-2px)}.post-card-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(1.25rem,3vw,2.25rem);display:grid}.post-card-grid li{border:0;min-width:0}.post-card{background:#fff;border-radius:0 0 2.25rem 2.25rem;height:100%;transition:transform .28s,box-shadow .28s;overflow:hidden;box-shadow:0 0 0 1px #e3e1db}.post-card:hover{transform:translateY(-10px);box-shadow:0 1.25rem 2.5rem #11111129}.post-card-link{color:#111;flex-direction:column;height:100%;text-decoration:none;display:flex}.post-card-cover{background:#e9e7de;height:clamp(200px,25vw,310px);overflow:hidden}.post-card-cover img,.work-card-cover img{object-fit:cover;width:100%;height:100%;transition:transform .5s cubic-bezier(.2,.8,.2,1),filter .5s;display:block}.post-card:hover .post-card-cover img,.work-card:hover .work-card-cover img{filter:saturate(1.15)contrast(1.06);transform:scale(1.08)}.post-card-content{flex-direction:column;flex:1;min-height:300px;padding:clamp(1.4rem,3vw,2.5rem);display:flex}.post-card-category{color:#1aa0ae;margin:0 0 1rem;font-size:.95rem;font-weight:700}.post-card h2{letter-spacing:-.04em;margin:0;font-size:clamp(1.45rem,2.7vw,2.25rem);line-height:1.3}.post-card-content>p:not(.post-card-category){color:#666;margin:1rem 0 1.5rem;font-size:.94rem}.post-card footer{color:#555;justify-content:space-between;align-items:center;gap:1rem;margin-top:auto;font-size:.9rem;display:flex}.post-card footer time{color:#555}.post-card footer span{color:#111;font-weight:700;transition:transform .2s}.post-card footer b{margin-left:.3rem;transition:transform .2s;display:inline-block}.post-card:hover footer b,.work-card:hover .work-card-link span{transform:translate(.35rem)}.work-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(1.25rem,3vw,2.25rem)}.work-card{border:0;border-radius:0 0 2.25rem 2.25rem;min-height:0;padding:0;transition:transform .28s,box-shadow .28s;overflow:hidden;box-shadow:0 0 0 1px #e3e1db}.work-card:hover{border-color:#0000;transform:translateY(-10px);box-shadow:0 1.25rem 2.5rem #11111129}.work-card-cover{background:#e9e7de;height:clamp(190px,22vw,290px);position:relative;overflow:hidden}.work-card-cover .work-status{border:0;border-radius:999px;position:absolute;top:1rem;right:1rem;box-shadow:0 .25rem .75rem #00000024}.work-card-meta,.work-card h2,.work-description,.work-card .architecture,.work-card .work-tools,.work-card-link{width:calc(100% - 3rem);margin-left:auto;margin-right:auto}.work-card-meta{min-height:0;margin-top:1.6rem}.work-card h2{margin-top:.45rem}.work-description{min-height:0}.work-card .architecture{margin-top:.5rem}.work-card .work-tools{margin-top:1rem}.work-card-link{border-top:1px solid #d9d8d1;justify-content:space-between;margin-top:1.5rem;margin-bottom:1.6rem;padding-top:1rem;font-weight:800;text-decoration:none;display:flex;color:#111!important}.work-card-link span{transition:transform .2s}@media (width<=700px){.post-card-grid,.work-grid{grid-template-columns:1fr}.post-card-content{min-height:260px}.post-card-cover{height:230px}}.prose img{object-fit:contain;cursor:zoom-in;border-radius:12px;width:min(100%,640px);max-width:100%;height:auto;max-height:420px;margin:1.5rem auto;display:block}.prose img:focus-visible{outline-offset:4px;outline:3px solid #111}.prose .article-figure{text-align:center;margin:2rem auto}.prose .article-figure img{width:min(100%,258px);max-width:100%;margin:0 auto}.prose .article-figure figcaption{color:var(--muted);margin-top:.6rem;font-size:.8rem}@media (width<=520px){.prose img{max-height:360px}.prose .article-figure img{width:min(100%,220px)}}
