.reading-progress{position:fixed;top:0;left:0;right:0;height:2px;z-index:100;background:transparent;pointer-events:none}.reading-progress>div{height:100%;background:var(--accent);width:0%;transition:width .15s}.breadcrumbs{display:flex;gap:10px;font-size:13px;color:var(--ink-3);margin:32px 0 56px;align-items:center;font-family:var(--sans)}.breadcrumbs a{color:var(--ink-3);transition:color .2s}.breadcrumbs a:hover{color:var(--ink)}.bc-sep{color:var(--ink-3);opacity:.6}.art-header{padding-bottom:60px;border-bottom:1px solid var(--line)}.art-head-grid{display:grid;grid-template-columns:1.6fr 1fr;gap:80px;align-items:end}.art-title{font-family:var(--sans);font-weight:400;font-size:clamp(36px,5vw,76px);line-height:1.02;letter-spacing:-.035em;margin:18px 0 32px;max-width:880px;text-wrap:balance}.art-lede{font-family:var(--serif);font-size:20px;line-height:1.5;color:var(--ink-2);max-width:720px;margin:0 0 48px}.art-meta-row{display:flex;gap:40px;padding-top:28px;border-top:1px solid var(--line);flex-wrap:wrap}.art-meta-l{font-size:10px;color:var(--ink-3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:6px}.art-meta-v{font-size:18px;letter-spacing:-.02em}.art-side-card{background:var(--bg-2);border:1px solid var(--line);border-radius:16px;padding:24px}.art-side-q{font-family:var(--serif);font-style:italic;font-size:18px;line-height:1.45;color:var(--ink);margin:18px 0 24px}.art-side-author{display:flex;gap:12px;align-items:center;padding-top:16px;border-top:1px solid var(--line)}.art-side-avatar{width:38px;height:38px;border-radius:50%;background:var(--accent);color:var(--accent-ink);display:grid;place-items:center;font-size:14px;font-weight:500}@media(max-width:900px){.art-head-grid{grid-template-columns:1fr;gap:40px}}.art-shifts{padding:60px 0 20px}.art-shifts-head{display:flex;gap:32px;align-items:baseline;margin-bottom:28px}.art-shifts-head h2{font-size:28px;letter-spacing:-.02em;margin:0;font-weight:500}.art-shifts-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:16px;overflow:hidden}.shift-cell{background:var(--bg);padding:28px 24px;min-height:200px;display:flex;flex-direction:column;gap:10px;transition:background .2s}.shift-cell:hover{background:var(--bg-2)}.shift-n{font-size:34px;line-height:1;letter-spacing:-.04em;font-weight:400;color:var(--accent)}.shift-up .shift-n:before{content:"↑ ";opacity:.6;font-size:.7em}.shift-down .shift-n:before{content:"↓ ";opacity:.6;font-size:.7em}.shift-t{font-size:16px;letter-spacing:-.01em}.shift-d{font-size:13px;color:var(--ink-2);line-height:1.45;margin:auto 0 0}@media(max-width:900px){.art-shifts-grid{grid-template-columns:1fr 1fr}}.art-main{padding:80px 0 60px}.art-grid{display:grid;grid-template-columns:260px 1fr;gap:80px;align-items:start}.toc{position:sticky;top:92px}.toc-label{font-size:10px;letter-spacing:.16em;color:var(--ink-3);margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--line)}.toc-list{list-style:none;padding:0;margin:0 0 28px}.toc-list li{padding:0;margin:0}.toc-list li a{display:grid;grid-template-columns:28px 1fr;gap:10px;padding:9px 0;color:var(--ink-3);font-size:13px;line-height:1.4;font-family:var(--sans);transition:color .2s;border-bottom:1px dashed transparent}.toc-list li:not(:last-child) a{border-bottom-color:var(--line)}.toc-list li:hover a{color:var(--ink-2)}.toc-list li.on a{color:var(--ink)}.toc-list li.on .toc-num{color:var(--accent)}.toc-num{font-size:10px;color:var(--ink-3);transition:color .2s}.toc-cta{padding-top:20px;border-top:1px solid var(--line)}.toc-cta-link{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--accent)}@media(max-width:1080px){.art-grid{grid-template-columns:1fr;gap:40px}.toc{position:static}}.prose{font-family:var(--serif);font-size:19px;line-height:1.65;color:var(--ink);max-width:760px}.prose p{margin:0 0 22px}.prose strong{font-weight:500;color:var(--ink)}.prose a{color:var(--ink);border-bottom:1px solid var(--accent);transition:background .2s}.prose a:hover{background:color-mix(in srgb,var(--accent) 18%,transparent)}.prose ul,.prose ol{margin:0 0 28px;padding-left:0;list-style:none}.prose ul li,.prose ol li{position:relative;padding-left:32px;margin-bottom:12px;line-height:1.55}.prose ul li:before{content:"";position:absolute;left:0;top:.65em;width:14px;height:1px;background:var(--accent)}.prose ol{counter-reset:ol}.prose ol li{counter-increment:ol}.prose ol li:before{content:counter(ol,decimal-leading-zero);position:absolute;left:0;top:0;font-family:var(--mono);font-size:12px;color:var(--accent);padding-top:6px}.art-section{padding-top:56px;margin-bottom:12px}.art-section:first-child{padding-top:0}.art-sec-head{display:grid;grid-template-columns:60px 1fr;gap:24px;align-items:baseline;margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--line)}.art-sec-num{font-size:12px;color:var(--accent);letter-spacing:.06em;padding-top:8px}.art-sec-title{font-size:clamp(28px,3vw,40px);letter-spacing:-.025em;line-height:1.1;margin:0;font-weight:500;max-width:720px;text-wrap:balance}.prose h3{font-family:var(--sans);font-weight:500;font-size:24px;letter-spacing:-.02em;line-height:1.2;margin:40px 0 14px;color:var(--ink)}.pull-quote{margin:40px 0;padding:0 0 0 40px;border-left:2px solid var(--accent);position:relative}.pull-mark{position:absolute;left:-8px;top:-28px;font-size:90px;line-height:1;color:var(--accent);font-style:italic}.pull-quote p{font-family:var(--serif);font-style:italic;font-size:24px;line-height:1.4;color:var(--ink);margin:0 0 14px}.pull-quote cite{font-style:normal;font-size:12px;color:var(--ink-3);letter-spacing:.08em}.cmp-wrap{margin:28px 0 36px;overflow-x:auto;border:1px solid var(--line);border-radius:14px}.cmp-table{width:100%;border-collapse:collapse;font-family:var(--sans);font-size:14px}.cmp-table thead th{background:var(--bg-2);padding:14px 18px;text-align:left;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);font-weight:500;border-bottom:1px solid var(--line)}.cmp-table tbody td{padding:14px 18px;border-bottom:1px solid var(--line);color:var(--ink-2);vertical-align:top}.cmp-table tbody tr:last-child td{border-bottom:none}.cmp-table tbody tr:hover{background:color-mix(in srgb,var(--accent) 5%,transparent)}.cmp-row-label{color:var(--ink)!important;font-size:14px}.cmp-verdict{font-size:13px}.cmp-good{color:var(--good)!important}.cmp-bad{color:var(--ink-3)!important}.cmp-mid{color:var(--ink-2)!important}.cmp-need{color:var(--accent)!important;font-weight:500}.callout{display:grid;grid-template-columns:36px 1fr;gap:16px;align-items:start;margin:32px 0;padding:22px 24px;background:color-mix(in srgb,var(--accent) 8%,transparent);border:1px solid color-mix(in srgb,var(--accent) 35%,var(--line));border-radius:14px}.callout-icon{width:36px;height:36px;border-radius:50%;background:var(--accent);color:var(--accent-ink);display:grid;place-items:center;font-size:18px;font-weight:500}.callout-title{font-size:16px;margin-bottom:6px;letter-spacing:-.01em}.callout-body{font-family:var(--serif);font-size:16px;line-height:1.5;color:var(--ink-2)}.callout-body p:last-child{margin-bottom:0}.gantt{margin:28px 0 40px;padding:24px;border:1px solid var(--line);border-radius:14px;background:var(--bg-2)}.gantt-head{display:flex;justify-content:space-between;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--line)}.gantt-axis{display:flex;justify-content:space-between;padding-left:100px;color:var(--ink-3);font-size:11px;margin-bottom:14px}.gantt-bars{display:flex;flex-direction:column;gap:8px}.gantt-row{display:grid;grid-template-columns:100px 1fr 90px;gap:16px;align-items:center}.gantt-label{font-size:13px;color:var(--ink)}.gantt-track{position:relative;height:30px;background:var(--bg-3);border-radius:6px;overflow:hidden}.gantt-bar{position:absolute;top:0;bottom:0;background:var(--accent);border-radius:6px;display:flex;align-items:center;padding:0 12px;min-width:80px}.gantt-bar-label{font-size:12px;color:var(--accent-ink);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gantt-when{font-size:11px;color:var(--ink-3);text-align:right}@media(max-width:800px){.gantt-row{grid-template-columns:80px 1fr}.gantt-when{display:none}.gantt-axis{padding-left:80px}}.stack-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin:28px 0 32px}.stack-cell{border:1px solid var(--line);border-radius:12px;padding:20px 22px;background:var(--bg);transition:border-color .2s}.stack-cell:hover{border-color:var(--accent)}.stack-l-head{display:flex;gap:14px;align-items:center;margin-bottom:12px}.stack-l-head h4{margin:0;font-size:17px;font-weight:500;letter-spacing:-.01em}.stack-l-head .idx{color:var(--ink-3)}.stack-tech{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.stack-chip{font-size:11px;padding:4px 10px;border-radius:100px;background:var(--bg-3);color:var(--ink-2)}.stack-why{font-size:13px;color:var(--ink-3);margin:0;line-height:1.45}.related-section{padding:80px 0;background:var(--bg-2);border-top:1px solid var(--line)}.related-head{display:flex;justify-content:space-between;align-items:end;margin-bottom:36px}.related-head h2{font-size:clamp(28px,3vw,44px);margin:8px 0 0;letter-spacing:-.025em;font-weight:500}.related-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.related-card{background:var(--bg);border:1px solid var(--line);border-radius:14px;padding:24px;display:flex;flex-direction:column;gap:14px;min-height:220px;transition:transform .2s,border-color .2s}.related-card:hover{transform:translateY(-3px);border-color:var(--ink-3)}.related-top{display:flex;justify-content:space-between;align-items:center}.related-t{font-size:19px;letter-spacing:-.015em;line-height:1.25;margin:0}.related-d{font-size:14px;color:var(--ink-2);margin:0;line-height:1.45;flex:1}.related-arrow{margin-top:auto;font-size:13px;color:var(--accent);display:inline-flex;gap:6px;align-items:center}@media(max-width:900px){.related-grid{grid-template-columns:1fr}}.nav-links a.active{color:var(--ink)}.nav-links a.active:after{content:"";display:block;width:24px;height:2px;background:var(--accent);margin-top:4px;border-radius:1px}.blog-header{padding:60px 0 40px}.blog-h-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:80px;align-items:end}.blog-h-title{font-family:var(--sans);font-weight:400;font-size:clamp(48px,6.5vw,96px);line-height:.98;letter-spacing:-.04em;margin:18px 0 0}.blog-h-sub{font-family:var(--serif);font-size:19px;line-height:1.5;color:var(--ink-2);max-width:480px;margin:0}.blog-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-top:56px}.blog-stat{padding:22px;background:var(--bg);display:flex;flex-direction:column;gap:4px}.blog-stat-n{font-family:var(--sans);font-size:34px;line-height:1;letter-spacing:-.03em;color:var(--ink)}.blog-stat-l{font-size:12px;color:var(--ink-3);font-family:var(--mono);letter-spacing:.06em}@media(max-width:900px){.blog-h-grid{grid-template-columns:1fr;gap:28px}}.blog-filter{position:sticky;top:68px;z-index:20;background:var(--bg);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:18px 0;backdrop-filter:blur(12px)}.blog-filter-inner{display:flex;gap:28px;align-items:center}.blog-filter-label{font-size:11px;color:var(--ink-3);font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;flex-shrink:0}.blog-cats{display:flex;flex-wrap:wrap;gap:6px;flex:1}.blog-cat{padding:7px 14px;border-radius:100px;border:1px solid var(--line);font-family:var(--sans);font-size:13px;color:var(--ink-2);background:transparent;cursor:pointer;transition:all .2s;white-space:nowrap}.blog-cat:hover{color:var(--ink);border-color:var(--ink-3)}.blog-cat.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}.blog-cat-count{font-family:var(--mono);font-size:10px;opacity:.6;margin-left:6px}.blog-search{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:100px;padding:6px 14px;min-width:200px}.blog-search input{border:none;background:none;font-family:var(--sans);font-size:13px;color:var(--ink);outline:none;width:100%}.blog-featured{padding:60px 0}.feat-card{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:center;padding:48px;background:var(--bg-2);border:1px solid var(--line);border-radius:22px}.feat-tags{display:flex;gap:8px;margin-bottom:24px}.feat-title{font-family:var(--sans);font-weight:400;font-size:clamp(32px,3.6vw,52px);line-height:1.05;letter-spacing:-.03em;margin:0 0 20px;text-wrap:balance}.feat-d{font-family:var(--serif);font-size:18px;line-height:1.5;color:var(--ink-2);margin:0 0 32px}.feat-meta{display:flex;gap:32px;padding-top:24px;border-top:1px solid var(--line);align-items:center}.feat-meta-cell .l{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);font-family:var(--mono)}.feat-meta-cell .v{font-family:var(--sans);font-size:15px;margin-top:4px}.feat-vis{aspect-ratio:1 / 1;border-radius:18px;background:radial-gradient(circle at 30% 30%,color-mix(in srgb,var(--accent) 35%,transparent),transparent 60%),radial-gradient(circle at 70% 70%,color-mix(in srgb,var(--accent) 25%,transparent),transparent 60%),var(--bg-3);position:relative;overflow:hidden;display:grid;place-items:center}.feat-vis-num{font-family:var(--sans);font-weight:400;font-size:18vw;line-height:1;letter-spacing:-.06em;color:color-mix(in srgb,var(--ink) 14%,transparent)}.feat-vis-grid{position:absolute;inset:0;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:40px 40px;opacity:.3}@media(max-width:900px){.feat-card{grid-template-columns:1fr;gap:32px;padding:28px}}.blog-list{padding:0 0 60px}.posts-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.post-card{background:var(--bg);padding:32px 28px 28px;display:flex;flex-direction:column;gap:16px;min-height:360px;transition:background .2s}.post-card:hover{background:var(--bg-2)}.post-top{display:flex;justify-content:space-between;align-items:center}.post-cat-link{font-family:var(--mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--accent)}.post-date{font-family:var(--mono);font-size:11px;color:var(--ink-3);letter-spacing:.04em}.post-num{font-family:var(--sans);font-size:56px;line-height:1;letter-spacing:-.05em;color:color-mix(in srgb,var(--ink-3) 50%,transparent);margin:8px 0 0;font-weight:400}.post-t{font-family:var(--sans);font-weight:500;font-size:22px;line-height:1.2;letter-spacing:-.02em;margin:0;text-wrap:balance}.post-d{font-family:var(--serif);font-size:15px;line-height:1.45;color:var(--ink-2);margin:0;flex:1}.post-foot{display:flex;justify-content:space-between;align-items:center;padding-top:16px;border-top:1px solid var(--line)}.post-time{font-family:var(--mono);font-size:11px;color:var(--ink-3)}.post-link{font-family:var(--sans);font-size:13px;color:var(--ink);display:inline-flex;gap:6px;align-items:center}.post-link .arrow{transition:transform .2s}.post-card:hover .post-link .arrow{transform:translate(4px)}@media(max-width:1000px){.posts-grid{grid-template-columns:1fr 1fr}}@media(max-width:700px){.posts-grid{grid-template-columns:1fr}}.blog-pagination{display:flex;justify-content:center;gap:6px;padding:48px 0;align-items:center}.page-btn{padding:8px 14px;border-radius:8px;border:1px solid var(--line);font-family:var(--sans);font-size:14px;color:var(--ink-2);background:transparent;cursor:pointer;min-width:38px}.page-btn:hover{border-color:var(--ink-3);color:var(--ink)}.page-btn.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}.page-ellipsis{color:var(--ink-3);padding:0 8px}.newsletter{margin:60px 0;padding:40px 48px;background:var(--ink);color:var(--bg);border-radius:22px;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}.newsletter h3{font-family:var(--sans);font-weight:400;font-size:clamp(24px,2.6vw,36px);letter-spacing:-.025em;margin:0 0 8px;line-height:1.1}.newsletter p{font-family:var(--serif);font-size:16px;color:color-mix(in srgb,var(--bg) 70%,transparent);margin:0;line-height:1.5}.nl-form{display:flex;gap:8px}.nl-form input{flex:1;background:color-mix(in srgb,var(--bg) 10%,transparent);border:1px solid color-mix(in srgb,var(--bg) 20%,transparent);border-radius:100px;padding:14px 22px;color:var(--bg);font-family:var(--sans);font-size:15px;outline:none}.nl-form input::placeholder{color:color-mix(in srgb,var(--bg) 40%,transparent)}.nl-form button{background:var(--accent);color:var(--accent-ink);padding:14px 22px;border-radius:100px;font-family:var(--sans);font-size:15px;cursor:pointer}@media(max-width:900px){.newsletter{grid-template-columns:1fr;padding:32px;gap:24px}}@media(max-width:520px){.art-header{padding-bottom:36px}.art-title{font-size:32px;margin:14px 0 22px}.art-lede{font-size:17px;margin-bottom:28px}.art-meta-row{gap:20px;padding-top:22px}.art-meta-v{font-size:16px}.art-side-card{padding:18px}.art-side-q{font-size:16px}.breadcrumbs{margin:24px 0 32px;flex-wrap:wrap}.art-shifts{padding:36px 0 8px}.art-shifts-head{flex-wrap:wrap;gap:14px;margin-bottom:18px}.art-shifts-head h2{font-size:22px}.art-shifts-grid{grid-template-columns:1fr}.shift-cell{min-height:0;padding:20px 18px}.art-main{padding:36px 0 24px}.art-grid{gap:28px}.art-sec-head{grid-template-columns:48px 1fr;gap:12px;padding-bottom:14px;margin-bottom:22px}.art-sec-title{font-size:24px}.prose{font-size:17px}.prose h3{font-size:20px;margin:32px 0 10px}.pull-quote{padding-left:24px;margin:28px 0}.pull-quote p{font-size:19px}.pull-mark{font-size:64px;top:-18px;left:-4px}.callout{padding:18px;gap:12px;grid-template-columns:32px 1fr}.callout-icon{width:32px;height:32px;font-size:15px}.stack-grid{grid-template-columns:1fr}.gantt{padding:16px}.gantt-row{grid-template-columns:70px 1fr;gap:10px}.gantt-label{font-size:12px}.gantt-bar-label{font-size:11px}.gantt-bar{padding:0 8px}.related-section{padding:48px 0}.related-head{flex-direction:column;align-items:flex-start;gap:12px;margin-bottom:22px}.related-card{min-height:0;padding:20px}.blog-header{padding:32px 0 24px}.blog-h-title{font-size:44px}.blog-h-sub{font-size:16px}.blog-stats{grid-template-columns:1fr;margin-top:32px}.blog-stat{padding:16px 18px;flex-direction:row;align-items:baseline;gap:14px}.blog-stat-n{font-size:26px}.blog-filter{position:static;padding:14px 0}.blog-filter-inner{flex-wrap:wrap;gap:10px}.blog-filter-label{width:100%}.blog-search{min-width:0;width:100%}.blog-cats{gap:4px}.blog-cat{padding:6px 11px;font-size:12px}.blog-featured{padding:32px 0}.feat-card{padding:20px;gap:24px}.feat-title{font-size:28px}.feat-d{font-size:16px;margin-bottom:22px}.feat-meta{flex-direction:column;align-items:flex-start;gap:16px}.feat-meta-cell[style*=auto]{margin-left:0!important}.post-card{min-height:0;padding:24px 22px 22px}.post-num{font-size:40px}.post-t{font-size:19px}.newsletter{padding:24px;margin:32px 0;border-radius:16px}.nl-form{flex-direction:column}.nl-form button{width:100%}.blog-pagination{padding:32px 0;flex-wrap:wrap}}
