.tt-controls{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:8px 12px;background:var(--panel-bg,#fffaf0);border:1px solid #d9cfbc;border-radius:12px;z-index:16000;position:fixed;bottom:16px;left:80px;right:80px;flex:none}
.tt-controls button,.tt-modal button,.tt-palette button,.tt-log button{border:1px solid #d3c7af;border-radius:8px;padding:6px 10px;cursor:pointer;background:#fffdf8;color:#40372c}
.tt-controls small{color:#746a5b;font-size:11px}.tt-role{font-size:12px;font-weight:700;background:#ffdf68;border-radius:7px;padding:5px 9px}
.tt-layer{position:absolute;inset:0;pointer-events:none;z-index:2}.tt-map{position:absolute;max-width:none;object-fit:contain;user-select:none;pointer-events:none}.tt-grid{position:absolute;pointer-events:none;background-image:linear-gradient(to right,#ffffff42 1px,transparent 1px),linear-gradient(to bottom,#ffffff42 1px,transparent 1px)}
.tt-token{position:absolute!important;background:none!important;border:0!important;padding:0!important;pointer-events:auto;touch-action:none;cursor:grab;overflow:visible;min-width:0;min-height:0;z-index:4;user-select:none}
.tt-token>img{width:100%;height:100%;object-fit:contain;pointer-events:none;filter:drop-shadow(0 2px 3px #0008)}.tt-token:focus-visible{outline:3px solid #ffdf68}.tt-hidden-token{opacity:.4}.tt-hp{position:absolute;left:50%;bottom:-16px;transform:translateX(-50%);white-space:nowrap;font-size:12px;font-weight:700;color:#fff;background:#282520e8;border-radius:7px;padding:2px 5px;pointer-events:none}.tt-lock{position:absolute;right:-4px;top:-8px;font-size:12px;pointer-events:none}
.tt-note{position:absolute;width:230px;min-height:100px;max-height:240px;overflow:hidden;background:#fff2a7;color:#342e20;border-radius:3px;box-shadow:1px 4px 10px #0005;padding:14px;pointer-events:auto;touch-action:none;z-index:5;cursor:grab}.tt-note p{white-space:pre-wrap;max-height:130px;overflow:hidden;font-size:13px}.tt-note button{cursor:pointer}
.tt-palette,.tt-log{position:absolute;right:18px;top:140px;z-index:400;width:min(310px,90vw);max-height:65vh;overflow:auto;background:#fffdf8;color:#40372c;border:1px solid #d3c7af;border-radius:12px;box-shadow:0 8px 24px #0003;padding:14px}.tt-log{right:340px}.tt-palette header,.tt-log header,.tt-modal header{display:flex;justify-content:space-between;align-items:center;gap:12px}.tt-asset-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px}.tt-asset{display:flex;flex-direction:column;align-items:center;font-size:11px;padding:5px!important;gap:5px}.tt-asset img{width:64px;height:64px;object-fit:contain}.tt-log p{font-size:12px;padding:6px 0;border-bottom:1px solid #e8e0d0}
.tt-modal-backdrop{position:fixed;inset:0;background:#0008;z-index:20000;display:grid;place-items:center;padding:16px}.tt-modal{width:min(460px,100%);max-height:90vh;overflow:auto;background:#fffdf8;color:#40372c;border-radius:16px;box-shadow:0 16px 60px #0005;padding:22px;display:flex;flex-direction:column;gap:12px}.tt-modal h3{margin:0}.tt-modal label{display:flex;flex-direction:column;gap:5px;font-size:13px}.tt-modal label:has(input[type=checkbox]){flex-direction:row;align-items:center}.tt-modal input,.tt-modal select,.tt-modal textarea{padding:8px;border:1px solid #d3c7af;border-radius:7px;background:#fff;min-width:0;width:100%;box-sizing:border-box}.tt-modal input[type=checkbox]{width:auto}.tt-modal textarea{resize:vertical}.tt-modal footer{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.tt-hp-editor{display:flex;align-items:center;gap:8px}.tt-hp-editor input{width:95px}.tt-field-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px}.tt-error{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);max-width:90vw;z-index:21000;background:#fff1ec;color:#8b2712;border:1px solid #d88267;padding:14px;border-radius:10px}.tt-layer-error{position:absolute;top:10px;left:10px;z-index:9999;background:#fff1ec;color:#8b2712;padding:12px}.tt-measure{position:absolute;z-index:1000;pointer-events:none;border-top:3px dashed #ffdf68;transform-origin:left center}.tt-measure span{position:absolute;top:8px;left:20px;white-space:nowrap;background:#282520;color:white;padding:5px;border-radius:5px;font-size:16px}
.postit-board-canvas[data-board-mode=Tabletop]{min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;transform-origin:0 0;will-change:transform;background-color:#252924!important;isolation:isolate}.postit-board-canvas[data-board-mode=Tabletop]>.board-element,.postit-board-canvas[data-board-mode=Tabletop]>.postit-card{z-index:10}
@media(max-width:800px){.tt-controls small{display:none}.tt-controls{gap:4px;padding:6px}.tt-controls button{padding:5px;font-size:12px}.tt-log{right:16px}.tt-palette,.tt-log{top:150px;max-height:55vh}}

.tt-palette,.tt-log{z-index:16001}
.tt-controls-standard{right:auto;width:auto}
/* Patch 139: orderly bundle details and compact board creation. */
.shop-bundle-component-list,.board-settings-bundle-component-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;width:100%;min-width:0}
.shop-bundle-component,.board-settings-bundle-component{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:12px;align-items:center;min-height:84px;padding:10px;border:1px solid var(--border-color,#d3c7af);border-radius:10px;overflow:hidden}
.bundle-component-icon,.board-settings-bundle-component-preview{display:flex;position:relative;align-items:center;justify-content:center;width:64px;height:64px;overflow:hidden;flex:none}
.bundle-component-icon img,.board-settings-bundle-component-preview img{display:block!important;position:static!important;width:100%!important;height:100%!important;max-width:64px!important;max-height:64px!important;object-fit:contain!important;transform:none!important}
.shop-bundle-component strong,.board-settings-bundle-component strong{display:block;overflow-wrap:anywhere}.shop-bundle-component small,.board-settings-bundle-component small{display:block;font-size:12px;line-height:1.5}.bundle-component-price{text-align:right;max-width:140px}
#board-new-board-flyout{width:320px!important;max-width:calc(100vw - 24px)!important;max-height:calc(100vh - 100px);overflow:auto;box-sizing:border-box;padding:14px;display:flex;flex-direction:column;gap:9px}
#board-new-board-flyout input,#board-new-board-flyout select{width:100%;min-width:0;box-sizing:border-box;margin:0;padding:7px;font-size:13px}#board-new-board-flyout label{display:grid;gap:4px;font-size:12px}
.new-board-map-preview{margin:0;display:grid;gap:4px}.new-board-map-preview img{width:100%;height:136px;object-fit:contain;border-radius:7px;background:#252924}.new-board-map-preview figcaption{font-size:12px;text-align:center}
@media(max-width:600px){.shop-bundle-component,.board-settings-bundle-component{grid-template-columns:52px minmax(0,1fr)}.bundle-component-price,.board-settings-bundle-component>em{grid-column:2;text-align:left}.bundle-component-icon,.board-settings-bundle-component-preview{width:52px;height:52px}}
.workspace-plans-panel{margin-bottom:18px}.workspace-plans-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}.workspace-plan-card{display:flex;flex-direction:column;gap:8px;border:1px solid var(--border-color,#d3c7af);border-radius:12px;padding:16px;align-items:flex-start}.workspace-plan-card h3{margin:0;font-size:16px}.workspace-plan-name{font-size:22px}.workspace-plan-card p{margin:0}.workspace-plan-cell{min-width:170px}.workspace-plan-cell small{display:block;margin-top:4px}.bundle-dual-list .theme-dual-item:disabled{opacity:1;cursor:default;color:var(--text-color,#18212f)}.bundle-dual-list .theme-dual-item:disabled>b{display:none}
/* Patch 141: pannelli mobili, controlli compatti e Post-it VTT. */
.tt-controls{left:72px;right:auto;width:max-content;max-width:calc(100vw - 260px);box-sizing:border-box;gap:4px;padding:6px 8px}
.tt-controls button{padding:5px 7px;font-size:12px}
.tt-palette{position:fixed;display:flex;flex-direction:column;padding:0;overflow:hidden;max-height:65vh;box-sizing:border-box}
.tt-palette>header{padding:12px 14px;flex:none;cursor:move;touch-action:none;border-bottom:1px solid #d3c7af}
.tt-palette-body{overflow-y:auto;min-height:0;padding:0 14px 14px;overscroll-behavior:contain}
.tt-grid{background-image:linear-gradient(to right,var(--tt-grid-color,#fff) 1px,transparent 1px),linear-gradient(to bottom,var(--tt-grid-color,#fff) 1px,transparent 1px)}
.tt-note.postit-card{width:230px;height:210px;min-height:140px;max-height:none;padding:24px 12px 12px!important;background:var(--postit-yellow,#ffdf68);overflow:hidden}
.tt-note.postit-card>h2{margin-top:2px!important}.tt-note-body{white-space:pre-wrap;overflow:auto;height:calc(100% - 35px);font-size:14px}
.tt-note .postit-source{font-size:10px}.tt-note .postit-menu-button{cursor:pointer}
.tt-measuring,.tt-measuring *{cursor:crosshair!important}
.tt-controls [data-measure][aria-pressed=true]{background:#ffdf68;outline:2px solid #725b17}
.tt-measure-hint{position:fixed;top:100px;left:50%;transform:translateX(-50%);z-index:21000;background:#282520;color:#fff;padding:12px 18px;border-radius:10px;pointer-events:none}
@media(max-width:650px){.tt-controls{left:12px;max-width:calc(100vw - 24px);bottom:65px}.tt-palette{top:100px}.tt-measure-hint{width:85vw;box-sizing:border-box}}

/* Patch 156 - selezione multipla VTT, rotazione diretta e mappa fissabile. */
.tt-token[data-tt-control="false"]{cursor:default}
.tt-token.tt-selected{z-index:9;outline:2px solid #ffdf68;outline-offset:5px;border-radius:50%!important}
.tt-token-rotate{position:absolute;right:-19px;top:50%;translate:0 -50%;width:24px;height:24px;display:grid;place-items:center;border-radius:50%;border:1px solid #725b17;background:#ffdf68;color:#3c3010;font-size:16px;font-weight:900;line-height:1;box-shadow:0 2px 8px #0007;cursor:grab;opacity:0;pointer-events:auto;transition:opacity .12s ease,transform .12s ease;z-index:12}
.tt-token:hover .tt-token-rotate,.tt-token:focus-visible .tt-token-rotate,.tt-token.tt-selected .tt-token-rotate{opacity:1}
.tt-token-rotate:hover{transform:scale(1.08)}.tt-token-rotate:active{cursor:grabbing}
.tt-selection-marquee{position:absolute;z-index:15990;pointer-events:none;border:1px solid #ffdf68;background:rgba(255,223,104,.15);box-shadow:0 0 0 1px rgba(40,37,32,.35) inset}

/* Patch 172 - animazioni token/prop Tabletop controllabili */
.tt-token-visual{display:block;width:100%;height:100%;pointer-events:none;transform-origin:50% 50%;}
.tt-token-visual>.tt-token-image{width:100%;height:100%;object-fit:contain;pointer-events:none;filter:drop-shadow(0 2px 3px #0008)}
.tt-token-visual>.tt-token-image.animation-pulse{animation:ttTokenPulse var(--tt-animation-duration,2.4s) ease-in-out infinite;}
.tt-token-visual>.tt-token-image.animation-wiggle{animation:ttTokenWiggle var(--tt-animation-duration,2.4s) ease-in-out infinite;transform-origin:50% 85%;}
.tt-token-visual>.tt-token-image.animation-sway{animation:ttTokenSway var(--tt-animation-duration,2.8s) ease-in-out infinite;transform-origin:50% 85%;}
@keyframes ttTokenPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.035,.965)}}
@keyframes ttTokenWiggle{0%,100%{transform:rotate(-1.4deg)}50%{transform:rotate(1.4deg)}}
@keyframes ttTokenSway{0%,100%{transform:rotate(-1.2deg) translateY(0)}50%{transform:rotate(1.2deg) translateY(-1.5%)}}
.tt-token-sprite{display:block;width:100%;height:100%;overflow:hidden;pointer-events:none;filter:drop-shadow(0 2px 3px #0008)}
.tt-token-sprite>img{display:block;height:100%;max-width:none;animation:ttTokenSprite var(--tt-animation-duration,2.2s) steps(var(--tt-sprite-steps,7),end) infinite;will-change:transform;}
@keyframes ttTokenSprite{from{transform:translateX(0)}to{transform:translateX(var(--tt-sprite-shift,-87.5%))}}
.tt-library-group{margin-top:14px}.tt-library-group:first-child{margin-top:4px}.tt-library-group h4{margin:0 0 6px;font-size:12px;color:#695945;text-transform:uppercase;letter-spacing:.04em}.tt-library-group .tt-asset-list{margin-top:0}.tt-asset>span{display:flex;flex-direction:column;align-items:center;gap:1px;max-width:100%}.tt-asset>span strong{font-size:11px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tt-asset>span small{font-size:9px;opacity:.7}


/* Patch 174 - preview animate VTT library */
.tt-asset-preview{width:64px;height:64px;display:grid;place-items:center;overflow:hidden;pointer-events:none}
.tt-asset-preview>img{width:64px;height:64px;object-fit:contain;pointer-events:none}
.tt-asset-preview-sprite>img{display:block;height:64px;max-width:none;width:auto;animation:ttAssetSprite var(--tt-animation-duration,2.4s) steps(var(--tt-sprite-steps,7),end) infinite}
.tt-asset-preview>img.animation-pulse{animation:ttTokenPulse var(--tt-animation-duration,2.4s) ease-in-out infinite}
.tt-asset-preview>img.animation-wiggle{animation:ttTokenWiggle var(--tt-animation-duration,2.4s) ease-in-out infinite;transform-origin:50% 85%}
.tt-asset-preview>img.animation-sway{animation:ttTokenSway var(--tt-animation-duration,2.8s) ease-in-out infinite;transform-origin:50% 85%}
@keyframes ttAssetSprite{from{transform:translateX(0)}to{transform:translateX(var(--tt-sprite-shift,-87.5%))}}

/* 214: map-space fog, independent of viewport zoom. */
.tt-fog-overlay { position:absolute; z-index:30; pointer-events:none; }
.tt-fog-overlay.is-gm { opacity:.48; }
.tt-fog-overlay.is-drawing { pointer-events:auto; cursor:crosshair; touch-action:none; }
.tt-fog-tools { position:relative; pointer-events:auto; }
.tt-fog-tools button { padding:8px 12px; border:1px solid #b0a18b; border-radius:7px; background:#fffdf8; color:#40372c; }
.tt-fog-tools button.active { background:#f3bc58; }
.tt-fog-panel { position:absolute; bottom:calc(100% + 12px); left:0; width:360px; display:flex; flex-direction:column; gap:10px; background:#fffdf8; color:#40372c; padding:14px; border-radius:10px; box-shadow:0 8px 30px #0005; max-width:min(360px,85vw); }
.tt-fog-panel>div { display:flex; flex-wrap:wrap; gap:6px; }

/* Patch 237 · log dadi e alias VTT */
.tt-log header>div{display:flex;align-items:center;gap:6px}
.tt-clear-log-button{border-color:#dc8a76!important;background:#fff1ec!important;color:#8b2712!important;font-weight:700}
.tt-clear-log-button:hover:not(:disabled){background:#ffe2d9!important;border-color:#c45e44!important}
.tt-vtt-alias-box{display:grid;gap:7px;margin:12px 0;padding:11px;border:1px solid #e2d8c6;border-radius:10px;background:#f7f2e8}
.tt-vtt-alias-box label{display:grid;gap:5px;font-size:12px;font-weight:700}.tt-vtt-alias-box input{width:100%;box-sizing:border-box;padding:8px 9px;border:1px solid #d3c7af;border-radius:8px;background:#fffdf8;color:#40372c}
.tt-vtt-alias-box small{font-size:10px;line-height:1.45;color:#746a5b}.tt-save-alias-button{justify-self:start;font-weight:700;background:#fffdf8!important}
.tt-confirm-modal p{margin:0;color:#675e52;line-height:1.55}.tt-danger-button{background:#b53e27!important;border-color:#96321f!important;color:#fff!important;font-weight:800}.tt-danger-button:hover:not(:disabled){background:#992f1d!important}
