/*
 * Index Landing Page layouts (Manage Public View -> Presets -> Index Landing
 * Page). Every selector is namespaced under .sis-index so nothing here can
 * collide with a theme's own .card/.grid/.button rules, and all tunable
 * values come from the --sis-index-* custom properties the renderer emits
 * from the preset's sanitized options.
 *
 * Breakpoints match the plugin's existing responsive convention used by the
 * Masonry and Orientation Sections presets: 1440px large desktop, 900px
 * tablet, 600px mobile.
 */

.sis-index{--sis-index-cols:4;--sis-index-cols-tablet:2;--sis-index-cols-mobile:1;--sis-index-gap:20px;--sis-index-radius:12px;--sis-index-pad:20px;--sis-index-accent:#2271b1;--sis-index-max-width:1200px;--sis-index-surface:rgba(127,127,127,.08);--sis-index-border:rgba(127,127,127,.28);max-width:var(--sis-index-max-width,1200px);margin:1.5rem auto;width:100%}
.sis-index *{box-sizing:border-box}
.sis-index ul,.sis-index ol{list-style:none;margin:0;padding:0}
/* Several layouts give their items an explicit display, which would
   otherwise beat the user-agent's [hidden] rule and leave filtered-out
   portfolios on screen. */
.sis-index [hidden]{display:none!important}

.sis-index__header{margin-bottom:1.25rem}
.sis-index__title{margin:0 0 .35em}
.sis-index__intro{margin:0;opacity:.85}

/* Toolbar: search / sort / views / result count. */
.sis-index__toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:1rem}
.sis-index__search{position:relative;display:flex;align-items:center;gap:6px;flex:1 1 260px;min-width:0}
.sis-index__search-input{width:100%;min-width:0;padding:10px 12px;border:1px solid var(--sis-index-border);border-radius:var(--sis-index-radius);font:inherit;background:transparent;color:inherit}
.sis-index__clear,.sis-index__clear-inline{border:1px solid var(--sis-index-border);background:transparent;color:inherit;border-radius:var(--sis-index-radius);padding:6px 10px;font:inherit;cursor:pointer}
.sis-index__sort{display:flex;align-items:center;gap:6px}
.sis-index__sort-select{font:inherit;padding:8px 10px;border:1px solid var(--sis-index-border);border-radius:var(--sis-index-radius);background:transparent;color:inherit}
.sis-index__result-count{margin:0;flex-basis:100%;opacity:.8;font-size:.9em}
.sis-index__views{display:flex;gap:4px;border:1px solid var(--sis-index-border);border-radius:var(--sis-index-radius);padding:3px}
.sis-index__view{border:0;background:transparent;color:inherit;font:inherit;padding:7px 14px;border-radius:calc(var(--sis-index-radius) - 3px);cursor:pointer}
.sis-index__view.is-active{background:var(--sis-index-accent);color:#fff}

/* A-Z strip. Wraps by default; scrolls horizontally on narrow screens. */
.sis-index__letters{margin:0 0 1rem}
.sis-index__letters ul{display:flex;flex-wrap:wrap;gap:4px}
.sis-index__letter{border:1px solid var(--sis-index-border);background:transparent;color:inherit;font:inherit;min-width:2.1em;padding:5px 8px;border-radius:6px;cursor:pointer;line-height:1}
.sis-index__letter.is-active{background:var(--sis-index-accent);color:#fff;border-color:var(--sis-index-accent)}
.sis-index__letter.is-empty,.sis-index__letter[disabled]{opacity:.35;cursor:default}

/* Focus and empty states. */
.sis-index a:focus-visible,.sis-index button:focus-visible,.sis-index input:focus-visible,.sis-index select:focus-visible,.sis-index [tabindex]:focus-visible{outline:3px solid var(--sis-index-accent);outline-offset:2px}
.sis-index__empty,.sis-index__no-results{margin:1.5rem 0;padding:1rem;border:1px dashed var(--sis-index-border);border-radius:var(--sis-index-radius);text-align:center}
.sis-index [aria-disabled="true"]{opacity:.6;cursor:not-allowed;text-decoration:none}

/* Shared grid + card primitives. */
.sis-index__grid{display:grid;grid-template-columns:repeat(var(--sis-index-cols),minmax(0,1fr));gap:var(--sis-index-gap)}
.sis-index__card{position:relative;display:flex;flex-direction:column;gap:8px;padding:var(--sis-index-pad);border:1px solid var(--sis-index-border);border-radius:var(--sis-index-radius);background:var(--sis-index-surface);min-width:0;overflow-wrap:anywhere}
.sis-index--equal-height .sis-index__card{height:100%}
.sis-index__card-body{display:flex;flex-direction:column;gap:6px;min-width:0}
.sis-index__item-title{margin:0;font-size:1.05em;line-height:1.3;overflow-wrap:anywhere;hyphens:auto}
.sis-index__title-text{color:inherit;text-decoration:none}
.sis-index__title-text:hover{text-decoration:underline}
.sis-index__excerpt{margin:0;font-size:.9em;opacity:.85}
.sis-index__browse{font-size:.9em;color:var(--sis-index-accent);margin-top:auto}
.sis-index__browse-arrow{display:inline-block}

/* Whole-card link: one real focusable link whose hit area covers the card. */
.sis-index__card--linked .sis-index__stretch::after,.sis-index__bento-tile .sis-index__stretch::after,.sis-index__tile .sis-index__stretch::after{content:"";position:absolute;inset:0;border-radius:inherit}
.sis-index__card--linked:hover,.sis-index__tile:hover,.sis-index__bento-tile:hover{border-color:var(--sis-index-accent)}

/* Counts. */
.sis-index__count{align-self:flex-start;font-size:.85em;line-height:1.2}
.sis-index__count--pill{background:var(--sis-index-accent);color:#fff;border-radius:999px;padding:3px 10px}
.sis-index__count--square{background:var(--sis-index-accent);color:#fff;border-radius:4px;padding:3px 8px}
.sis-index__count--plain{opacity:.8}
/* Sits above the whole-tile link overlay, so it must not swallow the click
   that lands on it. */
.sis-index__count--corner{position:absolute;top:8px;right:8px;pointer-events:none}

/* Representative imagery. */
.sis-index__media{position:relative;overflow:hidden;border-radius:calc(var(--sis-index-radius) - 4px);background:var(--sis-index-surface);display:flex;align-items:center;justify-content:center}
.sis-index__media--landscape{aspect-ratio:16/9}
.sis-index__media--photo{aspect-ratio:4/3}
.sis-index__media--square{aspect-ratio:1/1}
.sis-index__media--cover{aspect-ratio:3/2}
.sis-index__media--natural{aspect-ratio:auto}
.sis-index__image{display:block;width:100%;height:100%;object-fit:cover}
.sis-index__media--natural .sis-index__image{height:auto;object-fit:contain}
.sis-index__media--fallback{color:var(--sis-index-accent)}
.sis-index__media-initial{font-size:1.8rem;font-weight:700;opacity:.55;letter-spacing:.05em}
/* Overlay mode stacks the body over the image with a single grid area
   rather than absolute positioning: an absolutely-positioned body would
   become the containing block for the whole-card link's overlay and shrink
   its hit area to the caption. */
.sis-index__gallery--overlay .sis-index__card--gallery{padding:0;display:grid;grid-template-areas:"sis-stack"}
.sis-index__gallery--overlay .sis-index__media{grid-area:sis-stack;border-radius:var(--sis-index-radius)}
.sis-index__gallery--overlay .sis-index__card-body{grid-area:sis-stack;align-self:end;z-index:1;padding:var(--sis-index-pad);background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.72));color:#fff;border-radius:0 0 var(--sis-index-radius) var(--sis-index-radius)}

/* Button / tile grid. */
.sis-index__tile{position:relative;display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:var(--sis-index-tile-height,84px);padding:var(--sis-index-pad);border:1px solid var(--sis-index-border);border-radius:var(--sis-index-radius);background:var(--sis-index-surface);min-width:0}
.sis-index__tiles--rectangular .sis-index__tile{border-radius:2px}
.sis-index__tiles--pill .sis-index__tile{border-radius:999px;padding-left:calc(var(--sis-index-pad) + 6px);padding-right:calc(var(--sis-index-pad) + 6px)}
.sis-index__tile-title{font-size:1em;font-weight:700;text-transform:uppercase;letter-spacing:.02em;min-width:0}

/* Statistical cards. */
.sis-index__card--stat{gap:4px}
.sis-index__stats--center .sis-index__card--stat{align-items:center;text-align:center}
.sis-index__stat{margin:0;display:flex;flex-direction:column;line-height:1.05}
.sis-index__stat-number{font-size:var(--sis-index-stat-size,40px);font-weight:800;font-variant-numeric:tabular-nums}
.sis-index__stat-label{font-size:.85em;opacity:.75;text-transform:lowercase}

/* Weighted tag cloud. */
.sis-index__cloud{display:flex;flex-wrap:wrap;align-items:baseline;gap:calc(var(--sis-index-gap) / 2) var(--sis-index-gap)}
.sis-index__cloud--center{justify-content:center}
.sis-index__cloud-item{display:inline-flex;align-items:baseline;gap:.3em;font-size:var(--sis-index-cloud-size,16px);line-height:1.2;max-width:100%}
.sis-index__cloud-link{color:inherit;text-decoration:none;font-weight:600;overflow-wrap:anywhere}
.sis-index__cloud-link:hover{text-decoration:underline;color:var(--sis-index-accent)}
.sis-index__count--cloud{font-size:max(.62em,11px);opacity:.7;background:none;color:inherit;padding:0}
.sis-index__cloud--count-hover .sis-index__count--cloud{opacity:0;transition:opacity .15s ease}
.sis-index__cloud--count-hover .sis-index__cloud-item:hover .sis-index__count--cloud,.sis-index__cloud--count-hover .sis-index__cloud-item:focus-within .sis-index__count--cloud{opacity:.75}

/* Treemap: percentage geometry computed server-side, so it is correct at
   every width with no recalculation. */
.sis-index__treemap{position:relative;width:100%;padding-top:var(--sis-index-treemap-aspect,60%);border-radius:var(--sis-index-radius);overflow:hidden}
.sis-index__treemap-tile{position:absolute;padding:2px}
.sis-index__treemap-link{display:flex;flex-direction:column;justify-content:flex-end;gap:2px;width:100%;height:100%;padding:8px;border-radius:6px;background:var(--sis-index-accent);color:#fff;text-decoration:none;overflow:hidden;font-size:clamp(11px,1.1vw,15px);line-height:1.15}
.sis-index__treemap-tile:nth-child(even) .sis-index__treemap-link{filter:brightness(.86)}
.sis-index__treemap-tile:nth-child(3n) .sis-index__treemap-link{filter:brightness(1.12)}
.sis-index__treemap-link:hover{outline:2px solid #fff;outline-offset:-3px}
.sis-index__treemap-label{font-weight:700;overflow-wrap:anywhere}
.sis-index__treemap-count{font-size:.85em;opacity:.9}

/* Bubble cloud: flow layout, so bubbles can never overlap or need a
   collision pass, and diameters are area-proportional. */
.sis-index__bubbles{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sis-index-gap)}
.sis-index__bubbles--center{justify-content:center}
.sis-index__bubble{width:var(--sis-index-bubble-size,120px);max-width:100%}
.sis-index__bubble-link{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;width:100%;aspect-ratio:1/1;border-radius:50%;padding:10%;background:var(--sis-index-accent);color:#fff;text-decoration:none;text-align:center;font-size:clamp(11px,calc(var(--sis-index-bubble-size,120px) / 10),18px);line-height:1.15;overflow:hidden}
.sis-index__bubble-link:hover{filter:brightness(1.1)}
.sis-index__bubble-label{font-weight:700;overflow-wrap:anywhere}
.sis-index__bubble-count{font-size:.8em;opacity:.9}

/* Sortable table. */
.sis-index__table-wrap{overflow-x:auto;border:1px solid var(--sis-index-border);border-radius:var(--sis-index-radius)}
.sis-index__table{width:100%;border-collapse:collapse}
.sis-index__table th,.sis-index__table td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--sis-index-border);vertical-align:top}
.sis-index__table thead th{white-space:nowrap;padding:0}
.sis-index__th-button{display:flex;align-items:center;gap:6px;width:100%;padding:10px 14px;border:0;background:transparent;color:inherit;font:inherit;font-weight:700;cursor:pointer;text-align:left}
.sis-index__sort-indicator::after{content:"\2195";opacity:.4}
.sis-index__table th[aria-sort="ascending"] .sis-index__sort-indicator::after{content:"\2191";opacity:1}
.sis-index__table th[aria-sort="descending"] .sis-index__sort-indicator::after{content:"\2193";opacity:1}
.sis-index__table--zebra tbody tr:nth-child(even){background:var(--sis-index-surface)}
.sis-index__cell--count{font-variant-numeric:tabular-nums;white-space:nowrap}
.sis-index__cell--name{font-weight:600}
.sis-index__action-link{color:var(--sis-index-accent)}

/* Horizontal bar index. */
.sis-index__bars{display:flex;flex-direction:column;gap:calc(var(--sis-index-gap) / 2)}
.sis-index__bar-row{display:grid;grid-template-columns:minmax(0,var(--sis-index-bar-title,240px)) 1fr auto;align-items:center;gap:12px}
.sis-index__bar-title{overflow-wrap:anywhere;color:inherit;text-decoration:none;font-weight:600}
.sis-index__bar-title:hover{text-decoration:underline}
.sis-index__bar-track{display:block;height:var(--sis-index-bar-height,14px);border-radius:999px;background:var(--sis-index-surface);overflow:hidden}
.sis-index__bar-fill{display:block;height:100%;border-radius:999px;background:var(--sis-index-accent);transition:width .2s ease}
.sis-index__bar-count{font-variant-numeric:tabular-nums;font-weight:700;white-space:nowrap}

/* Disclosure (Expandable Cards + Accordion Index). */
.sis-index__accordion{display:flex;flex-direction:column;gap:6px}
.sis-index__accordion-row{border:1px solid var(--sis-index-border);border-radius:var(--sis-index-radius);overflow:hidden}
.sis-index__disclosure-heading{margin:0;font-size:1em}
.sis-index__disclosure-button{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:14px var(--sis-index-pad);border:0;background:transparent;color:inherit;font:inherit;font-weight:600;text-align:left;cursor:pointer}
.sis-index__card--expandable .sis-index__disclosure-button{padding:0}
.sis-index__disclosure-label{overflow-wrap:anywhere}
.sis-index__disclosure-icon{flex:0 0 auto;width:.7em;height:.7em;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform .18s ease}
.sis-index__disclosure-button[aria-expanded="true"] .sis-index__disclosure-icon{transform:rotate(-135deg)}
.sis-index__disclosure-panel{display:flex;flex-direction:column;gap:10px;padding:0 var(--sis-index-pad) 14px}
.sis-index__card--expandable .sis-index__disclosure-panel{padding:0}
.sis-index__recent-heading{margin:0;font-size:.85em;font-weight:700;text-transform:uppercase;letter-spacing:.04em;opacity:.7}
.sis-index__recent{display:flex;flex-direction:column;gap:3px;font-size:.9em;opacity:.9}
.sis-index__panel-action{margin:0}

/* Bento grid. */
.sis-index__bento{display:grid;grid-template-columns:repeat(var(--sis-index-cols),minmax(0,1fr));grid-auto-rows:var(--sis-index-bento-row,120px);gap:var(--sis-index-gap)}
/* Same single-grid-area stacking as the overlay gallery, and for the same
   reason: the body must sit over the image without becoming the containing
   block for the whole-tile link's overlay. */
.sis-index__bento-tile{position:relative;display:grid;grid-template-areas:"sis-stack";grid-column:span min(var(--sis-index-span,1),var(--sis-index-cols));grid-row:span var(--sis-index-span,1);border:1px solid var(--sis-index-border);border-radius:var(--sis-index-radius);background:var(--sis-index-surface);overflow:hidden;min-width:0}
.sis-index__bento-tile .sis-index__media{grid-area:sis-stack;border-radius:0;width:100%;height:100%;aspect-ratio:auto}
.sis-index__bento-body{grid-area:sis-stack;align-self:end;z-index:1;display:flex;flex-direction:column;gap:6px;padding:var(--sis-index-pad);min-width:0}
.sis-index__bento-tile:has(.sis-index__media) .sis-index__bento-body{color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.6);background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.72))}

