/* React-компоновка: один canvas, правое дерево и одно рабочее окно. */
body{display:block;height:100dvh;overflow:hidden}#react-root,.react-viewer-shell{height:100%;min-height:0}.react-viewer-shell{display:grid;grid-template-rows:96px 42px minmax(0,1fr)}.react-viewer-header{min-width:0;padding-block:0;grid-template-columns:auto minmax(0,1fr) minmax(100px,260px);gap:16px;padding-inline:16px;background:var(--km-surface)}.react-viewer-header #status{display:none;font-size:var(--km-text-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.react-viewer-header #undo,.react-viewer-header #redo{display:none}.react-viewer-nav{display:flex;gap:16px;align-items:center;padding:4px 16px;border-bottom:var(--km-border-default);background:var(--km-surface);min-width:0;overflow-x:auto;white-space:nowrap}.react-viewer-nav a{display:none;color:var(--km-text-muted);text-decoration:none}.nav-spacer{flex:1}.react-stage{position:relative;display:grid!important;grid-template-columns:minmax(0,1fr) 300px!important;min-height:0;overflow:hidden}.react-stage>#viewport{grid-column:1;grid-row:1;min-width:0;min-height:0}.react-stage>#explorer{grid-column:2;grid-row:1;min-height:0;width:auto;max-width:none;border-left:var(--km-border-default);border-radius:0;display:flex;flex-direction:column;background:var(--km-surface)}.react-stage #tree{min-height:0;flex:1;overflow:auto}.react-stage .search input{min-width:0;width:100%}.react-viewer-shell[data-tree-hidden=true] .react-stage{grid-template-columns:minmax(0,1fr)!important}.react-viewer-shell[data-tree-hidden=true] #explorer{display:none}.react-stage .view-tools{display:none;max-width:calc(100% - 24px);padding:8px;border-radius:var(--km-radius-md);gap:4px;box-shadow:var(--km-shadow-sm);font-size:var(--km-text-xs)}.react-stage .view-tools .km-tool-button{min-width:44px;min-height:36px;padding:4px 8px}.react-stage .view-tools label{font-size:var(--km-text-xs)}.react-stage .view-tools input[type=range]{max-width:70px}.workspace-window{position:absolute;left:var(--window-x);top:var(--window-y);width:var(--window-width);height:var(--window-height);z-index:var(--km-z-float);display:flex;flex-direction:column;box-shadow:var(--km-shadow-overlay);max-height:calc(100% - 16px);max-width:calc(100% - 16px);background:var(--km-surface)}.workspace-window[hidden]{display:none!important}.workspace-title{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:44px;padding:8px 12px;border-bottom:var(--km-border-default);cursor:move;touch-action:none;user-select:none}.workspace-title strong{font-size:var(--km-text-sm);white-space:nowrap}.workspace-title>div{display:flex;align-items:center;gap:4px}.workspace-title select{max-width:105px;font-size:var(--km-text-xs)}.workspace-title button{border:0;background:transparent;color:var(--km-text-muted);width:26px;height:26px;font-size:18px;border-radius:var(--km-radius-sm)}.workspace-title button:hover{background:var(--km-primary-soft);color:var(--km-primary)}.workspace-tabs{flex:1;min-height:0;overflow:hidden}.workspace-tabs>.km-tabs-wrap{display:flex;flex-direction:column;height:100%;min-height:0}.workspace-tabs .km-tabs{flex-shrink:0}.workspace-tabs .km-tab-panel{flex:1;min-height:0;overflow:auto}.workspace-window #properties{position:static;display:flex;flex-direction:column;width:auto;max-height:none;height:100%;border:0;border-radius:0;transform:none;padding:0}.workspace-window #properties>.km-panel__header{display:none}.workspace-window #properties-form{overflow:auto;min-height:0}.workspace-window #properties-form label{grid-template-columns:minmax(90px,.8fr) minmax(0,1.2fr);border-color:var(--km-border)}.workspace-window #ids-dialog{position:static;inset:auto;max-width:none;width:100%;margin:0;border:0;border-radius:0;box-shadow:none;padding:12px;background:var(--km-surface)}.workspace-window #ids-dialog form{min-width:0}.workspace-window .ids-inputs{grid-template-columns:1fr}.workspace-window .ids-filters{grid-template-columns:1fr 1fr}.workspace-window .ids-table-wrap{max-height:36vh}.workspace-window #technical-panel{position:static;height:100%;border:0}.workspace-window .technical-panel__header{flex-wrap:wrap}.workspace-window .technical-panel__content{height:auto;overflow:auto;min-height:0}.workspace-window .technical-panel dl{grid-template-columns:minmax(0,1fr) auto}.workspace-resizer{position:absolute;right:0;bottom:0;width:24px;height:24px;border:0;background:var(--km-surface);color:var(--km-text-muted);cursor:nwse-resize;touch-action:none}.workspace-window[data-dock=left]{left:8px;top:8px;height:calc(100% - 16px)}.workspace-window[data-dock=right]{left:auto;right:308px;top:8px;height:calc(100% - 16px)}.workspace-window[data-dock=bottom]{left:8px;top:auto;bottom:8px;width:calc(100% - 324px);height:var(--window-height)}.workspace-window[data-minimized=true]{height:44px;min-height:44px}.workspace-window[data-minimized=true] .workspace-resizer{display:none}.react-viewer-shell[data-tree-hidden=true] .workspace-window[data-dock=right]{right:8px}.react-viewer-shell[data-tree-hidden=true] .workspace-window[data-dock=bottom]{width:calc(100% - 16px)}@media(max-width:1024px){.react-stage{grid-template-columns:minmax(0,1fr) 260px!important}.workspace-window[data-dock=right]{right:268px}.workspace-window[data-dock=bottom]{width:calc(100% - 284px)}.react-viewer-header{grid-template-columns:auto minmax(0,1fr)}.react-viewer-header #status{display:none}}@media(max-width:767px){.react-viewer-shell{grid-template-rows:60px 44px minmax(0,1fr)}.react-stage{grid-template-columns:minmax(0,1fr)!important}.react-stage>#explorer{position:absolute;inset:auto 8px 8px 8px;max-height:65%;z-index:var(--km-z-float);border:var(--km-border-default);border-radius:var(--km-radius-lg);display:none}.react-stage>#explorer[data-state=half],.react-stage>#explorer[data-state=expanded]{display:flex}.react-viewer-nav{gap:8px;padding-inline:8px}.react-viewer-nav a{display:none}.workspace-window,.workspace-window[data-dock]{left:8px;right:8px;top:auto;bottom:8px;width:calc(100% - 16px);height:min(var(--window-height),70%);max-height:70%;max-width:none}.workspace-title{min-height:44px}.workspace-title select{max-width:90px}.workspace-title button{width:30px;height:30px}.react-stage .view-tools{left:8px;top:8px;padding:4px}.react-viewer-header{padding-inline:8px;gap:8px}.react-viewer-header .km-brand__section{display:none}.km-brand--responsive .km-brand__mark{padding:8px}.km-brand--responsive .km-brand__mark img{width:auto;max-width:42vw;height:32px}.react-stage .view-tools select{max-width:110px}.mobile-more-sheet .km-tool-button,.mobile-more-sheet .km-icon-button{display:inline-flex}.workspace-window[data-minimized=true]{height:44px}.react-viewer-shell .mobile-more-sheet{z-index:var(--km-z-modal)}.react-viewer-shell .mobile-more-backdrop{z-index:calc(var(--km-z-modal) - 1)}}

