/* =============================================
   Workspace v4 — Layout Shell + Responsive
   Sprint sprint/workspace-redesign-v4 (Stage W1)

   Provides:
     - .workspace-v4 root container (full-viewport flex column)
     - .ws-gnb / .ws-toolbar (top bands)
     - .ws-app-body (3-column grid → drawer on mobile)
     - .ws-sidebar / .ws-main / .ws-ctx-panel (slot wrappers)
     - .ws-drawer-overlay + drawer transform mechanism
     - .ws-mobile-only / .ws-desktop-only (visibility helpers)

   Breakpoints:
     ≥1024px  desktop  — 3-column grid visible
     768~1024 tablet   — sidebar drawer, ctx-panel inline (or toggleable)
     <768px   mobile   — both panels drawer, toolbar overflow

   Drawer state machine (W3 JS controls):
     [data-ws-drawer="none"]       — closed
     [data-ws-drawer="sidebar"]    — sidebar open
     [data-ws-drawer="ctx"]        — ctx-panel open
   ============================================= */

/* ---------------------------------------------
   Root container — full viewport flex column
   --------------------------------------------- */
.workspace-v4 {
  position: relative;
  height: 100vh;
  height: 100dvh;  /* iOS Safari address bar 고려 */
  display: flex;
  flex-direction: column;
  font-family: var(--ws-font);
  font-size: 14px;
  line-height: 1.5;
  color: var(--ws-c-900);
  background: var(--ws-c-50);
  overflow: hidden;
  -webkit-font-smoothing: antialiased;
}
.workspace-v4 *,
.workspace-v4 *::before,
.workspace-v4 *::after {
  box-sizing: border-box;
}

/* ---------------------------------------------
   GNB (top header band)
   --------------------------------------------- */
.ws-gnb {
  height: var(--ws-header-h);
  flex-shrink: 0;
  background: var(--ws-c-0);
  border-bottom: 1px solid var(--ws-c-200);
  display: flex;
  align-items: center;
  padding: 0 1rem;
  gap: 1rem;
  z-index: var(--ws-z-toolbar);
}

/* ---------------------------------------------
   Toolbar (action band) — overflow-aware
   --------------------------------------------- */
.ws-toolbar {
  height: var(--ws-toolbar-h);
  flex-shrink: 0;
  background: var(--ws-c-0);
  border-bottom: 1px solid var(--ws-c-200);
  display: flex;
  align-items: center;
  padding: 0 0.75rem;
  gap: 0.25rem;
  /* 가로 스크롤 fallback — 모바일에서 button 끝까지 닿게 */
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: none;  /* Firefox */
}
.ws-toolbar::-webkit-scrollbar { display: none; }  /* Chrome/Safari */

/* ---------------------------------------------
   App body — 3-column grid (desktop)
   --------------------------------------------- */
.ws-app-body {
  flex: 1;
  display: grid;
  grid-template-columns: var(--ws-sidebar-w) 1fr var(--ws-ctx-w);
  min-height: 0;  /* grid + flex parent에서 child overflow 방지 */
  position: relative;
}

/* W2 transitional — context panel이 아직 grid 외부에 있는 동안 2-col 모드.
   W4에서 ctx-panel을 grid 안으로 이동 시 이 modifier 제거. */
.ws-app-body.no-ctx {
  grid-template-columns: var(--ws-sidebar-w) 1fr;
}

/* ---------------------------------------------
   Slot wrappers
   --------------------------------------------- */
.ws-sidebar {
  border-right: 1px solid var(--ws-c-200);
  background: var(--ws-c-0);
  overflow-y: auto;
  overflow-x: hidden;
  display: flex;
  flex-direction: column;
}
.ws-main {
  background: var(--ws-c-50);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-width: 0;  /* flex item이 grid track 폭 넘지 않도록 */
}
.ws-ctx-panel {
  border-left: 1px solid var(--ws-c-200);
  background: var(--ws-c-0);
  overflow-y: auto;
  display: flex;
  flex-direction: column;
}

/* Custom scrollbars — sidebar/ctx만 hairline */
.ws-sidebar::-webkit-scrollbar,
.ws-ctx-panel::-webkit-scrollbar { width: 3px; }
.ws-sidebar::-webkit-scrollbar-thumb,
.ws-ctx-panel::-webkit-scrollbar-thumb { background: var(--ws-c-200); border-radius: 2px; }
.ws-sidebar::-webkit-scrollbar-thumb:hover,
.ws-ctx-panel::-webkit-scrollbar-thumb:hover { background: var(--ws-c-300); }