/* Plain fallback list (used only if a layout throws at render time). */
.sis-index__plain{display:flex;flex-direction:column;gap:8px}
.sis-index__plain-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;border-bottom:1px solid var(--sis-index-border)}

@media(min-width:1441px){
	.sis-index__grid,.sis-index__bento{grid-template-columns:repeat(var(--sis-index-cols),minmax(0,1fr))}
}
@media(max-width:900px){
	.sis-index__grid,.sis-index__bento{grid-template-columns:repeat(var(--sis-index-cols-tablet),minmax(0,1fr))}
	/* Never force the desktop bento structure onto a tablet or phone. */
	.sis-index__bento-tile{grid-column:span 1;grid-row:span 1}
	.sis-index__letters ul{flex-wrap:nowrap;overflow-x:auto;padding-bottom:6px;-webkit-overflow-scrolling:touch}
	.sis-index__bar-row{grid-template-columns:minmax(0,1fr) auto;row-gap:6px}
	.sis-index__bar-track{grid-column:1/-1}
}
@media(max-width:600px){
	.sis-index__grid,.sis-index__bento{grid-template-columns:repeat(var(--sis-index-cols-mobile),minmax(0,1fr))}
	.sis-index__toolbar{gap:8px}
	.sis-index__sort,.sis-index__search{flex-basis:100%}
	/* Treemap degrades to a plain stacked list rather than shrinking tiles
	   below a readable size. */
	.sis-index__treemap{padding-top:0;height:auto;display:flex;flex-direction:column;gap:6px}
	.sis-index__treemap-tile{position:static!important;width:auto!important;height:auto!important;padding:0}
	.sis-index__treemap-link{flex-direction:row;align-items:center;justify-content:space-between;min-height:48px;font-size:1em}
	.sis-index__bubble{width:min(var(--sis-index-bubble-size,120px),46vw)}
	.sis-index__table--stacked thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
	.sis-index__table--stacked tbody tr{display:block;border-bottom:2px solid var(--sis-index-border)}
	.sis-index__table--stacked tbody th,.sis-index__table--stacked tbody td{display:flex;justify-content:space-between;gap:12px;border-bottom:0;padding:6px 14px}
	.sis-index__table--stacked tbody th::before,.sis-index__table--stacked tbody td::before{content:attr(data-sis-index-cell);font-weight:700;opacity:.7}
}

@media(prefers-reduced-motion:reduce){
	.sis-index *,.sis-index *::before,.sis-index *::after{transition:none!important;animation:none!important}
}

@media(prefers-contrast:more){
	.sis-index{--sis-index-border:currentColor}
}