.react-stage #tree{align-content:start;grid-auto-rows:min-content}.km-brand{display:inline-flex;align-items:center;gap:8px;text-decoration:none;color:var(--km-text);white-space:nowrap}.km-brand__mark{display:inline-flex;padding:14px}.km-brand__mark img{display:block;width:264px;max-width:min(264px,34vw);height:auto}.km-brand__mark picture{display:block}.km-brand--symbol .km-brand__mark{padding:16px}.km-brand--symbol .km-brand__mark img{width:auto;height:16px}.km-brand__section{color:var(--km-text-muted);font-size:13px;margin-left:4px}

/* Старая mobile bottom-позиция не должна растягивать toolbar на всю сцену. */
.react-stage .view-tools{bottom:auto;right:auto;height:auto;align-content:start}


/* Уточнённый второй ряд dev Viewer: файл слева, инструменты справа, статус снизу. */
.react-viewer-shell{grid-template-rows:96px 42px minmax(0,1fr) 26px}
.react-viewer-nav{position:relative;z-index:var(--km-z-popover,20);overflow:visible}.viewer-file-actions{display:flex;align-items:center;gap:8px;min-width:0}.viewer-file-actions .km-button{white-space:nowrap}.viewer-tools-menu{position:relative;display:flex;justify-content:flex-end}.viewer-tools-dropdown{position:absolute;right:0;top:calc(100% + 6px);z-index:var(--km-z-popover,20);display:grid;min-width:180px;padding:6px;border:var(--km-border-default);border-radius:var(--km-radius-md);background:var(--km-surface);box-shadow:var(--km-shadow-overlay)}.viewer-tools-dropdown[hidden]{display:none}.viewer-tools-dropdown button{display:flex;justify-content:flex-start;width:100%;border:0;border-radius:var(--km-radius-sm);background:transparent;color:var(--km-text);padding:8px 10px;font:inherit;text-align:left}.viewer-tools-dropdown button:hover,.viewer-tools-dropdown button:focus-visible{background:var(--km-primary-soft);color:var(--km-primary);outline:none}.viewer-tools-dropdown #viewer-history-actions{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:4px;padding-top:6px;border-top:var(--km-border-default)}.viewer-tools-dropdown #viewer-history-actions button{justify-content:center;min-height:36px}
@media (min-width:768px){.react-viewer-shell[data-view-tools-open="true"] .react-stage .view-tools{display:flex;flex-wrap:wrap;width:min(550px,calc(100% - 24px));max-height:calc(100% - 24px);overflow-y:auto;border:var(--km-border-default);background:var(--km-surface);z-index:var(--km-z-popover,20)}}
.viewer-status-footer{display:flex;align-items:center;min-width:0;padding:3px 16px;border-top:var(--km-border-default);background:var(--km-surface);color:var(--km-text-muted);font-size:var(--km-text-xs);line-height:1.4}.viewer-status-footer #status{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}
@media(max-width:1024px){.viewer-file-actions{gap:6px}.viewer-file-actions .km-button{padding-inline:8px}.react-viewer-shell{grid-template-rows:96px 42px minmax(0,1fr) 26px}}
@media(max-width:767px){.react-viewer-shell{grid-template-rows:60px 44px minmax(0,1fr) 26px}.react-viewer-nav{overflow:visible}.viewer-file-actions{gap:6px}.viewer-file-actions .km-button{font-size:var(--km-text-xs);padding-inline:8px}.viewer-status-footer{padding-inline:8px}.viewer-tools-dropdown{right:0}}

