:root{--g: #1a1512;--ink: #f0eae2;--body: #d8cfc5;--mut: #bcb2a7;--sub: #9c9186;--line: #4a3f37;--line2: #6b5f55;--stock: #b9a48d;--scrim: rgb(26 21 18 / .8);--sans: "Alegreya Sans", "Gill Sans", "Trebuchet MS", sans-serif;--statement-size: clamp(2.75rem, 5.8vw, 5.1rem);--statement-size-home: clamp(2.75rem, 4.8vw, 4.3rem);--statement-weight: 300;--statement-leading: 1.03;--statement-tracking: -.02em;--statement-measure: 11.5em;--fs-chord: 24px;--fs-chord-minor: 19px;--fs-side: 17.5px;--fs-subhead: 24px;--fs-prose: 20px;--fs-background: 18.5px;--fs-feature-name: 27px;--fs-feature-desc: 18.5px;--fs-post-title: 25px;--fs-excerpt: 19px;--fs-module-name: 22px;--fs-item-name: 21px;--fs-item-desc: 17.5px;--fs-link: 18.5px;--fs-action: 17.5px;--fs-label: 17px;--fs-small: 16.5px;--lh-prose: 1.5;--lh-title: 1.2;--lh-subhead: 1.35;--lh-feature-name: 1.15;--lh-feature-desc: 1.42;--lh-post-title: 1.25;--lh-item-desc: 1.4;--measure-prose: 26.5em;--measure-excerpt: 27.5em;--measure-post-title: 30em;--measure-subhead: 26em;--page-max: 1280px;--page-pad: 40px;--page-bottom: 120px;--chord-weight: 2px;--chord-minor-weight: 1px;--chord-gap: 12px;--chord-above: 56px;--chord-minor-above: 72px;--hang-weight: 1px;--hang-inset: 24px;--hang-gutter: 40px;--joint: 5px;--tap: 44px;--underline-offset: 6px;--underline-weight: 1px;--focus-weight: 2px;--focus-offset: 3px;--drop-statement: 64px;--drop-single: 44px;--drop-feature-1: 104px;--drop-feature-2: 36px;--drop-feature-3: 36px;--drop-feature-4: 104px;--drop-group-1: 84px;--drop-group-2: 32px;--drop-group-3: 32px;--drop-group-4: 84px;--drop-phone: 28px;--portrait-drop: 176px;--portrait-width: 100%;--portrait-width-phone: 200px;--portrait-filter: grayscale(1) contrast(1.06) brightness(1.1);--gap-item: 14px;--gap-module: 26px;--gap-post: 34px;--gap-para: 18px;--gap-links: 32px;--gap-bio: 52px;--gap-subhead: 28px;--footer-above: 40px;--footer-gap: 14px}@media(max-width:820px){:root{--page-pad: 20px;--page-bottom: 72px;--chord-above: 36px;--hang-inset: 18px;--hang-gutter: 0px;--fs-prose: 18.5px;--fs-subhead: 21px;--gap-bio: 28px;--gap-post: 26px;--gap-subhead: 20px}}body{background:var(--g);color:var(--ink);font-family:var(--sans);font-size:var(--fs-prose);line-height:var(--lh-prose);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh}a{color:inherit}.page{max-width:var(--page-max);margin:0 auto;padding:0 var(--page-pad) var(--page-bottom)}.chord{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;border-bottom:var(--chord-weight) solid var(--ink);padding:var(--chord-above) 0 var(--chord-gap)}.chord.minor{border-bottom-width:var(--chord-minor-weight);border-color:var(--sub);padding-top:var(--chord-minor-above)}.chord h1,.chord h2{font-size:var(--fs-chord);font-weight:700;line-height:var(--lh-title)}.chord.minor h2{font-size:var(--fs-chord-minor);font-weight:500;color:var(--mut)}.chord .side{font-size:var(--fs-side);font-weight:500;color:var(--mut)}.chord a.side,.chord a.home{min-height:var(--tap);display:inline-flex;align-items:flex-end;text-underline-offset:var(--underline-offset);text-decoration-thickness:var(--underline-weight);text-decoration-color:var(--sub)}.chord a.home{text-decoration:none}.span{display:grid;grid-template-columns:repeat(12,1fr)}.col-1{grid-column:span 1}.col-3{grid-column:span 3}.col-8{grid-column:span 8}.col-10{grid-column:span 10}.hang{position:relative;min-width:0;border-left:var(--hang-weight) solid var(--line);padding:var(--drop, var(--drop-single)) var(--hang-gutter) 0 var(--hang-inset)}.hang:before{content:"";position:absolute;left:calc(var(--joint) / -2 - var(--hang-weight) / 2);top:calc(var(--joint) / -2 - var(--hang-weight) / 2);width:var(--joint);height:var(--joint);background:var(--ink)}.minor+.span .hang:before{background:var(--sub)}.hang.drop-statement{--drop: var(--drop-statement)}.statement{font-weight:var(--statement-weight);font-size:var(--statement-size);line-height:var(--statement-leading);letter-spacing:var(--statement-tracking);max-width:var(--statement-measure)}.statement-home{font-size:var(--statement-size-home)}.prose{max-width:var(--measure-prose);color:var(--body)}.prose p{margin-bottom:var(--gap-para)}.prose p.bg{color:var(--mut);font-size:var(--fs-background)}.prose strong{color:var(--ink);font-weight:700}.links{display:flex;flex-wrap:wrap;gap:0 var(--gap-links);margin-top:10px;color:var(--ink);font-weight:500;font-size:var(--fs-link)}.links a,.go{display:inline-flex;align-items:center;min-height:var(--tap);text-decoration:underline;text-decoration-color:var(--sub);text-underline-offset:var(--underline-offset);text-decoration-thickness:var(--underline-weight)}.links a:hover,.go:hover,.chord a.side:hover{text-decoration-color:var(--ink)}.go{font-weight:500;font-size:var(--fs-action);margin-top:4px}h3{font-weight:700;line-height:var(--lh-title)}.site-footer{margin-top:var(--footer-above)}.site-footer .chord{padding-top:var(--footer-above);padding-bottom:0}.site-footer .foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px var(--gap-links);padding-top:var(--footer-gap);font-size:var(--fs-small);color:var(--sub)}a:focus-visible,button:focus-visible,[role=button]:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:var(--focus-weight) solid var(--ink);outline-offset:var(--focus-offset)}.skip-link{position:absolute;top:-100px;left:0;display:inline-flex;align-items:center;min-height:var(--tap);padding:0 16px;background:var(--ink);color:var(--g);font-size:var(--fs-action);font-weight:500;z-index:10000}.skip-link:focus{top:0}@media(max-width:820px){.span{display:block}.hang{--drop: var(--drop-phone) !important}.hang+.hang:before{display:none}}*{margin:0;padding:0;box-sizing:border-box}.toast-container{position:fixed;top:24px;right:24px;z-index:9999;display:flex;flex-direction:column;gap:12px;max-width:400px}.toast{display:flex;align-items:center;gap:14px;min-width:300px;padding:12px 16px;background:var(--ink);color:var(--g);cursor:pointer}.toast-icon{flex-shrink:0;font-weight:700}.toast-message{flex:1;font-size:var(--fs-action);line-height:var(--lh-item-desc)}.toast-close{flex-shrink:0;width:var(--tap);height:var(--tap);background:none;border:none;color:var(--g);font-family:inherit;font-size:var(--fs-chord);cursor:pointer}@media(max-width:820px){.toast-container{top:16px;right:16px;left:16px;max-width:none}.toast{min-width:0;width:100%}}.prose.bio{margin-top:var(--gap-bio)}.prose.bio p{white-space:pre-line}.plate-hang{--drop: var(--portrait-drop);padding-left:0;padding-right:0}.plate{width:var(--portrait-width);background:var(--stock);line-height:0}.plate img{display:block;width:100%;height:auto;filter:var(--portrait-filter);mix-blend-mode:multiply}.feature:nth-child(4n+1){--drop: var(--drop-feature-1)}.feature:nth-child(4n+2){--drop: var(--drop-feature-2)}.feature:nth-child(4n+3){--drop: var(--drop-feature-3)}.feature:nth-child(4n+4){--drop: var(--drop-feature-4)}.feature h3{font-size:var(--fs-feature-name);line-height:var(--lh-feature-name)}.feature p{margin-top:8px;color:var(--mut);font-size:var(--fs-feature-desc);line-height:var(--lh-feature-desc)}.group:nth-child(4n+1){--drop: var(--drop-group-1)}.group:nth-child(4n+2){--drop: var(--drop-group-2)}.group:nth-child(4n+3){--drop: var(--drop-group-3)}.group:nth-child(4n+4){--drop: var(--drop-group-4)}.feature:nth-child(n+5):before,.group:nth-child(n+5):before{display:none}.group .label{font-weight:500;font-size:var(--fs-label);color:var(--sub);margin-bottom:10px}.item{display:block;text-decoration:none;padding:6px 0 var(--gap-item);min-height:var(--tap)}.item h3{font-size:var(--fs-item-name)}.item p{color:var(--mut);font-size:var(--fs-item-desc);line-height:var(--lh-item-desc);margin-top:2px}a.item:hover h3,.item[role=button]:hover h3,.post:hover h3{text-decoration:underline;text-decoration-thickness:var(--underline-weight);text-underline-offset:5px}.posts{display:grid;grid-template-columns:2fr 10fr}.posts time{font-weight:500;font-size:var(--fs-small);color:var(--sub);padding:0 var(--hang-inset) 0 0;line-height:2}.post{position:relative;min-width:0;border-left:var(--hang-weight) solid var(--line);padding:0 0 var(--gap-post) var(--hang-inset);text-decoration:none;display:block}.posts time.first,.post.first{padding-top:var(--drop-single)}.post.first:before{content:"";position:absolute;left:calc(var(--joint) / -2 - var(--hang-weight) / 2);top:calc(var(--joint) / -2 - var(--hang-weight) / 2);width:var(--joint);height:var(--joint);background:var(--ink)}.post h3{font-size:var(--fs-post-title);font-weight:500;line-height:var(--lh-post-title);max-width:var(--measure-post-title)}.post p{color:var(--mut);font-size:var(--fs-excerpt);max-width:var(--measure-excerpt);margin-top:4px}@media(max-width:820px){.plate-hang{padding-left:var(--hang-inset)}.plate{width:var(--portrait-width-phone)}.posts{display:block}.posts time{display:block;border-left:var(--hang-weight) solid var(--line);padding:0 0 0 var(--hang-inset)}.posts time.first{position:relative;padding-top:var(--drop-phone)}.post.first{padding-top:0}.post.first:before{display:none}.posts time.first:before{content:"";position:absolute;left:calc(var(--joint) / -2 - var(--hang-weight) / 2);top:calc(var(--joint) / -2 - var(--hang-weight) / 2);width:var(--joint);height:var(--joint);background:var(--ink)}}.admin-bar{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding-top:16px}.loading,.empty-state{padding:var(--drop-single) 0;color:var(--mut)}.section-docs{padding-top:14px;font-size:var(--fs-item-desc);color:var(--mut)}.section-docs strong{color:var(--ink)}.item[role=button]{cursor:pointer}.admin-status{font-size:var(--fs-small);font-weight:500;color:var(--sub)}.btn-add,.btn-edit,.btn-toggle-view,.btn-github,.btn-live,.btn-cancel,.btn-save,.btn-delete{display:inline-flex;align-items:center;justify-content:center;min-height:var(--tap);padding:0 16px;border:1px solid var(--sub);background:transparent;color:var(--ink);font-family:inherit;font-size:var(--fs-action);font-weight:500;text-decoration:none;cursor:pointer}.btn-add:hover,.btn-edit:hover,.btn-toggle-view:hover,.btn-github:hover,.btn-live:hover,.btn-cancel:hover:not(:disabled),.btn-delete:hover:not(:disabled){border-color:var(--ink)}.btn-save,.btn-toggle-view.active{background:var(--ink);border-color:var(--ink);color:var(--g)}.btn-delete{text-decoration:underline;text-decoration-color:var(--sub);text-underline-offset:var(--underline-offset)}.btn-github:disabled,.btn-cancel:disabled,.btn-save:disabled,.btn-delete:disabled{opacity:.5;cursor:not-allowed}.about-edit{margin-bottom:16px}.feature .btn-edit{margin:8px 16px 0 0}.login-container{display:inline-block}.error-message{color:var(--ink);font-size:var(--fs-small);margin-top:6px}.user-menu-container{position:relative}.user-menu-btn{display:flex;align-items:center;justify-content:center;width:var(--tap);height:var(--tap);padding:0;background:transparent;border:1px solid var(--sub);cursor:pointer}.user-avatar,.user-avatar-placeholder{width:100%;height:100%;object-fit:cover}.user-avatar-placeholder{display:flex;align-items:center;justify-content:center;color:var(--ink);font-weight:700}.user-dropdown{position:absolute;top:100%;right:0;margin-top:6px;min-width:220px;background:var(--g);border:1px solid var(--sub);z-index:100}.dropdown-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;cursor:default}.user-info{padding:12px 14px}.user-name{font-weight:700;font-size:var(--fs-action)}.user-email{color:var(--mut);font-size:var(--fs-small);word-break:break-all}.dropdown-divider{height:1px;background:var(--line)}.dropdown-item{width:100%;min-height:var(--tap);padding:0 14px;text-align:left;background:none;border:none;color:var(--ink);font-family:inherit;font-size:var(--fs-action);cursor:pointer}.dropdown-item:hover{text-decoration:underline;text-underline-offset:var(--underline-offset)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--scrim);display:flex;align-items:center;justify-content:center;z-index:1000;padding:24px}.modal-content{background:var(--g);border:1px solid var(--sub);width:100%;max-width:640px;max-height:85vh;display:flex;flex-direction:column}.modal-header{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:16px 24px;border-bottom:var(--chord-weight) solid var(--ink)}.modal-header h2{font-size:var(--fs-chord);font-weight:700;line-height:var(--lh-title)}.modal-close{width:var(--tap);height:var(--tap);flex-shrink:0;background:transparent;border:1px solid var(--sub);color:var(--ink);font-family:inherit;font-size:var(--fs-chord);line-height:1;cursor:pointer}.modal-close:hover{border-color:var(--ink)}.modal-body{padding:24px;flex:1;overflow:auto;color:var(--body)}.modal-footer{display:flex;justify-content:flex-end;align-items:center;flex-wrap:wrap;gap:10px;padding:16px 24px;border-top:1px solid var(--line)}.modal-footer .spacer{flex:1}.modal-confirm{color:var(--ink)}.modal-description{margin-bottom:20px}.modal-description.empty{color:var(--mut)}.modal-meta{margin-bottom:14px;color:var(--ink)}.modal-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:20px}.form-group{margin-bottom:20px}.form-group:last-child{margin-bottom:0}.form-group label{display:block;margin-bottom:6px;font-weight:500;font-size:var(--fs-label);color:var(--ink)}.form-group small,.form-hint{display:block;margin-top:6px;color:var(--mut);font-size:var(--fs-small)}.form-input,.edit-textarea,.status-select{width:100%;min-height:var(--tap);padding:8px 12px;border:1px solid var(--sub);background:var(--g);color:var(--ink);font-family:inherit;font-size:var(--fs-item-desc);line-height:var(--lh-item-desc)}.edit-textarea{min-height:280px;resize:vertical}.form-input:disabled{color:var(--sub);cursor:not-allowed}.form-input::placeholder,.edit-textarea::placeholder{color:var(--sub)}.tag-badge,.status-badge{font-size:var(--fs-small);font-weight:500;color:var(--sub)}.sub{font-size:var(--fs-subhead);line-height:var(--lh-subhead);color:var(--body);max-width:var(--measure-subhead);margin-top:var(--gap-subhead)}.landing-links{margin-top:22px}.modules{max-width:var(--measure-prose)}.prose p+.modules{margin-top:26px}.module{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:var(--gap-links);padding-bottom:var(--gap-module)}.module h3{color:var(--ink);font-size:var(--fs-module-name)}.module span{font-size:var(--fs-label);font-weight:500;color:var(--sub);white-space:nowrap;padding-top:4px}.modules .module p{grid-column:1 / -1;color:var(--mut);font-size:var(--fs-excerpt);margin:2px 0 0}.prose ul{list-style:none;margin-bottom:var(--gap-para)}.prose li{margin-bottom:var(--gap-item)}.prose code,.module code{font-family:inherit;font-size:inherit;font-weight:500;color:var(--ink)}
