/* Portable article blocks; Weiwan's color variables take precedence. */
.wwe-gallery { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; clear:both; margin:24px 0; min-width:0; }
.wwe-gallery.wwe-layout-2,.wwe-gallery.wwe-layout-auto.wwe-count-2,.wwe-gallery.wwe-layout-auto.wwe-count-4 { grid-template-columns:repeat(2,minmax(0,1fr)); }
.wwe-gallery.wwe-layout-4 { grid-template-columns:repeat(4,minmax(0,1fr)); }
.wwe-gallery.wwe-count-1 { grid-template-columns:minmax(0,1fr); }
.wwe-gallery.wwe-layout-featured>.wwe-item:first-child { grid-column:1/-1; }
.wwe-gallery.wwe-gap-small { gap:6px; }.wwe-gallery.wwe-gap-large { gap:20px; }
.wwe-gallery>.wwe-item { min-width:0; margin:0; padding:0; border:0; }
.wwe-gallery .wwe-image-link { display:block; overflow:hidden; border-radius:8px; background:var(--soft,#f4f5f7); text-decoration:none; border:1px solid var(--border,#e9edf0); aspect-ratio:1; }
.wwe-gallery .wwe-image-link img { display:block; width:100%; max-width:100%; height:100%; margin:0; padding:0; border:0; border-radius:0; object-fit:cover; transition:transform .2s ease; }
.wwe-gallery.wwe-ratio-landscape .wwe-image-link { aspect-ratio:4/3; }
.wwe-gallery.wwe-ratio-portrait .wwe-image-link { aspect-ratio:3/4; }
.wwe-gallery.wwe-ratio-original .wwe-image-link { aspect-ratio:auto; }
.wwe-gallery.wwe-ratio-original .wwe-image-link img { height:auto; object-fit:contain; }
.wwe-gallery.wwe-layout-featured:not(.wwe-ratio-original)>.wwe-item:first-child .wwe-image-link { aspect-ratio:16/9; }
.wwe-gallery .wwe-item figcaption { margin:7px 0 0; padding:0 2px; color:var(--text,#52677c); font-size:13px; line-height:1.7; text-align:center; overflow-wrap:anywhere; }
.wwe-gallery .wwe-image-link:focus-visible { outline:2px solid var(--accent,#607ab3); outline-offset:3px; }
@media(hover:hover) and (pointer:fine) { .wwe-gallery .wwe-image-link:hover img { transform:scale(1.025); } }
.wwe-note { margin:24px 0; padding:18px 20px; background:var(--accent-bg,#f0f2f9); color:var(--text,#52677c); border-left:3px solid var(--accent,#607ab3); border-radius:0 9px 9px 0; overflow-wrap:anywhere; }
.wwe-note>strong { display:block; margin-bottom:8px; color:var(--accent,#607ab3); font-size:15px; }
.wwe-note>p { margin:0 0 8px; }.wwe-note>p:last-child { margin:0; }
.wwe-details { margin:24px 0; border:1px solid var(--border,#e9edf0); border-radius:9px; background:var(--card,#fff); overflow-wrap:anywhere; }
.wwe-details>summary { padding:13px 17px; min-height:48px; color:var(--accent,#607ab3); cursor:pointer; background:var(--soft,#f9f9fa); border-radius:9px; font-size:15px; }
.wwe-details>summary:focus-visible { outline:2px solid var(--accent,#607ab3); outline-offset:3px; }
.wwe-details[open]>summary { border-bottom:1px solid var(--border,#e9edf0); border-radius:9px 9px 0 0; }
.wwe-details>div { padding:17px; }.wwe-details>div>:last-child { margin-bottom:0; }
.wwe-columns { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:22px; margin:24px 0; }
.wwe-columns>div { min-width:0; overflow-wrap:anywhere; }.wwe-columns>div>:first-child { margin-top:0; }.wwe-columns>div>:last-child { margin-bottom:0; }
.wwe-button-row { margin:22px 0; }.wwe-button-row>a.wwe-button { display:inline-flex; align-items:center; justify-content:center; max-width:100%; min-height:44px; padding:8px 18px; border:1px solid var(--site-border,#dce2ee); border-radius:7px; background:var(--accent-bg,#f0f2f9); color:var(--accent,#607ab3); text-decoration:none; font-size:14px; overflow-wrap:anywhere; }
.wwe-button-row>a.wwe-button:hover { border-color:var(--module-hover-border,#a2b1df); }
hr.wwe-divider { height:1px; border:0; background:var(--border,#e9edf0); margin:30px 0; }
.wwe-locked,.wwe-protected-draft { box-sizing:border-box; margin:24px 0; padding:20px; border:1px dashed var(--site-border,#dce2ee); border-radius:10px; background:var(--soft,#f8f9fb); color:var(--text,#52677c); overflow-wrap:anywhere; }
.wwe-locked>strong,.wwe-protected-draft>strong { display:block; color:var(--accent,#607ab3); font-size:16px; }
.wwe-locked>p,.wwe-protected-draft>p { margin:8px 0 14px; font-size:14px; line-height:1.8; }
.wwe-locked .wwe-unlock-form { margin:0; }.wwe-locked label { display:block; max-width:340px; font-size:13px; }
.wwe-locked input[type=password] { display:block; box-sizing:border-box; width:100%; min-height:44px; margin:6px 0 12px; padding:9px 12px; border:1px solid var(--border,#e5eaf0); border-radius:7px; color:var(--ink,#34495e); background:var(--card,#fff); font:inherit; font-size:16px; }
.wwe-locked .wwe-unlock-actions { display:flex; flex-wrap:wrap; align-items:center; gap:15px; }
.wwe-locked button { min-height:44px; padding:9px 16px; border:1px solid var(--site-border,#dce2ee); border-radius:7px; color:var(--accent,#607ab3); background:var(--accent-bg,#f0f2f9); font:inherit; font-size:14px; cursor:pointer; }
.wwe-locked button:disabled { opacity:.6; cursor:wait; }.wwe-locked :is(button,input):focus-visible { outline:2px solid var(--accent,#607ab3); outline-offset:3px; }
.wwe-locked .wwe-unlock-message { margin:10px 0 0; font-size:13px; line-height:1.8; }.wwe-locked .wwe-unlock-message:empty { display:none; }
.wwe-unlocked-content { min-width:0; margin:24px 0; overflow-wrap:anywhere; }.wwe-unlocked-content:focus-visible { outline:2px solid var(--accent,#607ab3); outline-offset:5px; }
.wwe-table-scroll { max-width:100%; overflow:auto; margin:22px 0; border:1px solid var(--border,#e5eaf0); border-radius:7px; }.wwe-table-scroll:focus-visible { outline:2px solid var(--accent,#607ab3); outline-offset:3px; }
.wwe-lightbox { box-sizing:border-box; position:fixed; inset:0; width:100%; max-width:100%; height:100dvh; max-height:100dvh; margin:0; padding:16px; overflow:hidden; border:0; border-radius:0; color:#fff; background:#171c24f5; z-index:1000; }
.wwe-lightbox[open] { display:grid; grid-template-rows:auto minmax(0,1fr) auto; gap:12px; }.wwe-lightbox::backdrop { background:#171c24; }
.wwe-lightbox .wwe-lightbox-top,.wwe-lightbox .wwe-lightbox-bottom { display:flex; align-items:center; justify-content:space-between; gap:14px; flex-shrink:0; font:14px/1.7 var(--font,system-ui,sans-serif); }
.wwe-lightbox button,.wwe-lightbox a { display:inline-flex; align-items:center; justify-content:center; min-width:44px; min-height:44px; padding:8px 13px; border:1px solid #ffffff40; border-radius:7px; background:#ffffff10; color:#fff; cursor:pointer; text-decoration:none; font:inherit; }
.wwe-lightbox button:focus-visible,.wwe-lightbox a:focus-visible { outline:2px solid #c4d7ff; outline-offset:3px; }
.wwe-lightbox button:disabled { opacity:.3; cursor:default; }
.wwe-lightbox .wwe-lightbox-stage { min-width:0; min-height:0; overflow:hidden; position:relative; }
.wwe-lightbox .wwe-lightbox-image { position:absolute; inset:0; display:block; max-width:100%; max-height:100%; width:100%; height:100%; object-fit:contain; border-radius:0; margin:0; }
.wwe-lightbox .wwe-lightbox-caption { text-align:center; overflow-wrap:anywhere; margin:0; flex:1; max-height:20vh; overflow:auto; }
.wwe-lightbox .wwe-lightbox-error { position:absolute; inset:auto 0 12px; text-align:center; background:#171c24de; padding:10px; }
@media(max-width:680px) {
  .wwe-gallery:not(.wwe-count-1) { grid-template-columns:repeat(2,minmax(0,1fr)); gap:9px; }
  .wwe-gallery.wwe-gap-small { gap:5px; }.wwe-gallery.wwe-gap-large { gap:13px; }
  .wwe-columns { grid-template-columns:minmax(0,1fr); gap:16px; }
  .wwe-note { padding:15px 16px; }.wwe-gallery .wwe-item figcaption { font-size:12px; }
  .wwe-lightbox { padding:max(10px,env(safe-area-inset-top)) 10px max(10px,env(safe-area-inset-bottom)); }
  .wwe-lightbox .wwe-lightbox-bottom { gap:9px; }
}
@media(prefers-reduced-motion:reduce) { .wwe-gallery .wwe-image-link img { transition:none; } }
