:root{--ink:#171717;--muted:#626262;--line:#d9d9dc;--sidebar:224px}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:30px}body{margin:0;color:var(--ink);background:linear-gradient(105deg,#fafafa 15%,#eff0f2 62%,#e6e7eb);font-family:Arial,"Microsoft YaHei","PingFang SC",sans-serif;font-size:15px;line-height:1.65}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:4px}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:2px solid #555;outline-offset:4px}img{display:block;max-width:100%;height:auto}h1,h2,h3,p,figure{margin:0}h1,h2,h3{line-height:1.35;text-wrap:pretty}p{text-wrap:pretty}svg{width:19px;height:19px;flex:none}.skip{position:fixed;z-index:100;top:-60px;left:16px;background:white;padding:10px}.skip:focus{top:8px}
.sidebar{position:fixed;inset:0 auto 0 0;width:var(--sidebar);padding:60px 16px 24px;background:#f3f3f3;overflow-y:auto;z-index:30;border-right:1px solid #e6e6e6;display:flex;flex-direction:column}.identity{display:flex;align-items:center;gap:12px;padding:0 8px}.identity:hover{text-decoration:none}.avatar{width:40px;height:40px;display:grid;place-items:center;border-radius:50%;background:#e0e0e0;font-size:20px}.identity strong{display:block;font-size:18px;font-weight:500}.identity small{display:block;font-size:13px;white-space:nowrap}.profile-line{font-size:12px;color:var(--muted);margin:15px 8px 28px}.sidebar nav{display:grid;gap:6px}.sidebar nav a{display:flex;align-items:center;gap:11px;min-height:40px;padding:8px 12px;border-radius:5px;font-size:14px;transition:background .18s}.sidebar nav a:hover{background:#e3e3e3;text-decoration:none}.sidebar nav a[aria-current]{background:#171717;color:#fff}.sidebar-note{margin:48px 8px 0;font-size:13px;color:var(--muted)}.sidebar-note>span{color:#262626}.sidebar-note p{margin:12px 0 15px;line-height:1.8}.sidebar-note a{font-size:12px}.sidebar-credit{margin:auto 8px 0;padding-top:48px;font-size:10px;color:#666}.mobile-header,.menu-close,.menu-backdrop{display:none}.page-shell{margin-left:var(--sidebar);min-height:100vh;padding:120px 48px 30px}.wrap{max-width:792px;margin-left:auto;margin-right:auto}.home-intro{margin-bottom:28px}.home-intro h1{font-size:44px;font-weight:650;letter-spacing:-1px;margin-bottom:14px}.home-intro p{font-size:15px;color:#353535}.work{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.project-card{min-width:0;background:#e7e7e8;border-radius:13px;padding:8px;box-shadow:0 1px 3px #00000016;transition:transform .2s,box-shadow .2s}.project-card:hover{transform:translateY(-3px);box-shadow:0 5px 16px #00000012}.project-cover{display:block;background:#f9fafb;border-radius:6px;overflow:hidden;aspect-ratio:1.9;position:relative}.project-cover:hover{text-decoration:none}.cover-heading{display:flex;align-items:center;justify-content:space-between;padding:13px 16px 10px;background:#fafafa}.cover-heading strong{font-size:22px;letter-spacing:2px}.cover-heading span{font-size:11px;color:#666}.project-cover img{width:92%;margin:0 auto;box-shadow:0 0 0 1px #ddd;border-radius:4px 4px 0 0}.card-content{padding:10px 2px 3px}.card-content h2{font-size:18px;font-weight:650;margin-bottom:4px;letter-spacing:-.2px}.card-label{font-size:12px;color:#626262;margin-bottom:6px}.card-description{font-size:14px;line-height:1.65;color:#383838;margin-bottom:16px}.card-actions{display:flex;flex-wrap:wrap;gap:8px}.button{display:inline-flex;align-items:center;justify-content:center;min-height:32px;padding:4px 12px;background:#171717;color:#fff;font-size:13px;border-radius:5px;line-height:1.5;transition:background .18s}.button:hover{background:#3a3a3a;text-decoration:none}.card-status{font-size:12px;color:#454545;margin-top:9px}.tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px}.tags span{padding:1px 8px;background:#f7f7f7;border-radius:20px;font-size:11px;line-height:1.7}.home-end{margin-top:40px;padding-top:22px;border-top:1px solid var(--line);font-size:13px;color:var(--muted)}.home-end a{display:inline-block;margin-top:7px}.text-link{text-decoration:underline;text-underline-offset:4px}footer{display:flex;gap:16px;justify-content:space-between;padding-top:64px;font-size:11px;color:#686868}
.case-page .wrap{max-width:672px}.case-heading .back{display:inline-block;margin-bottom:22px;font-size:14px}.eyebrow{font-size:13px;color:#626262;margin-bottom:10px}.case-heading h1{font-size:32px;letter-spacing:-.5px}.byline{font-size:13px;color:#777;margin-top:14px}.case-subtitle{font-size:17px;color:#666;margin-top:18px;line-height:1.8}.metadata{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 24px;margin:24px 0}.metadata dt{font-size:12px;color:#777}.metadata dd{font-size:14px;margin:3px 0 0}.case-actions{display:flex;gap:20px;align-items:center;margin:22px 0 28px;font-size:13px}.case-hero{margin-bottom:32px}.evidence{margin:26px 0}.zoom{border:1px solid #ddd;padding:0;border-radius:6px;background:#fff;display:block;width:100%;position:relative;overflow:hidden}.zoom img{width:100%}.zoom span{position:absolute;right:8px;bottom:8px;border-radius:4px;background:#fffef5ed;padding:3px 9px;font-size:11px;color:#444;opacity:0;transition:opacity .18s}.zoom:hover span,.zoom:focus-visible span{opacity:1}figcaption{font-size:12px;color:#666;margin-top:8px}.toc{margin:0 0 34px;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font-size:13px}.toc summary{font-weight:600;cursor:pointer}.toc nav{display:flex;flex-wrap:wrap;gap:8px 20px;margin-top:12px}.toc nav small{color:#888;margin-right:7px}.toc>a{display:none}.case-content{font-size:16px;line-height:1.85}.case-section{margin-bottom:52px;scroll-margin-top:0}.section-no{font-size:12px;color:#777;margin-bottom:14px}.case-section h2{font-size:25px;line-height:1.5;margin-bottom:18px}.case-section h3{font-size:19px;margin:28px 0 12px}.case-section p{margin-bottom:16px}.case-section p a{border-bottom:1px solid #aaa}.table-wrap{max-width:100%;overflow-x:auto;margin:24px 0;border:1px solid #d6d6d6;border-radius:5px}table{border-collapse:collapse;width:100%;font-size:13px;line-height:1.75;text-align:left;min-width:460px}th{font-weight:600;background:#e7e7e7}th,td{padding:12px 14px;border-bottom:1px solid #d8d8d8;vertical-align:top}tr:last-child td{border-bottom:0}td{background:#ffffff50}.flow{display:flex;align-items:center;flex-wrap:wrap;gap:10px;font-size:13px;margin:22px 0}.flow span{border:1px solid #ccc;background:#fafafa;border-radius:4px;padding:6px 12px}.flow b{font-weight:400;color:#888}.subtle,.version-note{font-size:14px;color:#666}.version-note{border-top:1px solid var(--line);padding-top:18px;margin-top:28px}.equation{background:#e7e7e8;border-radius:5px;padding:18px 20px;font-size:15px;font-weight:600;margin:22px 0}.failure{margin:22px 0;padding-bottom:14px;border-bottom:1px solid var(--line)}.next-project{border-top:1px solid var(--line);padding-top:28px}.next-project>p{font-size:12px;color:#777;margin-bottom:6px}.next-project h2{font-size:24px;margin-bottom:13px}.next-project a{font-size:14px}.simple-heading{max-width:672px;margin-bottom:38px}.simple-heading h1{font-size:36px;margin-bottom:18px}.lead{font-size:17px;color:#666;line-height:1.9}.prose{max-width:672px;font-size:16px;line-height:1.9}.prose h2{font-size:23px;margin:34px 0 15px}.prose p{margin-bottom:20px}.resources{max-width:672px}.resource-row{padding:26px 0;border-top:1px solid var(--line)}.resource-row span{font-size:12px;color:#777}.resource-row h2{font-size:21px;margin:9px 0 12px}.resource-row p{font-size:14px;color:#666;line-height:1.85;margin-bottom:16px}.resource-row>a{font-size:13px}.quiet{background:#292929}dialog{max-width:95vw;width:1300px;max-height:94vh;border:0;border-radius:8px;padding:48px 16px 16px;background:#f8f8f8;box-shadow:0 10px 70px #0005}dialog::backdrop{background:#000a}dialog img{max-height:75vh;object-fit:contain;margin:auto}dialog p{font-size:13px;color:#555;margin-top:12px}.dialog-close{position:absolute;top:10px;right:14px;background:none;border:0;font-size:14px;padding:5px}
@media(min-width:1500px){.page-shell{padding-top:128px}.wrap{max-width:850px}}@media(max-width:1100px) and (min-width:761px){:root{--sidebar:208px}.page-shell{padding:80px 30px 28px}.work{gap:18px}.home-intro h1{font-size:36px}.card-content h2{font-size:17px}.cover-heading{padding:9px 12px}.cover-heading strong{font-size:19px}}
@media(max-width:760px){html{scroll-padding-top:88px}.sidebar{visibility:hidden;transform:translateX(-100%);transition:transform .22s,visibility .22s;width:260px;z-index:50;padding-top:64px}.menu-open .sidebar{visibility:visible;transform:translateX(0)}.mobile-header{display:flex;position:fixed;top:0;left:0;right:0;z-index:40;align-items:center;justify-content:space-between;padding:10px 18px;background:#f4f4f4;box-shadow:0 2px 8px #0000000c;min-height:66px}.mobile-header .identity{padding:0;gap:10px}.mobile-header .avatar{width:34px;height:34px;font-size:18px}.mobile-header .identity strong{font-size:15px}.mobile-header .identity small{font-size:11px}.menu-toggle{border:0;background:none;padding:10px;display:grid;place-items:center}.menu-toggle svg{fill:none;stroke:currentColor;stroke-width:1.7;width:22px;height:22px}.menu-close{display:block;position:absolute;top:12px;right:16px;border:0;background:none;font-size:28px;padding:3px 10px}.menu-backdrop:not([hidden]){display:block;position:fixed;inset:0;z-index:45;background:#0005}.menu-open{overflow:hidden}.page-shell{margin-left:0;padding:96px 18px 28px}.home-intro{margin-bottom:24px}.home-intro h1{font-size:29px;letter-spacing:0;margin-bottom:12px}.home-intro p{font-size:14px;line-height:1.8}.work{gap:18px}.project-card{padding:8px;border-radius:12px}.card-content{padding:10px 3px 5px}.card-description{font-size:14px}.card-actions .button{min-height:36px}.card-label{font-size:12px}.tags span{font-size:12px}.card-status{font-size:13px}.cover-heading span{font-size:12px}.sidebar-credit{font-size:11px}.home-end{font-size:13px}footer{flex-wrap:wrap;font-size:11px;padding-top:45px}.case-heading h1{font-size:28px}.case-heading .back{margin-bottom:22px}.case-subtitle{font-size:16px}.case-page .page-shell{padding-top:94px}.case-section{scroll-margin-top:0}.case-section h2{font-size:23px}.case-content{font-size:16px}.metadata{gap:16px}.metadata dd{font-size:13px}.case-actions{gap:18px;flex-wrap:wrap}.toc{font-size:14px}.toc nav{display:grid;gap:9px}.simple-heading h1{font-size:30px}.zoom span{opacity:1;font-size:10px}.resource-row h2{font-size:21px}}@media(max-width:580px){.work{grid-template-columns:1fr}.project-cover{aspect-ratio:1.85}.card-content h2{font-size:19px}.card-description{margin-bottom:14px}.cover-heading{padding:14px 16px 11px}.cover-heading strong{font-size:24px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important;animation:none!important}}
/* Touch targets and readable table overflow on narrow screens. */
.table-hint{display:none}
.route-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:30px}.route{border:1px solid var(--line);border-radius:8px;background:#ffffff80;padding:18px 20px;display:block}.route:hover{background:#fff;text-decoration:none}.route>span{font-size:12px;color:var(--muted)}.route strong{display:block;font-size:17px;margin:5px 0}.route p{font-size:13px;color:#555}.link-group{display:flex;flex-wrap:wrap;gap:10px 20px;align-items:center}.link-group a{min-height:40px;display:inline-flex;align-items:center}.prose .link-group{margin:12px 0 24px}.resource-row h2 a{overflow-wrap:anywhere}.resource-row p,.prose p{overflow-wrap:anywhere}.case-content ul,.case-content ol{padding-left:1.4em}.case-content li{margin:8px 0}.case-content li a{text-decoration:underline;text-underline-offset:3px}
@media(max-width:580px){.route-grid{grid-template-columns:1fr;gap:10px}.route{padding:14px 16px}.route strong{font-size:16px}.link-group{gap:8px 16px}}
@media print{body{background:#fff;color:#111}.sidebar,.mobile-header,.menu-backdrop,dialog,.skip,footer,.toc,.zoom span{display:none!important}.page-shell{margin:0;padding:0}.wrap,.case-page .wrap{max-width:none}.case-section{break-inside:avoid;margin-bottom:24px}.case-content{font-size:11pt}.case-section h2{font-size:17pt}.table-wrap{overflow:visible}table{min-width:0;font-size:9pt}.project-card{break-inside:avoid;box-shadow:none}.button{color:#111;background:#fff;border:1px solid #aaa}.evidence img{max-height:150mm;object-fit:contain}}
@media(max-width:760px){.table-hint{display:block;font-size:12px!important;color:#777;margin:22px 0 -17px!important}.button,.card-actions .button{min-height:44px}.case-actions .text-link{display:inline-flex;align-items:center;min-height:44px}.toc nav a,.resource-row>.text-link{display:inline-flex;align-items:center;min-height:44px}.sidebar nav a{min-height:44px}}



















/* Portfolio v5 topic structure */
.case-page .wrap{max-width:900px}.full-toc{background:#f1f3f5;border:1px solid #dcdfe3;border-radius:8px;padding:22px 24px;margin:12px 0 44px}.full-toc summary{font-size:18px}.full-toc .chapter-nav{display:grid;grid-template-columns:1fr 1fr;gap:22px 30px;margin-top:20px}.full-toc .chapter-link{display:block;font-size:15px;font-weight:650;min-height:0;margin-bottom:7px}.subtopics{display:flex;flex-wrap:wrap;gap:4px 14px}.full-toc .subtopics a{font-size:12px;min-height:0;line-height:1.8;color:#5a6370}.case-content h3{font-size:19px;border-left:3px solid #53677a;padding-left:12px;scroll-margin-top:28px}.case-content h2{font-size:28px;border-bottom:1px solid #cfd4da;padding-bottom:13px}.case-content .table-wrap{margin:18px 0 26px}.case-content table{font-size:14px;line-height:1.75}.case-content th{background:#edf0f3;font-weight:600}.case-content th,.case-content td{padding:12px 14px;overflow-wrap:anywhere}.case-content p{line-height:1.95}.case-content .evidence{max-width:780px;margin:24px auto}.case-end{display:flex;gap:24px;border-top:1px solid #ddd;padding:24px 0}.case-section{margin-bottom:70px;scroll-margin-top:28px}
@media(max-width:800px){.full-toc{padding:18px 16px}.full-toc .chapter-nav{grid-template-columns:1fr;gap:18px}.case-content table{font-size:13px;min-width:580px}.case-content h2{font-size:24px}.case-content h3{font-size:18px}.case-content th,.case-content td{padding:10px}.case-section{scroll-margin-top:85px}.case-content h3{scroll-margin-top:85px}.case-actions{flex-wrap:wrap;gap:14px}.case-end{flex-wrap:wrap}}

/* v8 business flow diagrams */
.flow-figure{margin:24px 0 32px}.flow-figure a{display:block}.flow-figure img{width:100%;height:auto;border:1px solid #dce4ef;border-radius:10px}.case-content .flow-figure{max-width:none}@media(max-width:800px){.flow-figure{overflow:auto}.flow-figure img{min-width:740px}.case-content .flow-figure a{width:740px}}