/* ---------------------------------------------
   Hamburger / drawer trigger buttons
   기본은 hidden (desktop), tablet/mobile에서 visible
   --------------------------------------------- */
.ws-drawer-trigger {
  display: none;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: var(--ws-r-sm);
  border: 1px solid transparent;
  background: transparent;
  color: var(--ws-c-700);
  cursor: pointer;
  transition: background var(--ws-tx-fast);
}
.ws-drawer-trigger:hover { background: var(--ws-c-100); }
.ws-drawer-trigger i { font-size: 1.1rem; }

/* ---------------------------------------------
   Drawer overlay — semi-transparent backdrop
   --------------------------------------------- */
.ws-drawer-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: var(--ws-z-overlay);
  opacity: 0;
  transition: opacity var(--ws-tx-base);
}

/* ---------------------------------------------
   Visibility helpers
   --------------------------------------------- */
.ws-mobile-only { display: none; }
.ws-tablet-only { display: none; }
.ws-desktop-only { display: initial; }

/* =============================================
   TABLET — ≤1024px
   sidebar → drawer, ctx-panel은 일단 inline 유지
   (W4에서 ctx-panel도 bottom-sheet 처리)
   ============================================= */
@media (max-width: 1024px) {
  .ws-app-body {
    grid-template-columns: 1fr var(--ws-ctx-w);
  }
  .ws-app-body.no-ctx {
    grid-template-columns: 1fr;  /* 2-col mode → tablet 1-col */
  }

  .ws-sidebar {
    position: fixed;
    top: 0;
    left: 0;
    height: 100dvh;
    width: var(--ws-sidebar-w);
    transform: translateX(-100%);
    transition: transform var(--ws-tx-slow);
    z-index: var(--ws-z-drawer);
    box-shadow: var(--ws-shadow-drawer);
    border-right: 1px solid var(--ws-c-200);
  }

  .workspace-v4[data-ws-drawer="sidebar"] .ws-sidebar {
    transform: translateX(0);
  }
  .workspace-v4[data-ws-drawer="sidebar"] .ws-drawer-overlay {
    display: block;
    opacity: 1;
  }

  .ws-drawer-trigger.ws-drawer-trigger-sidebar { display: inline-flex; }
  .ws-tablet-only { display: initial; }
}

/* =============================================
   MOBILE — ≤768px
   - sidebar drawer (already from tablet)
   - ctx-panel → drawer (slide from right)
   - touch target 44px 강제
   - toolbar gap 축소 + 버튼 padding 키움
   ============================================= */
@media (max-width: 768px) {
  .ws-app-body {
    grid-template-columns: 1fr;
  }

  .ws-ctx-panel {
    position: fixed;
    top: 0;
    right: 0;
    height: 100dvh;
    width: min(var(--ws-ctx-w), 90vw);
    transform: translateX(100%);
    transition: transform var(--ws-tx-slow);
    z-index: var(--ws-z-drawer);
    box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
    border-left: 1px solid var(--ws-c-200);
  }

  .workspace-v4[data-ws-drawer="ctx"] .ws-ctx-panel {
    transform: translateX(0);
  }
  .workspace-v4[data-ws-drawer="ctx"] .ws-drawer-overlay {
    display: block;
    opacity: 1;
  }

  .ws-drawer-trigger.ws-drawer-trigger-ctx { display: inline-flex; }
  .ws-mobile-only { display: initial; }
  .ws-desktop-only { display: none; }

  /* Touch-friendly: GNB / toolbar height + padding */
  .workspace-v4 {
    --ws-header-h: 56px;
    --ws-toolbar-h: 52px;
  }
  .ws-toolbar {
    gap: 0.375rem;
    padding: 0 0.5rem;
  }
  .ws-drawer-trigger {
    width: var(--ws-touch-min);
    height: var(--ws-touch-min);
  }
}

/* =============================================
   FULL-VIEW — 전체 보기 상태에서 drawer trigger 숨김
   2026-05-26: 전체 보기 시 GNB hide + 엑셀 전체 렌더링. 좌측 햄버거 (sidebar drawer trigger)
   와 ctx drawer trigger 모두 *어떤 break point 든* 숨김. !important — 모바일/태블릿
   media query 안의 `display: inline-flex` override.
   ============================================= */
body.full-view .ws-drawer-trigger,
body.full-view .ws-drawer-overlay {
  display: none !important;
}

/* =============================================
   PRINT — drawer/overlay 숨김
   ============================================= */
@media print {
  .ws-drawer-trigger,
  .ws-drawer-overlay { display: none !important; }
  .ws-app-body {
    display: block;
    overflow: visible;
  }
}
