/* CORE structural CSS after DjStyle presentation extraction. Owns layout, geometry, editor/runtime mechanics only. */
*{box-sizing:border-box;}
html,body{margin:0;width:100%;height:100%;overflow:hidden;}
.app-shell{height:100%;display:grid;grid-template-rows:58px minmax(0,1fr) 28px;}
.topbar{position:relative;z-index:20;display:grid;grid-template-columns:270px 1fr 180px;align-items:center;padding:0 14px;}
.brand{display:flex;align-items:center;gap:10px;}
.home-btn{width:34px;height:34px;display:grid;place-items:center;font-size:19px;}
.brand strong{display:block;font-size:16px;}
.brand small{display:block;margin-top:2px;font-size:10px;}
.toolbar{justify-self:center;display:flex;gap:8px;}
.tool-group{display:flex;gap:4px;padding:3px;}
.tool-btn{height:32px;display:flex;align-items:center;gap:5px;padding:0 9px;font-size:12px;cursor:pointer;}
.file-btn{position:relative;cursor:pointer;}
.file-btn input{position:absolute;width:1px;height:1px;}
.version-pill{justify-self:end;padding:6px 9px;font-size:10px;}
.workspace{min-height:0;display:grid;grid-template-columns:228px minmax(320px,1fr) 266px;}
.panel{min-height:0;overflow:auto;scrollbar-width:thin;}
.panel-section{padding:13px 12px;}
.section-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;font-size:10px;}
.section-title small{font-size:9px;}
.primitive-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;}
.primitive-grid button{height:67px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;cursor:pointer;font-size:10px;}
.primitive-icon{display:block;width:22px;height:22px;}
.cube-icon{transform:rotate(30deg) skew(-6deg,-6deg);}
.plane-icon{height:14px;transform:skew(-25deg);}
.cylinder-icon{height:24px;}
.object-tree{display:flex;flex-direction:column;gap:3px;}
.tree-item{display:grid;grid-template-columns:24px 1fr 24px;align-items:center;min-height:32px;padding:2px 4px;font-size:11px;cursor:pointer;}
.tree-type{text-align:center;font-size:12px;}
.tree-visible{cursor:pointer;}
.empty-state{padding:16px 6px;font-size:10px;text-align:center;line-height:1.5;}
.mini-btn{font-size:9px;cursor:pointer;}
.shortcut-list{display:grid;grid-template-columns:1fr 1fr;gap:6px;font-size:9px;}
.shortcut-list span{display:flex;align-items:center;gap:5px;}
.shortcut-list kbd{min-width:23px;padding:3px 4px;text-align:center;font-size:8px;}
.viewport-wrap{position:relative;min-width:0;min-height:0;overflow:hidden;}
.viewport{position:absolute;inset:0;}
.viewport canvas{display:block;width:100%;height:100%;}
.viewport-overlay{position:absolute;z-index:4;display:flex;gap:6px;pointer-events:none;}
.top-left{top:10px;left:10px;}
.bottom-left{left:11px;bottom:10px;}
.view-chip{padding:5px 7px;font-size:9px;}
.hint{font-size:9px;padding:5px 7px;}
.axis-legend{position:absolute;right:12px;bottom:10px;display:flex;gap:5px;font-size:10px;}
.axis-legend span{width:23px;height:23px;display:grid;place-items:center;}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:10px;}
.field>span{font-size:10px;}
.field input[type=text],.field input[type=number],.field input[type=search]{height:29px;padding:0 8px;font-size:11px;}
.transform-block{display:flex;flex-direction:column;gap:4px;}
.vector-row{display:grid;grid-template-columns:58px repeat(3,1fr);gap:5px;align-items:center;}
.vector-row label{font-size:9px;}
.vector-row input{min-width:0;height:28px;text-align:center;font-size:10px;}
.axis-labels{display:grid;grid-template-columns:58px repeat(3,1fr);gap:5px;margin:-2px 0 4px;}
.axis-labels span{grid-column:auto;text-align:center;font-size:8px;}
.axis-labels span:first-child{grid-column:2;}
.material-grid{display:grid;}
.field input[type=color]{width:100%;height:31px;padding:3px;}
.range-line{display:grid;grid-template-columns:1fr 38px;gap:7px;align-items:center;}
.range-line output{font-size:9px;text-align:right;}
.switch-row{position:relative;display:flex;justify-content:space-between;align-items:center;min-height:29px;font-size:10px;cursor:pointer;}
.switch-row input{position:absolute;}
.switch-row i{width:31px;height:17px;position:relative;}
.switch-row i:after{content:"";position:absolute;width:11px;height:11px;left:2px;top:2px;}
.switch-row input:checked+i:after{left:15px;}
.wide-btn{width:100%;height:31px;margin-top:8px;font-size:10px;cursor:pointer;}
.legacy-link{display:block;margin-top:10px;text-align:center;font-size:9px;}
.statusbar{display:flex;align-items:center;justify-content:space-between;padding:0 12px;font-size:9px;}
.status-dot{display:inline-block;width:6px;height:6px;margin-right:6px;}
.json-dialog{width:min(760px,calc(100vw - 30px));padding:0;}
.dialog-card{padding:0;}
.dialog-card header{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;}
.dialog-card header strong{display:block;font-size:13px;}
.dialog-card header small{display:block;margin-top:2px;font-size:9px;}
.icon-close{font-size:21px;cursor:pointer;}
.json-dialog textarea{display:block;width:calc(100% - 24px);height:390px;margin:12px;padding:11px;resize:vertical;}
.dialog-actions{display:flex;justify-content:flex-end;gap:7px;padding:0 12px 12px;}
.dialog-actions button{padding:8px 10px;font-size:10px;cursor:pointer;}
@media (max-width:980px){.topbar{grid-template-columns:220px 1fr;}.version-pill{display:none;}.toolbar{justify-self:end;}.tool-btn span{display:none;}.workspace{grid-template-columns:190px minmax(280px,1fr) 230px;}.primitive-grid{grid-template-columns:1fr 1fr;}}
@media (max-width:720px){html,body{overflow:auto;}.app-shell{height:auto;min-height:100vh;grid-template-rows:auto auto 28px;}.topbar{position:sticky;top:0;grid-template-columns:1fr auto;min-height:58px;}.brand small{display:none;}.toolbar{padding:6px 0;flex-wrap:wrap;justify-content:flex-end;}.workspace{display:grid;grid-template-columns:1fr;grid-template-rows:58vh auto auto;}.viewport-wrap{grid-row:1;}.left-panel{grid-row:2;}.right-panel{grid-row:3;}.primitive-grid{grid-template-columns:repeat(5,1fr);}.primitive-grid button{height:58px;}.help-section{display:none;}}
/* DjCreator2 v0.2 */
.create-section{padding-top:10px;padding-bottom:10px;}
.primitive-grid{grid-template-columns:repeat(3,minmax(0,1fr));max-height:61px;overflow-y:auto;overflow-x:hidden;padding-right:3px;scrollbar-width:thin;}
.primitive-grid button{height:61px;min-width:0;gap:5px;padding-top:0;padding-bottom:0;}
.primitive-icon{position:relative;box-sizing:border-box;}
.cube-icon{width:18px;height:18px;transform:none;}
.cube-icon:before{content:"";position:absolute;width:13px;height:13px;left:5px;top:-6px;}
.cube-icon:after{content:"";position:absolute;left:2px;top:-2px;width:13px;height:13px;transform:skewY(-38deg) rotate(-1deg);transform-origin:left bottom;}
.sphere-icon:before{content:"";position:absolute;inset:3px 7px;}
.sphere-icon:after{content:"";position:absolute;left:2px;right:2px;top:9px;height:5px;}
.cylinder-icon{height:24px;}
.cylinder-icon:before,.cylinder-icon:after{content:"";position:absolute;left:-1.5px;width:22px;height:7px;}
.cylinder-icon:before{top:-2px;}
.cylinder-icon:after{bottom:-2px;}
.torus-icon:after{content:"";position:absolute;inset:5px;}
.hierarchy-section .object-tree{max-height:172px;overflow-y:auto;padding-right:2px;scrollbar-width:thin;}
.tree-item{grid-template-columns:24px 1fr 24px 24px;}
.tree-delete{cursor:pointer;font-size:14px;line-height:1;}
.history-head{margin-top:13px;padding-top:10px;font-size:9px;}
.history-list{list-style:none;margin:7px 0 0;padding:0;display:flex;flex-direction:column;gap:4px;counter-reset:item;}
.history-list li{min-height:21px;display:flex;align-items:center;gap:5px;padding:3px 5px;font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.history-list li:not(.history-empty):before{counter-increment:item;content:counter(item);display:grid;place-items:center;flex:0 0 16px;height:16px;font-size:8px;}
.history-shortcut-note{margin-top:7px;grid-template-columns:1fr;}
.right-panel .field>span{font-size:12px;}
.right-panel .vector-row label{font-size:11px;}
.right-panel .axis-labels span{font-size:10px;}
.right-panel .switch-row{font-size:12px;}
.right-panel .range-line output{font-size:11px;}
.geometry-fields{display:grid;grid-template-columns:1fr 1fr;gap:7px;}
.geometry-field{display:flex;flex-direction:column;gap:4px;min-width:0;}
.geometry-field span{font-size:11px;}
.geometry-field input[type=number]{width:100%;height:29px;min-width:0;padding:0 7px;font-size:11px;}
.geometry-checkbox{grid-column:1/-1;}
.geometry-empty{grid-column:1/-1;font-size:10px;line-height:1.5;}
.geometry-preset{margin-top:10px;}
.geometry-preset:not([hidden]){display:block;}
@media (max-width:980px){.primitive-grid{grid-template-columns:repeat(3,minmax(0,1fr));}}
@media (max-width:720px){.primitive-grid{grid-template-columns:repeat(3,minmax(0,1fr));max-height:61px;}.primitive-grid button{height:61px;}.help-section{display:block;}}
.primitive-svg{width:25px;height:25px;stroke-linecap:round;stroke-linejoin:round;flex:0 0 auto;}
.tool-btn:disabled{cursor:default;}
/* DjCreator2 v0.3 · compactación y paneles plegables */
.panel-section{padding:9px 12px 7px;}
.section-title{gap:5px;margin-bottom:7px;}
.section-title>span:first-child{margin-right:auto;}
.section-body{min-width:0;}
.panel-section.collapsed{padding-bottom:5px;}
.panel-section.collapsed>.section-title{margin-bottom:0;}
.panel-section.collapsed>.section-body{display:none!important;}
.panel-section>.section-body[hidden]{display:none!important;}
.collapse-btn{flex:0 0 20px;width:20px;height:20px;padding:0;display:grid;place-items:center;font-size:14px;line-height:1;cursor:pointer;}
.create-section{padding-top:7px;padding-bottom:6px;}
.primitive-grid{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:55px;max-height:117px;gap:7px;overflow-y:auto;overflow-x:hidden;padding-right:3px;}
.primitive-grid button{height:55px;gap:4px;}
.primitive-svg{width:23px;height:23px;}
.panel-section .field:last-child,.section-body>.field:last-child{margin-bottom:0;}
.field{margin-bottom:8px;}
.wide-btn{margin-top:6px;}
.legacy-link{margin-top:7px;}
.history-list{margin-top:4px;}
.history-shortcut-note{margin-top:5px;}
.history-section .section-title small{white-space:nowrap;}
.geometry-fields{gap:6px;}
.switch-row{min-height:27px;}
@media (max-width:980px){.primitive-grid{grid-template-columns:repeat(3,minmax(0,1fr));max-height:117px;}}
@media (max-width:720px){.primitive-grid{grid-template-columns:repeat(3,minmax(0,1fr));max-height:117px;}.primitive-grid button{height:55px;}.history-section{display:block;}}
/* DjCreator2 v0.4 · multiselección y grupos */
.selection-actions{display:grid;grid-template-columns:1fr 1fr;gap:6px;}
.compact-action{height:28px;padding:0 6px;font-size:10px;cursor:pointer;white-space:nowrap;}
.compact-action:disabled{cursor:default;}
.selection-note{margin-top:5px;font-size:9px;line-height:1.35;}
.selection-section .section-title small{white-space:nowrap;}
.tree-name em{margin-left:5px;font-size:8px;}
.tree-child{display:grid;grid-template-columns:13px 18px minmax(0,1fr);align-items:center;min-height:21px;padding:1px 7px 1px 14px;font-size:9px;margin-left:11px;}
.tree-child .tree-type{font-size:9px;}
.tree-child .tree-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.hierarchy-section .object-tree{max-height:172px;}
.right-panel .section-title small{max-width:105px;overflow:hidden;text-overflow:ellipsis;}
.material-grid .field:last-of-type{margin-bottom:6px;}
@media (max-width:720px){.selection-actions{grid-template-columns:1fr 1fr;}}
/* DjCreator2 v0.5 · bloques laterales compactables */
.workspace.left-rail{grid-template-columns:44px minmax(320px,1fr) 266px;}
.workspace.right-rail{grid-template-columns:228px minmax(320px,1fr) 44px;}
.workspace.left-rail.right-rail{grid-template-columns:44px minmax(320px,1fr) 44px;}
.panel-block{position:relative;}
.block-controls{position:sticky;top:0;z-index:15;display:flex;justify-content:flex-end;gap:4px;height:27px;padding:3px 5px;}
.block-controls button{width:21px;height:21px;padding:0;display:grid;place-items:center;cursor:pointer;font-size:15px;line-height:1;}
.block-restore-btn{display:none!important;}
.panel-icon-btn{display:none;flex:0 0 28px;width:28px;height:28px;padding:0;place-items:center;font-size:15px;line-height:1;cursor:pointer;}
.panel-block.block-rail{overflow:hidden;}
/* Rail composition: section icons remain the only in-flow content. The block restore control
   is a slim edge handle, overlaid outside the icon stack so it cannot look like another section. */
.panel-block.block-rail>.block-controls{position:relative;z-index:18;width:100%;height:34px;padding:0;pointer-events:auto;overflow:visible;display:grid;place-items:center;}
.panel-block.block-rail .block-hide-btn{display:none!important;}
.panel-block.block-rail .block-restore-btn{display:grid!important;position:static;transform:none;width:28px;height:28px;padding:0;font-size:16px;line-height:1;pointer-events:auto;}
.panel-block.block-rail .panel-section{padding:3px 7px;}
.panel-block.block-rail .section-title{justify-content:center;margin:0;min-height:32px;}
.panel-block.block-rail .section-title>span,.panel-block.block-rail .section-title>small,.panel-block.block-rail .collapse-btn,.panel-block.block-rail .section-body{display:none!important;}
.panel-block.block-rail .panel-icon-btn{display:grid;}
.panel-block.block-single .block-restore-btn{display:grid!important;}
.panel-block.block-single .panel-section:not(.block-active){padding:3px 7px;}
.panel-block.block-single .panel-section:not(.block-active) .section-title{justify-content:center;margin:0;min-height:32px;}
.panel-block.block-single .panel-section:not(.block-active) .section-title>span,.panel-block.block-single .panel-section:not(.block-active) .section-title>small,.panel-block.block-single .panel-section:not(.block-active) .collapse-btn,.panel-block.block-single .panel-section:not(.block-active) .section-body{display:none!important;}
.panel-block.block-single .panel-section:not(.block-active) .panel-icon-btn{display:grid;}
.panel-block.block-single .panel-section.block-active .panel-icon-btn{display:none;}
.version-pill{max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
@media (max-width:980px){.workspace.left-rail{grid-template-columns:44px minmax(280px,1fr) 230px;}.workspace.right-rail{grid-template-columns:190px minmax(280px,1fr) 44px;}.workspace.left-rail.right-rail{grid-template-columns:44px minmax(280px,1fr) 44px;}}
@media (max-width:720px){.workspace.left-rail,.workspace.right-rail,.workspace.left-rail.right-rail{grid-template-columns:1fr;grid-template-rows:58vh auto auto;}.panel-block.block-rail{height:42px;min-height:42px;display:flex;align-items:center;overflow-x:auto;overflow-y:hidden;}.panel-block.block-rail>.block-controls{position:relative;inset:auto;width:34px;height:42px;flex:0 0 34px;pointer-events:auto;}.panel-block.block-rail .block-restore-btn{position:static;width:28px;height:28px;transform:none;font-size:16px;}.panel-block.block-rail .panel-section{flex:0 0 38px;padding:3px;}.panel-block.block-rail .section-title{min-height:34px;}}
.section-title>span:first-of-type{margin-right:auto;}
.panel-block.block-rail .section-title>span:first-of-type,.panel-block.block-single .panel-section:not(.block-active) .section-title>span:first-of-type{margin-right:0;}
/* DjCreator2 v0.6 · acciones contextuales e iconografía compacta */
.tool-svg{width:15px;height:15px;stroke-linecap:round;stroke-linejoin:round;flex:0 0 15px;}
.delete-x-icon{width:16px;height:16px;}
.tool-btn[hidden]{display:none!important;}
.panel-block.block-rail .mini-btn{display:none!important;}
.panel-block.block-single .panel-section:not(.block-active) .mini-btn{display:none!important;}
.tree-item{grid-template-columns:24px minmax(0,1fr) 24px 24px;}
.tree-item.has-tree-action{grid-template-columns:24px minmax(0,1fr) 24px 24px 24px;}
.tree-visible,.tree-context-action,.tree-delete{width:24px;height:24px;padding:0;display:grid;place-items:center;cursor:pointer;}
.tree-delete{font-size:16px;line-height:1;}
.tree-action-svg{width:15px;height:15px;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;}
.block-controls .block-hide-btn,.block-controls .block-restore-btn{font-size:16px;}
/* DjCreator2 v0.7 · panel flotante, escena compacta y nuevas primitivas */
.workspace{position:relative;}
.object-tree{gap:2px;}
.tree-item{min-height:28px;padding:0 4px;}
.tree-child{min-height:19px;padding-top:0;padding-bottom:0;}
.geometry-field input[type=text]{width:100%;height:29px;min-width:0;padding:0 7px;font-size:11px;}
.geometry-text-field{grid-column:1/-1;}
.floating-panel-host{position:absolute;top:0;z-index:35;max-height:100%;overflow:auto;pointer-events:none;scrollbar-width:thin;}
.floating-panel-host.left{left:44px;width:228px;}
.floating-panel-host.right{right:44px;width:266px;}
.floating-panel-host:empty{display:none;}
.floating-panel-host .floating-section{pointer-events:auto;margin:4px;overflow:hidden;}
.floating-panel-host .floating-section>.section-title{margin-bottom:7px;}
.floating-panel-host .floating-section .panel-icon-btn{display:none!important;}
/* Section-level collapsed state: compact icon-only control, independent of block rail/single mode. */
.panel-section.collapsed{width:max-content!important;max-width:100%;min-width:0!important;padding:3px!important;}
.panel-section.collapsed>.section-title{width:max-content!important;min-width:0!important;min-height:32px;justify-content:center!important;gap:0!important;margin:0!important;padding:0!important;}
.panel-section.collapsed>.section-title>*:not(.panel-icon-btn){display:none!important;}
.panel-section.collapsed>.section-title>.panel-icon-btn{display:grid!important;margin:0!important;}
.floating-panel-host .floating-section.collapsed{width:max-content!important;max-width:calc(100% - 8px);}
.floating-panel-host .floating-section.collapsed>.section-title>.panel-icon-btn{display:grid!important;}
.panel-block.block-rail.block-single{overflow:hidden;}
.panel-block.block-rail.block-single .block-restore-btn{display:grid!important;}
.block-proxy .panel-icon-btn{display:grid!important;}
.block-proxy .section-title{justify-content:center!important;margin:0!important;min-height:32px;}
@media (max-width:980px){.floating-panel-host.left{width:190px;}.floating-panel-host.right{width:230px;}}
@media (max-width:720px){.floating-panel-host.left,.floating-panel-host.right{left:8px;right:8px;top:46px;width:auto;max-height:calc(100% - 54px);}.floating-panel-host .floating-section{margin:0;}}
/* DjCreator2 v0.9 · biblioteca canónica, prefabricados y Forma libre */
.object-category-tabs{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin:-2px 0 6px;}
.category-tab{height:23px;padding:0 7px;font-size:9px;cursor:pointer;}
.primitive-grid>button[hidden]{display:none!important;}
/* Forma libre · editor compacto de puntos */
.freepath-controls{display:grid;gap:6px;margin:1px 0 3px;}
.freepath-summary{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;}
.freepath-summary b{font-size:14px;}
.freepath-actions{display:grid;grid-template-columns:1.25fr .85fr .85fr;gap:5px;}
.freepath-actions .mini-btn{min-width:0;padding-left:5px;padding-right:5px;white-space:nowrap;}
/* DjCreator2 v0.10 · Forma libre Bézier */
.freepath-actions{grid-template-columns:1fr 1fr 1fr;gap:5px;}
.freepath-action-btn{min-width:0;height:28px;padding:0 6px;font-size:11px;cursor:pointer;}
.freepath-action-btn:disabled{cursor:not-allowed;}
.freepath-tip{font-size:10px;line-height:1.3;padding:0 1px 2px;}
/* DjCreator2 v0.11 · proyectos múltiples, barra compacta y modal propio */
.app-shell{grid-template-rows:68px minmax(0,1fr) 28px;}
.topbar{grid-template-columns:230px minmax(0,1fr) 150px;grid-template-rows:42px 26px;align-items:center;padding:0 10px;}
.brand{grid-column:1;grid-row:1/3;align-self:center;}
.toolbar{grid-column:2;grid-row:1;align-self:center;justify-self:center;gap:5px;min-width:0;max-width:100%;}
.tool-group{gap:2px;padding:2px;}
.tool-btn{height:28px;gap:4px;padding:0 6px;font-size:12px;}
.tool-svg{width:15px;height:15px;}
.version-pill{grid-column:3;grid-row:1/3;align-self:center;}
.project-tabs-shell{grid-column:2;grid-row:2;align-self:end;min-width:0;width:100%;height:26px;display:flex;align-items:flex-end;overflow:hidden;}
.project-tabs{width:100%;height:26px;display:flex;align-items:flex-end;gap:2px;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;padding:0 1px;}
.project-tab{flex:0 0 auto;min-width:104px;max-width:185px;height:24px;display:flex;align-items:center;gap:3px;padding:0 4px 0 8px;font-size:10px;cursor:pointer;user-select:none;}
.project-tab-name{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.project-tab-dirty{width:8px;text-align:center;font-size:13px;line-height:1;}
.project-tab-close{flex:0 0 18px;width:18px;height:18px;display:grid;place-items:center;padding:0;font-size:14px;line-height:1;cursor:pointer;}
.project-tab-editor{min-width:72px;max-width:138px;height:18px;padding:0 4px;font-size:10px;}
/* Ajuste pendiente de Forma libre: botones más grandes y texto normal. */
.freepath-actions{gap:6px;}
.freepath-action-btn{height:34px;padding:0 8px;font-size:11px;}
/* Modal propio: reemplaza alert/confirm para mensajes bloqueantes. */
.app-modal-overlay{position:fixed;inset:0;z-index:5000;display:grid;place-items:center;padding:18px;}
.app-modal-overlay[hidden]{display:none!important;}
.app-modal-card{width:min(440px,calc(100vw - 28px));max-height:min(78vh,560px);overflow:auto;}
.app-modal-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;}
.app-modal-header strong{font-size:13px;}
.app-modal-close{width:26px;height:26px;padding:0;font-size:21px;line-height:1;cursor:pointer;}
.app-modal-message{padding:17px 15px;font-size:11px;line-height:1.65;white-space:pre-line;}
.app-modal-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px;padding:0 14px 14px;}
.app-modal-actions button{min-height:31px;padding:0 11px;font-size:10px;cursor:pointer;}
@media (max-width:1180px){.topbar{grid-template-columns:190px minmax(0,1fr) 118px;padding:0 7px;}.brand small{display:none;}.version-pill{font-size:9px;padding:5px 7px;}.tool-btn{padding:0 4px;}.toolbar{gap:3px;}.tool-group{gap:1px;}}
@media (max-width:980px){.app-shell{grid-template-rows:78px minmax(0,1fr) 28px;}.topbar{grid-template-columns:150px minmax(0,1fr);grid-template-rows:48px 30px;padding:0 6px;}.brand{grid-column:1;grid-row:1;}.toolbar{grid-column:2;grid-row:1;justify-self:start;overflow-x:auto;max-width:100%;}.version-pill{display:none;}.project-tabs-shell{grid-column:1/3;grid-row:2;height:30px;}.project-tabs{height:30px;}.project-tab{height:27px;}}
@media (max-width:720px){.app-shell{grid-template-rows:82px minmax(0,1fr) 28px;}.topbar{grid-template-columns:112px minmax(0,1fr);grid-template-rows:52px 30px;}.home-btn{width:30px;height:30px;}.brand strong{font-size:13px;}.tool-btn{height:27px;font-size:11px;padding:0 4px;}.tool-btn span{display:none;}.new-project-btn span{display:inline;}.new-project-btn{min-width:84px;}.project-tab{min-width:96px;max-width:145px;}}
/* DjCreator2 v0.11.1 · selector unificado de proyectos */
.project-tool-group{display:flex;align-items:center;gap:3px;min-width:0;}
.project-picker-wrap{position:relative;display:flex;align-items:center;height:28px;min-width:116px;max-width:168px;}
.project-picker-label{position:absolute;left:8px;top:50%;transform:translateY(-50%);z-index:1;pointer-events:none;font-size:12px;white-space:nowrap;}
.project-picker{width:100%;height:28px;padding:0 24px 0 7px;cursor:pointer;}
.project-picker option,.project-picker optgroup{font-size:12px;}
@media (max-width:900px){.project-picker-wrap{min-width:100px;max-width:130px;}.project-picker-label{font-size:11px;}}
/* DjCreator2 v0.11.2 · enfoque automático y lista ESCENA de cinco filas */
.hierarchy-section .object-tree{max-height:172px;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;scroll-behavior:smooth;}
/* DjCreator2 v0.12 · clips, keyframes y línea de tiempo */
.app-shell{grid-template-rows:68px minmax(0,1fr) 138px 28px;}
.animation-section .section-title{margin-bottom:6px;}
.animation-panel-grid{display:flex;flex-direction:column;gap:5px;}
.animation-panel-grid .field{margin-bottom:0;gap:4px;}
.animation-panel-grid select,.animation-panel-grid input[type=text],.animation-panel-grid input[type=number]{width:100%;height:27px;min-width:0;padding:0 6px;font-size:10px;}
.anim-clip-actions{display:grid;grid-template-columns:1fr 30px;gap:5px;margin-top:-1px;}
.anim-clip-actions button,.anim-key-actions button{height:28px;padding:0 6px;font-size:10px;cursor:pointer;}
.anim-clip-actions button:disabled,.anim-key-actions button:disabled{cursor:not-allowed;}
.anim-two-cols{display:grid;grid-template-columns:1fr 1fr;gap:5px;}
.anim-key-actions{display:grid;grid-template-columns:1.55fr repeat(3,.72fr) 1.15fr;gap:4px;}
.anim-subtitle{margin:2px 0 -1px;font-size:8px;}
.animation-timeline{min-height:0;height:138px;display:grid;grid-template-rows:31px 26px minmax(0,1fr);overflow:hidden;}
.animation-timeline.collapsed{height:31px;grid-template-rows:31px 0 0;}
.animation-timeline.collapsed .anim-scrubber,.animation-timeline.collapsed .anim-timeline-tracks{display:none;}
.app-shell:has(.animation-timeline.collapsed){grid-template-rows:68px minmax(0,1fr) 31px 28px;}
.anim-timeline-head{display:grid;grid-template-columns:auto minmax(100px,1fr) auto 58px 28px;gap:8px;align-items:center;padding:3px 8px;}
.anim-playback-controls{display:flex;gap:3px;}
.anim-playback-controls button,.anim-timeline-toggle{width:26px;height:24px;padding:0;font-size:11px;cursor:pointer;}
.anim-playback-controls button:disabled{cursor:not-allowed;}
.anim-timeline-head strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;}
.anim-timeline-head output{font-size:9px;font-variant-numeric:tabular-nums;}
.anim-speed{height:24px;padding:0 3px;font-size:9px;}
.anim-scrubber{display:flex;align-items:center;padding:1px 8px 1px 92px;}
.anim-scrubber input{width:100%;height:20px;cursor:pointer;}
.anim-timeline-tracks{overflow:auto;padding:3px 8px 5px;scrollbar-width:thin;}
.anim-track-row{display:grid;grid-template-columns:76px minmax(0,1fr);align-items:center;min-height:20px;gap:7px;}
.anim-track-label{font-size:9px;text-align:right;}
.anim-track-lane{position:relative;height:14px;}
.anim-key-marker{position:absolute;top:50%;width:10px;height:10px;padding:0;transform:translate(-50%,-50%) rotate(45deg);cursor:pointer;}
.anim-key-marker:hover{z-index:3;}
.anim-path-segment{position:absolute;top:3px;height:6px;}
@media (max-width:980px){.app-shell{grid-template-rows:78px minmax(0,1fr) 126px 28px;}.app-shell:has(.animation-timeline.collapsed){grid-template-rows:78px minmax(0,1fr) 31px 28px;}.animation-timeline{height:126px;}}
@media (max-width:720px){.app-shell{grid-template-rows:82px 58vh 118px 28px;height:auto;min-height:100vh;}.app-shell:has(.animation-timeline.collapsed){grid-template-rows:82px 58vh 31px 28px;}.workspace{grid-row:2;height:58vh;overflow:auto;}.animation-timeline{grid-row:3;height:118px;position:sticky;bottom:28px;z-index:18;}.statusbar{grid-row:4;}.anim-track-row{grid-template-columns:58px minmax(0,1fr);}.anim-scrubber{padding-left:72px;}}
/* DjCreator2 v0.13 · biblioteca modular de ejemplos */
.examples-picker-wrap{position:relative;display:flex;align-items:center;height:28px;min-width:92px;max-width:145px;}
.examples-picker-label{position:absolute;left:8px;top:50%;transform:translateY(-50%);z-index:1;pointer-events:none;font-size:12px;white-space:nowrap;}
.examples-picker{width:100%;height:28px;padding:0 22px 0 7px;cursor:pointer;}
.project-tab-example{font-size:10px;line-height:1;}
.anim-track-row.component .anim-track-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tool-btn:disabled{cursor:not-allowed;}
@media (max-width:1180px){.examples-picker-wrap{min-width:78px;}.examples-picker-label{font-size:11px;left:6px;}}
@media (max-width:720px){.examples-picker-wrap{min-width:72px;}.examples-picker-label{font-size:10px;}}
/* DjCreator2 v0.14 · productividad: clipboard, bloqueo, snap y vistas */
.snap-picker-wrap{display:flex;align-items:center;gap:4px;height:28px;padding:0 5px;font-size:10px;white-space:nowrap;}
.snap-picker{height:23px;min-width:62px;padding:0 3px;font-size:10px;}
.tree-item{grid-template-columns:18px 22px minmax(0,1fr) auto 22px 22px 20px;min-height:30px;margin-left:calc(var(--tree-depth,0) * 10px);padding:1px 2px;gap:1px;}
.tree-toggle,.tree-lock{width:18px;height:22px;padding:0;cursor:pointer;font-size:11px;display:grid;place-items:center;}
.tree-toggle-spacer{width:18px;}
.tree-lock{font-size:10px;}
.tree-delete:disabled{cursor:not-allowed;}
.tree-name{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tree-name em{margin-left:4px;font-size:8px;}
.tree-context-action{width:20px;height:20px;}
.camera-view-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-bottom:7px;}
.camera-view-grid button,.camera-saved-row button{height:27px;padding:0 5px;font-size:9px;cursor:pointer;}
.camera-saved-row{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:7px;}
.camera-saved-row button:disabled{cursor:not-allowed;}
#lockBtn{min-width:0;}
@media (max-width:1180px){.snap-picker-wrap>span{display:none;}.snap-picker-wrap{padding:0 2px;}.snap-picker{min-width:55px;}.tool-btn{padding-left:3px;padding-right:3px;}}
@media (max-width:720px){.snap-picker-wrap{height:27px;}.snap-picker{height:22px;font-size:9px;}}
/* DjCreator2 v0.15 · menú compacto + caja de herramientas de iconos */
.app-shell{grid-template-rows:78px minmax(0,1fr) 138px 28px;}
.app-shell:has(.animation-timeline.collapsed){grid-template-rows:78px minmax(0,1fr) 31px 28px;}
.topbar{position:relative;z-index:50;display:grid;grid-template-columns:210px minmax(0,1fr) 140px;grid-template-rows:22px 30px 26px;align-items:center;padding:0 8px;}
.brand{grid-column:1;grid-row:1/3;align-self:center;gap:7px;}
.brand .home-btn{width:30px;height:30px;}
.brand strong{font-size:14px;}
.brand small{font-size:9px;margin-top:1px;}
.version-pill{grid-column:3;grid-row:1/3;align-self:center;justify-self:end;padding:4px 7px;font-size:9px;}
.menu-bar{grid-column:2;grid-row:1;align-self:stretch;justify-self:start;display:flex;align-items:center;gap:1px;min-width:0;position:relative;}
.menu-root{position:relative;height:100%;display:flex;align-items:center;}
.menu-button{height:21px;padding:0 7px;font-size:11px;line-height:1;cursor:pointer;white-space:nowrap;}
.menu-direct{margin-left:1px;}
.menu-dropdown{display:none;position:absolute;left:0;top:21px;z-index:200;min-width:178px;padding:4px;}
.menu-dropdown.open{display:block;}
.menu-item{width:100%;min-height:25px;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:3px 7px;font-size:10px;text-align:left;cursor:pointer;white-space:nowrap;}
.menu-divider{height:1px;margin:3px 4px;}
.menu-caption,.menu-list-header{padding:4px 7px 2px;font-size:8px;}
.menu-sublist{display:flex;flex-direction:column;}
.menu-scroll-list{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;}
.project-menu-list{max-height:130px;}
.example-menu-list{max-height:160px;}
.project-menu-dropdown{min-width:218px;}
.examples-menu-dropdown{min-width:212px;}
.menu-list-item{width:100%;min-height:26px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;padding:3px 7px;font-size:10px;text-align:left;cursor:pointer;}
.menu-list-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.menu-list-item small{font-size:8px;white-space:nowrap;}
.menu-list-empty{padding:8px;font-size:9px;text-align:center;}
.icon-toolbar{grid-column:2;grid-row:2;align-self:center;justify-self:start;display:flex;align-items:center;min-width:0;max-width:100%;overflow-x:auto;overflow-y:hidden;gap:0;padding:0 1px;scrollbar-width:none;}
.icon-toolbar::-webkit-scrollbar{display:none;}
.icon-tool{flex:0 0 26px;width:26px;height:26px;display:grid;place-items:center;padding:0;margin:0;font-size:15px;line-height:1;cursor:pointer;}
.icon-tool:disabled{cursor:default;}
.toolbar-separator{flex:0 0 1px;width:1px;height:17px;margin:0 3px;}
.project-tabs-shell{grid-column:1/4;grid-row:3;align-self:end;min-width:0;width:100%;height:26px;display:flex;align-items:flex-end;overflow:hidden;padding:0;}
.project-tabs{height:26px;}
/* Los controles nativos anteriores permanecen sólo como infraestructura, nunca como UI. */
#projectsCombo[hidden],#examplesCombo[hidden],#snapCombo[hidden],#importInput[hidden]{display:none!important;}
/* El panel flotante queda justo al lado de su rail, incluso con ambos bloques reducidos. */
.floating-panel-host{top:0;}
@media (max-width:1180px){.topbar{grid-template-columns:175px minmax(0,1fr) 110px;padding:0 5px;}.brand small{display:none;}.menu-button{padding:0 5px;font-size:10px;}.version-pill{font-size:8px;}}
@media (max-width:980px){.app-shell{grid-template-rows:82px minmax(0,1fr) 126px 28px;}.app-shell:has(.animation-timeline.collapsed){grid-template-rows:82px minmax(0,1fr) 31px 28px;}.topbar{grid-template-columns:135px minmax(0,1fr);grid-template-rows:24px 32px 26px;padding:0 4px;}.brand{grid-column:1;grid-row:1/3;}.version-pill{display:none;}.menu-bar{grid-column:2;grid-row:1;overflow-x:auto;}.icon-toolbar{grid-column:2;grid-row:2;}.project-tabs-shell{grid-column:1/3;grid-row:3;}.menu-dropdown{position:fixed;top:24px;left:auto;}}
@media (max-width:720px){.app-shell{grid-template-rows:86px 58vh 118px 28px;height:auto;min-height:100vh;}.app-shell:has(.animation-timeline.collapsed){grid-template-rows:86px 58vh 31px 28px;}.topbar{grid-template-columns:100px minmax(0,1fr);grid-template-rows:26px 34px 26px;}.brand strong{font-size:12px;}.brand .home-btn{width:27px;height:27px;}.menu-button{font-size:9px;padding:0 4px;}.icon-tool{width:25px;flex-basis:25px;height:25px;font-size:14px;}.menu-dropdown{top:27px;max-width:calc(100vw - 12px);}}
/* DjCreator2 v0.16 · toolbar inline + fullscreen + timeline refinements */
.app-shell{grid-template-rows:74px minmax(0,1fr) 150px 28px;}
.app-shell:has(.animation-timeline.collapsed){grid-template-rows:74px minmax(0,1fr) 31px 28px;}
.topbar{grid-template-columns:210px minmax(0,1fr) 205px;grid-template-rows:44px 30px;padding:0 8px;}
.brand{grid-column:1;grid-row:1/2;}
.menu-tools-line{grid-column:2;grid-row:1;display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden;}
.menu-tools-sep{font-size:12px;user-select:none;}
.menu-bar{grid-column:auto;grid-row:auto;flex:0 1 auto;min-width:0;}
.icon-toolbar{grid-column:auto;grid-row:auto;flex:1 1 auto;justify-self:stretch;min-width:0;overflow-x:auto;}
.project-tabs-shell{grid-column:1/4;grid-row:2;height:30px;}
.top-right-tools{grid-column:3;grid-row:1;justify-self:end;display:flex;align-items:center;gap:6px;}
.max-btn{height:24px;display:flex;align-items:center;gap:5px;padding:0 8px;font-size:10px;cursor:pointer;}
.max-btn .max-icon{font-size:13px;line-height:1;}
.version-pill{grid-column:auto;grid-row:auto;max-width:none;}
.menu-button,.menu-item{font-size:10px;}
.menu-item{justify-content:flex-start;}
.menu-item kbd{margin-left:auto;}
.icon-tool{font-size:14px;}
.icon-tool#lockBtn{font-size:14px;}
/* compact animation block */
.animation-panel-grid .field>span,.animation-panel-grid .switch-row{font-size:11px;}
.animation-timeline{height:150px;padding:7px 12px 8px;}
.anim-scrubber{margin-top:-2px;margin-bottom:4px;}
.anim-ruler{position:relative;height:18px;margin:0 0 4px 106px;}
.anim-ruler-tick{position:absolute;top:0;width:1px;height:9px;}
.anim-ruler-tick span{position:absolute;top:8px;left:2px;font-size:8px;line-height:1;}
.anim-ruler-current{position:absolute;top:-1px;transform:translateX(-50%);padding:0 3px;font-size:8px;line-height:14px;white-space:nowrap;}
.anim-track-label{font-size:10px;}
.anim-key-marker{width:11px;height:11px;}
.anim-key-marker.selected{z-index:5;}
.anim-keyframe-editor{display:grid;grid-template-columns:56px 1fr;gap:7px;align-items:start;}
.anim-keyframe-tools{display:flex;flex-direction:column;gap:4px;}
.anim-keyframe-tools button{height:26px;cursor:pointer;}
.anim-keyframe-tools button:disabled{cursor:default;}
.anim-keyframe-list{display:flex;flex-direction:column;gap:4px;max-height:94px;overflow:auto;}
.anim-kf-item{display:grid;grid-template-columns:20px 1fr 18px;align-items:center;height:24px;padding:0 6px;cursor:pointer;font-size:10px;text-align:left;}
.anim-kf-item small{text-align:right;}
.anim-kf-empty{padding:7px 6px;font-size:9px;text-align:center;}
.anim-keyframe-edit .field{margin-bottom:0;}
.anim-keyframe-edit input{height:26px;}
/* responsive */
@media (max-width:980px){.topbar{grid-template-columns:145px minmax(0,1fr) 96px;padding:0 4px;}.top-right-tools .version-pill{display:none;}.max-btn span:last-child{display:none;}}
@media (max-width:720px){.app-shell{grid-template-rows:88px 58vh 124px 28px;}.app-shell:has(.animation-timeline.collapsed){grid-template-rows:88px 58vh 31px 28px;}.topbar{grid-template-columns:100px minmax(0,1fr);grid-template-rows:30px 30px 28px;}.brand{grid-column:1;grid-row:1/3;}.menu-tools-line{grid-column:2;grid-row:1/3;flex-direction:column;align-items:stretch;gap:2px;}.menu-tools-sep{display:none;}.top-right-tools{display:none;}.project-tabs-shell{grid-column:1/3;grid-row:3;}}
/* DjCreator2 v0.16.1 · correcciones menú/timeline/keyframes */
.topbar,.menu-tools-line,.menu-bar,.menu-root{overflow:visible!important;}
.menu-tools-line{position:relative;z-index:6000;}
.menu-bar{position:relative;z-index:7000;}
.menu-dropdown{z-index:12000!important;top:21px;}
.workspace{position:relative;z-index:1;}
.icon-toolbar{position:relative;z-index:2;overflow-x:auto!important;overflow-y:hidden!important;}
.animation-timeline{grid-template-rows:31px 23px 18px minmax(0,1fr)!important;height:150px;}
.animation-timeline.collapsed{height:31px;grid-template-rows:31px 0 0 0!important;}
.animation-timeline.collapsed .anim-scrubber,.animation-timeline.collapsed .anim-ruler,.animation-timeline.collapsed .anim-timeline-tracks{display:none;}
.anim-timeline-head{grid-template-columns:auto auto minmax(90px,1fr) auto 58px 28px;gap:7px;}
.anim-block-title{font-size:8px;white-space:nowrap;}
.anim-scrubber{margin:0;padding:0 8px 0 92px;}
.anim-ruler{height:18px;margin:0 8px 2px 92px;}
.anim-ruler-tick.minor{height:4px;}
.anim-ruler-tick.major{height:8px;}
.anim-ruler-tick span{top:8px;font-size:7px;line-height:1;transform:translateX(-15%);}
.anim-ruler-current{top:-15px;line-height:13px;font-size:8px;z-index:2;}
.anim-timeline-tracks{padding-top:1px;}
.anim-key-marker{touch-action:none;}
.anim-key-marker.dragging{z-index:8;cursor:ew-resize;}
.anim-keyframe-editor{display:flex;flex-direction:column;gap:5px;align-items:stretch;}
.anim-keyframe-tools{display:flex;flex-direction:row;gap:4px;}
.anim-keyframe-tools button{width:28px;height:24px;}
.anim-keyframe-list{max-height:80px;}
.anim-keyframe-edit{display:block;width:100%;}
.anim-keyframe-edit .field{display:flex!important;flex-direction:column!important;gap:3px!important;width:100%;margin:0;}
.anim-keyframe-edit .field>span{display:block;width:100%;font-size:9px;}
.anim-keyframe-edit input{display:block;width:100%;height:26px;}
@media (max-width:980px){.menu-tools-line{overflow:visible!important;}.menu-bar{overflow:visible!important;}.menu-dropdown{position:absolute!important;top:21px!important;}.anim-timeline-head{grid-template-columns:auto minmax(82px,1fr) auto 50px 26px;}.anim-block-title{display:none;}}
/* DjCreator2 v0.16.2 · contexto + paneles directos + timeline estática */
.menu-item:disabled,.context-menu button:disabled{cursor:default;}
.anim-clip-field{display:flex;flex-direction:column;gap:4px;margin-bottom:9px;}
.anim-clip-label{font-size:10px;}
.anim-clip-row{display:grid;grid-template-columns:auto minmax(0,1fr) 28px;gap:4px;align-items:center;}
.anim-clip-row button{height:28px;padding:0 7px;font-size:10px;cursor:pointer;white-space:nowrap;}
.anim-clip-row button:disabled{cursor:default;}
.anim-clip-row select{min-width:0;height:28px;padding:0 5px;font-size:10px;}
.anim-ruler{cursor:ew-resize;touch-action:none;user-select:none;}
.anim-ruler-current{pointer-events:none;}
.anim-timeline-tracks{overflow:hidden!important;scrollbar-width:none!important;}
.anim-timeline-tracks::-webkit-scrollbar{display:none;}
.anim-component-tracks-scroll{max-height:42px;overflow-y:auto;overflow-x:hidden;margin-top:2px;padding-right:2px;scrollbar-width:thin;}
.context-menu{position:fixed;z-index:30000;width:202px;padding:5px;}
.context-menu[hidden]{display:none!important;}
.context-menu button{width:100%;height:27px;display:grid;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:5px;padding:0 7px;font-size:10px;text-align:left;cursor:pointer;}
.context-divider{height:1px;margin:4px 3px;}
/* DjCreator2 v0.17 · Forma libre compacta + dock inferior por pestañas + Cinema */
.freepath-actions{grid-template-columns:1.08fr .96fr .96fr;gap:4px;}
.freepath-action-btn{height:30px;padding:0 7px;font-size:11px;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:clip;}
/* El espacio inferior ahora es un dock, no una fila fija de timeline. */
.app-shell{grid-template-rows:74px minmax(0,1fr) auto 28px!important;}
.bottom-dock{position:relative;z-index:30;height:174px;padding-top:23px;}
.bottom-dock[data-open="none"]{height:23px;padding-top:23px;}
.dock-tabs{position:absolute;left:8px;top:-23px;height:23px;display:flex;align-items:flex-end;gap:3px;z-index:40;}
.dock-tab{height:23px;display:flex;align-items:center;gap:6px;padding:0 9px;font-size:9px;cursor:pointer;}
.dock-arrow{font-size:9px;}
.dock-pane{height:151px;min-height:0;}
.dock-pane[hidden]{display:none!important;}
.bottom-dock[data-open="none"] .dock-pane{display:none!important;}
/* El antiguo botón de minimizar deja de existir. */
.anim-timeline-toggle{display:none!important;}
.animation-timeline{height:151px!important;min-height:0;padding:5px 10px 7px;grid-template-rows:29px 20px 18px minmax(0,1fr)!important;}
.anim-timeline-head{grid-template-columns:auto auto minmax(90px,1fr) auto 54px!important;}
.anim-block-title{display:inline!important;}
.anim-timeline-tracks{overflow:hidden!important;}
/* Cinema: biblioteca a la izquierda y secuenciador multipista a la derecha. */
.cinema-block{height:151px;display:grid;grid-template-rows:29px minmax(0,1fr);overflow:hidden;}
.cinema-head{display:grid;grid-template-columns:70px auto minmax(110px,1fr) 54px 28px 28px;gap:6px;align-items:center;padding:2px 10px;}
.cinema-head>strong{font-size:9px;}
.cinema-playback-controls{display:flex;gap:3px;}
.cinema-playback-controls button,.cinema-head>button{width:26px;height:24px;font-size:11px;cursor:pointer;}
.cinema-playback-controls button:disabled,.cinema-head>button:disabled{cursor:default;}
.cinema-head output{justify-self:end;font-size:9px;}
.cinema-head select{height:24px;font-size:9px;padding:0 3px;}
.cinema-body{min-height:0;display:grid;grid-template-columns:230px minmax(320px,1fr);}
.cinema-library{min-width:0;min-height:0;display:grid;grid-template-rows:21px minmax(0,1fr);}
.cinema-pane-title{display:flex;align-items:center;justify-content:space-between;padding:0 8px;font-size:8px;}
.cinema-pane-title small{font-size:8px;}
.cinema-clip-tree{min-height:0;overflow-y:auto;padding:4px 5px;scrollbar-width:thin;}
.cinema-tree-object{height:20px;display:flex;align-items:center;gap:4px;padding-left:calc(var(--depth) * 10px);font-size:9px;}
.cinema-tree-object strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cinema-tree-clip{width:calc(100% - 2px);height:23px;display:grid;grid-template-columns:16px minmax(0,1fr) 38px;align-items:center;margin:1px;padding:0 5px 0 calc(6px + var(--depth) * 10px);text-align:left;font-size:9px;cursor:grab;}
.cinema-tree-clip:active{cursor:grabbing;}
.cinema-tree-clip b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cinema-tree-clip small{text-align:right;font-size:8px;}
.cinema-empty{padding:10px 8px;font-size:9px;line-height:1.45;text-align:center;}
.cinema-sequencer{min-width:0;min-height:0;display:grid;grid-template-rows:20px minmax(0,1fr);overflow:hidden;}
.cinema-ruler{position:relative;margin-left:106px;cursor:ew-resize;user-select:none;touch-action:none;}
.cinema-ruler-tick{position:absolute;bottom:0;width:1px;}
.cinema-ruler-tick.minor{height:4px;}
.cinema-ruler-tick.major{height:8px;}
.cinema-ruler-tick span{position:absolute;bottom:8px;left:2px;font-size:7px;line-height:1;white-space:nowrap;}
.cinema-playhead{position:absolute;top:0;bottom:0;width:1px;z-index:8;pointer-events:none;}
.cinema-playhead i{position:absolute;top:0;left:-3px;width:7px;height:6px;clip-path:polygon(0 0,100% 0,50% 100%);}
.cinema-lanes{min-height:0;overflow-y:auto;overflow-x:hidden;padding:2px 0 3px;scrollbar-width:thin;}
.cinema-lane-row{height:29px;display:grid;grid-template-columns:106px minmax(0,1fr);}
.cinema-lane-label{display:flex;align-items:center;padding:0 7px;font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cinema-lane{position:relative;min-width:0;cursor:crosshair;}
.cinema-clip-block{position:absolute;top:3px;height:22px;min-width:18px;display:flex;align-items:center;justify-content:space-between;gap:5px;padding:0 5px;font-size:8px;cursor:ew-resize;overflow:hidden;touch-action:none;}
.cinema-clip-block span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cinema-clip-block small{flex:0 0 auto;font-size:7px;}
.cinema-clip-block.locked{cursor:default;}
.cinema-clip-block.dragging{z-index:9;}
.cinema-timeline-empty{margin-top:20px;}
@media (max-width:980px){.cinema-body{grid-template-columns:185px minmax(260px,1fr);}.cinema-lane-row{grid-template-columns:86px minmax(0,1fr);}.cinema-ruler{margin-left:86px;}.cinema-head{grid-template-columns:55px auto minmax(80px,1fr) 48px 26px 26px;}}
@media (max-width:720px){.bottom-dock{height:160px;}.dock-pane{height:137px;}.animation-timeline,.cinema-block{height:137px!important;}.cinema-body{grid-template-columns:145px minmax(240px,1fr);}.cinema-library{overflow:hidden;}.cinema-head>strong{display:none;}.cinema-head{grid-template-columns:auto minmax(80px,1fr) 45px 25px 25px;}.cinema-lane-row{grid-template-columns:72px minmax(0,1fr);}.cinema-ruler{margin-left:72px;}}
/* v0.17 dock tabs remain attached to the statusbar and the panels grow upward. */
.bottom-dock{padding-top:0!important;padding-bottom:23px!important;}
.bottom-dock[data-open="none"]{padding-top:0!important;padding-bottom:23px!important;}
.dock-tabs{top:auto!important;bottom:0!important;align-items:flex-start;}
/* Tabs emerge upward from the status bar. */
@media (max-width:980px){.app-shell{grid-template-rows:82px minmax(0,1fr) auto 28px!important;}}
@media (max-width:720px){.app-shell{grid-template-rows:88px 58vh auto 28px!important;height:auto;min-height:100vh;}}
/* DjCreator2 v0.17.1 · tabs dentro de statusbar, drag preciso y Forma libre compacta */
.app-shell{grid-template-rows:74px minmax(0,1fr) auto 28px!important;}
.bottom-dock{height:151px!important;padding:0!important;overflow:hidden;}
.bottom-dock[data-open="none"]{height:0!important;min-height:0!important;padding:0!important;}
.dock-pane{height:151px!important;}
.statusbar{display:grid!important;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;padding:0 8px!important;overflow:visible;}
#statusText{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
#sceneStats{justify-self:end;white-space:nowrap;}
.status-dock-tabs{height:28px;display:flex;align-items:flex-end;justify-content:center;gap:3px;align-self:stretch;}
.status-dock-tabs .dock-tab{height:27px;min-width:82px;padding:0 10px;display:flex;align-items:center;justify-content:center;gap:6px;cursor:pointer;}
/* Las tres pistas raíz son siempre visibles y no generan scroll. */
.anim-timeline-tracks{overflow:hidden!important;min-height:0;}
.anim-track-row:not(.component){flex:0 0 auto;}
/* El scrub del tiempo usa toda la regla como superficie de arrastre. */
.anim-ruler{cursor:ew-resize!important;touch-action:none!important;user-select:none!important;}
.anim-ruler.scrubbing{cursor:grabbing!important;}
.anim-ruler-current{pointer-events:none!important;}
/* Forma libre: usa todo el ancho del grid y tres botones en una sola línea. */
.freepath-controls{grid-column:1/-1!important;width:100%;gap:4px!important;margin:0 0 2px!important;}
.freepath-summary{gap:5px!important;}
.freepath-actions{display:grid!important;grid-template-columns:1.12fr 1fr 1fr!important;gap:3px!important;width:100%;}
.freepath-action-btn{min-width:0!important;height:32px!important;padding:0 5px!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:clip!important;}
.freepath-tip{padding-bottom:0!important;line-height:1.2!important;}
#geometrySection .geometry-fields{align-content:start;}
@media (max-width:980px){.statusbar{grid-template-columns:minmax(0,1fr) auto auto;gap:5px;}.status-dock-tabs .dock-tab{min-width:70px;padding:0 7px;}}
@media (max-width:720px){.statusbar{grid-template-columns:1fr auto;padding:0 5px!important;}#sceneStats{display:none;}.status-dock-tabs .dock-tab{min-width:62px;padding:0 5px;}}
/* DjCreator2 v0.17.2 · color animation + menu/tabs spacing refinements */
/* Menu +1 px respecto a v0.17.1. */
.menu-button,.menu-item{font-size:var(--dj-font-size-menu,10px)!important;}
.menu-caption,.menu-list-header{font-size:9px!important;}
.menu-item kbd,.menu-caption kbd{font-size:9px!important;}
.menu-list-item{font-size:10px!important;}
.menu-list-item small{font-size:8px!important;}
/* Cabecera más compacta: menos aire entre menú/herramientas y tabs de proyecto. */
.app-shell{grid-template-rows:68px minmax(0,1fr) auto 28px!important;}
.topbar{grid-template-rows:42px 26px!important;}
.project-tabs-shell,.project-tabs{height:26px!important;}
.menu-tools-line{align-self:end;padding-bottom:1px;}
/* Tabs inferiores alineados a la izquierda dentro de la propia barra de estado. */
.statusbar{display:flex!important;align-items:center!important;gap:7px!important;}
.status-dock-tabs{order:-1;flex:0 0 auto;justify-content:flex-start!important;align-items:flex-end!important;margin-left:0!important;}
#statusText{flex:1 1 auto;}
#sceneStats{flex:0 0 auto;margin-left:auto;}
/* El valor del playhead queda por encima de la línea y más legible. */
.anim-ruler-current{top:-19px!important;font-size:9px!important;line-height:15px!important;padding:0 4px!important;z-index:4!important;}
/* Pista de color. */
@media (max-width:980px){.menu-button,.menu-item{font-size:var(--dj-font-size-menu,10px)!important;}.app-shell{grid-template-rows:68px minmax(0,1fr) auto 28px!important;}.topbar{grid-template-rows:42px 26px!important;}}
@media (max-width:720px){.menu-button,.menu-item{font-size:var(--dj-font-size-menu,10px)!important;}.app-shell{grid-template-rows:82px 58vh auto 28px!important;}}
.anim-key-actions{grid-template-columns:1.55fr repeat(4,.72fr) 1.15fr!important;gap:3px!important;}
.animation-timeline .anim-track-row:not(.component){min-height:17px!important;}
.animation-timeline .anim-track-lane{height:12px!important;}
/* DjCreator2 v0.17.3 · tabs hacia arriba + Cinema duration/zoom */
/* Menú +1 px adicional, compensado con un poco menos de padding horizontal. */
.menu-button,.menu-item{font-size:var(--dj-font-size-menu,10px)!important;}
.menu-button{padding-left:5px!important;padding-right:5px!important;}
.menu-caption,.menu-list-header{font-size:10px!important;}
.menu-item kbd,.menu-caption kbd{font-size:10px!important;}
.menu-list-item{font-size:11px!important;}
.menu-list-item small{font-size:9px!important;}
/* Las pestañas siguen dentro de la barra de estado pero sobresalen hacia arriba. */
.status-dock-tabs{align-items:flex-start!important;overflow:visible!important;height:28px!important;}
.status-dock-tabs .dock-tab{position:relative;top:-5px;height:32px!important;}
/* El texto del tiempo queda debajo y desplazado del punto/indicador para no taparlo. */
.anim-ruler{height:25px!important;margin-bottom:0!important;}
.anim-ruler-current{top:13px!important;transform:translateX(7px)!important;font-size:10px!important;line-height:12px!important;padding:0 4px!important;z-index:5!important;}
/* Cinema: duración máxima editable y escala temporal compacta. */
.cinema-head{grid-template-columns:54px auto 86px 86px 106px 50px 27px 27px!important;gap:4px!important;padding-left:7px!important;padding-right:7px!important;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;}
.cinema-head::-webkit-scrollbar{display:none;}
.cinema-head output{justify-self:stretch!important;text-align:right;white-space:nowrap;font-size:10px!important;}
.cinema-duration-edit{height:24px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:3px;padding:0 4px;font-size:9px;white-space:nowrap;}
.cinema-duration-edit input{min-width:0;width:45px;height:19px;padding:0 3px;text-align:right;font-size:10px;}
.cinema-zoom-controls{height:24px;display:grid;grid-template-columns:30px 46px 30px;align-items:center;overflow:hidden;}
.cinema-zoom-controls button{height:22px;font-size:10px;cursor:pointer;padding:0;}
.cinema-zoom-controls input{width:46px;height:22px;text-align:center;font-size:10px;padding:0 2px;}
.cinema-block{overscroll-behavior:contain;}
@media (max-width:1180px){.cinema-head{grid-template-columns:46px auto 80px 82px 100px 48px 26px 26px!important;}}
@media (max-width:980px){.menu-button,.menu-item{font-size:var(--dj-font-size-menu,10px)!important;}.menu-caption,.menu-list-header,.menu-item kbd,.menu-caption kbd{font-size:9px!important;}.cinema-head{grid-template-columns:auto 78px 80px 98px 46px 25px 25px!important;}.cinema-head>strong{display:none;}}
@media (max-width:720px){.menu-button,.menu-item{font-size:var(--dj-font-size-menu,10px)!important;}.cinema-head{grid-template-columns:auto 74px 78px 94px 44px 24px 24px!important;}}
/* DjCreator2 v0.17.5 · iconografía lineal + trayectorias editables */
.ui-icon{width:14px;height:14px;display:inline-block;vertical-align:-2px;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;flex:0 0 auto;}
.menu-button{display:inline-flex!important;align-items:center!important;gap:4px!important;}
.menu-item>svg,.menu-item>.ui-icon{margin-right:2px;}
.icon-tool .ui-icon{width:15px;height:15px;vertical-align:0;}
.tree-lock .ui-icon{width:13px;height:13px;}
.menu-list-item>span{display:flex;align-items:center;gap:5px;}
.menu-list-item .ui-icon{width:13px;height:13px;}
.anim-keyframe-tools .ui-icon,#cinemaLock .ui-icon{width:13px;height:13px;}
.cinema-zoom-controls .ui-icon{width:13px;height:13px;margin:auto;}
.cinema-block .ui-icon{width:11px;height:11px;vertical-align:-2px;}
/* Las nuevas formas de trayectoria usan el mismo editor compacto de puntos. */
#geometrySection .freepath-controls{margin-bottom:1px!important;}
#geometrySection .freepath-actions{grid-template-columns:1.12fr 1fr 1fr!important;gap:3px!important;}
#geometrySection .freepath-action-btn{height:32px!important;white-space:nowrap!important;}
/* DjCreator2 v0.19 · pivote tubular selectivo + movimiento físico de articulaciones */
.articulation-grid{display:flex;flex-direction:column;gap:6px;}
.articulation-grid .field{margin-bottom:0;}
.articulation-grid select{height:28px;padding:0 6px;font-size:10px;}
.art-use-selection{height:28px;font-size:9px;cursor:pointer;}
.art-pivot-title,.art-preset-title{margin-top:2px;font-size:8px;}
.art-pivot-row{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;}
.art-pivot-row input{min-width:0;height:27px;text-align:center;font-size:9px;}
.art-action-row{display:grid;grid-template-columns:1fr 1fr;gap:5px;}
.art-action-row button{height:27px;font-size:9px;cursor:pointer;}
.art-action-row button:disabled,.art-create:disabled{cursor:default;}
.art-note{font-size:8px;line-height:1.35;}
.cinema-clip-tree{overscroll-behavior:contain;}
.cinema-sequencer{overscroll-behavior:contain;}
/* v0.19 · ayuda visual de articulación */
.art-pivot-help{display:flex;flex-direction:column;gap:2px;padding:6px 7px;font-size:8px;line-height:1.35;}
.art-pivot-help b{font-size:8px;}
.art-pivot-help span{display:block;}
/* ========================================================================== */
/* DjCreator2 v0.20 · Generador IA v1                                         */
/* ========================================================================== */
.ai-tool{font-size:15px!important;}
.ai-tool .ui-icon{width:16px;height:16px;}
.ai-menu-btn .ui-icon{width:15px;height:15px;margin-right:3px;}
.ai-dialog{width:min(720px,calc(100vw - 28px));max-height:min(760px,calc(100vh - 28px));padding:0;overflow:hidden;}
.ai-card{display:flex;flex-direction:column;max-height:min(760px,calc(100vh - 28px));}
.ai-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 13px;}
.ai-header>div{display:flex;align-items:baseline;gap:9px;min-width:0;}
.ai-header strong{font-size:13px;}
.ai-header small{font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ai-body{padding:12px 13px 10px;overflow:auto;scrollbar-width:thin;}
.ai-context-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:9px;font-size:9px;}
.ai-badge{padding:3px 7px;white-space:nowrap;}
.ai-prompt-label{display:block;margin-bottom:5px;font-size:10px;}
.ai-prompt{box-sizing:border-box;width:100%;min-height:96px;max-height:210px;resize:vertical;padding:10px 11px;}
.ai-examples{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px;}
.ai-examples button{height:25px;padding:0 8px;font-size:9px;cursor:pointer;}
.ai-help{margin-top:8px;padding:7px 8px;font-size:9px;line-height:1.5;}
.ai-plan-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px;padding-bottom:5px;}
.ai-plan-head strong{font-size:9px;}
.ai-plan-head span{font-size:8px;}
.ai-plan{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:4px;}
.ai-plan li{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:7px;min-height:30px;padding:3px 7px;font-size:10px;}
.ai-plan-number{display:grid;place-items:center;width:20px;height:20px;font-size:8px;}
.ai-plan-text{min-width:0;}
.ai-plan small{font-size:7px;white-space:nowrap;}
.ai-plan li.ai-plan-warning{display:block;min-height:auto;padding:6px 8px;font-size:9px;}
.ai-result{margin-top:8px;min-height:29px;display:flex;align-items:center;padding:5px 8px;font-size:9px;}
.ai-actions{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:7px;padding:9px 13px 11px;}
.ai-actions button{min-height:30px;padding:0 10px;font-size:9px;cursor:pointer;}
.ai-actions button:disabled{cursor:default;}
@media (max-width:700px){.ai-dialog{width:calc(100vw - 12px);max-height:calc(100vh - 12px);}.ai-card{max-height:calc(100vh - 12px);}.ai-header small{display:none;}.ai-plan li{grid-template-columns:22px minmax(0,1fr);}.ai-plan small{display:none;}.ai-actions{grid-template-columns:auto 1fr auto;}.ai-actions>span{display:none;}.ai-actions #aiExecute{grid-column:3;}}
/* ========================================================================== */
/* DjCreator2 v0.21 · cabecera compacta + Resultados IA                       */
/* ========================================================================== */
.app-shell{grid-template-rows:70px minmax(0,1fr) auto 28px!important;}
.topbar{grid-template-columns:205px minmax(0,1fr) 190px!important;grid-template-rows:22px 27px 21px!important;padding:0 7px!important;align-items:start!important;}
.brand{grid-column:1!important;grid-row:1/3!important;align-self:center!important;}
.menu-tools-line{grid-column:2!important;grid-row:1/3!important;display:flex!important;flex-direction:column!important;align-items:stretch!important;gap:1px!important;padding:0!important;overflow:visible!important;min-width:0!important;}
.menu-bar{grid-column:auto!important;grid-row:auto!important;height:22px!important;align-self:start!important;overflow:visible!important;}
.menu-button{height:21px!important;}
.menu-tools-sep{display:none!important;}
.icon-toolbar{grid-column:auto!important;grid-row:auto!important;height:27px!important;min-height:27px!important;flex:0 0 27px!important;width:100%!important;padding:1px 3px!important;margin:0!important;overflow-x:auto!important;overflow-y:hidden!important;}
.icon-tool{height:23px!important;min-width:25px!important;}
.top-right-tools{grid-column:3!important;grid-row:1/3!important;align-self:center!important;}
.project-tabs-shell{grid-column:1/4!important;grid-row:3!important;height:21px!important;align-self:stretch!important;}
.project-tabs{height:21px!important;padding:0 1px!important;gap:2px!important;}
.project-tab{height:20px!important;min-height:20px!important;padding:0 3px 0 6px!important;}
.project-tab-close{height:16px!important;width:16px!important;flex-basis:16px!important;}
.project-tab-dirty{font-size:11px!important;}
.ai-actions-single{grid-template-columns:auto 1fr auto!important;}
.ai-actions-single #aiExecute{min-width:104px;}
.ai-results-block{height:151px;display:flex;flex-direction:column;}
.ai-results-head{height:30px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;padding:0 10px;}
.ai-results-head strong{font-size:10px;}
.ai-results-head span{font-size:8px;}
.ai-results-head button{height:22px;padding:0 7px;font-size:8px;cursor:pointer;}
.ai-history{flex:1;overflow:auto;padding:6px 8px;display:flex;flex-direction:column;gap:5px;scrollbar-width:thin;}
.ai-history-empty{padding:18px;font-size:9px;text-align:center;}
.ai-history-entry{padding:6px 8px;}
.ai-history-meta{display:flex;justify-content:space-between;gap:8px;font-size:8px;}
.ai-history-prompt{margin-top:3px;font-size:9px;}
.ai-history-plan{margin:4px 0 0;padding-left:16px;font-size:8px;line-height:1.45;}
.ai-history-message{margin-top:4px;font-size:8px;}
@media (max-width:980px){.app-shell{grid-template-rows:74px minmax(0,1fr) auto 28px!important;}.topbar{grid-template-columns:145px minmax(0,1fr)!important;grid-template-rows:23px 29px 22px!important;}.brand{grid-column:1!important;grid-row:1/3!important;}.menu-tools-line{grid-column:2!important;grid-row:1/3!important;}.top-right-tools{display:none!important;}.project-tabs-shell{grid-column:1/3!important;grid-row:3!important;height:22px!important;}.project-tabs{height:22px!important;}.project-tab{height:21px!important;}}
@media (max-width:720px){.app-shell{grid-template-rows:78px 58vh auto 28px!important;}.topbar{grid-template-columns:100px minmax(0,1fr)!important;grid-template-rows:24px 31px 23px!important;}.brand small{display:none!important;}.menu-bar{overflow-x:auto!important;overflow-y:visible!important;}.icon-toolbar{height:30px!important;flex-basis:30px!important;}.project-tabs-shell{height:23px!important;}.project-tabs{height:23px!important;}.project-tab{height:22px!important;}}
/* v0.23 · AI Provider Manager */
.ai-provider-settings{margin:0 0 9px;overflow:hidden;}
.ai-provider-settings>summary{cursor:pointer;list-style:none;padding:6px 8px;font-size:9px;user-select:none;}
.ai-provider-settings>summary::-webkit-details-marker{display:none;}
.ai-provider-settings>summary:after{content:"▾";float:right;}
.ai-provider-settings[open]>summary:after{content:"▴";}
.ai-provider-grid{display:grid;grid-template-columns:1fr 1.35fr 1fr auto;gap:6px;padding:0 8px 7px;align-items:end;}
.ai-provider-grid label{display:grid;gap:3px;min-width:0;}
.ai-provider-grid label span{font-size:8px;}
.ai-provider-grid select,.ai-provider-grid input{min-width:0;height:28px;padding:0 7px;font-size:9px;}
.ai-provider-grid button{height:28px;font-size:9px;padding:0 9px;white-space:nowrap;}
.ai-provider-status{padding:5px 8px 7px;font-size:8px;line-height:1.4;}
.ai-history-provider{margin-top:3px;font-size:8px;}
.ai-history-validation{margin-top:4px;font-size:8px;}
@media (max-width:760px){.ai-provider-grid{grid-template-columns:1fr 1fr;}.ai-provider-grid button{grid-column:2;}.ai-provider-grid label:nth-child(2){grid-column:1 / -1;}}
/* v0.24 · WebLLM local en navegador */
.ai-provider-grid{grid-template-columns:1fr 1fr 1.35fr auto;}
.ai-webllm-actions{display:flex;gap:5px;align-items:end;flex-wrap:wrap;}
.ai-webllm-actions button{height:28px;font-size:8px;padding:0 8px;white-space:nowrap;}
.ai-webllm-actions button:disabled{cursor:not-allowed;}
.ai-webllm-progress{grid-column:1/-1;position:relative;min-height:26px;overflow:hidden;display:flex;align-items:center;}
.ai-webllm-progress>div{position:absolute;inset:0 auto 0 0;width:0%;}
.ai-webllm-progress>span{position:relative;z-index:1;padding:0 8px;font-size:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
@media (max-width:760px){.ai-webllm-actions{grid-column:1/-1;}.ai-webllm-progress{grid-column:1/-1;}}
/* DjCreator2 v0.25 · carga modular de interfaz + IA local escalonada */
.reusable-progress{width:100%;}
.reusable-progress-track{height:8px;overflow:hidden;}
.reusable-progress-bar{height:100%;width:0;}
.reusable-progress-meta{display:flex;justify-content:space-between;gap:12px;margin-top:7px;font-size:9px;}
.reusable-progress-meta strong{white-space:nowrap;}
.status-ai-loader{margin-left:auto;width:200px;min-width:200px;height:20px;display:grid;grid-template-columns:auto minmax(65px,1fr) 28px;align-items:center;gap:5px;padding:0 5px;overflow:hidden;}
.status-ai-label{max-width:78px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:8px;}
.status-ai-track{height:5px;overflow:hidden;}
.status-ai-track>div{height:100%;width:0;}
.status-ai-pct{font-size:8px;text-align:right;}
#sceneStats{margin-left:0!important;}
.ai-local-status{padding:10px;}
.ai-local-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:9px;}
.ai-local-title strong{font-size:11px;}
.ai-local-title span{font-size:8px;}
.ai-local-progress .reusable-progress-track{height:7px;}
.ai-local-note{margin-top:8px;font-size:8px;line-height:1.45;}
@media (max-width:980px){.status-ai-loader{width:170px;min-width:170px;}.status-ai-label{max-width:60px;}}
@media (max-width:760px){.status-ai-loader{display:none;}.ai-local-title{align-items:flex-start;flex-direction:column;gap:3px;}}
/* DjCreator2 v0.25.3 · versión visible + arranque recuperable */
.deployed-version{font-size:.62em!important;vertical-align:baseline;white-space:nowrap;}
/* DjCreator2 v0.26 · articulaciones orientables/limitadas + fallback panel IA */
.art-motion-row{display:grid;grid-template-columns:1fr 1fr;gap:5px;}
.art-motion-row label,.art-limit-row label{display:flex;flex-direction:column;gap:3px;font-size:8px;}
.art-motion-row select,.art-limit-row input{width:100%;height:27px;padding:0 6px;font-size:9px;}
.art-limit-row{display:grid;grid-template-columns:1fr 1fr 64px;gap:5px;align-items:end;}
.art-limit-row button{height:27px;font-size:9px;cursor:pointer;}
.art-current-angle{padding:4px 6px;font-size:8px;}
.art-motion-row select:disabled,.art-limit-row input:disabled,.art-limit-row button:disabled{cursor:default;}
.ai-dialog.ai-dialog-fallback{display:block!important;position:fixed!important;inset:50% auto auto 50%!important;transform:translate(-50%,-50%)!important;z-index:5000!important;margin:0!important;}
/* v0.27 · nombres únicos */
/* v0.28 · IA local: ocultar barras cuando la carga ha finalizado */
.status-ai-loader.complete{width:auto!important;min-width:0!important;grid-template-columns:auto!important;padding:0 7px!important;}
.status-ai-loader.complete .status-ai-track,.status-ai-loader.complete .status-ai-pct{display:none!important;}
.ai-local-status.complete{display:none!important;}
/* v0.30 · estado visible de ejecución IA */
.ai-run-status{margin-top:9px;display:grid;grid-template-columns:18px minmax(0,1fr) auto;gap:8px;align-items:center;padding:8px 9px;}
.ai-run-status[hidden]{display:none!important;}
.ai-run-spinner{width:14px;height:14px;animation:aiRunSpin .8s linear infinite;}
.ai-run-copy{display:grid;gap:2px;min-width:0;}
.ai-run-copy strong{font-size:9px;}
.ai-run-copy small{font-size:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ai-run-elapsed{font-size:8px;font-variant-numeric:tabular-nums;}
.ai-run-track{grid-column:1/-1;height:3px;overflow:hidden;}
.ai-run-track>div{height:100%;width:24%;}
.ai-run-status.indeterminate .ai-run-track>div{width:32%;animation:aiRunSlide 1.15s ease-in-out infinite;}
.ai-run-status.success .ai-run-spinner{animation:none;}
.ai-run-status.error .ai-run-spinner{animation:none;}
@keyframes aiRunSpin{to{transform:rotate(360deg);}}
@keyframes aiRunSlide{0%{transform:translateX(-120%);}50%{transform:translateX(190%);}100%{transform:translateX(360%);}}
/* DjCreator2 v0.33 · Learning Backend */
.learning-backend-status{flex:0 0 auto;max-width:210px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:2px 6px;font-size:8px;}
@media (max-width:900px){.learning-backend-status{display:none;}}
/* v0.33: el indicador conserva su apariencia y además abre diagnóstico al pulsarlo. */
button.learning-backend-status{cursor:pointer;}
/* ========================================================================== */
/* DjCreator2 v0.37 · Resultados IA +2 px                                      */
/* ========================================================================== */
.ai-results-block .ai-results-head strong{font-size:12px!important;}
.ai-results-block .ai-results-head span{font-size:10px!important;}
.ai-results-block .ai-results-head button{font-size:10px!important;}
.ai-results-block .ai-history-empty{font-size:11px!important;}
.ai-results-block .ai-history-meta{font-size:10px!important;}
.ai-results-block .ai-history-prompt{font-size:11px!important;line-height:1.4;}
.ai-results-block .ai-history-plan{font-size:10px!important;line-height:1.5;}
.ai-results-block .ai-history-message{font-size:10px!important;line-height:1.4;}
.ai-results-block .ai-history-provider{font-size:10px!important;}
.ai-results-block .ai-history-validation{font-size:10px!important;}
/* DjCreator2 v0.38 · selección múltiple por rectángulo */
[data-dj-widget="viewport"]{position:relative;}
.box-selection-overlay{position:absolute;z-index:30;pointer-events:none;}
[data-dj-widget="viewport"] canvas.box-select-cursor{cursor:crosshair!important;}
.hand-select-icon{stroke-linecap:round;stroke-linejoin:round;}
/* DjCreator2 v0.38 · entrada reutilizable del modal */
.app-modal-input-label{display:flex;flex-direction:column;gap:6px;margin-top:14px;font-size:12px;}
.app-modal-input{width:100%;box-sizing:border-box;padding:9px 10px;}
/* v0.41 · flechas verticales de importación/exportación más legibles */
.disk-arrow-icon .disk-arrow-mark{stroke-linecap:round;stroke-linejoin:round;}
/* ========================================================================== */
/* DjCreator2 v0.42 · Pide ayuda a una IA                                    */
/* ========================================================================== */
.ai-mode-tabs{display:flex;gap:4px;padding:7px 10px 0;}
.ai-mode-tab{height:29px;padding:0 11px;font-size:9px;cursor:pointer;}
.ai-mode-panel{min-height:0;overflow:hidden;}
.ai-mode-panel.active{display:flex;flex-direction:column;min-height:0;}
.ai-mode-panel[hidden]{display:none!important;}
.ai-header #aiDialogTitle{display:inline-flex;align-items:center;gap:6px;}
.ai-header #aiDialogTitle .ui-icon{width:15px;height:15px;}
.external-ai-body{display:flex;flex-direction:column;gap:8px;}
.external-ai-intro{display:grid;gap:3px;padding:9px 10px;}
.external-ai-intro strong,.external-ai-return-head strong{font-size:11px;}
.external-ai-intro span,.external-ai-return-head span{font-size:9px;line-height:1.45;}
.external-ai-grid{display:grid;grid-template-columns:130px minmax(0,1fr);align-items:center;gap:9px;}
.external-ai-grid .ai-prompt-label{margin:0;}
.external-ai-select{height:31px;padding:0 8px;font-size:10px;}
.external-ai-request{min-height:68px;}
.external-ai-output{min-height:190px;max-height:280px;font-size:9px;line-height:1.45;}
.external-ai-response{min-height:145px;font-size:9px;}
.external-ai-generate-row,.external-ai-copy-row,.external-ai-return-actions,.external-ai-import-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.external-ai-generate-row button,.external-ai-copy-row button,.external-ai-return-actions button,.external-ai-import-row button{min-height:30px;padding:0 10px;font-size:9px;cursor:pointer;}
.external-ai-generate-row small{font-size:8px;}
.external-ai-copy-row span{font-size:8px;}
.external-ai-copy-row .ui-icon{width:14px;height:14px;vertical-align:-3px;}
.external-ai-return-head{display:grid;gap:2px;margin-top:4px;padding-top:9px;}
.external-ai-note{margin-top:2px;}
@media (max-width:700px){.ai-mode-tabs{overflow-x:auto;}.ai-mode-tab{white-space:nowrap;}.external-ai-grid{grid-template-columns:1fr;gap:4px;}.external-ai-output{min-height:155px;}}
.ai-mode-panel>.ai-body{flex:1;min-height:0;}
/* DjCore v0.5 · estándar de identidad de producto */
.brand .dj-product-heading{display:inline-flex!important;align-items:baseline!important;gap:.35em!important;white-space:nowrap!important;line-height:1.1!important;}
.brand .dj-product-heading .dj-product-version,
.brand strong>.deployed-version{display:inline!important;margin:0!important;white-space:nowrap!important;font-size:.66em!important;vertical-align:baseline!important;}
.brand .dj-product-subtitle{display:block!important;margin-top:2px!important;}
/* DjCore v0.6 · contrato visual de identidad */
.brand .dj-product-heading{display:inline-flex!important;align-items:baseline!important;gap:.35em!important;white-space:nowrap!important;}
.brand .dj-product-heading .dj-product-version{display:inline!important;margin:0!important;}
/* DjCore v0.7 · controles estándar y firma compartida */
select:not([multiple]){min-width:0;height:28px;padding:0 27px 0 7px;font-size:10px;}
select:not([multiple]):disabled{cursor:default;}
.top-right-tools{display:flex;flex-wrap:wrap;align-content:center;justify-content:flex-end;}
.djcore-powered{flex:0 0 100%;margin-top:2px;text-align:right;font-size:8px;line-height:1.05;white-space:nowrap;}
.djcore-powered strong{font-size:9px;}
@media (max-width:720px){.djcore-powered{display:none;}}
/* DjCore v0.15 · canonical action icons */
[data-dj-action]>.dj-action-icon{pointer-events:none;flex:0 0 auto;}
/* DjCore v0.24 · generic transform-tool states */
.dj-transform-tool:disabled,.dj-transform-tool[aria-disabled="true"],[data-dj-transform-tool]:disabled,[data-dj-transform-tool][aria-disabled="true"]{cursor:default;}
/* DjCore v0.36 · generic passive progress modal */
.dj-progress-modal-card{width:min(460px,calc(100vw - 32px));}
.dj-progress-modal-message{display:flex;flex-direction:column;gap:10px;}
.dj-progress-modal-detail{min-height:1.35em;font-size:10px;white-space:pre-line;}
.dj-progress-modal-counter{font-size:9px;text-align:right;}
.dj-progress-modal-error{padding:8px 10px;font-size:10px;white-space:pre-line;}
/* DjCore v0.62 · optional modal window chrome (only present when show({chrome}) is used) */
.dj-modal-titlebar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 8px 7px 12px;cursor:move;user-select:none;}
.dj-modal-titlebar-label{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.dj-modal-window-btns{display:flex;gap:4px;flex:0 0 auto;}
.dj-modal-win-btn{width:24px;height:22px;padding:0;font-size:13px;line-height:1;}
.dj-modal-resize-handle{position:absolute;right:2px;bottom:2px;width:14px;height:14px;cursor:nwse-resize;}
.app-modal-card.dj-modal-maximized{left:0!important;top:0!important;width:100vw!important;height:100vh!important;}
.app-modal-overlay.dj-modal-minimized{pointer-events:none;}
.app-modal-overlay.dj-modal-minimized>.app-modal-card,.app-modal-overlay.dj-modal-minimized>[role="dialog"]{display:none!important;}
.dj-modal-pill-dock{position:fixed;left:12px;bottom:12px;display:flex;gap:6px;z-index:2147483000;pointer-events:none;}
.dj-modal-pill{pointer-events:auto;max-width:180px;padding:6px 10px;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;}
/* DjCore v0.63 · optional bottom dock with tabs + section drag (only when dockHost/sectionDrag) */
.panel-dock{display:flex;flex-direction:column;min-height:0;}
.panel-dock>.dock-tabs{display:flex;gap:2px;flex:0 0 auto;padding:4px 4px 0;overflow-x:auto;}
.dock-tab{padding:5px 12px;font-size:10px;white-space:nowrap;cursor:pointer;}
.panel-dock>.panel-section.dock-section{flex:1 1 auto;min-height:0;overflow:auto;}
.panel-dock>.panel-section.dock-section:not(.dock-active),.panel-dock>.panel-section.dock-section[hidden]{display:none!important;}
.panel-section>.section-title[draggable="true"]{cursor:grab;}
/* DjCore v0.40.1 · stable block arrows and section alignment */
/* Both contextual block arrows use one canonical box in normal, rail and single modes. */
.block-controls .block-hide-btn,.block-controls .block-restore-btn{box-sizing:border-box!important;flex:0 0 28px!important;width:28px!important;min-width:28px!important;max-width:28px!important;height:28px!important;min-height:28px!important;max-height:28px!important;padding:0!important;margin:0!important;border-width:1px!important;border-style:solid;font-size:16px!important;line-height:1!important;place-items:center!important;align-items:center!important;justify-content:center!important;}
/* Normal controls reserve the same vertical box used by the rail restore slot. */
.panel-block>.block-controls{min-height:34px;height:34px;padding:3px 5px;align-items:center;}
.panel-block.block-rail>.block-controls,.panel-block.block-single>.block-controls{min-height:34px;height:34px;padding:3px 5px;}
.panel-block.block-single .block-hide-btn{display:none!important;}
/* Keep every normal section on the panel's full inline axis. A collapsed section may become
   icon-only, but expanding/collapsing siblings must never change another section's x origin. */
.panel-block:not(.block-rail):not(.block-single)>.panel-section:not(.collapsed){box-sizing:border-box;width:100%;min-width:0;margin-left:0;margin-right:0;}
.panel-block:not(.block-rail):not(.block-single)>.panel-section:not(.collapsed)>.section-title{box-sizing:border-box;width:100%;min-width:0;margin-left:0;margin-right:0;}
.panel-block{}
@media (max-width:720px){.panel-block.block-rail>.block-controls,.panel-block.block-single>.block-controls{box-sizing:border-box;width:34px;min-width:34px;max-width:34px;height:42px;min-height:42px;max-height:42px;flex:0 0 34px;padding:7px 3px;}}
/* DjCore 0.73 · canonical configurable shell style presets */
.dj-identity-compact{gap:6px;}
.dj-identity-compact strong{font-size:13px;}
.dj-identity-compact small{display:inline;margin:0 0 0 6px;font-size:9px;}
.dj-session-area{justify-self:end;display:flex;align-items:center;gap:6px;min-width:0;}
.dj-session-compact{gap:3px;}
.dj-session-text-group{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:9px;line-height:1.15;}
.dj-session-text-group.dj-border-group{padding:4px 6px;}
.dj-session-text-group.dj-border-items{gap:3px;}
.dj-session-text-group.dj-border-items>*{padding:3px 5px;}
/* DjCore 0.74 · canonical nested menu presentation */
.menu-submenu{position:relative;display:block;}
.menu-submenu>.menu-submenu-panel{display:none;position:absolute;left:100%;top:0;min-width:180px;z-index:12010;}
.menu-submenu:hover>.menu-submenu-panel,.menu-submenu:focus-within>.menu-submenu-panel{display:flex;flex-direction:column;}
/* DjCore 0.85.58 · DjStyle migration compatibility.
   Shell/runtime still consumes these historical names. Every alias points only to
   a canonical DjStyle API Level 1 variable; no visual value is owned by DjCore. */
/* DjCore 0.80 · descriptor-only ApplicationShellRenderer */
.dj-shell-render{display:grid;grid-template-rows:auto minmax(360px,1fr) auto;min-height:560px;overflow:hidden;}
.dj-shell-render-header-top{display:grid;grid-template-columns:minmax(180px,250px) minmax(0,1fr) auto;gap:6px;padding:6px;}
.dj-shell-render-zone{min-width:0;display:flex;align-items:center;gap:5px;flex-wrap:wrap;}
.dj-shell-render-zone.zone-center{justify-content:center;}
.dj-shell-render-zone.zone-right{justify-content:flex-end;}
.dj-shell-render-zone.zone-lower{padding:0 6px 6px;display:grid;gap:4px;}
.dj-shell-render-identity,.dj-shell-render-pill,.dj-shell-render-menu-trigger,.dj-shell-render-menu-item,.dj-shell-render-tool,.dj-shell-render-dock-head,.dj-shell-render-tabs button,.dj-shell-render-control{cursor:default;}
.dj-shell-render-identity{display:grid;text-align:left;padding:5px 7px;}
.dj-shell-render-identity-title{display:flex;gap:7px;align-items:baseline;}
.dj-shell-render-menus{display:flex;gap:2px;min-width:0;overflow-x:auto;}
.dj-shell-render-menu-root{position:relative;}
.dj-shell-render-menu-trigger{padding:5px 8px;white-space:nowrap;}
.dj-shell-render-menu-panel{display:none;position:absolute;left:0;top:100%;min-width:190px;padding:4px;z-index:40;}
.dj-shell-render-menu-root:hover>.dj-shell-render-menu-panel{display:grid;}
.dj-shell-render-menu-item{position:relative;display:grid;grid-template-columns:20px 1fr auto;gap:6px;text-align:left;padding:6px 8px;width:100%;}
.dj-shell-render-menu-item:hover>.dj-shell-render-submenu-holder>.dj-shell-render-menu-panel{display:grid;}
.dj-shell-render-submenu-holder>.dj-shell-render-menu-panel{left:100%;top:0;}
.dj-shell-render-menu-separator{height:1px;margin:3px;}
.dj-shell-render-menu-section{padding:5px 8px;font-size:.75em;}
.dj-shell-render-toolbar{display:flex;gap:3px;overflow-x:auto;}
.dj-shell-render-tool{width:32px;height:30px;display:grid;place-items:center;}
.dj-shell-render-icon,.dj-shell-render-icon-placeholder{width:16px;height:16px;display:inline-grid;place-items:center;}
.dj-shell-render-session{display:flex;gap:4px;flex-wrap:wrap;}
.dj-shell-render-text-group{display:flex;gap:3px;}
.dj-shell-render-text-group.layout-column{flex-direction:column;}
.dj-shell-render-text-group.border-group{padding:3px;}
.dj-shell-render-text-group.border-each span{padding:2px 4px;}
.dj-shell-render-workspace{display:grid;grid-template-columns:minmax(150px,20%) minmax(0,1fr) minmax(150px,20%);min-height:0;}
.dj-shell-render-dock{overflow:hidden;}
.dj-shell-render-dock-head{width:100%;padding:7px;text-align:left;}
.dj-shell-render-tabs{display:flex;gap:2px;overflow:auto;padding:4px;}
.dj-shell-render-tabs button{padding:4px 6px;white-space:nowrap;}
.dj-shell-render-subpanel{display:grid;gap:3px;padding:6px;}
.dj-shell-render-control{display:flex;gap:6px;align-items:center;padding:5px 6px;text-align:left;}
.dj-shell-render-scene{position:relative;display:grid;place-content:center;justify-items:center;gap:6px;overflow:hidden;}
.dj-shell-render-grid{position:absolute;inset:0;transform:perspective(500px) rotateX(62deg) scale(1.5);transform-origin:center bottom;}
.dj-shell-render-scene>*:not(.dj-shell-render-grid){position:relative;}
.dj-shell-render-bottom{min-height:70px;}
.dj-shell-render-bottom-body{padding:8px;}
.dj-shell-render-empty{min-height:420px;display:grid;place-items:center;}
/* DjCore 0.82.0 · descriptor shell composition */
.dj-shell-render-zone.zone-center{min-width:0;overflow-x:auto;overflow-y:hidden;flex-wrap:nowrap;justify-content:flex-start;scrollbar-width:thin;}
.dj-shell-render-zone.zone-center>.dj-shell-render-menus,.dj-shell-render-zone.zone-center>.dj-shell-render-toolbar{overflow:visible;flex:0 0 auto;}
.dj-shell-render-subpanel-stack{display:grid;gap:5px;padding:4px;overflow:auto;align-content:start;}
.dj-shell-render-subpanel{display:block;overflow:hidden;}
.dj-shell-render-subpanel-head{width:100%;padding:6px 7px;text-align:left;}
.dj-shell-render-subpanel-content{display:grid;gap:3px;padding:5px;}
/* DjCore 0.84.31 · defaults HTML compartidos para DjStudio y apps.
   El navegador conserva la autoridad de layout: no hay cálculo JS de tamaños. */
:root{--dj-table-cell-default-height:20px;--dj-structural-min-height:40px;--dj-bottom-statusbar-height:28px;}
/* Las celdas no imponen una altura mínima. Los 20px son únicamente el tamaño
   inicial usado por DjStudio al crear una tabla; después manda el tamaño que
   indique el usuario o el contenido HTML real. */
table>:is(thead,tbody,tfoot)>tr>:is(td,th),table>tr>:is(td,th){min-height:0;box-sizing:border-box;}
/* Header de aplicación estático. */
.dj-app-header{display:block;width:100%;min-height:var(--dj-structural-min-height,40px);box-sizing:border-box;}
.dj-app-header-body{display:block;width:100%;min-height:var(--dj-structural-min-height,40px);box-sizing:border-box;}
/* Panel inferior: contenido arriba, barra de estado abajo. Los tabs inversos
   colocan su etiqueta en la barra y su panel en el área de contenido. */
.dj-bottom-panel{display:flex;flex-direction:column;width:100%;min-height:96px;box-sizing:border-box;}
.dj-bottom-panel-content{flex:1 1 auto;min-height:var(--dj-structural-min-height,40px);width:100%;box-sizing:border-box;overflow:auto;}
.dj-bottom-tab-pane{display:block;width:100%;min-height:var(--dj-structural-min-height,40px);box-sizing:border-box;}
.dj-bottom-tab-pane[hidden]{display:none!important;}
.dj-bottom-statusbar.statusbar,.dj-bottom-statusbar{flex:0 0 auto;min-height:var(--dj-bottom-statusbar-height,28px);display:block;padding:0;box-sizing:border-box;overflow:hidden;}
.dj-bottom-status-table{width:100%;height:100%;min-height:27px;table-layout:fixed;border-collapse:collapse;border-spacing:0;}
.dj-bottom-status-table>tbody>tr>td{width:25%;padding:0 4px;vertical-align:middle;box-sizing:border-box;overflow:hidden;}
.dj-bottom-statusbar [data-dj-status-text],.dj-bottom-statusbar .dj-status-text{white-space:nowrap;}
.dj-bottom-statusbar [data-dj-inverse-tab-id]{height:24px;display:inline-flex;align-items:center;padding:0 9px;cursor:pointer;white-space:nowrap;}
/* DjCore 0.84.31 · componentes HTML-first: panel lateral, Scroll y ListView. */
.dj-side-panel{display:flex;flex-direction:column;overflow:visible;box-sizing:border-box;}
.dj-side-panel-head{display:flex;align-items:center;gap:5px;min-height:30px;padding:3px 5px;box-sizing:border-box;}
.dj-side-panel-head>strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dj-side-panel-collapse{display:grid;place-items:center;width:22px;height:22px;min-width:22px;padding:0;cursor:pointer;}
.dj-side-panel-left .dj-side-panel-collapse{margin-left:auto;}
.dj-side-panel-right .dj-side-panel-collapse{margin-right:auto;}
.dj-side-panel-collapse-icon{width:10px;height:10px;}
.dj-side-panel-body{flex:1 1 auto;min-height:40px;padding:4px;overflow:auto;box-sizing:border-box;}
.dj-side-panel-left[data-collapsed="true"]{transform:translateX(calc(-100% + 28px));}
.dj-side-panel-right[data-collapsed="true"]{transform:translateX(calc(100% - 28px));}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-body{display:none!important;}
.dj-scroll-control{display:grid;align-items:center;gap:6px;box-sizing:border-box;min-width:80px;min-height:24px;}
.dj-scroll-control[data-label-position="right"]{grid-template-columns:minmax(0,1fr) auto;}
.dj-scroll-control[data-label-position="left"]{grid-template-columns:auto minmax(0,1fr);}
.dj-scroll-control[data-label-position="left"]>.dj-scroll-label{order:-1;}
.dj-scroll-control[data-label-position="top"],.dj-scroll-control[data-label-position="bottom"]{grid-template-columns:1fr;grid-template-rows:auto auto;}
.dj-scroll-control[data-label-position="top"]>.dj-scroll-label{order:-1;}
.dj-scroll-range{width:100%;min-width:0;margin:0;}
.dj-scroll-label{min-width:2.4em;text-align:center;}
.dj-listview{display:block;min-width:120px;min-height:60px;overflow:auto;box-sizing:border-box;}
.dj-listview-list{list-style:none;margin:0;padding:3px;}
.dj-listview-list>li{padding:5px 7px;}
/* Scroll visual inspirado en el control horizontal de DjStudio. */
.dj-scroll-range{height:18px;}
/* DjCore 0.84.31 · docking estructural compartido.
   Header conserva su posición; paneles laterales comienzan debajo de él y
   nunca invaden el panel inferior, que queda anclado al borde inferior. */
.dj-docked-layout{position:relative!important;min-height:100%;box-sizing:border-box;}
.dj-dock-header{position:relative;z-index:30;}
.dj-dock-bottom{position:absolute!important;left:0!important;right:0!important;bottom:0!important;z-index:30;width:100%!important;box-sizing:border-box;}
.dj-docked-layout>.dj-side-panel{position:absolute!important;top:var(--dj-app-header-bottom,0px);max-height:var(--dj-app-side-available-height,calc(100% - var(--dj-app-header-bottom,0px) - var(--dj-app-bottom-height,0px)));z-index:20;}
.dj-docked-layout>.dj-side-panel-left{left:0!important;right:auto!important;}
.dj-docked-layout>.dj-side-panel-right{right:0!important;left:auto!important;}
/* DjCore 0.84.31 · Panel lateral minimizado con rail de Subpaneles. */
.dj-side-panel-head>.dj-element-icon,.dj-subpanel-head>.dj-element-icon{margin:0 1px 0 0;flex:0 0 auto;}
.dj-side-panel-subpanel-rail{display:none;}
.dj-side-panel[data-collapsed="true"]{transform:none!important;width:28px!important;min-width:28px!important;max-width:28px!important;overflow:visible!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-head{width:28px;min-width:28px;padding:3px;justify-content:center;overflow:hidden;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-head>strong,.dj-side-panel[data-collapsed="true"]>.dj-side-panel-head>.dj-element-icon{display:none!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-head>.dj-side-panel-collapse{margin:0!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-body{display:block!important;flex:0 0 0!important;height:0!important;min-height:0!important;padding:0!important;overflow:visible!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-body>*{display:none!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-subpanel-rail{display:flex;position:absolute;z-index:34;top:30px;left:0;width:28px;flex-direction:column;align-items:center;gap:2px;padding:2px 0;box-sizing:border-box;}
.dj-side-panel-subpanel-icon{display:grid;place-items:center;width:25px;height:25px;min-width:25px;padding:2px;cursor:pointer;}
.dj-side-panel-subpanel-icon svg{width:16px;height:16px;}
.dj-subpanel{position:relative;display:flex;flex-direction:column;min-width:0;overflow:hidden;box-sizing:border-box;}
.dj-subpanel-head{display:flex;align-items:center;gap:5px;min-height:29px;padding:3px 5px;box-sizing:border-box;}
.dj-subpanel-head>strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dj-subpanel-collapse{display:grid;place-items:center;width:22px;height:22px;min-width:22px;margin-left:auto;padding:0;cursor:pointer;}
.dj-subpanel-collapse .dj-slider-collapse-icon{width:10px;height:10px;}
.dj-subpanel-body{flex:1 1 auto;min-height:40px;padding:4px;overflow:auto;box-sizing:border-box;}
.dj-subpanel[data-collapsed="true"]{height:auto!important;min-height:29px!important;}
.dj-subpanel[data-collapsed="true"]>.dj-subpanel-body{display:none!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-body>.dj-subpanel[data-floating="true"]{display:flex!important;position:absolute!important;z-index:36;top:30px!important;height:calc(100% - 30px)!important;max-height:calc(100% - 30px)!important;width:var(--dj-side-panel-expanded-width,240px)!important;min-width:180px;}
.dj-side-panel-left[data-collapsed="true"]>.dj-side-panel-body>.dj-subpanel[data-floating="true"]{left:28px!important;right:auto!important;}
.dj-side-panel-right[data-collapsed="true"]>.dj-side-panel-body>.dj-subpanel[data-floating="true"]{right:28px!important;left:auto!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-body>.dj-subpanel[data-floating="true"]>.dj-subpanel-body{display:block!important;flex:1 1 auto!important;overflow:auto!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-body>.dj-subpanel[data-floating="true"]>.dj-subpanel-head>.dj-subpanel-collapse{display:none!important;}
/* DjCore 0.84.31 · layout estructural definitivo: header / centro / panel inferior son filas reales. */
.dj-docked-layout{display:grid!important;grid-template-columns:auto minmax(0,1fr) auto!important;grid-template-rows:max-content minmax(0,1fr) max-content!important;position:relative!important;min-height:100%!important;align-items:stretch!important;}
.dj-docked-layout>.dj-dock-header{grid-column:1 / -1!important;grid-row:1!important;position:relative!important;inset:auto!important;z-index:30!important;align-self:start!important;}
.dj-docked-layout>.dj-dock-bottom{grid-column:1 / -1!important;grid-row:3!important;position:relative!important;inset:auto!important;bottom:auto!important;width:100%!important;z-index:30!important;align-self:end!important;}
.dj-docked-layout>.dj-side-panel{grid-row:2!important;position:relative!important;top:auto!important;bottom:auto!important;max-height:100%!important;align-self:start!important;z-index:20!important;}
.dj-docked-layout>.dj-side-panel-left{grid-column:1!important;left:auto!important;right:auto!important;justify-self:start!important;}
.dj-docked-layout>.dj-side-panel-right{grid-column:3!important;left:auto!important;right:auto!important;justify-self:end!important;}
.dj-docked-layout>:not(.dj-dock-header):not(.dj-dock-bottom):not(.dj-side-panel){grid-row:2;grid-column:1 / -1;}
/* DjCore 0.84.31 · áreas de trabajo de Tabs/Subpaneles. */
[data-dj-widget="tabs"]>[role="tabpanel"],.dj-tab-workspace{display:block;min-height:40px;box-sizing:border-box;}
[data-dj-widget="tabs"]>[role="tabpanel"][hidden],.dj-tab-workspace[hidden]{display:none!important;}
.dj-bottom-tab-pane,[data-dj-bottom-tab-panel]{display:block;min-height:40px;box-sizing:border-box;}
.dj-bottom-tab-pane[hidden],[data-dj-bottom-tab-panel][hidden]{display:none!important;}
/* DjCore 0.84.31 · Shell overlay: el viewport es la capa base 100% y no cambia de tamaño. */
.dj-docked-layout{display:block!important;position:relative!important;width:100%!important;height:100%!important;min-height:100%!important;overflow:hidden!important;box-sizing:border-box!important;}
.dj-docked-layout>.dj-dock-viewport,
.dj-docked-layout>[data-dj-widget="viewport"]{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;min-height:0!important;max-height:none!important;z-index:0!important;box-sizing:border-box!important;}
.dj-docked-layout>.dj-dock-header{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:auto!important;width:100%!important;z-index:50!important;}
.dj-docked-layout>.dj-dock-bottom{position:absolute!important;left:0!important;right:0!important;bottom:0!important;top:auto!important;width:100%!important;z-index:40!important;}
.dj-docked-layout>.dj-side-panel{position:absolute!important;top:var(--dj-app-header-bottom,0px)!important;bottom:auto!important;max-height:var(--dj-app-side-available-height,100%)!important;z-index:30!important;}
.dj-docked-layout>.dj-side-panel-left{left:0!important;right:auto!important;}
.dj-docked-layout>.dj-side-panel-right{right:0!important;left:auto!important;}
.dj-docked-layout>:not(.dj-dock-viewport):not([data-dj-widget="viewport"]):not(.dj-dock-header):not(.dj-dock-bottom):not(.dj-side-panel){position:relative;z-index:10;}
/* DjCore 0.84.31 · compact panel/subpanel title bars */
.dj-side-panel-head,.dj-subpanel-head{min-height:0;overflow:hidden;}
.dj-side-panel-head>strong,.dj-subpanel-head>strong{flex:1 1 auto;min-width:0;line-height:1.1;padding:0;}
.dj-side-panel-collapse,.dj-subpanel-collapse{height:auto;min-height:0;align-self:stretch;padding:0;}
.dj-side-panel-head>.dj-element-icon,.dj-subpanel-head>.dj-element-icon{max-height:100%;overflow:hidden;}
.dj-side-panel-head>.dj-element-icon svg,.dj-subpanel-head>.dj-element-icon svg{max-height:100%;}
/* DjCore 0.84.31 · iconos de elemento redimensionables por metadato persistente. */
[data-dj-icon-size]>.dj-element-icon,[data-dj-icon-size]>.dj-side-panel-head>.dj-element-icon,[data-dj-icon-size]>.dj-subpanel-head>.dj-element-icon,[data-dj-icon-size]>.dj-slider-head>.dj-element-icon{flex:0 0 auto;}
/* Generic menu/toolbar presentation moved to DjStyle 0.2.2. */
.dj-element-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;}
.dj-element-icon>svg,.dj-element-icon-svg{display:block;width:100%;height:100%;max-width:none;max-height:none;}
/* DjCore 0.84.31 · Viewport 3D runtime base. */
[data-dj-widget="viewport"]{position:relative;display:block;min-width:0;min-height:180px;overflow:hidden;box-sizing:border-box;}
[data-dj-widget="viewport"]>canvas{display:block;width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;}
/* Menu component geometry/presentation moved to DjStyle 0.2.2. */
/* DjCore 0.84.31 · Viewport visible aun antes de inicializar Three.js. */
:where([data-dj-style-root]).dj-docked-layout>[data-dj-widget="viewport"],:where([data-dj-style-root]).dj-docked-layout>.dj-dock-viewport{z-index:1!important;width:100%!important;height:100%!important;min-height:100%!important;}
:where([data-dj-style-root]) [data-dj-widget="viewport"]>canvas{position:relative;z-index:1;}
/* Header estático en runtime. */
:where([data-dj-style-root]) .dj-app-header{position:relative;}
/* Shared chrome typography is owned by DjStyle 0.2.2. */
/* La barra de estado es un contenedor de controles, además de tabs/texto. */
.dj-bottom-statusbar>[data-dj-widget]{flex:0 0 auto;align-self:center;max-height:24px;box-sizing:border-box;}
.dj-bottom-statusbar>select,.dj-bottom-statusbar>input,.dj-bottom-statusbar>button{min-height:22px;height:22px;}
/* DjCore 0.84.31 · los Combo de aplicación respetan un height explícito. */
:where([data-dj-style-root]) select[data-dj-widget="select"]{min-height:0;box-sizing:border-box;padding-block:0;line-height:1;}
/* DjCore 0.84.31 · iconos posicionables en títulos compuestos. */
:where([data-dj-style-root]) .dj-side-panel-head.dj-icon-stack,:where([data-dj-style-root]) .dj-subpanel-head.dj-icon-stack,:where([data-dj-style-root]) .dj-slider-head.dj-icon-stack{flex-wrap:wrap;}
:where([data-dj-style-root]) .dj-side-panel-head.dj-icon-stack>.dj-element-icon,:where([data-dj-style-root]) .dj-subpanel-head.dj-icon-stack>.dj-element-icon,:where([data-dj-style-root]) .dj-slider-head.dj-icon-stack>.dj-element-icon{flex-basis:100%;width:100%;max-width:100%;justify-content:center;}
:where([data-dj-style-root]) .dj-side-panel-head.dj-icon-stack:not(.dj-icon-stack-bottom)>.dj-element-icon,:where([data-dj-style-root]) .dj-subpanel-head.dj-icon-stack:not(.dj-icon-stack-bottom)>.dj-element-icon,:where([data-dj-style-root]) .dj-slider-head.dj-icon-stack:not(.dj-icon-stack-bottom)>.dj-element-icon{order:0;}
:where([data-dj-style-root]) .dj-side-panel-head.dj-icon-stack>strong,:where([data-dj-style-root]) .dj-subpanel-head.dj-icon-stack>strong,:where([data-dj-style-root]) .dj-slider-head.dj-icon-stack>strong{order:1;}
:where([data-dj-style-root]) .dj-side-panel-head.dj-icon-stack-bottom>.dj-element-icon,:where([data-dj-style-root]) .dj-subpanel-head.dj-icon-stack-bottom>.dj-element-icon,:where([data-dj-style-root]) .dj-slider-head.dj-icon-stack-bottom>.dj-element-icon{order:3;}
:where([data-dj-style-root]) .dj-icon-right>strong{order:0;}
:where([data-dj-style-root]) .dj-icon-right>.dj-element-icon{order:1;}
/* DjCore 0.84.31 · menú/toolbar compactos, iconos de cabecera estables y controles de altura explícita. */
:where([data-dj-style-root]) .dj-side-panel-head,:where([data-dj-style-root]) .dj-subpanel-head,:where([data-dj-style-root]) .dj-slider-head{position:relative!important;padding-right:30px!important;}
:where([data-dj-style-root]) .dj-side-panel-head>.dj-side-panel-collapse,:where([data-dj-style-root]) .dj-subpanel-head>.dj-subpanel-collapse,:where([data-dj-style-root]) .dj-slider-head>.dj-slider-collapse{position:absolute!important;right:5px!important;top:50%!important;transform:translateY(-50%)!important;margin:0!important;z-index:3!important;}
:where([data-dj-style-root]) .dj-side-panel-right>.dj-side-panel-head>.dj-side-panel-collapse{left:5px!important;right:auto!important;}
:where([data-dj-style-root]) .dj-side-panel-right>.dj-side-panel-head{padding-left:32px!important;}
/* DjCore 0.85.44 · en el panel derecho, el control up/down del Subpanel va a la izquierda del título. */
:where([data-dj-style-root]) .dj-side-panel-right>.dj-side-panel-body>.dj-subpanel>.dj-subpanel-head{padding-left:32px!important;padding-right:5px!important;}
:where([data-dj-style-root]) .dj-side-panel-right>.dj-side-panel-body>.dj-subpanel>.dj-subpanel-head>.dj-subpanel-collapse{left:5px!important;right:auto!important;}
:where([data-dj-style-root]) .dj-side-panel-left>.dj-side-panel-head{padding-right:32px!important;}
:where([data-dj-style-root]) .dj-side-panel-head{cursor:pointer;}
:where([data-dj-style-root]) [data-dj-widget="input"]{min-height:0!important;box-sizing:border-box!important;padding-block:0!important;line-height:1!important;}
:where([data-dj-style-root]) .dj-icon-control{display:inline-grid!important;place-items:center!important;min-width:20px;min-height:20px;padding:0!important;}
:where([data-dj-style-root]) .dj-icon-control>.dj-element-icon{margin:0!important;}
/* DjCore 0.84.31 · viewport persistente, toolbar sincronizable y dimensiones explícitas. */
:where([data-dj-style-root]) [data-dj-widget="viewport"]>canvas{position:absolute!important;inset:0!important;z-index:4!important;display:block!important;visibility:visible!important;pointer-events:auto!important;}
:where([data-dj-style-root]) .dj-toolbar-separator{display:flex!important;align-items:center!important;justify-content:center!important;width:7px!important;min-width:7px!important;height:19px!important;line-height:1!important;padding:0!important;margin:0!important;}
:where([data-dj-style-root]) button[data-dj-widget="button"],:where([data-dj-style-root]) button[data-dj-widget="toggle"],:where([data-dj-style-root]) input[data-dj-widget="input"],:where([data-dj-style-root]) select[data-dj-widget="select"]{min-height:0!important;box-sizing:border-box!important;padding-top:0!important;padding-bottom:0!important;line-height:1!important;}
:where([data-dj-style-root]) [data-dj-widget="image"]{position:relative;display:block;overflow:hidden;box-sizing:border-box;}
[data-dj-widget="image"]>img{display:block;width:100%;height:100%;object-fit:contain;max-width:100%;box-sizing:border-box;}
[data-dj-widget="image"]>.dj-element-icon{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;}
/* DjCore 0.84.31 · selección persistente de herramientas. */
/* DjCore 0.84.31 · ListBox / Repeater runtime */
.dj-listbox{display:block;min-width:120px;min-height:70px;box-sizing:border-box;padding:2px;}
.dj-repeater{display:block;min-width:150px;min-height:64px;box-sizing:border-box;padding:3px;}
.dj-repeater-template[hidden]{display:none!important;}
.dj-repeater-items{display:grid;gap:2px;}
.dj-repeater-item{display:grid;grid-template-columns:20px minmax(0,1fr) auto auto;align-items:center;gap:4px;min-height:24px;padding:2px 4px;}
.dj-repeater-item-action{min-height:20px;padding:0 5px;}
/* DjCore 0.85 · runtime project tabs are structural, always between header and viewport. */
.dj-docked-layout>[data-dj-project-tabs]{position:absolute!important;z-index:35!important;top:var(--dj-app-header-bottom,0px)!important;left:0!important;right:0!important;min-height:30px;height:auto;box-sizing:border-box;}
.dj-docked-layout>[data-dj-project-tabs]>.project-tabs{display:flex;align-items:stretch;gap:1px;min-height:30px;overflow-x:auto;overflow-y:hidden;padding:0 4px;box-sizing:border-box;}
.dj-docked-layout>[data-dj-project-tabs] .project-tab{min-width:86px;max-width:240px;height:30px;display:flex;align-items:center;gap:4px;padding:0 6px;box-sizing:border-box;cursor:pointer;white-space:nowrap;}
.dj-docked-layout>[data-dj-project-tabs] .project-tab-name{overflow:hidden;text-overflow:ellipsis;min-width:0;}
.dj-docked-layout>[data-dj-project-tabs] .project-tab-dirty{display:none;}
.dj-docked-layout>[data-dj-project-tabs] .project-tab.dirty .project-tab-dirty{display:inline;}
.dj-docked-layout>[data-dj-project-tabs] .project-tab-close{margin-left:auto;display:grid;place-items:center;width:18px;height:18px;padding:0;cursor:pointer;}
.dj-docked-layout>[data-dj-project-tabs] .project-tab-editor{min-width:72px;width:130px;max-width:190px;height:22px;padding:1px 4px;}
.dj-docked-layout>[data-dj-project-tabs] .new-project-btn{min-width:30px;width:30px;justify-content:center;font-size:18px;}
.dj-docked-layout>.dj-dock-viewport,.dj-docked-layout>[data-dj-widget="viewport"]{top:var(--dj-app-content-top,var(--dj-app-header-bottom,0px))!important;bottom:var(--dj-app-bottom-height,0px)!important;height:auto!important;min-height:0!important;}
.dj-docked-layout>.dj-side-panel{top:var(--dj-app-content-top,var(--dj-app-header-bottom,0px))!important;height:var(--dj-app-side-available-height,100%)!important;max-height:var(--dj-app-side-available-height,100%)!important;}
.dj-project-modal-card{width:min(390px,calc(100vw - 28px));}
.dj-project-saveas-body{display:grid;gap:10px;}
.dj-project-saveas-body .app-modal-input-label{display:grid;gap:5px;}
.dj-project-saveas-body .app-modal-input{width:100%;box-sizing:border-box;}
/* DjCore 0.85.2 · tabs de proyecto debajo del header/caja de herramientas. */
.dj-docked-layout>.dj-dock-header{z-index:50!important;}
.dj-docked-layout>[data-dj-project-tabs]{z-index:35!important;}
/* DjCore 0.85.3 · project tabs: franja propia debajo de TODO el header/toolbox. */
.dj-docked-layout>.dj-dock-header{z-index:60!important;}
.dj-docked-layout>[data-dj-project-tabs]{z-index:40!important;top:var(--dj-app-header-bottom,0px)!important;pointer-events:auto!important;}
.dj-docked-layout>.dj-dock-viewport,.dj-docked-layout>[data-dj-widget="viewport"]{top:calc(var(--dj-app-header-bottom,0px) + var(--dj-project-tabs-height,30px))!important;}
.dj-docked-layout>.dj-side-panel{top:calc(var(--dj-app-header-bottom,0px) + var(--dj-project-tabs-height,30px))!important;}
/* DjCore 0.85.7 · tabs: cabecera fija, alto persistente y workspace flexible. */
[data-dj-widget="tabs"]{display:flex;flex-direction:column;align-items:stretch;gap:0;width:100%;min-height:80px;overflow:visible;box-sizing:border-box;}
[data-dj-widget="tabs"]>[role="tablist"]{display:flex;flex:0 0 40px;align-items:flex-end;gap:2px;width:100%;height:40px;min-height:40px;max-height:40px;box-sizing:border-box;overflow-x:auto;overflow-y:visible;scrollbar-width:thin;}
[data-dj-widget="tabs"]>[role="tablist"]>[role="tab"]{display:flex;align-items:center;white-space:nowrap;min-height:25px;padding:2px 9px;margin:0;cursor:pointer;line-height:1;box-sizing:border-box;}
[data-dj-widget="tabs"]>[role="tabpanel"]{width:100%;height:auto;min-height:40px;flex:1 1 auto;margin:0;padding:0;overflow:auto;box-sizing:border-box;}
[data-dj-widget="tabs"]>[role="tabpanel"][hidden]{display:none!important;}
/* DjCore 0.85.7 · panel: el scroll vertical se activa solo cuando el contenido visible realmente excede el cuerpo. */
.dj-side-panel-body{overflow-x:hidden;}
/* DjCore 0.85.9 · Tabs compactos: sin recorte superior y sin estirar el contenido con scroll externo innecesario. */
[data-dj-widget="tabs"]{margin:0;padding:0;}
[data-dj-widget="tabs"]>[role="tablist"]{flex:0 0 32px;height:32px;min-height:32px;max-height:32px;align-items:flex-end;margin:0;padding:0;overflow-y:visible;}
[data-dj-widget="tabs"]>[role="tablist"]>[role="tab"]{height:31px;min-height:0;margin:0;}
:is(.dj-side-panel-body,.dj-subpanel-body,.dj-slider-body):has(>[data-dj-widget="tabs"]:only-child){display:flex;flex-direction:column;padding:0;}
:is(.dj-side-panel-body,.dj-subpanel-body,.dj-slider-body)>[data-dj-widget="tabs"]:only-child{flex:0 0 auto;height:auto;min-height:0;}
/* DjCore 0.85.10 · panel minimizado como rail de iconos; subpanel flotante al contenido. */
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-head{width:28px!important;min-width:28px!important;height:28px!important;min-height:28px!important;padding:1px!important;justify-content:center!important;overflow:visible!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-head>.dj-side-panel-collapse{display:grid!important;place-items:center!important;width:25px!important;height:25px!important;min-width:25px!important;margin:0!important;padding:2px!important;box-sizing:border-box!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-head>.dj-side-panel-collapse>.dj-element-icon,
.dj-side-panel-subpanel-icon>.dj-element-icon{display:grid!important;place-items:center!important;width:16px!important;height:16px!important;min-width:16px!important;margin:0!important;padding:0!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-head>.dj-side-panel-collapse svg,
.dj-side-panel-subpanel-icon svg{width:16px!important;height:16px!important;max-width:16px!important;max-height:16px!important;margin:0!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-subpanel-rail{top:28px!important;}
.dj-side-panel-subpanel-icon{display:grid!important;place-items:center!important;width:25px!important;height:25px!important;min-width:25px!important;padding:2px!important;box-sizing:border-box!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-body>.dj-subpanel[data-floating="true"]{top:28px!important;height:fit-content!important;max-height:calc(100% - 28px)!important;overflow:hidden!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-body>.dj-subpanel[data-floating="true"]>.dj-subpanel-body{display:block!important;flex:0 1 auto!important;min-height:0!important;overflow-x:hidden!important;overflow-y:auto!important;}
.dj-side-panel[data-collapsed="true"]>.dj-side-panel-body>.dj-subpanel[data-floating="true"]>.dj-subpanel-head>.dj-subpanel-collapse{display:grid!important;}
.dj-subpanel>.dj-subpanel-head{cursor:pointer;}
/* DjCore 0.85.11 · controles de contraer/expandir 40% más visibles. */
.dj-slider-collapse{width:14px!important;height:14px!important;min-width:14px!important;}
.dj-slider-collapse-icon,.dj-side-panel-collapse-icon,.dj-subpanel-collapse .dj-slider-collapse-icon{width:14px!important;height:14px!important;max-width:14px!important;max-height:14px!important;}
/* DjCore 0.85.14 · ColorPicker dimensionable + elementos flotantes anclados al Viewport. */
[data-dj-widget="colorpicker"]{display:grid;grid-template-rows:28px minmax(0,1fr);gap:6px;min-width:0;min-height:0;box-sizing:border-box;position:relative;overflow:hidden;}
[data-dj-widget="colorpicker"] .dj-colorpicker-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;height:100%;min-height:0;padding:0 8px;cursor:pointer;box-sizing:border-box;}
[data-dj-widget="colorpicker"] .dj-colorpicker-bar-value{padding:1px 5px;}
[data-dj-widget="colorpicker"] .dj-colorpicker-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(54px,28%);grid-template-rows:minmax(0,1fr) 20px;grid-template-areas:"square rgb" "hue rgb";gap:7px;padding:7px;box-sizing:border-box;min-width:0;min-height:0;width:100%;height:100%;overflow:auto;z-index:80;}
[data-dj-widget="colorpicker"] .dj-colorpicker-square{grid-area:square;position:relative;min-width:0;min-height:34px;width:100%;height:100%;cursor:crosshair;overflow:hidden;}
[data-dj-widget="colorpicker"] .dj-colorpicker-marker{position:absolute;width:10px;height:10px;transform:translate(-50%,50%);pointer-events:none;left:var(--dj-colorpicker-s,100%);bottom:var(--dj-colorpicker-v,100%);box-sizing:border-box;}
[data-dj-widget="colorpicker"] .dj-colorpicker-hue{grid-area:hue;width:100%;height:20px;min-height:0;margin:0;}
[data-dj-widget="colorpicker"] .dj-colorpicker-rgb{grid-area:rgb;display:grid;align-content:start;gap:5px;min-width:0;}
[data-dj-widget="colorpicker"] .dj-colorpicker-rgb label{display:grid;grid-template-columns:14px minmax(0,1fr);align-items:center;gap:3px;}
[data-dj-widget="colorpicker"] .dj-colorpicker-rgb input{min-width:0;width:100%;height:24px;padding:2px 4px;box-sizing:border-box;}
[data-dj-widget="colorpicker"][data-dj-color-format="square"]{grid-template-rows:minmax(0,1fr);}
[data-dj-widget="colorpicker"][data-dj-color-format="square"]>.dj-colorpicker-bar{display:none;}
[data-dj-widget="colorpicker"][data-dj-color-format="bar"]{display:block;overflow:visible;}
[data-dj-widget="colorpicker"][data-dj-color-format="bar"]>.dj-colorpicker-bar{height:100%;min-height:0;}
[data-dj-widget="colorpicker"][data-dj-color-format="bar"]>.dj-colorpicker-panel{display:none;position:fixed;left:0;top:0;width:220px;height:160px;z-index:1200;}
[data-dj-widget="colorpicker"][data-dj-color-format="bar"][data-dj-color-open="true"]>.dj-colorpicker-panel{display:grid;}
[data-dj-viewport-floating]{position:absolute!important;z-index:29;min-width:120px;box-sizing:border-box;}
[data-dj-viewport-floating="left"]{top:calc(var(--dj-app-floating-left-top,var(--dj-app-content-top,var(--dj-app-header-bottom,0px))) + var(--dj-viewport-floating-offset,0px))!important;max-height:calc(var(--dj-app-floating-left-height,var(--dj-app-side-available-height,100%)) - var(--dj-viewport-floating-offset,0px));left:var(--dj-app-left-dock-width,0px)!important;right:auto!important;}
[data-dj-viewport-floating="right"]{top:calc(var(--dj-app-floating-right-top,var(--dj-app-content-top,var(--dj-app-header-bottom,0px))) + var(--dj-viewport-floating-offset,0px))!important;max-height:calc(var(--dj-app-floating-right-height,var(--dj-app-side-available-height,100%)) - var(--dj-viewport-floating-offset,0px));right:var(--dj-app-right-dock-width,0px)!important;left:auto!important;}
[data-dj-viewport-floating][data-dj-widget="container"]{overflow:auto;}
[data-dj-viewport-floating][data-dj-widget="container"][data-dj-container-empty="true"]{overflow:visible;}
[data-dj-viewport-floating] :is(.dj-slider-body,.dj-subpanel-body){max-height:calc(var(--dj-app-side-available-height,100vh) - 30px);overflow:auto;}
/* DjCore 0.85.16 · On/Off canónico: paridad Diseño/Publicación y dimensiones explícitas. */
/* DjCore 0.85.16 · runtime On/Off interactivo y estado habilitado canónico. */
:where([data-dj-style-root]) [data-dj-widget="toggle"].dj-control-disabled{cursor:default;}
:where([data-dj-style-root]) [data-dj-widget="toggle"]:not(.dj-control-disabled){cursor:pointer;}
/* DjCore 0.85.18 · Slider flotante contraído: sólo cabecera, sin conservar alto redimensionado. */
[data-dj-viewport-floating][data-dj-widget="slider"][data-collapsed="true"]{height:auto!important;min-height:0!important;max-height:none!important;}
[data-dj-viewport-floating][data-dj-widget="slider"][data-collapsed="true"]>.dj-slider-body{display:none!important;}
/* DjCore 0.85.19 · cabeceras de Panel completamente clickeables y control derecho ubicado a la izquierda. */
:where([data-dj-style-root]) .dj-side-panel-head{user-select:none;}
/* DjCore 0.85.22 · controles alineados al borde superior en flujo normal. */
:where([data-dj-style-root]) :is([data-dj-widget="toggle"].dj-toggle-control,input[data-dj-widget="input"]){vertical-align:top;margin-top:0!important;margin-bottom:0!important;}
/* DjCore 0.85.25 · zonas flotantes independientes izquierda/derecha del viewport. */
/* DjCore 0.85.25 · cuerpo de Panel con scroll estable hasta el bottom. */
.dj-side-panel:not([data-collapsed="true"])>.dj-side-panel-body{min-height:0;overflow-x:hidden;overflow-y:auto;}
/* DjCore 0.85.33 · side-panel runtime scroll ownership.
   Published applications use a fixed viewport; the panel consumes the available height
   and only its body scrolls. This avoids losing the scroll range near the last section. */
.dj-app-runtime.dj-docked-layout>.dj-side-panel:not([data-collapsed="true"]),
.dj-app-runtime .dj-docked-layout>.dj-side-panel:not([data-collapsed="true"]),
.dj-docked-layout>.dj-side-panel:not([data-collapsed="true"]){height:var(--dj-app-side-available-height,calc(100% - var(--dj-app-content-top,0px) - var(--dj-app-bottom-height,0px)))!important;max-height:var(--dj-app-side-available-height,calc(100% - var(--dj-app-content-top,0px) - var(--dj-app-bottom-height,0px)))!important;min-height:0!important;overflow:hidden!important;}
.dj-side-panel:not([data-collapsed="true"])>.dj-side-panel-head{flex:0 0 auto!important;}
.dj-side-panel:not([data-collapsed="true"])>.dj-side-panel-body{flex:1 1 0!important;min-height:0!important;max-height:100%!important;overflow-x:hidden!important;overflow-y:auto!important;overscroll-behavior:contain;}

/* DjCore 0.85.76 · al restaurar un panel lateral, sus subpaneles vuelven al flujo estructural. */
.dj-side-panel:not([data-collapsed="true"])>.dj-side-panel-body>[data-dj-widget="subpanel"]:not([hidden]){display:flex;}
/* DjCore 0.85.33 · contenedores flotantes del viewport alineados al borde superior.
   Un contenedor acoplado junto a un panel no hereda el punto vertical del drop. */
[data-dj-viewport-floating][data-dj-widget="container"]{top:var(--dj-app-content-top,var(--dj-app-header-bottom,0px))!important;max-height:var(--dj-app-side-available-height,100%)!important;}
/* DjCore 0.85.33 · Tabs como único contenido: sin espacio/scroll fantasma. */
:is(.dj-side-panel-body,.dj-subpanel-body,.dj-slider-body):has(>[data-dj-widget="tabs"]:only-child){min-height:0;overflow:hidden;}
:is(.dj-side-panel-body,.dj-subpanel-body,.dj-slider-body)>[data-dj-widget="tabs"]:only-child{flex:1 1 auto;height:100%;min-height:0;margin:0;}
:is(.dj-side-panel-body,.dj-subpanel-body,.dj-slider-body)>[data-dj-widget="tabs"]:only-child>[role="tabpanel"]{min-height:0;overflow:auto;}
/* Texto semántico reutilizable de DjStudio/publicaciones. */
.TextoDjStudio{font-size:10px;}
/* DjCore 0.85.36 · SvgInteractiva: geometría base sin borde y overlay luminoso por forma real. */
:where([data-dj-style-root]) [data-dj-widget="svginteractive"]{position:relative;display:block;overflow:hidden;box-sizing:border-box;}
:where([data-dj-style-root]) [data-dj-widget="svginteractive"]>.dj-svginteractive-stage{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden;}
:where([data-dj-style-root]) [data-dj-widget="svginteractive"]>.dj-svginteractive-stage>svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;}
:where([data-dj-style-root]) [data-dj-widget="svginteractive"] .dj-svginteractive-zone{cursor:pointer;}
:where([data-dj-style-root]) [data-dj-widget="svginteractive"][data-dj-svg-hover-enabled="false"] .dj-svginteractive-zone{cursor:default;}
:where([data-dj-style-root]) [data-dj-widget="svginteractive"] .dj-svginteractive-overlay{pointer-events:none!important;vector-effect:non-scaling-stroke;}
/* DjCore 0.85.36 · SvgInteractiva: geometría fuente sin bordes; sólo el overlay iluminado dibuja contorno. */
[data-dj-widget="svginteractive"] .dj-svginteractive-overlay{pointer-events:none!important;vector-effect:non-scaling-stroke;}
/* DjCore 0.85.44 · estado persistente para botones semánticos (p.ej. tipo de Puerta). */

/* DjCore 0.85.76 · expanded side panels always restore subpanels to normal flow.
   Neutralizes stale floating geometry without touching authored height/collapse state. */
.dj-side-panel:not([data-collapsed="true"])>.dj-side-panel-subpanel-rail{display:none!important;}
.dj-side-panel:not([data-collapsed="true"])>.dj-side-panel-body{display:flex!important;flex-direction:column!important;align-items:stretch!important;position:relative!important;}
.dj-side-panel:not([data-collapsed="true"])>.dj-side-panel-body>[data-dj-widget="subpanel"]:not([hidden]){
  display:flex!important;position:relative!important;left:auto!important;right:auto!important;top:auto!important;bottom:auto!important;
  width:auto!important;max-width:100%!important;min-width:0!important;align-self:stretch!important;z-index:auto!important;
}
/* DjCore 0.85.76 · legacy typography bridge: presentation values come only from DjStyle tokens. */
html[data-dj-style-root] :is(.menu-button,.menu-item){font-size:var(--dj-font-size-menu,10px)!important;}
html[data-dj-style-root] :is(.dj-table-slider-toggle,.dj-table-slider-label){font-size:var(--dj-font-size-compact-control,10px)!important;}
html[data-dj-style-root] [data-dj-widget="colorpicker"] :is(.dj-colorpicker-bar,.dj-colorpicker-bar-value,.dj-colorpicker-rgb,.dj-colorpicker-rgb label,.dj-colorpicker-rgb input){font-size:var(--dj-font-size-compact-control,10px)!important;}
/* DjCore 0.85.76 · los paneles laterales no reservan gutter de scrollbar.
   El ancho útil sólo se reduce cuando el navegador muestra realmente una barra. */