/* Мобильный Viewer: единая строка с названием IFC-RC и полноразмерной сценой. */
@media (max-width: 767px) {
  .react-viewer-shell { grid-template-rows: calc(64px + env(safe-area-inset-top)) minmax(0, 1fr) calc(26px + env(safe-area-inset-bottom)); }
  .react-viewer-header { min-height: calc(64px + env(safe-area-inset-top)); height: calc(64px + env(safe-area-inset-top)); padding: env(safe-area-inset-top) max(12px, env(safe-area-inset-right)) 0 max(12px, env(safe-area-inset-left)); gap: 4px; }
  .react-viewer-header .km-brand { flex: 0 0 auto; gap: 4px; min-width: 0; }
  .react-viewer-header .km-brand__mark { padding: 0 4px 0 0; }
  .react-viewer-header .km-brand__mark img { width: auto; height: 32px; max-width: none; }
  .react-viewer-header .km-brand__name { position: static; width: auto; height: auto; overflow: visible; clip-path: none; font-size: 16px; font-weight: 700; line-height: 1; color: var(--km-text); }
  .react-viewer-header > .toolbar { width: auto; flex: 1; justify-content: flex-end; gap: 6px; overflow: visible; }
  .react-viewer-header > .toolbar > label.km-button { min-width: 112px; min-height: 42px; order: 0; white-space: nowrap; }
  .react-viewer-header .mobile-more-toggle { min-width: 58px; min-height: 42px; order: 1; }
  .react-viewer-nav { display: none; }
  .react-viewer-shell.viewer-empty #viewport { background: #f3f4f6; }
  .react-viewer-shell.viewer-empty #canvas { visibility: hidden; }
  .react-viewer-shell.viewer-empty #viewport-hint { left: 50%; right: auto; top: 50%; bottom: auto; width: max-content; max-width: calc(100% - 24px); transform: translate(-50%, -50%); margin: 0; padding: 0; border: 0; background: transparent; box-shadow: none; text-align: center; white-space: normal; font-size: 15px; font-weight: 500; color: var(--km-text-muted); }
  .viewer-status-footer { padding-inline: max(12px, env(safe-area-inset-left)) max(12px, env(safe-area-inset-right)); padding-bottom: env(safe-area-inset-bottom); }
  #mobile-view-actions > select { flex: 1 1 130px; min-width: 0; min-height: 44px; }
  #mobile-panel-actions { display: flex; flex-wrap: wrap; gap: 8px; }
  #mobile-panel-actions #properties-toggle { order: 1; }
  #mobile-panel-actions #mobile-panel-ids { order: 2; }
  #mobile-panel-actions #tree-toggle { order: 3; }
  #mobile-panel-actions #mobile-panel-diagnostics { order: 4; }
}
@media (max-width: 350px) {
  .react-viewer-header { padding-inline: 8px; }
  .react-viewer-header .km-brand__mark img { height: 28px; }
  .react-viewer-header .km-brand__name { font-size: 14px; }
  .react-viewer-header > .toolbar > label.km-button { min-width: 98px; padding-inline: 5px; font-size: 11px; }
  .react-viewer-header .mobile-more-toggle { min-width: 50px; padding-inline: 4px; font-size: 11px; }
}

