/* Оформление страницы просмотра облака. Общий файл: лежит в бакете
   в одном экземпляре и обслуживает все опубликованные облака. */
  *{box-sizing:border-box}
  html,body{margin:0;height:100%;background:#0a0b0d;overflow:hidden;
    color:rgba(255,255,255,.92);
    font:13px/1.45 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI Variable Text","Segoe UI",Inter,system-ui,sans-serif;
    letter-spacing:-.01em;-webkit-font-smoothing:antialiased;user-select:none}
  /* touch-action нужен и на контейнере: иначе жест уходит браузеру
     на зум страницы и до канваса не доезжает. */
  #render{position:fixed;inset:0;touch-action:none}
  #render canvas{display:block;touch-action:none;outline:none}

  .glass{background:rgba(28,28,30,.62);backdrop-filter:blur(40px) saturate(180%);
    -webkit-backdrop-filter:blur(40px) saturate(180%);
    border:1px solid rgba(255,255,255,.10);
    box-shadow:0 12px 44px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.07)}

  /* ---- шапка ---- */
  #panel{position:fixed;top:18px;left:18px;width:272px;border-radius:20px;z-index:30;
    opacity:0;transform:translateY(-10px);
    transition:opacity .6s ease,transform .6s cubic-bezier(.32,.72,0,1)}
  #panel.in{opacity:1;transform:none}
  #head{display:flex;align-items:center;gap:10px;padding:14px 16px}
  #head h1{font-size:14px;font-weight:590;margin:0;flex:1;min-width:0;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #gear{width:26px;height:26px;flex:none;border:0;border-radius:8px;cursor:pointer;
    background:rgba(255,255,255,.08);color:inherit;font-size:13px;line-height:26px;padding:0}
  #gear:hover{background:rgba(255,255,255,.16)}
  #stats{padding:0 16px 12px;font-size:11px;opacity:.5;font-variant-numeric:tabular-nums}

  #settings{display:none;border-top:1px solid rgba(255,255,255,.08);padding:12px 16px 14px}
  #settings.open{display:block}
  .row{margin-bottom:12px}
  .row:last-child{margin-bottom:0}
  .row label{display:flex;justify-content:space-between;font-size:11px;opacity:.55;
    margin-bottom:5px;font-variant-numeric:tabular-nums}
  input[type=range]{width:100%;height:3px;-webkit-appearance:none;appearance:none;
    background:rgba(255,255,255,.18);border-radius:2px;outline:none;margin:6px 0}
  input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;
    border-radius:50%;background:#fff;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.5)}
  input[type=range]::-moz-range-thumb{width:14px;height:14px;border:0;border-radius:50%;
    background:#fff;cursor:pointer}

  .seg{display:flex;gap:3px;background:rgba(255,255,255,.07);padding:3px;border-radius:9px}
  .seg button{flex:1;border:0;background:transparent;color:rgba(255,255,255,.55);
    font:inherit;font-size:11px;padding:5px 2px;border-radius:7px;cursor:pointer;
    transition:background .15s ease,color .15s ease;white-space:nowrap}
  .seg button:hover{color:rgba(255,255,255,.85)}
  .seg button.on{background:rgba(255,255,255,.16);color:#fff}

  /* ---- нижняя панель ---- */
  #dock{position:fixed;left:50%;bottom:20px;transform:translateX(-50%) translateY(14px);
    display:flex;gap:3px;padding:5px;border-radius:16px;z-index:30;opacity:0;
    transition:opacity .6s ease .1s,transform .6s cubic-bezier(.32,.72,0,1) .1s}
  #dock.in{opacity:1;transform:translateX(-50%)}
  #dock button{width:38px;height:38px;border:0;border-radius:11px;background:transparent;
    cursor:pointer;color:rgba(255,255,255,.62);display:grid;place-items:center;
    transition:background .15s ease,color .15s ease}
  #dock button:hover{background:rgba(255,255,255,.10);color:#fff}
  #dock button.on{background:rgba(255,255,255,.18);color:#fff}
  #dock .sep{width:1px;margin:7px 4px;background:rgba(255,255,255,.12)}
  #dock svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.6;
    stroke-linecap:round;stroke-linejoin:round}

  #hint{position:fixed;left:50%;bottom:70px;transform:translateX(-50%);z-index:29;
    padding:7px 8px 7px 13px;border-radius:11px;font-size:11.5px;opacity:0;
    pointer-events:none;transition:opacity .25s ease;white-space:nowrap;
    display:flex;align-items:center;gap:10px}
  #hint.in{opacity:1}
  #hint.act{pointer-events:auto}
  #hintDone{border:0;border-radius:8px;padding:4px 11px;cursor:pointer;
    background:rgba(255,255,255,.18);color:#fff;font:inherit;font-size:11.5px;display:none}
  #hint.act #hintDone{display:inline-block}
  #hintDone:hover{background:rgba(255,255,255,.3)}

  /* Potree вешает свою кнопку выхода из панорамы прямо в область рендера,
     без классов и в стиле 2016 года. Прячем, выход даём своей кнопкой. */
  #render input[type=button]{display:none !important}

  /* ---- заставка ---- */
  #boot{position:fixed;inset:0;z-index:99;display:grid;place-items:center;
    background:#0a0b0d;transition:opacity .6s ease}
  #boot.gone{opacity:0;pointer-events:none}
  #boot .in{text-align:center}
  #boot b{display:block;font-weight:590;font-size:14px;margin-bottom:8px}
  #boot span{font-size:12px;opacity:.5}
  #bar{width:150px;height:2px;margin:14px auto 0;border-radius:2px;
    background:rgba(255,255,255,.14);overflow:hidden}
  #bar i{display:block;height:100%;width:30%;border-radius:2px;background:rgba(255,255,255,.7);
    animation:slide 1.4s ease-in-out infinite}
  @keyframes slide{0%{transform:translateX(-120%)}100%{transform:translateX(420%)}}

  @media (max-width:720px){
    #panel{top:12px;left:12px;right:12px;width:auto}
    #dock{bottom:14px;gap:2px;padding:4px}
    #dock button{width:34px;height:34px}
    #hint{bottom:60px}
  }

