:root{--site-bg:#0d1110;--site-panel:#121715;--site-ink:#e6e0d4;--site-muted:hsla(40,26%,87%,.68);--site-line:hsla(42,28%,84%,.12);--site-accent:#b6a37d;--mondrian-paper:var(--site-bg);--mondrian-panel:var(--site-panel);--mondrian-ink:var(--site-ink);--mondrian-muted:var(--site-muted);--mondrian-line:var(--site-line);--mondrian-red:var(--site-accent);--mondrian-blue:#8d98a0;--mondrian-yellow:#c0ad82}html{scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#0d1110;background:var(--site-bg);color:#e6e0d4;color:var(--mondrian-ink);font-family:Avenir Next,Helvetica Neue,Segoe UI,sans-serif;margin:0}code{font-family:JetBrains Mono,Fira Code,SF Mono,Menlo,Consolas,Liberation Mono,monospace}a,a:visited{color:#e6e0d4;color:var(--mondrian-ink)}:root{--light-grey:rgba(0,0,0,.25);--mobile-breakpoint:768px;--left-right-margin:20px}*{box-sizing:border-box}ul{list-style-type:none}.hide{display:none}.show{display:default}button{cursor:pointer}a,a:visited{color:var(--site-ink)}.site-footer{background:#0d1110;border-top:1px solid hsla(42,28%,84%,.1);color:hsla(40,26%,87%,.42);font-size:.75rem;padding:20px;text-align:center}.landing-page-internal-box{background:linear-gradient(180deg,rgba(191,59,43,.08) 0 16px,transparent 16px 100%),var(--mondrian-panel);border:2px solid var(--mondrian-ink);border-radius:8px;box-shadow:14px 14px 0 rgba(39,83,163,.1);margin:0 auto;max-width:940px;padding:36px;position:relative}.landing-page-internal-box h2,.landing-page-internal-box p{margin-bottom:10px}.landing-page-internal-box h2{color:var(--mondrian-ink);font-size:clamp(1.5rem,3.4vw,2.3rem);font-weight:600;line-height:1.08}.landing-page-internal-box p{color:var(--mondrian-muted);line-height:1.75}.landing-page-internal-box ul{grid-gap:12px;display:grid;gap:12px;margin-left:0;margin-top:18px;position:relative;z-index:2}.landing-page-internal-box ul li a{background:hsla(0,0%,100%,.65);border:2px solid var(--mondrian-ink);cursor:pointer;display:inline-flex;font-weight:600;padding:10px 14px;text-decoration:none}.landing-page-internal-box .landing-animation{border-radius:50%;height:360px;left:auto;opacity:.2;position:absolute;right:-120px;top:-140px;width:360px;z-index:0}.landing-page-internal-box .landing-animation canvas{position:relative;z-index:0}@media screen and (min-width:768px){.landing-page-internal-box{width:auto}}.general-layout{color:var(--site-ink);margin:0 auto;max-width:1180px;min-height:100vh;padding:32px var(--left-right-margin) 72px;position:relative}.general-layout h1{font-size:clamp(1.8rem,4vw,3rem);font-weight:400;letter-spacing:-.03em;line-height:1.06;margin-bottom:18px;max-width:18ch}.general-layout h2{color:var(--mondrian-muted);font-size:1.05rem;position:relative;z-index:10}.general-layout h2.subtitle{margin:10px 0 20px}.general-layout .landing-page-internal-box>p,.general-layout>p{color:var(--mondrian-muted);line-height:1.75;max-width:62ch}.general-layout .content-container{margin:50px 0}.general-layout .canvas-pixi-cont{height:100vh}.video-iframe-shell{background:hsla(0,0%,100%,.035);border:1px solid var(--site-line);border-radius:8px;box-shadow:none;margin:24px auto 0;max-width:960px;padding:18px;position:relative;width:100%;z-index:0}.video-iframe-shell .loading{color:var(--mondrian-muted);font-size:.95rem;font-weight:600;letter-spacing:.14em;margin:30px auto;position:absolute;text-align:center;text-transform:uppercase;width:100%;z-index:1}.video-iframe-shell iframe{aspect-ratio:560/315;background:#0a0d0c;border:0;border-radius:4px;position:relative;width:100%;z-index:2}.portfolio-home{--home-bg:#0d1110;--home-panel:hsla(0,0%,100%,.035);--home-panel-strong:hsla(0,0%,100%,.055);--home-line:hsla(42,28%,84%,.12);--home-line-strong:hsla(42,28%,84%,.2);--home-ink:#e6e0d4;--home-muted:hsla(40,26%,87%,.68);--home-soft:hsla(40,26%,87%,.45);--home-accent:#b6a37d;background:radial-gradient(circle at 20% 0,hsla(40,28%,60%,.08),transparent 34rem),linear-gradient(180deg,#0f1413 0,var(--home-bg) 44rem);color:var(--home-ink);min-height:calc(100vh - 50px)}.contact-strip,.teaching-archive,.work-intro{margin:0 auto;width:min(1180px,100% - 40px)}.work-intro{grid-gap:18px;align-content:start;display:grid;gap:18px;min-height:auto;padding:clamp(22px,3.5vw,44px) 0 clamp(34px,5vw,58px)}.intro-label{border-bottom:1px solid var(--home-line);color:var(--home-soft);display:flex;font-size:.72rem;gap:20px;justify-content:flex-start;letter-spacing:.16em;line-height:1.4;padding-bottom:8px;text-transform:uppercase}.primary-work{grid-gap:18px;display:grid;gap:18px;grid-template-columns:repeat(2,minmax(0,1fr))}.project-article{grid-gap:22px;background:linear-gradient(145deg,hsla(0,0%,100%,.052),transparent 64%),var(--home-panel);border:1px solid var(--home-line);border-radius:8px;display:grid;gap:22px;grid-template-rows:auto 1fr auto;min-height:420px;padding:clamp(24px,3vw,36px)}.project-article--quiet{align-items:start;background:transparent;grid-template-columns:minmax(220px,.34fr) minmax(0,1fr);grid-template-rows:auto auto;min-height:0;padding:20px clamp(22px,3vw,32px)}.project-article--quiet .project-heading{grid-row:1/3}.project-article--quiet .project-heading h2{font-size:clamp(1.55rem,2.8vw,2.25rem);letter-spacing:-.035em;line-height:1.02}.project-article--quiet .project-description{font-size:.98rem;line-height:1.65;max-width:62ch}.project-article--quiet .project-footer{align-items:center;margin:0}.project-heading p{color:var(--home-accent);font-size:.74rem;letter-spacing:.14em;line-height:1.3;margin-bottom:8px;text-transform:uppercase}.project-heading h2{font-size:clamp(2.2rem,5vw,4.35rem);font-weight:400;letter-spacing:-.055em;line-height:.95}.project-description{color:var(--home-muted);font-size:clamp(1rem,1.22vw,1.12rem);line-height:1.75;max-width:68ch}.project-footer{align-items:flex-end;display:flex;gap:22px;justify-content:space-between;margin-top:14px}.project-footer ul{grid-gap:7px;color:var(--home-soft);display:grid;font-size:.82rem;gap:7px;line-height:1.5}.archive-list-heading a,.contact-strip a,.project-footer a{border-bottom:1px solid var(--home-line-strong);color:var(--home-ink);text-decoration:none;transition:color .18s ease,border-color .18s ease}.archive-list li a:hover,.archive-list-heading a:hover,.contact-strip a:hover,.project-footer a:hover{border-color:var(--home-accent);color:#fff7e9}.teaching-archive{grid-gap:clamp(28px,6vw,72px);border-top:1px solid var(--home-line);display:grid;gap:clamp(28px,6vw,72px);grid-template-columns:minmax(260px,.72fr) minmax(0,1.28fr);padding:clamp(42px,7vw,88px) 0}.archive-list-heading{align-items:baseline;display:flex;gap:20px;justify-content:space-between;margin-bottom:18px}.archive-list-heading h2{color:var(--home-ink);font-size:clamp(1.1rem,2vw,1.45rem);font-weight:400;letter-spacing:-.02em}.archive-list-heading a{color:var(--home-soft);font-size:.78rem;letter-spacing:.12em;text-transform:uppercase}.archive-list ol{border-top:1px solid var(--home-line);display:grid}.archive-list li{grid-gap:18px;border-bottom:1px solid var(--home-line);display:grid;gap:18px;grid-template-columns:42px 1fr;line-height:1.4;padding:13px 0}.archive-list li span{-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";color:var(--home-soft);font-size:.78rem;font-variant-numeric:tabular-nums}.archive-list li a{color:var(--home-muted);text-decoration:none;transition:color .18s ease}.contact-strip{border-top:1px solid var(--home-line);color:var(--home-soft);display:flex;font-size:.9rem;gap:24px;justify-content:space-between;line-height:1.6;padding:26px 0 54px}.contact-strip p{max-width:54ch}.contact-strip div{align-content:flex-start;display:flex;flex-wrap:wrap;gap:14px 20px;justify-content:flex-end}@media(max-width:900px){.work-intro{align-content:start}.primary-work,.teaching-archive{grid-template-columns:1fr}.project-article{min-height:0}.project-article--quiet{grid-template-columns:1fr}.project-article--quiet .project-heading{grid-row:auto}.contact-strip{display:grid}.contact-strip div{justify-content:flex-start}}@media(max-width:640px){.contact-strip,.teaching-archive,.work-intro{width:min(100% - 28px,1180px)}.intro-label,.project-footer{display:grid}.project-article{padding:22px}.project-heading h2{font-size:clamp(2.25rem,16vw,3.6rem)}.archive-list li{gap:12px;grid-template-columns:34px 1fr}}nav{align-items:center;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);background-color:rgba(13,17,16,.82);border-bottom:1px solid hsla(42,28%,84%,.12);display:flex;flex-direction:row;gap:0;height:50px;justify-content:flex-start;position:-webkit-sticky;position:sticky;top:0;z-index:200}nav h1{font-size:1rem;letter-spacing:.08em;margin-left:0;position:relative;text-transform:uppercase;z-index:103}nav h1 a{color:#e6e0d4;text-decoration:none}nav .menu-screen{background-color:rgba(13,17,16,.98);border-bottom:1px solid hsla(42,28%,84%,.12);height:50px;left:0;position:absolute;top:0;width:100vw;z-index:101}nav>ul{display:flex;flex-direction:column;position:absolute;top:50px;transition:top 1s ease-in-out;z-index:100}nav>ul>li{background-color:rgba(13,17,16,.96);border-bottom:1px solid hsla(42,28%,84%,.08);cursor:pointer;padding:10px 0;text-align:center;width:100vw}nav>ul>li a{color:#e6e0d4;text-decoration:none}nav.collapsed>ul{top:-260px}nav.collapsed>.hamburger>span:first-child{top:-5px}nav.collapsed>.hamburger>span:nth-child(3){top:5px}nav .warped-puppy-mark{color:#e6e0d4;height:42.5px;margin-left:20px;margin-right:5px;opacity:.72;position:relative;z-index:105}nav .warped-puppy-mark ellipse,nav .warped-puppy-mark g,nav .warped-puppy-mark line,nav .warped-puppy-mark path,nav .warped-puppy-mark polygon{fill:#e6e0d4!important;stroke:#e6e0d4!important}nav>.hamburger{cursor:pointer;display:flex;flex-direction:column;height:50px;justify-content:center;margin-left:auto;margin-right:20px;position:relative;z-index:104}nav>.hamburger>span{border-bottom:2px solid #e6e0d4;display:block;position:relative;transition:bottom .25s linear,top .25s linear;width:50px}nav>.hamburger>span:first-child,nav>.hamburger>span:nth-child(3){top:0}nav #submenu{display:flex;justify-content:flex-end;width:100%}nav #submenu div{border-bottom:1px solid var(--light-grey);display:none;width:100%}nav #submenu div.show{display:flex;justify-content:flex-end;width:100%}@media(min-width:1024px){nav ul{align-self:flex-end;flex-direction:row;list-style-type:none;padding-bottom:4px;position:static;z-index:400}nav ul li{background:transparent;border:none;cursor:pointer;font-size:.82rem;margin:0 20px;width:auto}nav ul li a{color:hsla(40,26%,87%,.72);transition:color .18s ease}nav ul li a:hover{color:#fff7e9}nav .hamburger{display:none}}.tab-shell .tab-container{display:flex;gap:8px;margin:14px 0 0;width:100%}.tab-shell .tab-container li{background:hsla(0,0%,100%,.025);border:1px solid var(--site-line);border-radius:6px;color:var(--site-muted);cursor:pointer;font-size:.82rem;font-weight:500;letter-spacing:.14em;list-style:none;padding:10px 12px;text-align:center;text-transform:uppercase;transition:background .18s ease,border-color .18s ease,color .18s ease;width:1fr}.tab-shell .tab-container li.active{background:hsla(40,28%,60%,.1);border-color:hsla(40,28%,60%,.42);color:var(--site-ink)}.tab-shell .tab-container li:hover{border-color:hsla(40,26%,87%,.28);color:#fff7e9}.tab-body-shell{background:hsla(0,0%,100%,.03);border:1px solid var(--site-line);border-radius:8px;box-shadow:none;margin-top:12px;min-height:60vh;overflow:hidden;padding:clamp(14px,2vw,22px);position:relative}.tab-body-shell .plt-canvas{min-height:100vh}.back-button{background:transparent;border:0;border-bottom:1px solid var(--site-line);color:var(--site-muted);display:block;font-size:.78rem;font-weight:500;letter-spacing:.14em;margin:0 0 20px;padding:8px 0;text-transform:uppercase;transition:color .18s ease,border-color .18s ease}.back-button:hover{border-color:var(--site-accent);color:#fff7e9}#solitaire-canvas{display:block;margin:0 auto}.svg-video-iframe-shell{margin-position:absolute;margin-width:100%;margin-height:100%;height:0;margin:0 iframe iframe 0;padding-bottom:56.25%;position:relative;width:80%}.svg-content{background:rgba(0,0,0,.5);margin:20px auto;position:relative;width:90%;z-index:0}.svg-content .loading{color:#fff;font-size:24px;font-weight:700;margin:30px auto;position:absolute;text-align:center;width:100%;z-index:1}.svg-content iframe{height:100vh;position:relative;width:100%;z-index:2}.svg-content iframe.loaded{background-color:#fff}.iframe-wrapper{background:rgba(0,0,0,.5);margin:20px auto;position:relative;width:90%;z-index:0}.iframe-wrapper .loading{color:#fff;font-size:24px;font-weight:700;margin:30px auto;position:absolute;text-align:center;width:100%;z-index:1}.iframe-wrapper iframe{height:100vh;position:relative;width:100%;z-index:2}.iframe-wrapper iframe.loaded{background-color:#fff}canvas.challenge-canvas{border:1px solid #000;display:block;margin:10px auto}.soduko-container{text-align:center}.soduko-container .soduko-grid{border:5px solid #000;box-shadow:0 10px 10px rgba(0,0,0,.25);display:grid;grid-template-columns:1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;margin:10px auto;max-width:455px;overflow:hidden;width:100%}.soduko-container .soduko-grid input{-moz-appearance:textfield;aspect-ratio:1/1;border:1px solid #000;font-size:1rem;text-align:center;transition:background-color .25s;width:100%}.soduko-container .soduko-grid input:nth-child(3n){border-right:5px solid #000}.soduko-container .soduko-grid input:nth-child(9n){border-right:none}.soduko-container .soduko-grid input:nth-child(18)~input{border-bottom:5px solid #000}.soduko-container .soduko-grid input:nth-child(27)~input{border-bottom:none}.soduko-container .soduko-grid input:nth-child(45)~input{border-bottom:5px solid #000}.soduko-container .soduko-grid input:nth-child(54)~input{border-bottom:none}.soduko-container .soduko-grid input.red{color:red;font-weight:700}.soduko-container .highlight{background-color:rgba(0,0,0,.25)}.soduko-container input::-webkit-inner-spin-button,.soduko-container input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.three-of-a-kind #three-of-id-canvas{display:block;margin:0 auto}.three-of-a-kind #three-of-id-canvas.over{cursor:pointer}.three-of-a-kind .controls{display:flex;justify-content:center;width:100%}.three-of-a-kind .controls label{font-weight:700;margin:0 5px 0 20px}.pattern-maker>div{display:flex;flex-direction:column;justify-content:center}.pattern-maker>div canvas.over{cursor:pointer}.pattern-maker>div>div{display:flex;flex-direction:column;justify-content:center}.pattern-maker>div>div>button{border:1px solid rgba(0,0,0,.5);border-radius:5px;font-size:15px;margin:10px;padding:2px 10px}@media(min-width:1024px){.pattern-maker>div{flex-direction:row}}.game-canvas{height:100vh;width:100%}*{margin:0;padding:0}#canvas-div{margin:0 auto}#crystal-ball-unifier{background-color:#181145;margin:0 auto;min-height:100vh;padding-bottom:40px;text-align:center;width:100%}#crystal-ball-unifier canvas{display:block;height:100%;margin:0 auto;max-height:699px;max-width:750px;width:100%}#crystal-ball-unifier #scroll-cover{background-color:#000;bottom:0;left:0;opacity:.05;position:absolute;right:0;top:0}#crystal-ball-unifier img{display:block;margin:0 auto;max-width:475px;width:80%}#pink-drawer-cont{height:400px!important;margin:0 auto;position:relative;width:90vw}#pink-drawer-cont,#pink-drawer-cont #fpsChecker{align-items:center;display:flex;justify-content:center}#pink-drawer-cont #fpsChecker{background-color:rgba(0,0,0,.5);color:#fff;flex-direction:column;font-weight:700;min-width:400px;outline:10px solid #fff;padding:50px;position:absolute;z-index:999}#pink-drawer-cont .pink-drawer-canvas-cont{align-items:center;display:flex;height:400px!important;justify-content:center;position:absolute;width:90vw;z-index:998}#geometric-puzzle-cont{position:relative}#geometric-puzzle-cont #geometric-puzzle-button-cont{display:flex;justify-content:space-around;position:relative;z-index:901}#geometric-puzzle-cont #geometric-puzzle-button-cont button{font-size:20px;margin-top:20px;padding:10px 15px}#geometric-puzzle-cont canvas{position:absolute;top:0;z-index:900}#aboutPoems{margin-left:0}#aboutPoems *{color:#333;font-size:.85rem;letter-spacing:.01em;line-height:1.55;margin:2px 0}#aboutPoems dt{color:rgba(51,51,51,.65);font-size:.78rem;font-weight:700;letter-spacing:.08em;margin-top:14px;text-transform:uppercase}#aboutPoems dd{margin:0 0 0 40px}.about-bio{max-width:80vw}.about-bio p{color:#333;font-size:.9rem;line-height:1.65;margin:0 0 14px}.about-bio em{font-style:italic}.about-meta{font-size:.85rem;margin:22px 0 6px;max-width:80vw}.about-meta dt{color:rgba(51,51,51,.65);font-size:.78rem;letter-spacing:.08em;margin-top:14px;text-transform:uppercase}.about-meta dd{color:#333;line-height:1.55;margin:4px 0 0}.about-meta a{color:#333;text-decoration:underline;text-underline-offset:2px}.about-meta a:hover{color:#000}.contact a{color:inherit;text-decoration:underline;text-underline-offset:2px}.about-wrapper{margin:0 auto;position:relative;width:85%}.about-wrapper .general-layout h2{font-size:1rem;letter-spacing:.04em}.about-wrapper .contact{font-size:.85rem}.about-wrapper .contact dt{color:rgba(51,51,51,.65);font-size:.78rem;letter-spacing:.08em;margin-top:14px;text-transform:uppercase}.about-wrapper .contact dt:first-child{margin-top:0}.about-wrapper .contact dd{font-weight:700;margin-bottom:0;margin-top:4px}@media(min-width:1024px){#aboutPoems{margin-left:140px}.about-wrapper{margin:0 auto;position:relative;width:-webkit-max-content;width:max-content}}.about-canvas{background-color:rgba(0,0,0,.25);height:100vh;left:-50px;opacity:.25;position:absolute;top:0;width:100px;z-index:-1}.site-card{grid-gap:16px;align-items:start;border-bottom:1px solid rgba(0,0,0,.08);display:grid;gap:16px;grid-template-columns:130px 1fr;padding:18px 0}.site-card:first-child{border-top:1px solid rgba(0,0,0,.08)}.site-card__image-link{display:block;text-decoration:none}.site-card__image-wrap{border:1px solid rgba(0,0,0,.08);border-radius:5px;height:74px;overflow:hidden;width:130px}.site-card__image-wrap img{display:block;height:100%;object-fit:cover;object-position:top left;transition:opacity .2s;width:100%}.site-card__image-wrap:hover img{opacity:.8}.site-card__content{display:flex;flex-direction:column;gap:4px}.site-card__name{color:#333;font-size:1rem;font-weight:700;letter-spacing:.01em;text-decoration:none}.site-card__name:visited{color:#333}.site-card__name:hover{text-decoration:underline}.site-card__arrow{color:rgba(0,0,0,.25);font-size:.75rem;margin-left:3px}.site-card__tagline{color:#bbcb50;font-size:.72rem;letter-spacing:.02em;margin:0}.site-card__description{color:rgba(0,0,0,.45);font-size:.75rem;line-height:1.65;margin:4px 0 0}.site-card__tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.site-card__tag{color:rgba(0,0,0,.3);font-size:.62rem;letter-spacing:.03em}@media(max-width:480px){.site-card{grid-template-columns:1fr}.site-card__image-wrap{height:120px;width:100%}}.web-sites-landing{margin:0 auto;max-width:80%}.web-sites-landing .wslp-header{left:-50px;padding:50px 0 24px;position:relative}.web-sites-landing .wslp-header h2{position:relative;z-index:2}.web-sites-landing .wslp-header p{color:rgba(0,0,0,.45);font-size:.875rem;margin-top:6px;position:relative;z-index:2}.web-sites-landing .wslp-header .landing-animation{border-radius:50%;height:500px;left:-250px;position:absolute;top:-200px;width:500px;z-index:-1}.web-sites-landing .wslp-header .landing-animation canvas{position:relative;z-index:-1}.web-sites-landing .wslp-cards{max-width:calc(100vw - 40px);padding-bottom:60px;position:relative;z-index:2}@media(min-width:1100px){.web-sites-landing{max-width:45%}.web-sites-landing .wslp-cards{width:100%}}.webdev-content{background:rgba(0,0,0,.5);margin:20px auto;position:relative;width:90%;z-index:0}.webdev-content .loading{color:#fff;font-size:24px;font-weight:700;margin:30px auto;position:absolute;text-align:center;width:100%;z-index:1}.webdev-content iframe{background-color:#fff;height:100vh;position:relative;width:100%;z-index:2}
/*# sourceMappingURL=main.045fbf7c.css.map*/