.rail{position:relative;margin:0 auto;max-width:1060px;padding-top:6px}
.rail::before{content:"";position:absolute;left:0;right:0;top:0;height:6px;border-radius:3px;background:linear-gradient(180deg,var(--web-rail),var(--web-rail-2));box-shadow:0 8px 14px -8px rgba(110,85,50,.35)}
.ptags{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:26px;align-items:start}
.pt{position:relative;margin-top:70px;padding:52px 20px 24px;text-align:center;background:var(--web-pinned);border-radius:10px 10px 14px 14px;box-shadow:0 22px 36px -22px rgba(40,50,70,.45),0 0 0 1px rgba(40,50,70,.05);transform-origin:50% -70px}
/* Jury review, 19 Oct 2026: a tag that sways forever is always drawn at a fractional angle, and its words blur.
   Each tag now swings in once as the row arrives, settles, and hangs exactly upright (no transform at rest). */
.js .ptags:not(.shown) .pt{transform:rotate(-3deg)}
.ptags.shown .pt{animation:settle 2.6s var(--ease-out) both}
.ptags.shown .pt:nth-child(2){animation-delay:.12s}.ptags.shown .pt:nth-child(3){animation-delay:.24s}.ptags.shown .pt:nth-child(4){animation-delay:.36s}
@media (hover:hover){ .ptags.shown .pt:hover{animation:nudge 1.6s var(--ease-out) both} }
.pt::before{content:"";position:absolute;left:50%;top:16px;width:14px;height:14px;margin-left:-7px;border-radius:50%;background:var(--tojuri-white);box-shadow:inset 0 1px 3px rgba(40,50,70,.35)}
.pt::after{content:"";position:absolute;left:50%;top:-70px;width:1px;height:93px;background:linear-gradient(180deg,rgba(35,64,95,.45),rgba(35,64,95,.45))}
@keyframes settle{0%{transform:rotate(-3deg)}28%{transform:rotate(1.8deg)}52%{transform:rotate(-.9deg)}74%{transform:rotate(.35deg)}100%{transform:none}}
@keyframes nudge{0%,100%{transform:none}30%{transform:rotate(1.2deg)}65%{transform:rotate(-.5deg)}}
.pt h3{font:450 18px/1.2 var(--display);color:var(--ink);margin:0 0 12px}
.pt b{display:block;font:450 46px/1 var(--display);letter-spacing:-.04em;color:var(--ink)}
.pt b small{font:500 14px/1 var(--sans);letter-spacing:0;color:var(--ink-2);margin-left:3px}
.pt p{margin:12px 0 0;font-size:14.5px;color:var(--body)}
.pt .when{display:block;margin-top:16px;font:italic 500 15px/1 var(--serif);color:var(--web-pinned-2)}
.pt.later{background:var(--web-pt-later);box-shadow:0 22px 36px -26px rgba(40,50,70,.3),0 0 0 1px rgba(40,50,70,.05)}
.pt.later h3,.pt.later b{color:var(--web-pt-later-2)}
.pt.later .when{color:var(--web-kitscene-paper-smp)}
.pt.life{background:var(--web-pt-life)}
.limits{list-style:none;padding:0;margin:0;text-align:left;font-size:14px;color:var(--body)}
.limits li{position:relative;padding:6px 0 6px 18px;border-top:1px dashed var(--web-limits)}
.limits li::before{content:"";position:absolute;left:2px;top:13px;width:7px;height:7px;border-radius:50%;background:var(--ink-3)}
.later-strip{margin:0 auto;max-width:60ch;text-align:center;font-size:15px;color:var(--ink-2)}
.calc{max-width:960px;margin:0 auto}
.calc label{display:block;text-align:center;font:500 15px/1 var(--sans);color:var(--ink-2)}
.calc output{display:block;text-align:center;font:450 clamp(40px,4.4vw,58px)/1 var(--display);letter-spacing:-.04em;color:var(--ink);margin:12px 0 18px}
.calc input{display:block;width:min(520px,90%);margin:0 auto;accent-color:var(--ink)}
.sum{max-width:760px;margin:0 auto;text-align:center;font:450 clamp(18px,1.6vw,22px)/1.4 var(--display);color:var(--ink)}
.sum b{font-weight:600}
.sum span{display:block;font:400 14px/1.5 var(--sans);color:var(--ink-2);margin-top:6px}
.est{width:100%;max-width:640px;margin:0 auto;border-collapse:collapse;font-size:15.5px}
.est th,.est td{padding:14px 12px;border-bottom:1px solid var(--line);text-align:left}
.est thead th{font:600 14px/1.3 var(--sans);color:var(--ink-3)}
.est td:last-child,.est th:last-child{text-align:right;font-family:var(--mono);font-size:14px;color:var(--ink)}
.est tbody th{font:450 16px/1.3 var(--display);color:var(--ink)}
@media (max-width:1100px){ .ptags{grid-template-columns:1fr 1fr;gap:10px 22px;max-width:640px;margin:0 auto} }
@media (max-width:520px){ .ptags{grid-template-columns:1fr} .pt{max-width:320px;margin-left:auto;margin-right:auto;width:100%} }
@media (prefers-reduced-motion:reduce){ .ptags .pt,.ptags.shown .pt,.ptags.shown .pt:hover{animation:none;transform:none} }
.appcard{max-width:600px;margin-left:auto;margin-right:auto;border-radius:16px;background:var(--tojuri-white);box-shadow:0 0 0 1px rgba(35,64,95,.08),0 34px 70px -44px rgba(30,60,100,.55);overflow:hidden;padding:8px}
.appcard img{width:100%;height:auto;display:block}
.room .in > .est + .appcard{margin-top:var(--gap-visual)}
.est td{white-space:nowrap;text-align:right;font-family:var(--mono);font-size:14px;color:var(--ink)}
.est thead th:not(:first-child){text-align:right;font:600 14px/1.3 var(--sans);color:var(--ink-3)}
.invitefirst{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:14px 24px;max-width:760px;margin:0 auto;padding:22px 26px;border-radius:18px;background:var(--mist);text-align:center}
.invitefirst p{margin:0;color:var(--body);font-size:15.5px;max-width:46ch}
.invitefirst b{color:var(--ink);font-weight:600}
.room .in > .later-strip + .invitefirst{margin-top:var(--gap-visual)}
.lifeterms{max-width:760px;margin:var(--gap-caption) auto 0;padding:22px 26px 18px;border-radius:14px;background:var(--web-pt-life);box-shadow:0 0 0 1px rgba(40,50,70,.05)}
.lifeterms h3{margin:0 0 8px;font:450 17px/1.3 var(--display);color:var(--ink)}
.lifeterms .limits{columns:2;column-gap:28px}
.lifeterms .limits li{break-inside:avoid}
.room .in > .lifeterms + .later-strip{margin-top:var(--gap-caption)}
@media (max-width:640px){ .lifeterms .limits{columns:1} }
/* long reading text is left-aligned (founder rule); short lines stay centred */
.room .read{text-align:left;max-width:62ch;margin-left:auto;margin-right:auto}
.sum .read{display:block;margin-top:10px}
