:root{--paper: #f2e7cd;--paper-2: #ecdcb8;--ink: #241a12;--ink-soft: #5c4a37;--blood: #d23a22;--ocre: #e6a92b;--nuit: #1f3a52;--line: #241a12}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:Hanken Grotesk,system-ui,sans-serif;font-weight:500;-webkit-font-smoothing:antialiased}.grain{position:fixed;inset:0;width:100%;height:100%;opacity:.06;pointer-events:none;z-index:9999;mix-blend-mode:multiply}.hero{max-width:1180px;margin:0 auto;padding:34px 22px 8px}.hero-row{display:flex;justify-content:space-between;gap:16px}.kicker{font-weight:800;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--blood)}.kicker-right{color:var(--nuit);text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wordmark{font-family:Fraunces,serif;font-weight:900;font-optical-sizing:auto;font-size:clamp(4.5rem,17vw,12rem);line-height:.82;margin:.06em 0 0;letter-spacing:-.02em;color:var(--ink);text-shadow:6px 6px 0 var(--ocre),12px 12px 0 var(--blood)}.wordmark .bullet{color:var(--blood);font-size:.4em;vertical-align:super;text-shadow:none}.tagline{font-family:Fraunces,serif;font-size:clamp(1.05rem,2.4vw,1.5rem);line-height:1.3;max-width:30ch;margin:.5em 0 .2em}.tagline em{color:var(--blood);font-style:italic}.stat-strip{display:flex;gap:22px;margin-top:14px;font-size:.9rem;flex-wrap:wrap}.stat-strip b{font-family:Fraunces,serif;font-size:1.2rem}.controls{position:sticky;top:0;z-index:50;max-width:1180px;margin:18px auto 0;padding:12px 22px;display:flex;gap:10px;align-items:center;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin;background:var(--paper);border-top:3px solid var(--line);border-bottom:3px solid var(--line)}.search-row{display:flex;gap:10px;flex:1 1 180px;min-width:150px;align-items:center}.search-wrap{position:relative;flex:1 1 auto}.filter-toggle{display:none}.search-ico{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:18px;height:18px;stroke:var(--ink-soft);stroke-width:2;fill:none;stroke-linecap:round}#search{width:100%;padding:11px 14px 11px 38px;font:inherit;font-weight:600;color:var(--ink);background:#fff8e8;border:2.5px solid var(--line);border-radius:2px;outline:none}#search:focus{box-shadow:4px 4px 0 var(--ocre)}.chips{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;flex-shrink:0}.chip{font:inherit;font-weight:700;font-size:.85rem;cursor:pointer;padding:8px 14px;flex-shrink:0;white-space:nowrap;background:var(--paper-2);color:var(--ink);border:2.5px solid var(--line);border-radius:2px}.chip.is-on{background:var(--ink);color:var(--paper)}.chip.toggle{background:var(--paper-2);color:var(--ink-soft)}.chip.toggle:before{content:"○";margin-right:7px;font-size:.95em}.chip.toggle.is-on{background:var(--ink);color:var(--paper)}.chip.toggle.is-on:before{content:"●"}.chip.toggle[data-filter=avail].is-on:before{color:#7fc06a}.chip.toggle[data-filter=new].is-on:before{color:var(--ocre)}.sep{width:2px;height:22px;background:var(--line);opacity:.3}#city,#composer,#period,#venue{font:inherit;font-weight:700;font-size:.85rem;cursor:pointer;padding:8px 12px;flex-shrink:0;background:var(--paper-2);color:var(--ink);border:2.5px solid var(--line);border-radius:2px;max-width:190px}.count{margin:0 0 0 auto;flex-shrink:0;font-weight:800;font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);white-space:nowrap}.grid{max-width:1180px;margin:26px auto;padding:0 22px;display:grid;gap:26px;grid-template-columns:repeat(auto-fill,minmax(270px,1fr))}.card{display:flex;flex-direction:column;text-decoration:none;color:inherit;background:#fff8e8;border:3px solid var(--line);border-radius:3px;box-shadow:7px 7px 0 var(--ink);transition:transform .12s ease,box-shadow .12s ease;overflow:hidden}.card:hover{transform:translate(-3px,-3px);box-shadow:12px 12px 0 var(--blood)}.card:focus-visible{outline:3px solid var(--nuit);outline-offset:3px}.thumb{position:relative;aspect-ratio:4 / 3;overflow:hidden;background:var(--nuit);border-bottom:3px solid var(--line)}.thumb img{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(1) contrast(1.05) brightness(1.02);mix-blend-mode:luminosity}.thumb:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#1f3a5226,#d23a224d);mix-blend-mode:multiply;pointer-events:none}.thumb.film img{filter:saturate(1.05) contrast(1.02);mix-blend-mode:normal}.thumb.film:after{background:linear-gradient(180deg,#1f3a520a,#241a1257)}.thumb-empty{display:grid;place-items:center;background:var(--blood)}.thumb-glyph{font-family:Fraunces,serif;font-size:4rem;color:var(--paper)}.source-tag{position:absolute;top:10px;left:10px;z-index:2;font-weight:800;font-size:.6rem;letter-spacing:.05em;text-transform:uppercase;padding:4px 8px;background:var(--nuit);color:var(--paper);border:2px solid var(--line);transform:rotate(-3deg)}.source-tag.paris{background:var(--ocre);color:var(--ink)}.source-tag.philharmonie{background:#5a4b8a;color:var(--paper)}.source-tag.lyon{background:#3f7a6b;color:var(--paper)}.sticker{position:absolute;top:10px;right:10px;z-index:2;font-weight:800;font-size:.68rem;letter-spacing:.06em;text-transform:uppercase;padding:5px 9px;background:var(--ocre);color:var(--ink);border:2px solid var(--line);transform:rotate(3deg)}.sticker.free,.sticker.onsale{background:#6fae5b;color:var(--ink)}.sticker.upcoming{background:var(--ocre);color:var(--ink)}.sticker.closed{background:#b8ab92;color:var(--ink)}.datechip{position:absolute;left:10px;bottom:10px;z-index:2;display:flex;flex-direction:column;align-items:center;line-height:1;background:var(--paper);color:var(--ink);border:2px solid var(--line);padding:5px 8px;transform:rotate(-3deg);font-weight:700;font-size:.62rem;text-transform:uppercase}.datechip b{font-family:Fraunces,serif;font-size:1.25rem;font-weight:900}.badge-new{position:absolute;right:10px;bottom:10px;z-index:2;font-weight:800;font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;padding:4px 8px;background:var(--blood);color:var(--paper);border:2px solid var(--line);transform:rotate(3deg)}.body{padding:14px 15px 16px;display:flex;flex-direction:column;gap:6px}.title{font-family:Fraunces,serif;font-weight:900;font-size:1.32rem;line-height:1.05;margin:0;letter-spacing:-.01em}.meta{margin:0;font-weight:700;font-size:.82rem;color:var(--ink-soft)}.meta .city{color:var(--blood)}.run{margin:0;font-weight:800;font-size:.72rem;letter-spacing:.03em;text-transform:uppercase;color:var(--nuit)}.lead{margin:2px 0 0;font-size:.86rem;line-height:1.4;color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tags{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 0}.tag{font-size:.66rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;padding:3px 7px;border:1.5px solid var(--ink-soft);color:var(--ink-soft);border-radius:2px}.tag-composer{border-color:var(--nuit);color:var(--nuit);background:#1f3a520f}.empty{text-align:center;font-family:Fraunces,serif;font-size:1.3rem;padding:40px 22px}.empty button{font:inherit;font-size:1rem;cursor:pointer;background:var(--blood);color:var(--paper);border:2.5px solid var(--line);padding:6px 14px}.foot{max-width:1180px;margin:40px auto 0;padding:18px 22px 50px;border-top:3px solid var(--line);display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;font-size:.76rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft)}.foot a{color:var(--blood)}.card.hidden{display:none}@media(max-width:640px){.controls{gap:10px;padding:10px 16px;flex-wrap:wrap;overflow-x:visible}.search-row{flex:1 1 100%}.filter-toggle{display:inline-flex;align-items:center;gap:7px;font:inherit;font-weight:700;font-size:.85rem;cursor:pointer;padding:11px 14px;white-space:nowrap;background:var(--paper-2);color:var(--ink);border:2.5px solid var(--line);border-radius:2px}.filter-toggle:after{content:"▾";font-size:.8em;transition:transform .15s ease}.controls.open .filter-toggle:after{transform:rotate(180deg)}.filter-toggle.has-active{background:var(--ink);color:var(--paper)}.chips{display:none;width:100%}.controls.open .chips{display:grid;grid-template-columns:1fr 1fr;gap:8px}.chips .chip,#city,#composer,#period,#venue{width:100%;max-width:none}.count{width:100%;margin:2px 0 0}}
