:root{color:#27180e;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--green-dark:#123d27;--green:#26734d;--green-bright:#9bd35c;--brown-dark:#432814;--brown:#88613d;--cream:#fff5d9;--paper:#fff5d9e0;--shadow:0 22px 70px #27180e3d;background:#ede0c2;font-family:JetBrains Mono,SFMono-Regular,Consolas,Liberation Mono,monospace}*{box-sizing:border-box}body{background:radial-gradient(circle at 0 0,#9bd35c52,#0000 28rem),#ede0c2;min-width:320px;min-height:100vh;margin:0}body:before{z-index:0;pointer-events:none;content:"";mix-blend-mode:multiply;opacity:.16;background:url(/schedule-2026/assets/opensouthcode-logo-DFrq7w3q.png) 48px 36px/140px;position:fixed;inset:0}body.modal-open{overflow:hidden}button,input{font:inherit}button{cursor:pointer}a{color:var(--green-dark);font-weight:800}.app-shell{z-index:1;width:min(1540px,100% - 32px);margin:0 auto;padding:32px 0 56px;position:relative}.hero{color:var(--cream);box-shadow:var(--shadow);background:linear-gradient(120deg,#123d27f5,#432814eb),repeating-linear-gradient(90deg,#0000 0 14px,#ffffff14 14px 15px);border:1px solid #201309b8;border-radius:36px;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:28px;margin-bottom:24px;padding:clamp(28px,5vw,64px);display:grid}.hero-title{align-items:center;gap:clamp(16px,3vw,32px);display:flex}.hero-logo{filter:drop-shadow(0 14px 26px #00000047);flex:none;width:clamp(82px,13vw,150px);height:auto}.hero-actions{flex-wrap:wrap;justify-content:end;align-items:center;gap:10px;display:flex}.hero-link{min-height:48px;color:var(--cream);background:#fff5d914;border:1px solid #fff5d959;border-radius:999px;align-items:center;padding:0 18px;text-decoration:none;display:inline-flex}.github-link{color:#fff;background:#0d1117;border-color:#ffffff29;gap:8px}.github-link:hover,.github-link:focus-visible{background:#24292f}.eyebrow{color:var(--green-bright);letter-spacing:.18em;text-transform:uppercase;margin:0 0 12px;font-size:.84rem;font-weight:900}h1,h2,h3,p{margin-top:0}h1{letter-spacing:-.08em;max-width:900px;margin-bottom:16px;font-size:clamp(2.8rem,8vw,7rem);line-height:.9}.toolbar{z-index:5;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#ede0c2e0;border-radius:20px;align-items:center;gap:10px;margin-bottom:14px;padding:12px;display:flex;position:sticky;top:0;overflow-x:auto}.day-tabs{background:var(--cream);border:1px solid #43281438;border-radius:16px;flex:none;grid-template-columns:repeat(2,minmax(128px,1fr));justify-self:start;min-height:48px;display:grid;overflow:hidden}.day-tabs button{appearance:none;min-width:0;color:var(--brown-dark);white-space:nowrap;background:0 0;border:0;place-items:center;padding:0 14px;font-weight:900;line-height:1;display:grid}.day-tabs button+button{border-left:1px solid #4328142e}.day-tabs button.active{color:var(--cream);background:var(--green-dark)}.day-label-short{display:none}.search-cluster{flex:480px;align-items:center;gap:8px;min-width:0;display:flex}.search-box{flex:220px;min-width:120px}.search-box,.locale-switcher{color:var(--brown-dark);letter-spacing:.08em;text-transform:uppercase;gap:8px;font-size:.78rem;font-weight:900;display:grid}.search-box input{width:100%;min-width:0;min-height:48px;color:var(--brown-dark);background:var(--cream);border:1px solid #43281438;border-radius:16px;outline:none;padding:0 18px}.star-button{width:48px;height:48px;color:var(--brown);background:0 0;border:0;place-items:center;padding:0;font-size:2rem;font-weight:900;line-height:1;transition:color .18s,transform .18s;display:grid}.star-button.active{color:#ffd84d}.star-button:hover,.star-button:focus-visible{transform:scale(1.08)}.result-count{min-width:38px;min-height:38px;color:var(--brown-dark);background:0 0;border:1px solid #43281447;border-radius:999px;justify-content:center;align-items:center;padding:0 10px;font-size:.9rem;font-weight:900;display:inline-flex}.result-count.active{color:var(--cream);border-color:var(--green-dark);background:var(--green-dark)}.locale-toggle{background:var(--cream);border:1px solid #43281438;border-radius:16px;grid-template-columns:repeat(2,44px);min-height:36px;display:grid;overflow:hidden}.locale-toggle button{color:var(--brown-dark);background:0 0;border:0;min-height:36px;font-weight:900}.locale-toggle button+button{border-left:1px solid #4328142e}.locale-toggle button.active{color:var(--cream);background:var(--green-dark)}.search-box input:focus,.locale-toggle:focus-within{border-color:var(--green);box-shadow:0 0 0 4px #9bd35c42}.schedule-wrap{box-shadow:none;background:0 0;border:0;border-radius:0;position:relative}.schedule-grid{grid-template-columns:64px repeat(var(--room-count), minmax(170px, 1fr));min-width:calc(64px + var(--room-count) * 170px);display:grid}.time-header,.room-header{z-index:3;background:#fff5d9f5;border-bottom:1px solid #43281438;min-height:54px;padding:14px 10px;position:sticky;top:56px}.room-header{color:var(--green-dark);text-align:center;border-left:1px solid #43281429;place-items:center;font-size:.8rem;font-weight:900;display:grid}.time-rail,.room-column{position:relative}.time-rail{background:#43281414}.time-rail span{color:#432814b8;font-size:.75rem;font-weight:900;position:absolute;right:12px;transform:translateY(-50%)}.room-column{background:linear-gradient(90deg,#fff3,#0000),#fff5d973;border-left:1px solid #43281429}.time-line{background:#43281421;height:1px;position:absolute;left:0;right:0}.session-card{z-index:2;width:calc(100% - 14px);color:var(--cream);background:linear-gradient(135deg, var(--green-dark), var(--green));cursor:pointer;text-align:left;border:1px solid #201309a3;border-radius:11px;align-content:start;gap:2px;padding:3px 30px 3px 6px;transition:width .42s cubic-bezier(.2,.8,.2,1),height .42s cubic-bezier(.2,.8,.2,1),opacity .26s,transform .42s cubic-bezier(.2,.8,.2,1),box-shadow .42s,filter .42s;display:grid;position:absolute;left:7px;overflow:hidden;box-shadow:0 12px 26px #27180e33}.session-star{z-index:2;color:#fff5d9db;text-shadow:0 1px 5px #20130973;width:32px;height:32px;font-size:1.35rem;position:absolute;top:5px;right:5px}.session-dimmed{opacity:.2}.session-card:hover,.session-card:focus-within,.session-card.expanded{z-index:4;filter:saturate(1.1);outline:none;width:calc(192% - 14px);transform:translateY(-3px);box-shadow:0 20px 42px #27180e57;height:var(--expanded-height)!important}.room-column:last-child .session-card{left:auto;right:7px}.session-es{background:linear-gradient(135deg,#5f381d,#a07143)}.session-card strong{text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1;transition:font-size .42s cubic-bezier(.2,.8,.2,1),line-height .42s cubic-bezier(.2,.8,.2,1);overflow:hidden}.session-card>span{color:#fff5d9d1;text-overflow:ellipsis;white-space:nowrap;font-size:.72rem;line-height:1.1;transition:font-size .42s cubic-bezier(.2,.8,.2,1),line-height .42s cubic-bezier(.2,.8,.2,1);overflow:hidden}.session-card:hover strong,.session-card:hover>span,.session-card:focus-within strong,.session-card:focus-within>span,.session-card.expanded strong,.session-card.expanded>span{text-overflow:clip;white-space:normal;font-size:.82rem;line-height:1.18;overflow:visible}.session-card:hover>span,.session-card:focus-within>span,.session-card.expanded>span{font-size:.72rem;line-height:1.2}.empty-state{color:var(--brown-dark);text-align:center;place-items:center;gap:12px;padding:40px;display:grid;position:sticky;left:0}.modal-backdrop{top:var(--modal-vv-top,0);left:var(--modal-vv-left,0);z-index:20;width:var(--modal-vv-width,100dvw);height:var(--modal-vv-height,100dvh);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#123d27ad;place-items:center;padding:clamp(8px,2.5vw,22px);display:grid;position:fixed;overflow:hidden}.modal-card{--modal-pad:clamp(18px, 4vw, 48px);width:min(920px, calc(var(--modal-vv-width,100dvw) - 2 * clamp(8px, 2.5vw, 22px)));max-width:100%;max-height:calc(var(--modal-vv-height,100dvh) - 2 * clamp(8px, 2.5vw, 22px));scrollbar-color:var(--brown) #ede0c2d9;scrollbar-gutter:stable;scrollbar-width:thin;color:var(--brown-dark);background:var(--cream);border:1px solid #201309b8;border-radius:32px 8px 8px 32px;padding:0;animation:.18s ease-out zoom-in;overflow:auto;box-shadow:0 30px 90px #00000059}.modal-card::-webkit-scrollbar{width:12px}.modal-card::-webkit-scrollbar-track{background:#ede0c2d9;border-left:1px solid #43281429}.modal-card::-webkit-scrollbar-thumb{background:var(--brown);border:3px solid #ede0c2d9;border-radius:999px}.modal-header{z-index:2;padding:var(--modal-pad) calc(var(--modal-pad) + 52px) 18px var(--modal-pad);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fff5d9f5;border-bottom:1px solid #43281424;position:sticky;top:0}.modal-body{padding:0 var(--modal-pad) var(--modal-pad)}.modal-card h2{color:var(--green-dark);letter-spacing:-.06em;margin-bottom:12px;font-size:clamp(1.8rem,5vw,3.8rem);line-height:.98}.modal-card h3{color:var(--brown);line-height:1.45}.close-button{width:42px;height:42px;color:var(--cream);background:var(--brown-dark);border:0;border-radius:50%;place-items:center;padding:0;font-size:1.65rem;font-weight:900;line-height:1;display:grid;position:absolute;top:18px;right:18px}.event-details{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:28px 0;display:grid}.event-details div{background:#ede0c2b8;border:1px solid #43281429;border-radius:18px;padding:16px}.event-details dt{color:var(--green);letter-spacing:.12em;text-transform:uppercase;margin-bottom:6px;font-size:.72rem;font-weight:900}.event-details dd{margin:0;line-height:1.45}.abstract{white-space:pre-wrap;color:#27180ee0;line-height:1.75}@keyframes zoom-in{0%{opacity:0;transform:scale(.86)}to{opacity:1;transform:scale(1)}}@media (width<=900px){.hero{grid-template-columns:1fr}.hero-actions{justify-content:start}.time-header,.room-header{top:56px}}@media (width<=640px){.app-shell{width:min(100% - 18px,1540px);padding-top:12px}.modal-card{--modal-pad:18px;border-radius:18px 6px 6px 18px}.modal-header{padding-right:64px}.event-details{grid-template-columns:1fr}.day-tabs button{padding:0 8px}.day-tabs{grid-template-columns:repeat(2,74px)}.day-label-full{display:none}.day-label-short{display:inline}.schedule-grid{grid-template-columns:54px repeat(var(--room-count), minmax(150px, 1fr));min-width:calc(54px + var(--room-count) * 150px)}}
