@keyframes ch-pop{to{opacity:1}}
:is(html:has(.dev-info),body:has(.dev-info),html:has(.dev-info-page),body:has(.dev-info-page)){height:auto;min-height:100dvh;overflow-y:auto}
:is(body:has(.dev-info),body:has(.dev-info-page)){align-items:flex-start}
body:has(.dev-info) .hub{max-width:860px}
.dev-info{flex-wrap:wrap;justify-content:center;gap:.5rem;margin:0 auto;padding-bottom:4.5rem;display:flex}
.dev-info-page{z-index:1;width:100%;max-width:640px;margin:0 auto;padding-bottom:4.5rem;position:relative}
.dev-info-page .hub-header{margin-bottom:1.5rem}
.info-section{background:var(--surface);border:1px solid var(--surface-hi);border-radius:0;margin-bottom:.7rem;padding:.85rem 1.25rem .95rem}
.info-section .section-title{text-align:left;margin-bottom:1rem;font-size:.82rem}
.tech-icon{width:30px;height:30px;transition:transform .15s,filter .15s;display:inline-block;position:relative}
.tech-icon:before{content:"";-webkit-mask:var(--si) center / contain no-repeat;-webkit-mask:var(--si) center / contain no-repeat;mask:var(--si) center / contain no-repeat;background-color:currentColor;position:absolute;inset:0}
.tech-icon:hover{filter:drop-shadow(0 4px 8px);transform:translateY(-2px)scale(1.12)}
.tech-icon:after{content:attr(aria-label);background:var(--bg-deep);color:var(--text);white-space:nowrap;pointer-events:none;opacity:0;z-index:10;border:1px solid;border-radius:0;padding:.25rem .5rem;font-size:.72rem;line-height:1;transition:opacity .15s,transform .15s;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%)translateY(4px)}
.tech-icon:hover:after{opacity:1;transform:translate(-50%)translateY(0)}
.tech-icon{color:var(--text)}
.tech-stack .dev-info{justify-content:flex-start;padding-bottom:0}
details.info-section{padding-bottom:.85rem;transition:padding-bottom .15s}
details.info-section[open]{padding-bottom:1.15rem}
summary.section-title{cursor:url(https://m.doughmination.gay/cursors/sandrone/Link.png) 4 0,pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:0;list-style:none;transition:margin-bottom .15s,color .15s;display:flex}
summary.section-title::-webkit-details-marker{display:none}
summary.section-title::marker{content:""}
summary.section-title:hover{color:var(--accent)}
summary.section-title:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:0}
summary.section-title:after{content:"";border-bottom:2px solid;border-right:2px solid;flex:none;width:.5rem;height:.5rem;margin-right:.15rem;transition:transform .2s;transform:rotate(45deg)}
details.info-section[open]>summary.section-title{margin-bottom:.75rem}
details.info-section[open]>summary.section-title:after{transform:rotate(-135deg)}
.hw-item{color:var(--text);text-decoration:none}
.hw-intro{color:var(--text-muted);margin:0 0 .9rem;font-size:.8rem}
.hw-list{flex-direction:column;gap:.55rem;margin:0;display:flex}
.hw-row{grid-template-columns:8rem 1fr;align-items:baseline;gap:.7rem;display:grid}
.hw-row dt{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:.72rem}
.hw-row dd{color:var(--text);margin:0;font-size:.88rem}
.ch-root{--ch-cell:13px;--ch-gap:3px;--ch-weekday-w:30px;--contrib-0:#232a33;--contrib-1:#173f2c;--contrib-2:#1e7349;--contrib-3:#34ab68;--contrib-4:#5ce897;--ch-muted:#8b95a1;--ch-text:#d3dae2;width:100%;max-width:100%;color:var(--ch-text);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;display:block}
.ch-count{color:var(--ch-muted);font-variant-numeric:tabular-nums;margin:0 0 14px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:13px}
.ch-scroll{scrollbar-width:thin;scrollbar-color:var(--ch-muted) transparent;padding-bottom:4px;overflow-x:auto}
.ch-scroll::-webkit-scrollbar{height:8px}
.ch-scroll::-webkit-scrollbar-thumb{background:var(--ch-muted);border-radius:0}
.ch-scroll::-webkit-scrollbar-track{background:0 0}
.ch-months{grid-auto-flow:column;grid-auto-columns:var(--ch-cell);gap:var(--ch-gap);margin-left:calc(var(--ch-weekday-w) + var(--ch-gap));height:14px;color:var(--ch-muted);margin-bottom:6px;font-size:11px;display:grid}
.ch-months span{white-space:nowrap;line-height:14px}
.ch-body{gap:var(--ch-gap);display:flex}
.ch-weekdays{grid-template-rows:repeat(7, var(--ch-cell));gap:var(--ch-gap);width:var(--ch-weekday-w);color:var(--ch-muted);font-size:10px;display:grid}
.ch-weekdays span{line-height:var(--ch-cell)}
.ch-grid{grid-template-rows:repeat(7, var(--ch-cell));grid-auto-flow:column;grid-auto-columns:var(--ch-cell);gap:var(--ch-gap);display:grid}
.ch-day{width:var(--ch-cell);height:var(--ch-cell);outline-offset:-1px;opacity:0;border-radius:0;outline:1px solid #ffffff0a;animation:.4s forwards ch-pop}
.ch-day:hover{outline:1px solid var(--ch-text)}
.ch-day.l0{background:var(--contrib-0)}
.ch-day.l1{background:var(--contrib-1)}
.ch-day.l2{background:var(--contrib-2)}
.ch-day.l3{background:var(--contrib-3)}
.ch-day.l4{background:var(--contrib-4)}
.ch-legend{color:var(--ch-muted);align-items:center;gap:6px;margin-top:14px;font-size:11px;display:flex}
.ch-legend .ch-day{opacity:1;animation:none}
@media (max-width:560px){.hw-row{grid-template-columns:6rem 1fr}}
@media (prefers-reduced-motion:reduce){.ch-day{opacity:1;animation:none}}
