.r2o-city{aspect-ratio:600/520;width:100%;max-width:560px;margin-inline:auto}.r2o-city-art{width:100%;height:100%;display:block;overflow:visible}.r2o-chart{--r2o-chart-height:200px;font-family:var(--font-sans),sans-serif;text-align:center;grid-template-columns:repeat(4,minmax(0,1fr));align-items:end;gap:18px;width:100%;display:grid}.r2o-chart-bar{flex-direction:column;display:flex}.r2o-chart-value{color:var(--color-text-heading);font-size:var(--text-base);font-variant-numeric:tabular-nums;transition:opacity .4s ease-out calc(var(--r2o-chart-index) * .12s + .5s);margin-block-end:8px;font-weight:600}.r2o-chart-fill{background:var(--r2o-chart-fill);height:calc(var(--r2o-chart-value) * var(--r2o-chart-height));transform-origin:bottom;transition:transform .9s cubic-bezier(.2,.8,.2,1) calc(var(--r2o-chart-index) * .12s);border-radius:6px 6px 0 0;position:relative;overflow:hidden}.r2o-chart-bar:first-child{--r2o-chart-fill:linear-gradient(#3b6fb0, #1e3a5f)}.r2o-chart-bar:nth-child(2){--r2o-chart-fill:linear-gradient(#3b82f6, #2563eb)}.r2o-chart-bar:nth-child(3){--r2o-chart-fill:linear-gradient(#38bdf8, #3b82f6)}.r2o-chart-bar:nth-child(4){--r2o-chart-fill:linear-gradient(#a5f3fc, #818cf8)}.r2o-chart-fill:after{animation:r2o-chart-shine 3.4s ease-in-out calc(var(--r2o-chart-index) * .3s) infinite;content:"";inset-inline:0;background:linear-gradient(#0000,#ffffff73,#0000);height:60px;position:absolute;top:0;transform:translateY(-100%)}.r2o-chart-report,.r2o-chart-year{color:var(--color-text);font-size:var(--text-sm);line-height:1.4}.r2o-chart-report{border-top:1px solid var(--color-border-strong);padding-block-start:12px}.r2o-chart-waiting .r2o-chart-fill{transition:none;transform:scaleY(0)}.r2o-chart-waiting .r2o-chart-value{opacity:0;transition:none}.r2o-chart-waiting .r2o-chart-fill:after{animation:none}@keyframes r2o-chart-shine{0%{transform:translateY(calc(var(--r2o-chart-value) * var(--r2o-chart-height)))}60%,to{transform:translateY(-100%)}}@media (width<=767px){.r2o-chart{--r2o-chart-height:160px;gap:10px}.r2o-chart-report,.r2o-chart-year{font-size:var(--text-xs)}}@media (prefers-reduced-motion:reduce){.r2o-chart-fill:after{animation:none;display:none}}.r2o-term{background:var(--color-surface);border:1px solid var(--color-border-strong);box-sizing:border-box;font-family:var(--font-mono),monospace;border-radius:11px;width:100%;font-size:12.5px;overflow:hidden}.r2o-term-bar{border-bottom:1px solid var(--color-border-strong);align-items:center;gap:7px;padding:11px 14px;display:flex}.r2o-term-title{color:var(--color-text-muted);margin-inline-start:7px}.r2o-term-status{color:#4ade80;white-space:nowrap;align-items:center;gap:7px;margin-inline-start:auto;font-size:11px;display:flex}.r2o-term-status:before{content:"";background:currentColor;border-radius:50%;width:7px;height:7px;animation:2s ease-in-out infinite r2o-term-pulse}.r2o-term-dot{border-radius:50%;width:11px;height:11px;display:inline-block}.r2o-term-dot-close{background:#f05650}.r2o-term-dot-minimize{background:#f5bd4f}.r2o-term-dot-zoom{background:#5fca6b}.r2o-term-body{box-sizing:border-box;color:var(--color-text);min-height:240px;padding:14px 16px;line-height:1.9;overflow:hidden}.r2o-term-line{white-space:pre-wrap}.r2o-term-body:has(>.r2o-term-screen){display:grid}.r2o-term-ghost,.r2o-term-screen{grid-area:1/1}.r2o-term-ghost{visibility:hidden}.r2o-term-prompt{color:#4ade80}.r2o-term-arg,.r2o-term-ok{color:var(--color-accent)}.r2o-term-dim{color:var(--color-text-muted)}.r2o-term-result{color:#cbd5e1}.r2o-term-static .r2o-term-body{min-height:0;padding:20px}.r2o-term-static .r2o-term-line{white-space:pre-wrap}.r2o-term-gap{margin-block-start:8px}.r2o-term-tags{font-family:var(--font-sans),sans-serif;flex-wrap:wrap;gap:8px;margin-block-start:20px;display:flex}.r2o-term>.r2o-term-tags{border-top:1px solid var(--color-border-strong);margin-block-start:0;padding:12px 16px}.r2o-term-tag{border:1px solid var(--color-border-strong);color:var(--color-text-heading);border-radius:999px;padding:5px 12px;font-size:12px;font-weight:600;line-height:1.5}.r2o-term-cursor{animation:1.1s step-end infinite r2o-term-blink}@keyframes r2o-term-blink{50%{opacity:0}}@keyframes r2o-term-pulse{0%,to{opacity:.35;transform:scale(.85)}50%{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.r2o-term-cursor,.r2o-term-status:before{animation:none}}