/*!
 * CMS 通用轮播组件（内置）——任何主题都能直接用，不依赖 jQuery。
 * 用法见 cms/templates/_cms/carousel.html.twig
 * 无 JS 或 JS 未加载时退化为「只显示第一张」，不会白屏。
 */
.cms-carousel{position:relative;overflow:hidden;width:100%;height:var(--cms-carousel-height,420px);background:#101a2b;--cms-carousel-arrow:40px}
.cms-carousel-viewport{position:relative;width:100%;height:100%;overflow:hidden}
.cms-carousel-track{position:relative;height:100%}
.cms-carousel-slide{position:absolute;inset:0;margin:0;opacity:0;visibility:hidden;transition:opacity .6s ease,visibility .6s ease}
.cms-carousel-slide.is-active{opacity:1;visibility:visible;z-index:1}
.cms-carousel[data-effect="slide"] .cms-carousel-track{display:flex;height:100%;transition:transform .6s ease}
.cms-carousel[data-effect="slide"] .cms-carousel-slide{position:relative;inset:auto;flex:0 0 100%;width:100%;height:100%;opacity:1;visibility:visible}
.cms-carousel-slide a{display:block;width:100%;height:100%;text-decoration:none}
.cms-carousel-slide img{display:block;width:100%;height:100%;object-fit:var(--cms-carousel-fit,cover);border:0}
.cms-carousel-arrow{position:absolute;top:50%;z-index:3;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:var(--cms-carousel-arrow);height:calc(var(--cms-carousel-arrow) * 1.5);padding:0;border:0;border-radius:4px;background:rgba(0,0,0,.35);color:#fff;opacity:0;cursor:pointer;transition:opacity .25s}
.cms-carousel:hover .cms-carousel-arrow,.cms-carousel:focus-within .cms-carousel-arrow{opacity:.85}
.cms-carousel-arrow.is-prev{left:0}
.cms-carousel-arrow.is-next{right:0}
.cms-carousel-arrow::before{content:"";width:10px;height:10px;border-left:2px solid currentColor;border-bottom:2px solid currentColor}
.cms-carousel-arrow.is-prev::before{transform:rotate(45deg);margin-left:3px}
.cms-carousel-arrow.is-next::before{transform:rotate(-135deg);margin-right:3px}
.cms-carousel-dots{position:absolute;left:0;right:0;bottom:14px;z-index:3;display:flex;justify-content:center;gap:8px;margin:0;padding:0;list-style:none}
.cms-carousel-dot{width:26px;height:5px;padding:0;border:0;border-radius:3px;background:rgba(255,255,255,.45);cursor:pointer;transition:background .25s}
.cms-carousel-dot.is-active{background:#fff}
@media(max-width:768px){.cms-carousel{height:var(--cms-carousel-height-sm,calc(var(--cms-carousel-height,420px) * .6))}.cms-carousel-dot{width:18px;height:4px}.cms-carousel-arrow{opacity:.7}}
@media(prefers-reduced-motion:reduce){.cms-carousel-slide,.cms-carousel[data-effect="slide"] .cms-carousel-track,.cms-carousel-dot{transition:none}}
