/* Patch 156 - Notes dinamiche, riordino attività e dettaglio attività editabile. */
.postit-card:not(.tt-note){display:flex;flex-direction:column}
.postit-card:not(.tt-note)>h2,.postit-card:not(.tt-note)>.postit-title-input{flex:0 0 auto}
.postit-card:not(.tt-note)>.postit-task-list{flex:1 1 auto;min-height:0;align-content:start;overflow:hidden}
.postit-card:not(.tt-note)>.quick-task-wrap{flex:0 0 auto;min-height:0}
.postit-card:not(.tt-note)>.postit-footer{flex:0 0 18px;height:18px;min-height:18px;max-height:18px;box-sizing:border-box;flex-wrap:nowrap;white-space:nowrap;overflow:hidden;margin-top:5px;line-height:18px}
.postit-card:not(.tt-note)>.postit-footer>span{flex:0 0 auto;white-space:nowrap}
.detail-task.can-reorder{grid-template-columns:15px 20px minmax(0,1fr) auto}
.detail-task-drag-handle{display:grid;place-items:center;width:15px;height:26px;color:#7a8491;cursor:grab;user-select:none;font-weight:900;letter-spacing:-3px;touch-action:none}
.detail-task-drag-handle:active{cursor:grabbing}.detail-task.is-reordering{opacity:.55}.detail-task.can-reorder:hover{background:#f8fafc}
.task-detail-modal-header{display:flex;align-items:flex-start;gap:12px}.task-detail-title-editor{display:flex;align-items:center;gap:9px;min-width:0;flex:1}.task-detail-title-editor>span{font-size:11px;font-weight:800;text-transform:uppercase;color:#687485;flex:none}.task-detail-title-editor>input{min-width:0;flex:1;font:inherit;font-size:18px;font-weight:750;padding:4px 7px;border:1px solid #cfd6df;border-radius:7px;background:#fff;color:inherit}.task-detail-title-editor>h2{margin:0;min-width:0;overflow-wrap:anywhere}.notes-export-button{font-weight:900}

/* Patch 157 - categorie Sticker e gerarchia lavagne */
.board-switcher-select-wrap option.board-switcher-mode-header {
    font-weight:800;
    color:#354052;
    background:#edf1f5;
}
.board-switcher-select-wrap option.board-switcher-shared-header {
    font-weight:700;
    color:#687384;
    background:#f7f8fa;
}
.library-object-section-head {
    display:flex;
    align-items:flex-end;
    justify-content:space-between;
    gap:10px;
    margin-bottom:9px;
}
.library-object-section-head > div { min-width:0; }
.library-object-section-head h3 { margin:0 0 3px; }
.library-object-section-head p { margin:0; color:#68707d; font-size:11px; }
.sticker-category-filter {
    flex:0 0 auto;
    display:grid;
    gap:3px;
    min-width:150px;
    font-size:9px;
    color:#68707d;
}
.sticker-category-filter select {
    width:100%;
    min-height:30px;
    border:1px solid #d6dce4;
    border-radius:7px;
    background:#fff;
    color:#20242a;
    padding:5px 26px 5px 8px;
    font-size:10px;
}
.library-object-category + .library-object-category { margin-top:12px; }
.library-object-category-title {
    display:flex;
    align-items:center;
    gap:6px;
    margin:0 0 6px;
    font-size:10px;
    color:#384354;
}
.library-object-category-title span {
    min-width:18px;
    height:18px;
    padding:0 5px;
    border-radius:999px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    background:#edf1f5;
    color:#596474;
    font-size:9px;
    font-weight:700;
}
.catalog-sticker-category-badge,
.shop-sticker-category-badge {
    display:inline-flex;
    align-items:center;
    max-width:100%;
    border:1px solid #d8dee7;
    border-radius:999px;
    background:#f5f7fa;
    color:#4b5768;
    padding:2px 6px;
    font-size:9px;
    font-weight:700;
    white-space:nowrap;
}
@media (max-width:640px) {
    .library-object-section-head { align-items:stretch; flex-direction:column; }
    .sticker-category-filter { width:100%; min-width:0; }
}
.catalog-v2-toolbar-filters { display:flex; align-items:center; justify-content:flex-end; gap:8px; flex-wrap:wrap; }
.catalog-sticker-category-select { min-width:170px; min-height:34px; }
.catalog-list-copy .catalog-sticker-category-badge { width:max-content; margin-top:3px; }
.catalog-sticker-category-badge,
.shop-sticker-category-badge {
    border-color:color-mix(in srgb,currentColor 18%,transparent);
    background:rgba(127,127,127,.10);
    color:inherit;
}
@media (max-width:720px) {
    .catalog-v2-toolbar-filters { width:100%; align-items:stretch; flex-direction:column; }
    .catalog-sticker-category-select { width:100%; min-width:0; }
}
.board-settings-product-badges .sticker-category { background:#f3eefb; color:#655080; }

/* Patch 159 - riordino attività stabile via Pointer Events. */
.detail-task.can-reorder{position:relative}
body.task-reorder-active{user-select:none;cursor:grabbing}
body.task-reorder-active .detail-task-drag-handle{cursor:grabbing}
.detail-task.is-reordering{opacity:.48}
.detail-task.is-reorder-target-before::before,
.detail-task.is-reorder-target-after::after{
    content:"";
    position:absolute;
    left:4px;
    right:4px;
    height:3px;
    border-radius:999px;
    background:currentColor;
    color:#596579;
    pointer-events:none;
    z-index:4;
}
.detail-task.is-reorder-target-before::before{top:-2px}
.detail-task.is-reorder-target-after::after{bottom:-2px}


/* Patch 160/162 - Cursor pack fantasy con stati dedicati.
   Patch 162 forza il cursore anche sui contenitori principali e usa !important
   per prevalere sui molti cursor:pointer/move/auto storici della board. */
.board-page.has-cursor-pack,
.board-page.has-cursor-pack .board-viewport,
.board-page.has-cursor-pack .postit-board-canvas {
    cursor:var(--board-cursor-default,auto)!important;
}
.board-page.has-cursor-pack :is(button,a,[role="button"],.board-hud-button,.tool-button,.board-tool-all-button,.tool-catalog-main,.tool-favorite-star,.board-floating-trash,.context-menu button,.status-badge-trigger,.archive-stack,.trash-tool,.tabletop-controls button,.detail-task-open) {
    cursor:var(--board-cursor-link,pointer)!important;
}
.board-page.has-cursor-pack :is(input[type="text"],input[type="search"],input[type="email"],input[type="password"],input[type="number"],textarea,[contenteditable="true"]) {
    cursor:var(--board-cursor-text,text)!important;
}
.board-page.has-cursor-pack :is(button:disabled,input:disabled,textarea:disabled,select:disabled,.disabled,[aria-disabled="true"],.is-locked) {
    cursor:var(--board-cursor-unavailable,not-allowed)!important;
}
.board-page.has-cursor-pack :is(.js-board-element,.postit-card,.tabletop-token,.tabletop-note-card,.tabletop-prop,.detail-task-drag-handle) {
    cursor:var(--board-cursor-move,move)!important;
}
.board-page.has-cursor-pack :is(.postit-card.is-dragging,.js-board-element.is-dragging,.tabletop-token.is-dragging,.tabletop-note-card.is-dragging,.detail-task.is-reordering) {
    cursor:var(--board-cursor-move,grabbing)!important;
}
.board-page.has-cursor-pack :is(.postit-board-canvas.is-marquee-selecting,.board-edit-palette button.active,.board-tool-side-panel input[type="color"],.board-tool-side-panel input[type="range"],.tabletop-selection-box,.postit-resize-handle,.board-element-resize-handle,.postit-rotate-handle,.board-element-rotate-handle) {
    cursor:var(--board-cursor-precision,crosshair)!important;
}
.board-page.has-cursor-pack.is-busy,
.board-page.has-cursor-pack[data-busy="true"] {
    cursor:var(--board-cursor-busy,progress)!important;
}

/* Patch 162 - preview flottante durante il riordino delle attività. */
.task-reorder-ghost{
    display:block!important;
    position:fixed;
    z-index:2147483000;
    pointer-events:none;
    margin:0;
    padding:7px 9px;
    border:1px solid rgba(57,72,91,.32);
    border-radius:8px;
    background:rgba(255,255,255,.97);
    box-shadow:0 14px 32px rgba(24,37,51,.24),0 2px 7px rgba(24,37,51,.15);
    opacity:.96;
    transform:rotate(.5deg);
    color:#26303d;
    overflow:hidden;
}
.task-reorder-ghost::before{
    content:"↕";
    display:grid;
    place-items:center;
    position:absolute;
    left:6px;
    top:50%;
    width:18px;
    height:18px;
    margin-top:-9px;
    border-radius:50%;
    background:#eef3f8;
    color:#596779;
    font-size:11px;
    font-weight:900;
}
.task-reorder-ghost .detail-task-drag-handle,
.task-reorder-ghost .task-status-cycle,
.task-reorder-ghost .mini-button{display:none!important}
.task-reorder-ghost .detail-task-main{
    display:flex;
    flex-direction:column;
    min-width:0;
    width:100%;
    padding:0 2px 0 24px;
    border:0;
    background:transparent;
    color:inherit;
    text-align:left;
}
.task-reorder-ghost .detail-task-main strong,
.task-reorder-ghost .detail-task-main small{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
}
.task-reorder-ghost .detail-task-main strong{font-size:11px}
.task-reorder-ghost .detail-task-main small{font-size:9px;opacity:.68}
body.task-reorder-active .task-reorder-ghost{cursor:grabbing!important}

body.task-reorder-active .board-page.has-cursor-pack .detail-task-drag-handle{cursor:var(--board-cursor-move,grabbing)!important}


/* Patch 163 - cursore custom globale: board, modali, popup, dropdown e overlay.
   Le variabili vengono applicate su :root dal modulo JS quando il cursore è attivo. */
body.tackora-cursor-pack-active {
    cursor:var(--board-cursor-default,auto)!important;
}

/*
   I figli ereditano il cursore del contenitore semanticamente attivo.
   Nella patch 163 ogni nodo riceveva esplicitamente il cursore default:
   passando sopra uno <span> dentro un button, lo span sovrascriveva quindi
   il cursore link del button. Con inherit gli stati link/text/move/etc.
   restano visibili anche sopra icone, label e contenuti annidati.
*/
body.tackora-cursor-pack-active * {
    cursor:inherit!important;
}

body.tackora-cursor-pack-active :is(
    button,a,[role="button"],summary,select,
    input[type="checkbox"],input[type="radio"],input[type="button"],input[type="submit"],input[type="reset"],
    label[for],.primary-button,.secondary-button,.link-button,.board-hud-button,.tool-button,
    .board-tool-all-button,.tool-catalog-main,.tool-favorite-star,.board-floating-trash,.context-menu button,
    .status-badge-trigger,.archive-stack,.trash-tool,.detail-task-open,.rz-button,.rz-link,.rz-dropdown,.rz-dropdown-item,
    .rz-menuitem,.rz-tabview-nav-link,.rz-paginator-element
) {
    cursor:var(--board-cursor-link,pointer)!important;
}

body.tackora-cursor-pack-active :is(
    input[type="text"],input[type="search"],input[type="email"],input[type="password"],input[type="number"],
    input[type="url"],input[type="tel"],textarea,[contenteditable="true"],.rz-textbox,.rz-inputtext,.rz-textarea
) {
    cursor:var(--board-cursor-text,text)!important;
}

body.tackora-cursor-pack-active :is(
    [draggable="true"],.js-board-element,.postit-card,.tabletop-token,.tabletop-note-card,.tabletop-prop,
    .detail-task-drag-handle,.js-postit-pad,.js-floating-trash,.archive-stack
) {
    cursor:var(--board-cursor-move,move)!important;
}

body.tackora-cursor-pack-active :is(
    .postit-card.is-dragging,.js-board-element.is-dragging,.tabletop-token.is-dragging,.tabletop-note-card.is-dragging,
    .detail-task.is-reordering,body.task-reorder-active .detail-task-drag-handle
) {
    cursor:var(--board-cursor-move,grabbing)!important;
}

body.tackora-cursor-pack-active :is(
    input[type="range"],input[type="color"],.postit-board-canvas.is-marquee-selecting,.board-edit-palette button.active,
    .tabletop-selection-box,.postit-resize-handle,.board-element-resize-handle,.postit-rotate-handle,.board-element-rotate-handle,
    .tabletop-token-rotate-handle
) {
    cursor:var(--board-cursor-precision,crosshair)!important;
}

body.tackora-cursor-pack-active :is(
    [aria-busy="true"],.is-busy,.loading,.rz-busy-indicator
),
body.tackora-cursor-pack-active :is([aria-busy="true"],.is-busy,.loading,.rz-busy-indicator) * {
    cursor:var(--board-cursor-busy,progress)!important;
}

body.tackora-cursor-pack-active :is(
    button:disabled,input:disabled,textarea:disabled,select:disabled,[disabled],.disabled,[aria-disabled="true"],.is-locked,.rz-state-disabled
),
body.tackora-cursor-pack-active :is(
    button:disabled,input:disabled,textarea:disabled,select:disabled,[disabled],.disabled,[aria-disabled="true"],.is-locked,.rz-state-disabled
) * {
    cursor:var(--board-cursor-unavailable,not-allowed)!important;
}


/* Patch 166 - stato cursore deterministico tramite delegazione pointer.
   Il body espone lo stato semantico dell'elemento realmente sotto il puntatore.
   La regola finale forza quel singolo stato su target e figli, evitando conflitti
   con cursor:pointer/move/text storici e con il DOM annidato di Radzen/Blazor. */
body.tackora-cursor-pack-active[data-tackora-cursor-state="default"],
body.tackora-cursor-pack-active[data-tackora-cursor-state="default"] * {
    cursor:var(--board-cursor-default,auto)!important;
}
body.tackora-cursor-pack-active[data-tackora-cursor-state="link"],
body.tackora-cursor-pack-active[data-tackora-cursor-state="link"] * {
    cursor:var(--board-cursor-link,pointer)!important;
}
body.tackora-cursor-pack-active[data-tackora-cursor-state="text"],
body.tackora-cursor-pack-active[data-tackora-cursor-state="text"] * {
    cursor:var(--board-cursor-text,text)!important;
}
body.tackora-cursor-pack-active[data-tackora-cursor-state="precision"],
body.tackora-cursor-pack-active[data-tackora-cursor-state="precision"] * {
    cursor:var(--board-cursor-precision,crosshair)!important;
}
body.tackora-cursor-pack-active[data-tackora-cursor-state="move"],
body.tackora-cursor-pack-active[data-tackora-cursor-state="move"] * {
    cursor:var(--board-cursor-move,move)!important;
}
body.tackora-cursor-pack-active[data-tackora-cursor-state="busy"],
body.tackora-cursor-pack-active[data-tackora-cursor-state="busy"] * {
    cursor:var(--board-cursor-busy,progress)!important;
}
body.tackora-cursor-pack-active[data-tackora-cursor-state="unavailable"],
body.tackora-cursor-pack-active[data-tackora-cursor-state="unavailable"] * {
    cursor:var(--board-cursor-unavailable,not-allowed)!important;
}


/* Patch 167 - sticker animati e badge catalogo */
.sticker-animated-badge,
.board-settings-product-badges .animated{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    padding:2px 5px;
    border-radius:999px;
    background:#fff3c4;
    color:#7a5400;
    border:1px solid rgba(181,126,0,.25);
    font-size:8px;
    font-weight:800;
    text-transform:uppercase;
    letter-spacing:.02em;
}
.library-object-card .sticker-animated-badge{
    position:absolute;
    right:5px;
    top:5px;
    background:rgba(255,243,196,.94);
    box-shadow:0 1px 3px rgba(0,0,0,.08);
}
.board-sticker-image.is-animated.animation-native{animation:none;}


/* Patch 169 - Sticker Studio */
.sticker-studio-heading .sticker-studio-actions{display:flex;gap:10px;align-items:center;}
.sticker-studio-page-card{padding:18px;}
.sticker-studio-toolbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:18px;}
.sticker-studio-toolbar select{min-width:190px;max-width:260px;}
.sticker-studio-search{min-width:320px;flex:1;}
.sticker-studio-layout{display:grid;grid-template-columns:360px minmax(0,1fr);gap:18px;align-items:start;}
.sticker-studio-list{background:var(--panel-2,#1b2027);border:1px solid var(--border-color,#2d3642);border-radius:16px;padding:14px;}
.sticker-studio-asset-list{display:flex;flex-direction:column;gap:10px;max-height:900px;overflow:auto;padding-right:4px;}
.sticker-studio-list-item{display:grid;grid-template-columns:72px minmax(0,1fr);gap:12px;align-items:center;width:100%;text-align:left;background:var(--panel-1,#14181f);border:1px solid var(--border-color,#2d3642);border-radius:14px;padding:10px 12px;color:inherit;}
.sticker-studio-list-item.selected{border-color:var(--accent-color,#4f8cff);box-shadow:0 0 0 1px rgba(79,140,255,.25) inset;}
.sticker-studio-preview{width:72px;height:72px;border-radius:12px;border:1px solid var(--border-color,#2d3642);background:rgba(255,255,255,.04);display:flex;align-items:center;justify-content:center;overflow:hidden;}
.sticker-studio-preview img{max-width:100%;max-height:100%;object-fit:contain;}
.sticker-studio-preview span{font-size:24px;opacity:.7;}
.sticker-studio-copy{display:flex;flex-direction:column;gap:2px;min-width:0;}
.sticker-studio-copy strong,.sticker-studio-copy small,.sticker-studio-copy code{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sticker-studio-copy code{font-size:11px;opacity:.78;}
.sticker-studio-flags{grid-column:2;display:flex;gap:6px;flex-wrap:wrap;}
.catalog-sticker-category-badge.animated{background:#3b2159;color:#e8d8ff;}
.sticker-studio-editor{padding:16px;border-radius:16px;}
.sticker-studio-editor-layout{display:grid;grid-template-columns:minmax(0,1.3fr) 320px;gap:18px;align-items:start;}
.sticker-studio-upload-box{display:grid;gap:8px;border:1px dashed var(--border-color,#334155);border-radius:14px;padding:14px;background:rgba(255,255,255,.02);margin-top:14px;}
.sticker-studio-file-chip{display:inline-flex;align-items:center;gap:8px;padding:8px 10px;border-radius:999px;background:rgba(79,140,255,.12);color:var(--text-color,#dbe7ff);font-size:12px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sticker-studio-large-preview{min-height:280px;border:1px solid var(--border-color,#2d3642);border-radius:18px;background:linear-gradient(180deg,rgba(255,255,255,.06),rgba(255,255,255,.02));display:flex;align-items:center;justify-content:center;padding:18px;overflow:hidden;}
.sticker-studio-large-preview img{max-width:100%;max-height:280px;object-fit:contain;}
.sticker-studio-large-preview span{opacity:.65;font-weight:600;}
.sticker-studio-summary{display:grid;gap:10px;margin:14px 0 0;}
.sticker-studio-summary div{display:grid;gap:2px;padding:10px 12px;border:1px solid var(--border-color,#2d3642);border-radius:12px;background:rgba(255,255,255,.02);}
.sticker-studio-summary dt{font-size:11px;text-transform:uppercase;letter-spacing:.06em;opacity:.68;}
.sticker-studio-summary dd{margin:0;font-size:13px;word-break:break-word;}
.check-label.compact{min-height:auto;padding:0 4px;}
.section-title.compact{margin-bottom:12px;}
@media (max-width: 1200px){.sticker-studio-layout{grid-template-columns:1fr;}.sticker-studio-editor-layout{grid-template-columns:1fr;}.sticker-studio-list{order:2;}}

/* Patch 170 - Sticker Studio avanzato */
.sticker-studio-bulk{border:1px solid var(--border-color,#2d3642);border-radius:14px;background:rgba(255,255,255,.02);margin:0 0 18px;overflow:hidden;}
.sticker-studio-bulk>summary{cursor:pointer;padding:12px 14px;font-weight:700;background:rgba(255,255,255,.025);}
.sticker-studio-bulk-body{padding:14px;}
.sticker-studio-bulk-files{display:flex;gap:6px;flex-wrap:wrap;max-height:130px;overflow:auto;}
.sticker-studio-bulk-files>span{display:inline-flex;gap:5px;align-items:center;padding:5px 8px;border-radius:999px;border:1px solid var(--border-color,#334155);background:rgba(255,255,255,.03);font-size:11px;}
.sticker-studio-bulk-files small{opacity:.65;}
.sticker-studio-copy em{font-style:normal;font-size:10px;opacity:.62;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sticker-studio-bundles{margin-top:16px;padding:14px;border:1px solid var(--border-color,#2d3642);border-radius:14px;background:rgba(255,255,255,.02);}
.sticker-studio-bundle-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;margin-bottom:12px;}
.sticker-studio-bundle-row{display:flex;align-items:center;gap:9px;padding:9px 10px;border:1px solid var(--border-color,#334155);border-radius:10px;background:rgba(255,255,255,.025);}
.sticker-studio-bundle-row span{display:flex;flex-direction:column;min-width:0;}
.sticker-studio-bundle-row strong,.sticker-studio-bundle-row small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sticker-studio-bundle-row small{font-size:10px;opacity:.62;}
.sticker-studio-main-actions{flex-wrap:wrap;}
.admin-help-box.warning{border-color:rgba(236,161,55,.45);background:rgba(236,161,55,.08);}


/* Patch 172 - animazioni Sticker controllabili e sprite frame-sequence */
.animation-sway.is-animated,.is-animated.animation-sway{animation:postitStickerSway var(--sticker-animation-duration,2.6s) ease-in-out infinite;transform-origin:50% 90%;}
@keyframes postitStickerSway{0%,100%{transform:rotate(-1.2deg) translateY(0)}50%{transform:rotate(1.2deg) translateY(-1.5%)}}
.board-sticker-sprite{display:block;width:100%;height:100%;overflow:hidden;pointer-events:none;}
.board-sticker-sprite>img{display:block;height:100%;max-width:none;object-fit:fill;animation:tackoraStickerSprite var(--sticker-animation-duration,2.2s) steps(var(--sticker-sprite-steps,7),end) infinite;will-change:transform;}
@keyframes tackoraStickerSprite{from{transform:translateX(0)}to{transform:translateX(var(--sticker-sprite-shift,-87.5%))}}

/* Patch 172 - Sticker Studio: impostazioni guidate e anteprima animazione */
.sticker-guided-settings{margin-top:16px;padding:14px;border:1px solid var(--border-color,#2d3642);border-radius:14px;background:rgba(255,255,255,.018)}
.animation-speed-control{display:grid!important;grid-template-columns:1fr auto;gap:7px 12px!important;align-items:center}.animation-speed-control>input[type="range"]{grid-column:1/-1;width:100%}.animation-speed-presets{grid-column:1/-1;display:flex;gap:6px;flex-wrap:wrap}.animation-speed-presets button{border:1px solid var(--border-color,#334155);background:rgba(255,255,255,.04);color:inherit;border-radius:8px;padding:5px 8px;font-size:11px;cursor:pointer}
.sticker-studio-large-preview>img.sticker-studio-preview-animated{max-width:100%;max-height:280px;object-fit:contain;transform-origin:50% 80%}.sticker-studio-large-preview>img.preview-pulse{animation:stickerStudioPulse var(--sticker-preview-duration,1.8s) ease-in-out infinite}.sticker-studio-large-preview>img.preview-wiggle{animation:stickerStudioWiggle var(--sticker-preview-duration,2.2s) ease-in-out infinite}.sticker-studio-large-preview>img.preview-sway{animation:stickerStudioSway var(--sticker-preview-duration,2.8s) ease-in-out infinite}
@keyframes stickerStudioPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.035,.965)}}@keyframes stickerStudioWiggle{0%,100%{transform:rotate(-1.4deg)}50%{transform:rotate(1.4deg)}}@keyframes stickerStudioSway{0%,100%{transform:rotate(-1.2deg) translateY(0)}50%{transform:rotate(1.2deg) translateY(-1.5%)}}
.sticker-studio-sprite-preview{display:block;width:100%;height:280px;overflow:hidden}.sticker-studio-sprite-preview>img{display:block;height:100%;max-width:none;animation:stickerStudioSprite var(--sticker-preview-duration,2.2s) steps(var(--sticker-preview-steps,7),end) infinite;will-change:transform}@keyframes stickerStudioSprite{from{transform:translateX(0)}to{transform:translateX(var(--sticker-preview-shift,-87.5%))}}


/* Patch 174 - preview animazioni Sticker Studio e picker */
.sticker-studio-list-sprite,.library-object-sprite{display:block;width:100%;height:100%;overflow:hidden}
.sticker-studio-list-sprite>img,.library-object-sprite>img{display:block;height:100%;max-width:none;animation:stickerStudioSprite var(--sticker-preview-duration,var(--sticker-animation-duration,2.2s)) steps(var(--sticker-preview-steps,var(--sticker-sprite-steps,7)),end) infinite}
.sticker-studio-preview>img.preview-pulse{animation:stickerStudioPulse var(--sticker-preview-duration,1.8s) ease-in-out infinite}
.sticker-studio-preview>img.preview-wiggle{animation:stickerStudioWiggle var(--sticker-preview-duration,2.2s) ease-in-out infinite}
.sticker-studio-preview>img.preview-sway{animation:stickerStudioSway var(--sticker-preview-duration,2.8s) ease-in-out infinite}
.sticker-studio-frame-section{margin-top:12px;border:1px solid var(--border-color,#2d3642);border-radius:12px;padding:10px;background:rgba(255,255,255,.02)}
.sticker-studio-frame-title{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:8px;font-size:11px}.sticker-studio-frame-title span{opacity:.7}
.sticker-studio-frame-strip{display:flex;gap:6px;overflow-x:auto;padding-bottom:3px}
.sticker-studio-frame{flex:0 0 54px;width:54px;height:54px;border-radius:8px;border:1px solid var(--border-color,#2d3642);background-repeat:no-repeat;background-color:rgba(255,255,255,.03)}
.library-object-preview>.library-object-sprite{width:100%;height:100%}

/* Tenant Admin può cambiare automaticamente al tenant amministrato. */
.topnav-dropdown-menu .topnav-menu-link{
    width:100%;
    min-height:34px;
    display:flex;
    align-items:center;
    padding:7px 10px;
    border:0;
    border-radius:7px;
    background:transparent;
    color:inherit;
    font:inherit;
    font-size:12px;
    text-align:left;
    cursor:pointer;
}
.topnav-dropdown-menu .topnav-menu-link:hover{background:#f2f4f7;}
.content-canonical-redirect{
    display:flex;
    flex-direction:column;
    gap:4px;
    max-width:680px;
    margin:24px auto;
}

/* Patch 179 - Asset Builder.
   Il renderer delle anteprime è isolato in CatalogAssetPreview.razor.css.
   Questo blocco governa esclusivamente il layout dell'editor e dei contenitori esterni. */
.catalog-shop-preview .catalog-asset-preview,
.shop-detail-preview .catalog-asset-preview,
.catalog-list-preview .catalog-asset-preview,
.catalog-cart-preview .catalog-asset-preview,
.bundle-component-icon .catalog-asset-preview,
.bundle-v2-preview .catalog-asset-preview{width:100%;height:100%;}
.bundle-component-icon .catalog-asset-preview,.bundle-v2-preview .catalog-asset-preview{border-radius:8px;}

.catalog-item-editor{
    width:min(1320px,calc(100vw - 28px))!important;
    max-width:none!important;
    height:min(92vh,940px);
    display:flex;
    flex-direction:column;
    overflow:hidden;
}
.catalog-item-editor>.admin-modal-body,
.catalog-item-editor .catalog-item-editor-body{
    flex:1 1 auto;
    min-height:0;
    overflow:auto;
    padding:16px 18px 18px;
}
.catalog-item-editor .catalog-editor-tabs{
    flex:0 0 auto;
    position:sticky;
    top:0;
    z-index:5;
    background:var(--panel-bg,#fff);
}
.catalog-item-editor .catalog-editor-section{min-width:0;}
.asset-editor-live-grid{
    display:grid!important;
    grid-template-columns:minmax(0,1fr) minmax(350px,410px)!important;
    gap:22px!important;
    align-items:start!important;
}
.asset-editor-config-stack{min-width:0;display:flex;flex-direction:column;gap:14px;}
.asset-editor-card{
    min-width:0;
    padding:14px;
    border:1px solid var(--border-color,#d8dee8);
    border-radius:12px;
    background:rgba(255,255,255,.025);
}
.asset-editor-form-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:12px 14px!important;}
.asset-editor-form-grid>label{min-width:0;display:flex!important;flex-direction:column;align-items:stretch;gap:5px;line-height:1.25;}
.asset-editor-form-grid>label.span-2,.asset-builder-card-heading.span-2{grid-column:1/-1;}
.asset-editor-form-grid input:not([type="range"]):not([type="checkbox"]),
.asset-editor-form-grid select,
.asset-editor-form-grid textarea{width:100%!important;min-width:0!important;box-sizing:border-box!important;}
.asset-builder-card-heading{
    display:flex;
    align-items:flex-start;
    justify-content:space-between;
    gap:12px;
    padding:0 0 10px;
    margin-bottom:2px;
    border-bottom:1px solid color-mix(in srgb,var(--border-color,#d8dee8) 72%,transparent);
}
.asset-builder-card-heading>div{display:flex;flex-direction:column;gap:2px;min-width:0;}
.asset-builder-card-heading strong{font-size:13px;}
.asset-builder-card-heading small{font-size:10px;opacity:.68;line-height:1.35;}
.asset-builder-mode-chip,.asset-builder-preview-status>span{
    display:inline-flex;align-items:center;justify-content:center;min-height:24px;padding:3px 8px;
    border:1px solid var(--border-color,#d8dee8);border-radius:999px;background:rgba(255,255,255,.045);
    font-size:9px;font-weight:800;letter-spacing:.03em;white-space:nowrap;
}
.asset-builder-section-title{margin:2px 0 -4px!important;}
.catalog-item-editor input[type="color"]{
    display:block;width:100%!important;height:44px!important;min-height:44px!important;padding:4px!important;
    border:1px solid var(--border-color,#cfd6e2)!important;border-radius:9px!important;background:#fff!important;cursor:pointer;
}
.catalog-item-editor input[type="color"]::-webkit-color-swatch-wrapper{padding:0;}
.catalog-item-editor input[type="color"]::-webkit-color-swatch{border:0;border-radius:6px;}
.catalog-item-editor input[type="color"]::-moz-color-swatch{border:0;border-radius:6px;}
.asset-editor-animation-card{margin-top:0!important;}
.asset-editor-config-stack>.section-title.compact{margin:2px 0 -4px!important;}
.asset-editor-upload-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:12px!important;margin-top:0!important;}
.asset-editor-upload-card{
    min-width:0;margin:0!important;padding:13px!important;border:1px dashed var(--border-color,#c9d1dc)!important;
    border-radius:12px!important;background:rgba(255,255,255,.025)!important;
}
.asset-editor-upload-card>div{display:flex;flex-direction:column;gap:3px;margin-bottom:9px;}
.asset-editor-upload-card small{display:block;max-width:100%;overflow-wrap:anywhere;word-break:break-word;}
.asset-editor-upload-card input[type="file"]{width:100%;min-width:0;box-sizing:border-box;border:1px solid var(--border-color,#cfd6e2);border-radius:8px;background:#fff;padding:5px;}
.asset-editor-upload-card input[type="file"]::file-selector-button{
    border:0;border-right:1px solid #d7dde6;background:#eef3f8;color:#25364b;font:inherit;font-weight:700;
    padding:7px 10px;margin:-5px 9px -5px -5px;cursor:pointer;
}
.asset-editor-preview-panel{
    position:sticky!important;top:8px!important;min-width:0;padding:14px;border:1px solid var(--border-color,#d8dee8);
    border-radius:12px;background:rgba(255,255,255,.025);box-shadow:0 12px 30px rgba(0,0,0,.08);
}
.asset-editor-preview-stage{
    height:360px!important;padding:14px!important;border:1px solid var(--border-color,#d8dee8);border-radius:14px!important;overflow:hidden!important;
    background-color:rgba(127,127,127,.08);
    background-image:linear-gradient(45deg,rgba(127,127,127,.08) 25%,transparent 25%),linear-gradient(-45deg,rgba(127,127,127,.08) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(127,127,127,.08) 75%),linear-gradient(-45deg,transparent 75%,rgba(127,127,127,.08) 75%);
    background-size:22px 22px;background-position:0 0,0 11px,11px -11px,-11px 0;
}
.asset-editor-preview-stage .catalog-asset-preview-editor{width:100%;height:100%;border:1px solid color-mix(in srgb,var(--border-color,#d8dee8) 75%,transparent);}
.asset-builder-preview-status{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:9px;}
.asset-builder-preview-status>span.live{border-color:rgba(71,160,100,.45);background:rgba(71,160,100,.10);color:#5fb77b;}
.asset-editor-frame-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:7px;margin-top:10px;}
.asset-editor-frame{aspect-ratio:1;border-radius:8px;border:1px solid var(--border-color,#303b48);background-repeat:no-repeat!important;background-color:rgba(255,255,255,.035);}
.asset-editor-tech{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px;}
.asset-editor-tech div{min-width:0;padding:9px 10px;border:1px solid var(--border-color,#303b48);border-radius:9px;}
.asset-editor-tech dt{font-size:10px;opacity:.65;text-transform:uppercase;}
.asset-editor-tech dd{margin:2px 0 0;font-size:12px;overflow-wrap:anywhere;word-break:break-word!important;}
.asset-editor-skin-fields{align-self:start;}
.asset-editor-skin-preview{min-height:310px;height:310px!important;border-radius:16px;border:1px solid var(--border-color,#303b48);padding:18px;display:flex;align-items:center;justify-content:center;gap:14px;}
.asset-editor-skin-preview i{width:70px;height:70px;border-radius:5px;box-shadow:0 8px 20px #0005;display:block;}
.sticker-studio-canonical-note{min-height:180px;display:flex;flex-direction:column;justify-content:center;}
.sticker-studio-canonical-note .admin-help-box{margin:0;}
.catalog-editor-footer{
    flex:0 0 auto;display:flex!important;align-items:center;justify-content:space-between!important;gap:12px;min-height:58px;
    padding:10px 16px!important;border-top:1px solid var(--border-color,#d8dee8)!important;background:var(--panel-bg,#fff);
}
.catalog-editor-footer-hint{font-size:11px;opacity:.68;}
.catalog-editor-footer-actions{display:flex;align-items:center;gap:8px;margin-left:auto;}
.catalog-editor-footer-actions .primary-button,.catalog-editor-footer-actions .secondary-button{min-width:120px;}
@media(max-width:1000px){.asset-editor-live-grid{grid-template-columns:1fr!important;}.asset-editor-preview-panel{position:static!important;}}
@media(max-width:700px){
    .asset-editor-form-grid,.asset-editor-upload-grid{grid-template-columns:1fr!important;}
    .asset-editor-form-grid>label.span-2,.asset-builder-card-heading.span-2{grid-column:auto;}
    .catalog-editor-footer{align-items:flex-end;flex-direction:column;}
}

/* Patch 180 - preview compatibility across Catalog, Shop and VTT library.
   The project still contains mixed preview surfaces: some render the shared CatalogAssetPreview,
   others still render direct <img> or legacy sprite wrappers. This block normalizes the outer
   containers without changing the rendering mode selection, so legacy and canonical previews
   remain visually consistent and centered. */
.library-object-preview,
.catalog-list-preview,
.catalog-shop-preview,
.shop-detail-preview,
.catalog-cart-preview,
.bundle-component-icon,
.bundle-v2-preview,
.sticker-studio-preview,
.effect-preview,
.content-background-preview{
    position:relative;
    min-width:0;
    min-height:0;
}

.library-object-preview > :is(img,.catalog-asset-preview,.library-object-sprite),
.catalog-list-preview > :is(img,.catalog-asset-preview),
.catalog-shop-preview > :is(img,.catalog-asset-preview),
.shop-detail-preview > :is(img,.catalog-asset-preview),
.catalog-cart-preview > :is(img,.catalog-asset-preview),
.bundle-component-icon > :is(img,.catalog-asset-preview),
.bundle-v2-preview > :is(img,.catalog-asset-preview),
.sticker-studio-preview > :is(img,.sticker-studio-list-sprite),
.effect-preview > :is(img,.catalog-asset-preview),
.content-background-preview > :is(img,.catalog-asset-preview){
    width:100%;
    height:100%;
    max-width:100%;
    max-height:100%;
    min-width:0;
    min-height:0;
}

.library-object-preview > img,
.catalog-list-preview > img,
.catalog-shop-preview > img,
.shop-detail-preview > img,
.catalog-cart-preview > img,
.bundle-component-icon > img,
.bundle-v2-preview > img,
.sticker-studio-preview > img,
.effect-preview > img,
.content-background-preview > img{
    display:block;
    width:auto !important;
    height:auto !important;
    max-width:100% !important;
    max-height:100% !important;
    margin:auto !important;
    padding:4px;
    box-sizing:border-box;
    object-fit:contain !important;
    object-position:50% 50% !important;
}

.library-object-preview > .library-object-sprite,
.sticker-studio-preview > .sticker-studio-list-sprite{
    display:block;
    width:100%;
    height:100%;
}

.library-object-preview > .library-object-sprite > img,
.sticker-studio-preview > .sticker-studio-list-sprite > img{
    display:block;
    height:100%;
    max-height:100%;
    max-width:none;
    margin:0 auto;
}

.library-object-preview > .catalog-asset-preview,
.catalog-list-preview > .catalog-asset-preview,
.catalog-shop-preview > .catalog-asset-preview,
.shop-detail-preview > .catalog-asset-preview,
.catalog-cart-preview > .catalog-asset-preview,
.bundle-component-icon > .catalog-asset-preview,
.bundle-v2-preview > .catalog-asset-preview,
.effect-preview > .catalog-asset-preview,
.content-background-preview > .catalog-asset-preview{
    width:100%;
    height:100%;
}

/* Patch 181: bounded preview hosts, independent of source image dimensions. */
.catalog-shop-preview { height:140px; min-height:140px; max-height:140px; }
.shop-detail-preview { height:200px; min-height:200px; max-height:200px; }
.asset-editor-preview-stage { height:clamp(220px,36vh,400px)!important; min-height:220px; }
.asset-editor-form-grid > .span-2 { grid-column:1/-1; }
.asset-editor-form-grid > details > .form-grid { margin-top:12px; }
.board-element-sticker > .catalog-asset-preview { width:100%; height:100%; }
.tt-token-visual > .catalog-asset-preview { width:100%; height:100%; }
.tt-asset-preview > .catalog-asset-preview { width:100%; height:100%; }
/* Ownership is communicated by badges; previews retain the actual asset colors. */
.catalog-shop-card.not-owned .catalog-shop-preview { filter:none; opacity:1; }

.asset-editor-frame-strip { max-height:280px; overflow:auto; }
.asset-editor-frame { display:block; overflow:hidden; }
.asset-editor-frame > .catalog-asset-preview { width:100%; height:100%; }
.sticker-studio-preview > .catalog-asset-preview { width:100%; height:100%; }

/* Patch 183: compact line-icon toolbar and expandable asset navigation. */
.board-page{--board-hud-expanded-safe-width:470px}
.modern-board-hud { padding:6px!important; gap:4px!important; border:1px solid rgba(148,163,184,.32)!important; border-radius:16px!important; background:rgba(248,250,252,.96)!important; box-shadow:0 6px 24px #0f172a24!important; max-width:calc(100vw - 24px); flex-wrap:wrap; }
.modern-board-hud .board-hud-button { display:grid; place-items:center; width:36px!important; height:36px!important; min-width:36px; padding:7px!important; border:1px solid transparent!important; border-radius:10px!important; background:transparent!important; color:#475569!important; box-shadow:none!important; }
.modern-board-hud .board-hud-button:hover { background:#e2e8f0!important; color:#0f172a!important; }
.modern-board-hud .board-hud-button.active { background:#dbeafe!important; color:#1d4ed8!important; border-color:#93c5fd!important; }
.modern-board-hud .board-hud-button:disabled { opacity:.4; }
.modern-board-hud .board-hud-button:focus-visible,.asset-category-sidebar button:focus-visible { outline:2px solid #2563eb; outline-offset:2px; }
.tackora-tool-icon { display:block; flex:0 0 auto; vertical-align:middle; }
.board-edit-tool-stack .board-edit-palette { width:260px; max-height:calc(100dvh - 90px); overflow-y:auto; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px; padding:8px; border-radius:14px; }
.board-edit-tool-stack .board-edit-palette > button { display:flex; align-items:center; gap:8px; min-width:0; width:100%; min-height:44px; padding:8px; border-radius:9px; text-align:left; }
.board-edit-tool-stack .board-edit-palette > button > .quick-tool-label { flex:1; width:auto; max-width:none; min-width:0; white-space:normal; text-align:left; font-size:11px; font-weight:600; line-height:1.25; overflow-wrap:anywhere; }
.modern-board-hud { opacity:1!important; }
.board-edit-tool-stack .board-edit-palette > .board-tool-all-button { grid-column:1/-1; justify-content:center; }
.asset-browser-layout { display:grid; grid-template-columns:auto minmax(0,1fr); gap:18px; align-items:start; min-width:0; }
.asset-browser-layout > :not(.asset-category-sidebar) { min-width:0; }

/* 263: complete pack semantic states, managed by the shared pointer resolver. */
body.tackora-cursor-pack-active[data-tackora-cursor-state="resize-ns"],body.tackora-cursor-pack-active[data-tackora-cursor-state="resize-ns"] * {cursor:var(--board-cursor-resize-ns,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="resize-ew"],body.tackora-cursor-pack-active[data-tackora-cursor-state="resize-ew"] * {cursor:var(--board-cursor-resize-ew,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="resize-nwse"],body.tackora-cursor-pack-active[data-tackora-cursor-state="resize-nwse"] * {cursor:var(--board-cursor-resize-nwse,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="resize-nesw"],body.tackora-cursor-pack-active[data-tackora-cursor-state="resize-nesw"] * {cursor:var(--board-cursor-resize-nesw,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="grab"],body.tackora-cursor-pack-active[data-tackora-cursor-state="grab"] * {cursor:var(--board-cursor-grab,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="grabbing"],body.tackora-cursor-pack-active[data-tackora-cursor-state="grabbing"] * {cursor:var(--board-cursor-grabbing,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="help"],body.tackora-cursor-pack-active[data-tackora-cursor-state="help"] * {cursor:var(--board-cursor-help,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="copy"],body.tackora-cursor-pack-active[data-tackora-cursor-state="copy"] * {cursor:var(--board-cursor-copy,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="alias"],body.tackora-cursor-pack-active[data-tackora-cursor-state="alias"] * {cursor:var(--board-cursor-alias,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="zoom-in"],body.tackora-cursor-pack-active[data-tackora-cursor-state="zoom-in"] * {cursor:var(--board-cursor-zoom-in,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="zoom-out"],body.tackora-cursor-pack-active[data-tackora-cursor-state="zoom-out"] * {cursor:var(--board-cursor-zoom-out,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="vertical-text"],body.tackora-cursor-pack-active[data-tackora-cursor-state="vertical-text"] * {cursor:var(--board-cursor-vertical-text,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="cell"],body.tackora-cursor-pack-active[data-tackora-cursor-state="cell"] * {cursor:var(--board-cursor-cell,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="context-menu"],body.tackora-cursor-pack-active[data-tackora-cursor-state="context-menu"] * {cursor:var(--board-cursor-context-menu,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="wait"],body.tackora-cursor-pack-active[data-tackora-cursor-state="wait"] * {cursor:var(--board-cursor-wait,auto)!important;}
body.tackora-cursor-pack-active[data-tackora-cursor-state="progress"],body.tackora-cursor-pack-active[data-tackora-cursor-state="progress"] * {cursor:var(--board-cursor-progress,auto)!important;}

/* 264: active animated frame is root-owned, unaffected by board-local static variables. */
body.tackora-cursor-pack-active.tackora-cursor-animated,
body.tackora-cursor-pack-active.tackora-cursor-animated * {
    cursor:var(--tackora-animated-cursor,auto)!important;
}
