/* CUBES: an Office Space cube farm where every cube belongs to one project. Runtime styles.
   Source: drafts/cubes-v2/production/cubes.css, exported by tools/build_cubes.py. */
:root{--paper:#f6f3ea;--ink:#202326;--type:#2b2e33;--trim:#d3cab2;--pin-r:#c9362a;--pin-b:#2d62c4;--pin-y:#dfa911;--pin-g:#2d8f47;color-scheme:dark}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:#23272b;color:var(--ink);font-family:Arimo,Arial,Helvetica,sans-serif;overflow:hidden;-webkit-font-smoothing:antialiased;overscroll-behavior:none}
button{font:inherit;color:inherit}
[hidden]{display:none!important}
a{color:inherit}
#ceil{position:fixed;left:0;top:0;width:100%;height:40vh;display:block;z-index:0;background:#c9ccc4}
#floor{position:fixed;left:0;right:0;bottom:0;height:0;z-index:0;background:url(../textures/carpet.webp) repeat-x 0 0/auto 100%,#4f575d}
#aisle{position:fixed;inset:0;z-index:1;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;scroll-snap-type:x proximity;overscroll-behavior-x:contain;cursor:grab;outline:none}
#aisle::-webkit-scrollbar{display:none}
#aisle.drag{cursor:grabbing;scroll-snap-type:none}
#row{position:relative;height:100%}
.plate{position:absolute;top:0;display:block;border:0;background:none;padding:0;scroll-snap-align:center;pointer-events:none;-webkit-tap-highlight-color:transparent;outline:none}
.plate>img{position:absolute;inset:0;width:100%;height:100%;display:block;user-select:none;-webkit-user-drag:none;pointer-events:none}
.phone .plate>img.base{-webkit-mask-image:linear-gradient(#000 93%,transparent);mask-image:linear-gradient(#000 93%,transparent)}
.hit{position:absolute;left:1.9%;width:92.1%;top:9.9%;bottom:0;pointer-events:auto;cursor:pointer}
/* the tube over a cube brightening: a brightened copy of the cube's own photo in a pool of light, so it
   shares the photo's cutout (whatever rises above the partitions is lit with the rest of the cube) */
.plate>img.glow{opacity:0;transition:opacity .25s;filter:brightness(1.32) saturate(1.04);-webkit-mask-image:radial-gradient(ellipse 60% 46% at 50% 8%,#000,rgba(0,0,0,.55) 45%,transparent 80%);mask-image:radial-gradient(ellipse 60% 46% at 50% 8%,#000,rgba(0,0,0,.55) 45%,transparent 80%)}
.plate:hover .glow,.plate:focus-visible .glow,.plate.on .glow{opacity:1}
.plate:focus-visible .hit{outline:3px solid #ffd24a;outline-offset:-5px;border-radius:3px}
/* a project that arrives later without its own cube: its thumbnail pinned in an empty one */
.pinup{position:absolute;background:#fbfaf6;padding:.5%;box-shadow:0 3px 6px rgba(10,12,16,.5);transform:rotate(-.6deg);pointer-events:none}
.pinup img{display:block;width:100%;height:100%;object-fit:cover}
.pinup::before,.pinup::after{content:"";position:absolute;top:-3%;width:4%;min-width:8px;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 36% 34%,rgba(255,255,255,.75) 0 16%,var(--pin-r) 22% 100%);box-shadow:1px 2px 2px rgba(0,0,0,.45)}
.pinup::before{left:4%}.pinup::after{right:4%;background:radial-gradient(circle at 36% 34%,rgba(255,255,255,.75) 0 16%,var(--pin-b) 22% 100%)}
/* nameplate: an engraved two-ply plastic sign clipped onto the top of the partition at the cube's left post */
.tag{position:absolute;left:1.2%;bottom:92.6%;min-width:22%;max-width:64%;padding:.42em .7em .48em;background:linear-gradient(#34383d,#1a1c1f 70%);border:1px solid #0c0d0e;border-radius:2px;color:#f2f1ea;text-align:left;box-shadow:0 2px 4px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.14);pointer-events:none;transition:transform .2s,box-shadow .2s;font-size:var(--tagf,13px);line-height:1.15;white-space:nowrap}
.tag::before,.tag::after{content:"";position:absolute;bottom:-7px;width:6px;height:8px;background:linear-gradient(90deg,#8d8a80,#cfccc2 50%,#8d8a80);border-radius:0 0 2px 2px}
.tag::before{left:14%}.tag::after{right:14%}
.tag b{display:block;font-weight:700;letter-spacing:.015em}
.tag small{display:block;font-size:.66em;letter-spacing:.14em;text-transform:uppercase;color:#bfc2bb;margin-top:.18em}
.plate:hover .tag,.plate:focus-visible .tag,.plate.on .tag{transform:translateY(-3px);box-shadow:0 5px 10px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.2),0 0 0 2px rgba(255,214,90,.55)}
.phone .tag{white-space:normal}
/* the directory at the head of the aisle: white plastic letters pressed into black felt */
.board{position:absolute;pointer-events:auto;display:flex;flex-direction:column;padding:5% 5.5% 3%;color:#f4f4ef;cursor:pointer;overflow:hidden;font-size:var(--bf,11px)}
.board h1,.felt h2{font:700 1em/1 Arimo,Arial,sans-serif;letter-spacing:.2em;text-align:center}
.board h1{font-size:1.9em;margin:.15em 0 .8em}
.board ol{list-style:none;columns:2;column-gap:4.5%;font-size:.76em;flex:1}
.board li{break-inside:avoid;line-height:2.42;white-space:nowrap;overflow:hidden}
.board button{background:none;border:0;padding:0;cursor:pointer;text-transform:uppercase;letter-spacing:.015em;font-weight:700;text-align:left;max-width:100%;white-space:nowrap}
.board button:hover{color:#ffe28a}
.board:focus-visible{outline:3px solid #ffd24a;outline-offset:6px}
.let{display:inline-block;text-shadow:0 1px 0 rgba(0,0,0,.9),0 0 1px rgba(255,255,255,.4)}
/* HUD: beige desk-phone keys */
.key{display:inline-grid;place-items:center;min-width:44px;height:44px;padding:0 12px;border:1px solid #8f866f;border-bottom-width:4px;border-radius:7px;background:linear-gradient(#f1ebdc,#d5ccb5);color:#2b2821;cursor:pointer;box-shadow:0 2px 6px rgba(0,0,0,.35);font-weight:700;text-decoration:none}
.key:active{border-bottom-width:1px;transform:translateY(3px)}
.key:focus-visible{outline:3px solid #ffd24a;outline-offset:2px}
.key svg{width:20px;height:20px;display:block}
#hud{position:fixed;top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));z-index:5;display:flex;gap:10px}
#bHum[aria-pressed=true]{background:linear-gradient(#fff6d8,#e8d69c)}
.walk{position:fixed;z-index:4;top:calc(var(--hor,33vh) + 26vh);width:52px;height:88px;border-radius:9px;opacity:.8}
.walk:hover{opacity:1}
#bPrev{left:max(10px,env(safe-area-inset-left))}#bNext{right:max(10px,env(safe-area-inset-right))}
.walk[disabled]{opacity:0;pointer-events:none}
.phone .walk{top:auto;bottom:max(14px,env(safe-area-inset-bottom));height:52px;width:60px}
#grain{position:fixed;inset:0;width:100%;height:100%;z-index:6;pointer-events:none;opacity:.075;mix-blend-mode:overlay}
#vig{position:fixed;inset:0;z-index:6;pointer-events:none;background:radial-gradient(ellipse 85% 75% at 50% 45%,transparent 55%,rgba(10,12,14,.38))}
#dark{position:fixed;inset:0;z-index:7;background:#07080a;pointer-events:none;opacity:1;display:grid;place-items:center}
#dark.failed{pointer-events:auto}
#dark p{color:#c9ccc4;font:16px/1.4 "Courier Prime",Courier,monospace;text-align:center;display:grid;gap:14px;justify-items:center;padding:16px}
/* the directory up close */
#dir{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:16px;background:rgba(12,14,16,.72)}
#dir[hidden]{display:none}
.felt{position:relative;width:min(980px,100%);max-height:calc(100dvh - 32px);overflow:auto;padding:34px 38px 30px;background:url(../textures/felt.webp) 0 0/560px auto,#101010;border:12px solid #b9bcbf;border-image:linear-gradient(135deg,#e9ebec,#8e9296 40%,#d8dadb 60%,#7c8084) 1;box-shadow:0 20px 50px rgba(0,0,0,.6);color:#f3f3ee}
.felt h2{font-size:clamp(22px,4vw,40px);margin-bottom:22px;padding:0 44px}
.felt ol{list-style:none;columns:2;column-gap:40px}
.felt li{break-inside:avoid;padding:5px 0}
.felt li button{background:none;border:0;padding:4px 6px;margin:-4px -6px;text-align:left;cursor:pointer;border-radius:3px;width:100%}
.felt li b{display:block;font-weight:700;font-size:clamp(15px,1.9vw,19px);letter-spacing:.1em;text-transform:uppercase}
.felt li small{display:block;font-size:12px;letter-spacing:.16em;color:#c9c9c2;margin-top:3px;text-transform:uppercase}
.felt li button:hover b,.felt li button:focus-visible b{color:#ffe28a}
.felt li button:focus-visible{outline:2px solid #ffd24a}
.felt .close{position:absolute;top:10px;right:10px}
/* inside a cube: its back wall, up close */
#case{position:fixed;inset:0;z-index:15;opacity:0;transition:opacity .28s}
#case.on{opacity:1}
#case[hidden]{display:none}
.cbg{position:absolute;inset:0;overflow:hidden;background:#1d2024}
.cbg img{position:absolute;max-width:none;filter:blur(7px) brightness(.5) saturate(1.05)}
.cscroll{position:absolute;inset:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.cwall{position:relative;width:min(1180px,calc(100% - 28px));margin:28px auto 44px;padding:26px clamp(14px,3vw,38px) 40px;background:linear-gradient(rgba(96,108,121,.52),rgba(96,108,121,.52)),url(../textures/fabric.webp) 0 0/300px,#6c7784;border:14px solid var(--trim);border-image:linear-gradient(#e2dac4,#b8ae95) 1;box-shadow:0 30px 60px rgba(0,0,0,.55),inset 0 0 90px rgba(0,0,0,.28);display:grid;gap:30px}
.chead{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap}
.chead .tag{position:relative;left:auto;bottom:auto;font-size:clamp(20px,2.4vw,30px);white-space:normal;max-width:100%;min-width:0}
.chead .tag::before,.chead .tag::after{display:none}
.ckeys{display:flex;gap:8px}
.ctop{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(0,1fr);gap:28px;align-items:start}
.ctop.about{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr)}
.hero,.cs-img,.cs-film{position:relative}
.hero{background:#fbfaf6;padding:10px;box-shadow:0 8px 16px rgba(8,10,14,.5);transform:rotate(-.6deg)}
.hero img{display:block;width:100%;max-height:72vh;object-fit:contain;background:#141414}
.hero::before,.memo::before,.cs-img::before,.cs-audio::before{content:"";position:absolute;left:50%;top:-8px;width:18px;height:18px;margin-left:-9px;border-radius:50%;z-index:3;background:radial-gradient(circle at 36% 34%,rgba(255,255,255,.75) 0 16%,var(--pc,var(--pin-r)) 22% 100%);box-shadow:1px 3px 3px rgba(0,0,0,.45)}
.memo{position:relative;--pc:var(--pin-g);background:var(--paper);padding:24px 22px 22px;box-shadow:0 8px 16px rgba(8,10,14,.45);transform:rotate(.8deg);font-family:"Courier Prime",Courier,monospace;color:var(--type)}
.memo p{font-size:17px;line-height:1.48}
.memo .cred{font-size:14px;color:#5b5f66;margin-top:14px;padding-top:12px;border-top:1px dashed #bdb7a8}
.memo .cred:empty{display:none}
.memo.alt{--pc:var(--pin-b);transform:rotate(-.5deg)}
.memo .role{font-weight:700;margin-bottom:10px}
.memo .contact{display:grid;gap:8px;font-size:16px}
.memo .contact a{text-decoration:underline;text-underline-offset:3px}
.memo .contact a:focus-visible{outline:3px solid #ffd24a;outline-offset:2px}
/* the real work, pinned up */
.cs{display:grid;gap:36px}
.cs-sec{display:grid;gap:16px;justify-items:start}
.cs-h{display:inline-block;background:linear-gradient(#262626,#0d0d0d);color:#f3f3f1;font:700 13px/1 Arimo,Arial,sans-serif;letter-spacing:.2em;text-transform:uppercase;padding:7px 11px 6px;border-radius:2px;box-shadow:0 2px 3px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.14);text-shadow:0 -1px 0 rgba(0,0,0,.9),0 1px 0 rgba(255,255,255,.25);transform:rotate(-.7deg)}
.cs-p{font:16px/1.45 "Courier Prime",Courier,monospace;color:var(--type);background:var(--paper);padding:10px 14px;box-shadow:0 4px 8px rgba(8,10,14,.35);max-width:70ch}
.cs-films,.cs-imgs{display:flex;flex-wrap:wrap;gap:26px 22px;align-items:flex-start;width:100%}
/* films play on beige CRT monitors */
.cs-film{flex:1 1 320px;max-width:560px;padding:14px 14px 10px;border-radius:14px 14px 9px 9px;background:linear-gradient(#ece5d2,#cdc4ab);box-shadow:0 10px 18px rgba(8,10,14,.5),inset 0 2px 0 rgba(255,255,255,.6),inset 0 -3px 0 rgba(0,0,0,.12)}
.cs-film.is-tall{flex:0 1 230px}
.cs-frame{position:relative;display:block;width:100%;padding:0;border:0;background:#0d0f0e;overflow:hidden;border-radius:10px/13px;box-shadow:inset 0 0 26px rgba(0,0,0,.85),0 0 0 3px #b4ab93;color:inherit}
button.cs-frame{cursor:pointer}
.cs-frame img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:contrast(1.05) saturate(1.05)}
.cs-frame::after{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(0,0,0,.14) 0 1px,transparent 1px 3px),radial-gradient(ellipse at 30% 20%,rgba(255,255,255,.12),transparent 50%)}
.cs-frame.is-blank{background:radial-gradient(ellipse at 50% 45%,#1d2a22,#0b0f0d 70%)}
.cs-frame.is-playing::after{display:none}
.cs-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.cs-glyph{position:absolute;left:50%;top:50%;width:60px;height:60px;margin:-30px 0 0 -30px;border-radius:50%;background:rgba(18,20,22,.72);box-shadow:0 2px 8px rgba(0,0,0,.5);z-index:2}
.cs-glyph::before{content:"";position:absolute;inset:18px 16px 18px 23px;background:#fff;clip-path:polygon(0 0,100% 50%,0 100%)}
button.cs-frame:hover .cs-glyph,button.cs-frame:focus-visible .cs-glyph{background:var(--pin-r)}
button.cs-frame:focus-visible{outline:3px solid #ffd24a;outline-offset:3px}
.cs-cap{display:flex;justify-content:space-between;gap:10px;margin-top:9px;padding:0 4px;font:700 12px/1.25 Arimo,Arial,sans-serif;letter-spacing:.06em;color:#5d5647;text-transform:uppercase;text-shadow:0 1px 0 rgba(255,255,255,.55)}
.cs-dur{font-weight:400}
.cs-img{flex:1 1 300px;max-width:520px;background:#fbfaf6;padding:8px;box-shadow:0 8px 14px rgba(8,10,14,.45)}
.cs-img:nth-child(3n+1){transform:rotate(-.9deg);--pc:var(--pin-b)}
.cs-img:nth-child(3n+2){transform:rotate(.7deg);--pc:var(--pin-y)}
.cs-img:nth-child(3n){--pc:var(--pin-r)}
.cs-img img{display:block;width:100%;height:auto}
.cs-full .cs-img{flex-basis:100%;max-width:none}
.cs-row-2 .cs-img{flex:1 1 calc(50% - 22px);max-width:none}
.cs-row-3 .cs-img{flex:1 1 calc(33% - 22px);max-width:none}
.cs-row-match .cs-img{flex:var(--ar,1) 1 0;max-width:none;min-width:0}
.cs-split .cs-img:first-child{flex-basis:100%;max-width:640px}
.cs-audio{position:relative;--pc:var(--pin-y);list-style:none;background:#f7f2e2 repeating-linear-gradient(0deg,transparent 0 35px,#e1d9c2 35px 36px);padding:16px 18px 12px;box-shadow:0 8px 14px rgba(8,10,14,.45);width:min(720px,100%);transform:rotate(-.4deg)}
.cs-track{display:grid;grid-template-columns:auto auto minmax(0,1fr) minmax(70px,150px);align-items:center;gap:12px;min-height:36px;font:16px "Courier Prime",Courier,monospace;color:var(--type)}
.cs-ap{width:34px;height:28px;border:1px solid #8f866f;border-bottom-width:3px;border-radius:5px;background:linear-gradient(#f1ebdc,#d5ccb5);cursor:pointer;position:relative}
.cs-ap::before{content:"";position:absolute;inset:6px 11px 6px 13px;background:#2b2821;clip-path:polygon(0 0,100% 50%,0 100%)}
.cs-track.is-on .cs-ap::before{clip-path:none;inset:6px 11px;background:linear-gradient(90deg,#2b2821 0 34%,transparent 34% 66%,#2b2821 66%)}
.cs-ap:focus-visible{outline:3px solid #ffd24a}
.cs-n{color:#8a8578}
.cs-bar{height:6px;background:#e0d9c6;border-radius:3px;overflow:hidden}
.cs-bar i{display:block;height:100%;width:0;background:var(--pin-r)}
/* the résumé: a typed list on a legal pad */
.pad{position:relative;--pc:var(--pin-r);list-style:none;background:#f7f2e2 repeating-linear-gradient(0deg,transparent 0 31px,#e1d9c2 31px 32px);padding:20px 22px 14px;box-shadow:0 8px 14px rgba(8,10,14,.45);transform:rotate(.3deg);font-family:"Courier Prime",Courier,monospace;color:var(--type);display:grid;gap:18px}
.pad::before{content:"";position:absolute;left:50%;top:-8px;width:18px;height:18px;margin-left:-9px;border-radius:50%;background:radial-gradient(circle at 36% 34%,rgba(255,255,255,.75) 0 16%,var(--pin-r) 22% 100%);box-shadow:1px 3px 3px rgba(0,0,0,.45)}
.pad h5{font:700 16px/1.3 "Courier Prime",Courier,monospace}
.pad h5 span{font-weight:400;letter-spacing:.08em;text-transform:uppercase;font-size:13px;color:#5b5f66;margin-left:.6em}
.pad p{font-size:15px;line-height:1.45;margin-top:4px}
.cfoot{display:flex;justify-content:center;gap:10px}
@media (max-width:760px){
 .ctop,.ctop.about{grid-template-columns:1fr}
 .felt{padding:26px 20px 22px}
 .felt ol{columns:1}
 .cs-row-2 .cs-img,.cs-row-3 .cs-img,.cs-row-match .cs-img{flex-basis:100%}
 .cs-film.is-tall{flex:1 1 42%}
 .cs-track{grid-template-columns:auto auto minmax(0,1fr)}
 .cs-bar{display:none}
 .cwall{border-width:8px;margin:12px auto 28px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
