/* Campaign Custom Textures — one decorative layer for every supported surface. */
.cx-surface-textured{position:relative!important;isolation:isolate}
.cx-surface-textured:not(.page):not([data-cx-surface-type="main-content"]){overflow:hidden}
.cx-surface-textured::before,.cx-surface-textured::after{content:"";display:block!important;position:absolute;inset:0;pointer-events:none;border-radius:inherit}
.cx-surface-textured::before{z-index:-2;background-image:var(--cx-texture-url);background-repeat:var(--cx-texture-repeat,no-repeat);background-size:var(--cx-texture-size,cover);background-position:var(--cx-texture-position,50% 50%);opacity:var(--cx-texture-opacity,.55);transform:scale(var(--cx-texture-scale,1));transform-origin:var(--cx-texture-position,50% 50%)}
.cx-surface-textured::after{z-index:-1;background:var(--cx-texture-overlay,transparent);opacity:var(--cx-texture-overlay-opacity,0)}
.cx-surface-textured.cx-texture-light{color:#fff!important;--cx-text:#fff;--cx-text-soft:#f2f0eb;--cx-text-dim:#d7d3ca;--cx-text-strong:#fff}
.cx-surface-textured.cx-texture-dark{color:#17130d!important;--cx-text:#17130d;--cx-text-soft:#30281d;--cx-text-dim:#514534;--cx-text-strong:#090704}
.cx-surface-textured.cx-texture-error::before,.cx-surface-textured.cx-texture-error::after{display:none}
button.cx-surface-textured:hover::before{filter:brightness(1.12) saturate(1.05)}
button.cx-surface-textured:active::before{filter:brightness(.88) saturate(1.12);transform:scale(calc(var(--cx-texture-scale,1) * 1.015))}
button.cx-surface-textured:disabled::before{filter:grayscale(.72) brightness(.75);opacity:calc(var(--cx-texture-opacity,.55) * .58)}
button.cx-surface-textured:focus-visible{outline:3px solid var(--cx-accent-bright,#f2c75c)!important;outline-offset:3px!important}

.cx-texture-modal{position:fixed;inset:0;z-index:99990;display:grid;place-items:center;padding:18px;background:#060504b8;backdrop-filter:blur(4px)}
.cx-texture-dialog{width:min(760px,100%);max-height:min(900px,calc(100vh - 36px));overflow:auto;background:var(--cx-bg,#15120e);color:var(--cx-text,#e8dfcd);border:1px solid color-mix(in srgb,var(--cx-accent) 45%,transparent);border-radius:16px;box-shadow:0 24px 70px #000c;font-family:"EB Garamond",Georgia,serif}
.cx-texture-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:17px 20px;background:color-mix(in srgb,var(--cx-bg,#15120e) 94%,transparent);border-bottom:1px solid color-mix(in srgb,var(--cx-accent) 18%,transparent);backdrop-filter:blur(8px)}
.cx-texture-head h2{margin:0;color:var(--cx-accent,#d4af57);font:600 19px Cinzel,serif}.cx-texture-head p{margin:3px 0 0;color:var(--cx-text-dim,#9d927e);font-size:13px}.cx-texture-close{border:0;background:transparent;color:inherit;font-size:20px;cursor:pointer;padding:6px}
.cx-texture-body{padding:18px 20px 22px}.cx-texture-section{margin-bottom:18px}.cx-texture-label{display:block;margin:0 0 8px;color:var(--cx-accent-deep,#b48b36);font:600 11px Cinzel,serif;letter-spacing:.11em;text-transform:uppercase}
.cx-texture-scope{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:16px}.cx-texture-scope label{display:flex;gap:7px;align-items:center;cursor:pointer}.cx-texture-scope input{accent-color:var(--cx-accent-deep,#b48b36)}
.cx-texture-assets{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:10px}.cx-texture-asset{min-width:0;padding:5px;background:var(--cx-surface,#201c16);color:var(--cx-text-soft,#cfc4b0);border:1px solid color-mix(in srgb,var(--cx-accent) 18%,transparent);border-radius:9px;cursor:pointer;text-align:left}.cx-texture-asset.selected{border-color:var(--cx-accent,#d4af57);box-shadow:0 0 0 2px color-mix(in srgb,var(--cx-accent) 20%,transparent)}.cx-texture-asset img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:5px;background:var(--cx-field,#17130f)}.cx-texture-asset span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:6px 3px 2px;font-size:12px}
.cx-texture-upload{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}.cx-texture-upload input{max-width:100%;color:var(--cx-text-soft,#cfc4b0)}.cx-texture-help{color:var(--cx-text-dim,#9d927e);font-size:12px;line-height:1.45}
.cx-texture-admin-targets{display:grid;gap:12px;margin-top:18px}.cx-texture-admin-target{border:1px solid var(--cx-border,#5e4a26);border-radius:12px;padding:13px;background:color-mix(in srgb,var(--cx-field,#17130f) 76%,transparent)}.cx-texture-admin-target>label{display:block;color:var(--cx-accent,#d2b26f);font-weight:800;margin-bottom:8px}.cx-texture-admin-target>div{display:flex;gap:9px;align-items:center;flex-wrap:wrap}.cx-texture-admin-target .codex-admin-select{min-width:min(300px,100%);flex:1 1 220px}.cx-texture-admin-target .cx-texture-help{margin:8px 0 0}
.cx-texture-admin-library{margin-top:18px;padding-top:18px;border-top:1px solid color-mix(in srgb,var(--cx-accent) 15%,transparent)}
.cx-texture-map{margin:18px 0;padding:16px;border:1px solid color-mix(in srgb,var(--cx-accent) 22%,transparent);border-radius:14px;background:color-mix(in srgb,var(--cx-field,#17130f) 72%,transparent)}
.cx-texture-map-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:12px}.cx-texture-map-head .cx-texture-label{margin-bottom:4px}.cx-texture-map-head p{margin:0;color:var(--cx-text-dim,#9d927e);font-size:13px}.cx-texture-map-head strong{max-width:46%;color:var(--cx-accent,#d4af57);font-size:13px;text-align:right}
.cx-live-preview-viewport{position:relative;width:100%;min-height:420px;overflow:hidden;border:1px solid color-mix(in srgb,var(--cx-text-strong,#fff) 24%,transparent);border-radius:12px;background:linear-gradient(135deg,#202223,#151718);box-shadow:inset 0 0 55px #0008}
.cx-live-preview-frame{position:absolute;inset:0 auto auto 0;width:1440px;height:960px;border:0;background:#17191a;transform-origin:0 0}.cx-live-preview-loading{position:absolute;left:12px;right:12px;bottom:12px;z-index:2;padding:8px 10px;border:1px solid color-mix(in srgb,var(--cx-accent) 28%,transparent);border-radius:7px;background:#090806dc;color:var(--cx-text-soft,#cfc4b0);font-size:12px;pointer-events:none;transition:opacity .18s}.cx-live-preview-loading.is-ready{opacity:.18}.cx-live-preview-viewport:hover .cx-live-preview-loading.is-ready{opacity:.92}
.cx-texture-map-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:7px;margin-top:12px}.cx-texture-map-chip{display:flex;align-items:center;gap:8px;min-width:0;padding:8px 10px;border:1px solid color-mix(in srgb,var(--cx-text-strong,#fff) 14%,transparent);border-radius:8px;background:color-mix(in srgb,var(--cx-surface,#201c16) 82%,transparent);color:var(--cx-text-soft,#cfc4b0);font:600 12px/1.3 "EB Garamond",serif;text-align:left;cursor:pointer}.cx-texture-map-chip:hover{border-color:color-mix(in srgb,var(--cx-accent) 55%,transparent)}.cx-texture-map-chip.is-selected{border-color:var(--cx-accent,#d4af57);color:var(--cx-accent,#d4af57);box-shadow:0 0 0 2px color-mix(in srgb,var(--cx-accent) 18%,transparent)}.cx-map-dot{width:8px;height:8px;flex:0 0 auto;border:1px solid currentColor;border-radius:50%;opacity:.55}.cx-texture-map-chip.has-texture .cx-map-dot{border-color:var(--cx-success,#79ba86);background:var(--cx-success,#79ba86);box-shadow:0 0 8px color-mix(in srgb,var(--cx-success) 55%,transparent);opacity:1}
.cx-texture-map-key{display:flex;gap:16px;margin:10px 0 0;color:var(--cx-text-dim,#9d927e);font-size:11px}.cx-texture-map-key span{display:flex;align-items:center;gap:6px}.cx-texture-map-key i{display:inline-block;width:10px;height:10px;border:2px solid var(--cx-accent,#d4af57);border-radius:3px}.cx-texture-map-key i.assigned{border:0;border-radius:50%;background:var(--cx-success,#79ba86)}
.cx-texture-page-reset{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:18px 0 10px;padding:14px;border:1px solid color-mix(in srgb,var(--cx-danger,#d56a64) 32%,transparent);border-radius:12px;background:color-mix(in srgb,var(--cx-danger,#d56a64) 6%,transparent)}.cx-texture-page-reset>div{display:flex;flex-direction:column;gap:3px}.cx-texture-page-reset strong{color:var(--cx-text,#e8dfcd)}.cx-texture-page-reset span{color:var(--cx-text-dim,#9d927e);font-size:12px}.cx-texture-page-reset .codex-admin-btn.danger{flex:0 0 auto;color:var(--cx-danger,#d56a64);border-color:color-mix(in srgb,var(--cx-danger) 45%,transparent)}
.cx-texture-preview{min-height:130px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:8px;padding:18px;border:1px solid var(--cx-border,#5e4a26);border-radius:12px;background:var(--cx-surface,#201c16);overflow:hidden}.cx-texture-preview strong,.cx-texture-preview span,.cx-texture-preview button{position:relative;z-index:1}.cx-texture-preview button{border:1px solid currentColor;border-radius:7px;padding:7px 10px;background:transparent;color:inherit}
.cx-texture-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.cx-texture-field{display:flex;flex-direction:column;gap:6px}.cx-texture-field>span{display:flex;justify-content:space-between;color:var(--cx-text-soft,#cfc4b0);font-size:13px}.cx-texture-field select,.cx-texture-field input[type="color"]{width:100%;box-sizing:border-box;background:var(--cx-field,#17130f);color:var(--cx-text,#e8dfcd);border:1px solid color-mix(in srgb,var(--cx-accent) 24%,transparent);border-radius:8px;padding:9px}.cx-texture-field input[type="range"]{width:100%;accent-color:var(--cx-accent-deep,#b48b36)}
.cx-texture-actions{display:flex;gap:9px;justify-content:flex-end;flex-wrap:wrap;padding-top:15px;border-top:1px solid color-mix(in srgb,var(--cx-accent) 15%,transparent)}.cx-texture-btn{border:1px solid color-mix(in srgb,var(--cx-accent) 35%,transparent);border-radius:8px;padding:9px 13px;background:color-mix(in srgb,var(--cx-accent) 10%,transparent);color:var(--cx-accent,#d4af57);font:600 12px Cinzel,serif;cursor:pointer}.cx-texture-btn.primary{background:linear-gradient(180deg,var(--cx-accent,#d4af57),var(--cx-accent-deep,#a47b2c));color:var(--cx-on-accent,#17130d)}.cx-texture-btn.danger{color:var(--cx-danger,#d56a64);border-color:color-mix(in srgb,var(--cx-danger) 35%,transparent)}.cx-texture-btn:disabled{opacity:.55;cursor:wait}.cx-texture-status{min-height:18px;color:var(--cx-text-dim,#9d927e);font-size:12px}.cx-texture-status.error{color:var(--cx-danger,#d56a64)}
.cx-texture-library{margin-top:0}
@media(max-width:640px){.cx-texture-dialog{max-height:100vh;border-radius:12px}.cx-texture-grid{grid-template-columns:1fr}.cx-texture-actions{justify-content:stretch}.cx-texture-btn{flex:1}}
@media(max-width:640px){.cx-texture-admin-target>div{align-items:stretch;flex-direction:column}.cx-texture-admin-target .codex-admin-select,.cx-texture-admin-target .codex-admin-btn{width:100%}.cx-texture-map{padding:10px}.cx-texture-map-head,.cx-texture-page-reset{align-items:stretch;flex-direction:column}.cx-texture-map-head strong{max-width:none;text-align:left}.cx-live-preview-viewport{min-height:420px}.cx-texture-map-list{grid-template-columns:1fr}.cx-texture-page-reset .codex-admin-btn.danger{width:100%}}
@media(prefers-reduced-motion:reduce){.cx-surface-textured::before,.cx-texture-modal{transition:none!important;animation:none!important}}