/* ---- отметки высоты ---- */
/* Подписи держим обычным DOM поверх канваса и сами проецируем координату
   на экран: у Potree подпись измерения переписывается на каждом кадре,
   и свой текст в ней не удержать. */
#probe{position:fixed;left:0;top:0;z-index:31;padding:5px 10px;border-radius:9px;
  font-size:11.5px;font-variant-numeric:tabular-nums;pointer-events:none;
  opacity:0;transition:opacity .12s ease;white-space:nowrap}
#probe.in{opacity:1}

#marks{position:fixed;inset:0;z-index:28;pointer-events:none}
.mark{position:absolute;left:0;top:0;display:flex;align-items:center;gap:7px;
  padding:4px 7px 4px 8px;border-radius:9px;font-size:11.5px;
  font-variant-numeric:tabular-nums;pointer-events:auto;
  transform-origin:0 0;margin:-13px 0 0 10px;white-space:nowrap}
.mark i{width:6px;height:6px;border-radius:50%;background:#ff9f0a;flex:none;
  box-shadow:0 0 0 3px rgba(255,159,10,.22)}
.mark b{font-weight:400;opacity:.45;cursor:pointer;padding:0 2px}
.mark b:hover{opacity:1}

  /* миникарта: план сверху, хотспоты, где стоим и куда смотрим; зум и сдвиг */
  #minimap{position:fixed;right:18px;bottom:20px;z-index:31;border-radius:14px;
    padding:6px;line-height:0;touch-action:none}
  #minimap canvas{display:block;border-radius:9px;cursor:grab;touch-action:none}
  #minimap .mmbtn{position:absolute;right:10px;top:10px;display:flex;flex-direction:column;gap:4px}
  #minimap .mmbtn button{width:26px;height:26px;border:0;border-radius:7px;background:rgba(0,0,0,.55);
    color:#fff;font-size:15px;line-height:26px;cursor:pointer;padding:0}
  @media (max-width:600px){#minimap{right:10px;bottom:132px}}