/* На телефоне существующее сообщение о сцене переносится в подвал без потери текста. */
@media (max-width: 767px) {
  .react-viewer-shell { grid-template-rows: calc(64px + env(safe-area-inset-top)) minmax(0, 1fr) auto; }
  .viewer-status-footer { min-height: calc(26px + env(safe-area-inset-bottom)); display: flex; flex-direction: column; align-items: stretch; justify-content: center; gap: 2px; padding-top: 4px; padding-bottom: calc(4px + env(safe-area-inset-bottom)); }
  #mobile-hint-slot { display: none; min-width: 0; }
  .react-viewer-shell:is([data-viewer-state="ready"], [data-viewer-state="busy"], [data-viewer-state="degraded"]):not(.viewer-empty) #mobile-hint-slot { display: block; }
  .viewer-status-footer #mobile-hint-slot #viewport-hint { position: static; display: block; left: auto; right: auto; top: auto; bottom: auto; width: auto; max-width: none; margin: 0; padding: 0; transform: none; border: 0; background: transparent; box-shadow: none; color: var(--km-text-muted); font-size: var(--km-text-xs); font-weight: 400; line-height: 1.3; white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; }
  .viewer-status-footer #status { white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; line-height: 1.3; }
  #mobile-empty-prompt { display: none; }
  .react-viewer-shell.viewer-empty #mobile-empty-prompt { position: absolute; display: block; left: 50%; top: 50%; width: max-content; max-width: calc(100% - 24px); margin: 0; transform: translate(-50%, -50%); color: var(--km-text-muted); font-size: 15px; font-weight: 500; text-align: center; pointer-events: none; }
}
@media (min-width: 768px) { #mobile-hint-slot, #mobile-empty-prompt { display: none; } }

/* Существующие tokens и один modal сохраняются на телефоне и desktop. */
.federation-dialog { width:min(740px,calc(100vw - 24px)); max-height:calc(100dvh - 32px); overflow:auto; }
.federation-dialog > header { display:flex; align-items:center; justify-content:space-between; gap:12px; }
.federation-dialog #models-status { display:block; margin-block:12px; }
.federation-model { border-block-start:1px solid var(--km-border, #d5dce0); padding-block:12px; display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.federation-model strong { flex-basis:100%; overflow-wrap:anywhere; }
.federation-model fieldset { display:flex; gap:8px; min-width:0; flex:1 1 260px; }
.federation-model fieldset label { display:grid; gap:4px; flex:1; min-width:0; }
.federation-model input { width:100%; min-width:0; }
@media(max-width:767px) { .federation-dialog { margin:auto; } .federation-model > button { flex:1 1 44%; } }

/* Полноразмерный overlay не меняет framebuffer и не перемонтирует свойства. */
.workspace-sheet-grip{display:none}
@media(max-width:767px){
 .workspace-window[data-mobile-sheet=true],.workspace-window[data-mobile-sheet=true][data-dock]{inset:env(safe-area-inset-top,0px) 0 env(safe-area-inset-bottom,0px);width:100%;height:auto;max-height:none;max-width:none;transform:translateY(var(--sheet-offset,0px));overflow:hidden;will-change:transform;border-radius:12px 12px 0 0}
 .workspace-window[data-mobile-sheet=true] .workspace-title{flex-shrink:0;cursor:ns-resize}
 .workspace-window[data-mobile-sheet=true] .workspace-sheet-grip{display:inline-flex;align-items:center;justify-content:center;width:44px;height:30px;touch-action:none}
 .workspace-sheet-grip::before{content:"";width:28px;height:4px;border-radius:3px;background:currentColor}
 .workspace-window[data-mobile-sheet=true] .workspace-resizer{display:none}
 .workspace-window[data-mobile-sheet=true][data-sheet-settling=true]{transition:transform 220ms cubic-bezier(.22,.8,.25,1)}
 .workspace-window[data-mobile-sheet=true][data-sheet-collapsed=true] .workspace-tabs{visibility:hidden}
}
@media(prefers-reduced-motion:reduce){.workspace-window[data-mobile-sheet=true][data-sheet-settling=true]{transition:none}}

@media(max-width:767px){.workspace-window[data-mobile-sheet=true][data-sheet-settling=false]{transition-property:none}}
@media(prefers-reduced-motion:reduce){.workspace-window[data-mobile-sheet=true]{transition-property:none!important}}

/* Абсолютная phone-панель принадлежит единственной колонке сцены, не desktop-колонке2. */
@media(max-width:767px){.react-stage>#explorer{grid-column:1 / -1;grid-row:1;min-width:0;width:auto;}}
