/* Weniversal Voice PWA - 라이트/다크 테마 (이 기기 전용, 맥 앱과 독립).
   테마 선택(system/light/dark)은 localStorage(wvai_theme)에 저장하고, JS가
   실효 테마(light|dark)만 <html data-theme>에 박는다 - CSS는 미디어쿼리 없이
   [data-theme]만으로 팔레트를 스왑한다(system 추종은 JS가 prefers-color-scheme
   를 읽어 실효값으로 환산). data-theme 미설정 시 fallback은 다크(FOUC 방어는
   index.html head 인라인 스크립트가 렌더 전 data-theme를 확정). 파생 틴트/보더
   (--user-weak 등)는 화자·강조색의 반투명 파생이라 팔레트와 함께 테마별로 정의해
   규칙 본문은 변수만 참조한다. 다크는 앱의 드라큘라 팔레트와 톤을 맞춘다. */
:root {
  --bg: #16171f;
  --card: #21222c;
  --line: #2e3040;
  --text: #f8f8f2;
  --dim: #9aa0b4;
  --user: #50fa7b;      /* 앱의 화자 색 기본과 동일 (다크: green/cyan) */
  --assistant: #8be9fd;
  --accent: #bd93f9;
  --danger: #ff5555;
  --user-weak: rgba(80, 250, 123, 0.10);
  --user-line: rgba(80, 250, 123, 0.30);
  --user-border: rgba(80, 250, 123, 0.38);
  --assistant-weak: rgba(139, 233, 253, 0.10);
  --assistant-line: rgba(139, 233, 253, 0.25);
  --accent-weak: rgba(189, 147, 249, 0.08);
  --sat: env(safe-area-inset-top, 0px);
  --sab: env(safe-area-inset-bottom, 0px);
}

/* 라이트: 흰 카드가 연회색 배경 위에 뜨는 iMessage류 배치. 화자·강조색은 흰
   배경에서 읽히도록 다크보다 명도를 낮춘 진한 톤(작은 who 라벨 대비 확보). */
:root[data-theme="light"] {
  --bg: #edeff3;
  --card: #ffffff;
  --line: #d7dae2;
  --text: #1a1c23;
  --dim: #5f647a;
  --user: #0d8a4f;
  --assistant: #0b7599;
  --accent: #7541c8;
  --danger: #d13a3a;
  --user-weak: rgba(13, 138, 79, 0.10);
  --user-line: rgba(13, 138, 79, 0.32);
  --user-border: rgba(13, 138, 79, 0.42);
  --assistant-weak: rgba(11, 117, 153, 0.10);
  --assistant-line: rgba(11, 117, 153, 0.28);
  --accent-weak: rgba(117, 65, 200, 0.10);
}

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }

/* 컨트롤 영역은 텍스트 선택 대상이 아니다 - iOS가 홀드(길게 누르기)를
   텍스트 선택·루페 제스처로 가로채 파란 선택 핸들이 뜨던 실기기 버그.
   입력창만 선택을 되살린다 (채팅 본문 .body는 복사 가능 유지) */
/* 부유 마이크는 footer 밖(body 직속)이라 같은 보호를 따로 걸어야 한다 -
   빠지면 홀드가 iOS 드래그로 넘어가 흰 알약 프리뷰가 뜬다 (실기기 확인) */
#header, #footer, #float-mic {
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
  -webkit-user-drag: none;
}
/* 아이콘이 따로 드래그 대상이 되지 않게 (SVG는 이미지처럼 잡힌다) */
#float-mic svg, #mic-btn svg { pointer-events: none; -webkit-user-drag: none; }
#text-input { -webkit-user-select: text; user-select: text; }
/* 홀드 중 미세한 손 움직임이 스크롤·선택 제스처로 새지 않게 터치를 통째로 소유 */
#mic-btn, #float-mic { touch-action: none; }

html, body {
  margin: 0;
  height: 100%;
  background: var(--bg);
  color: var(--text);
  font-family: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", sans-serif;
  overscroll-behavior: none;
  touch-action: manipulation;
}
/* status-bar-style=black 배치로 프레임이 화면 하단까지 닿아(index.html 주석
   실측) 죽은 띠는 없다. html을 footer 색으로 칠하는 건 과도 스크롤·전환
   순간의 배경 노출 대비 무해한 통일 */
html { background: var(--card); }
body { background: var(--bg); }

/* body를 화면에 직접 고정하되 높이는 JS 실측(--app-h)을 쓴다 - iOS 홈 화면
   (standalone)은 100%·100dvh·fixed inset:0 모두 레이아웃 뷰포트가 실제
   화면보다 작게 잡혀 footer 아래 죽은 여백이 남는다 (실기기에서 세 방식
   전부 재현). fitViewport()가 innerHeight/visualViewport/screen 중 가장
   신뢰되는 값을 픽셀로 박고, 실측치는 diag로 서버 로그에 남긴다 */
body {
  display: flex;
  flex-direction: column;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: var(--app-h, 100%);
}

/* ---------- header (맥 앱 세션 행 배치: + · ≡ · 제목) ---------- */
#header {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: calc(8px + var(--sat)) 12px 8px;
  background: var(--card);
  border-bottom: 1px solid var(--line);
  flex: 0 0 auto;
}
.dot { width: 9px; height: 9px; border-radius: 50%; flex: 0 0 auto; }
.dot.on { background: var(--user); box-shadow: 0 0 6px var(--user); }
.dot.off { background: var(--danger); }
#session-title {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 14px;
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#new-session, #sessions-btn, #settings-btn {
  flex: 0 0 auto;
  width: 34px; height: 34px;
  border-radius: 10px;
  border: 1px solid var(--line);
  background: transparent;
  color: var(--dim);
  font-size: 20px;
  line-height: 1;
}
#new-session:active, #sessions-btn:active, #settings-btn:active { background: var(--line); }
#sessions-btn { font-size: 17px; }
#settings-btn { display: flex; align-items: center; justify-content: center; }
#settings-btn svg { fill: currentColor; }

/* ---------- 하단 시트 (세션 목록·설정·새 세션 공용) ---------- */
#sessions-sheet, #settings-sheet, #newsess-sheet { position: fixed; inset: 0; z-index: 9; }
/* hidden 속성이 다른 display 선언에 덮이지 않게 항상 명시한다 (인증 카드 버그의 교훈) */
#sessions-sheet[hidden], #settings-sheet[hidden], #newsess-sheet[hidden] { display: none !important; }
#sessions-backdrop, #settings-backdrop, #newsess-backdrop {
  position: absolute; inset: 0; background: rgba(0, 0, 0, 0.55);
}
#sessions-panel, #settings-panel, #newsess-panel {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  max-height: 70%;
  background: var(--card);
  border-top: 1px solid var(--line);
  border-radius: 16px 16px 0 0;
  display: flex;
  flex-direction: column;
  padding-bottom: calc(8px + var(--sab));
}
#sessions-title, .sheet-title {
  padding: 14px 16px 8px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--dim);
}
.mode-item { padding: 12px 16px; border-left: 3px solid transparent; }
.mode-item:active { background: var(--line); }
.mode-item.current { border-left-color: var(--accent); background: var(--accent-weak); }
.mode-name { font-size: 15px; font-weight: 600; }
.mode-desc { font-size: 12px; color: var(--dim); margin-top: 2px; line-height: 1.5; }
/* 인터럽트 허용 토글 (폰 전용). display 선언 요소는 [hidden] 규칙을 반드시
   명시한다 - 작성자 display:flex가 UA의 hidden을 덮는다 (인증 카드 버그의 교훈). */
.toggle-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 16px; }
.toggle-row[hidden] { display: none !important; }
.switch {
  flex: 0 0 auto; width: 46px; height: 28px; padding: 0; border: none;
  border-radius: 14px; background: var(--line); position: relative;
  cursor: pointer; transition: background .15s;
}
.switch::after {
  content: ''; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px;
  border-radius: 50%; background: #fff; transition: transform .15s;
}
.switch[aria-checked="true"] { background: var(--accent); }
.switch[aria-checked="true"]::after { transform: translateX(18px); }
#volume-row { display: flex; align-items: center; gap: 12px; padding: 4px 16px 12px; }
/* 작성자 display:flex가 UA의 hidden을 덮는다 - 채팅만 모드에서 제목만 숨고
   슬라이더가 남던 버그 (인증 카드와 같은 계열) */
#volume-row[hidden] { display: none !important; }
#volume-range { flex: 1; accent-color: var(--accent); }
#volume-label { width: 44px; text-align: right; font-size: 12px; color: var(--dim); }
/* 설정 시트가 길어져 패널 자체를 스크롤 (max-height 70%는 시트 공통 규칙) */
#settings-panel { overflow-y: auto; -webkit-overflow-scrolling: touch; }
.sel-row { display: flex; align-items: center; gap: 12px; padding: 5px 16px; }
/* #voice-row 등 조건부 노출 행 - display:flex가 UA hidden을 덮지 않게 명시 */
.sel-row[hidden] { display: none !important; }
.sel-row label { flex: 0 0 112px; font-size: 13px; }
.sel-row select {
  flex: 1;
  min-width: 0;
  padding: 8px 28px 8px 10px;
  font-size: 14px;
  background-color: var(--bg);
  color: var(--text);
  border: 1px solid var(--line);
  border-radius: 10px;
  -webkit-appearance: none;
  appearance: none;
  /* 커스텀 화살표 (appearance:none이 기본 화살표를 지움) */
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%239aa0b4' stroke-width='1.5' fill='none'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
}
#sessions-list, #newsess-list { overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 0 8px; }
.ns-accent { color: var(--accent); font-weight: 600; }
.sess-item { padding: 10px 12px; border-radius: 10px; border: 1px solid transparent; }
.sess-item:active { background: var(--line); }
.sess-item.current { border-color: var(--user-border); }
.sess-title {
  font-size: 14px;
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sess-meta {
  font-size: 11px;
  color: var(--dim);
  margin-top: 2px;
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;  /* 좁은 화면에서 태그가 다음 줄로 흐르게 */
}
/* 세션 메타 태그 (프로젝트 폴더명·현재 세션) - 맥 세션 브라우저의 알약 대응 */
.sess-tag {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 999px;
  font-size: 10px;
  line-height: 1.5;
  color: var(--assistant);
  background: var(--assistant-weak);
  border: 1px solid var(--assistant-line);
  max-width: 40vw;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.sess-tag.cur {
  color: var(--user);
  background: var(--user-weak);
  border-color: var(--user-line);
}

/* ---------- transcript ---------- */
#transcript {
  flex: 1 1 auto;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 14px 12px 8px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.msg { max-width: 86%; }
.msg .who { font-size: 11px; font-weight: 700; margin: 0 2px 3px; }
.msg .body {
  padding: 9px 12px;
  border-radius: 14px;
  background: var(--card);
  border: 1px solid var(--line);
  font-size: 15px;
  line-height: 1.45;
  white-space: pre-wrap;
  word-break: break-word;
}
.msg .body a { color: var(--assistant); }
.msg.user { align-self: flex-end; }
.msg.user .who { color: var(--user); text-align: right; }
.msg.user .body { border-color: var(--user-border); border-top-right-radius: 4px; }
/* 말하는 중 조립되는 부분 전사 버블 (확정 시 서버 미러 버블로 교체) */
.msg.user.live .body { opacity: 0.6; border-style: dashed; }
.msg.assistant { align-self: flex-start; }
.msg.assistant .who { color: var(--assistant); }
.msg.assistant .body { border-top-left-radius: 4px; }
.msg.assistant .elapsed { font-size: 11px; color: var(--dim); margin: 3px 2px 0; }
.sysline {
  align-self: center;
  font-size: 12px;
  color: var(--dim);
  padding: 2px 10px;
  text-align: center;
}
.sysline.error { color: var(--danger); }

/* ---------- footer / composer ---------- */
#footer {
  flex: 0 0 auto;
  /* 하단 여백: 홈 인디케이터 안전영역(--sab, 실측 34px)을 통째로 비우면
     44px가 남아 화면을 크게 먹는다. 이 영역의 실제 장애물은 화면 중앙 하단의
     막대뿐이고 그 위에 놓이는 컨텍스트 게이지는 우측 정렬 표시 전용이라
     수평으로 겹치지 않으므로 일부만 남긴다. 탭 대상인 입력창·마이크는
     여전히 막대보다 충분히 위에 있다. */
  padding: 4px 10px calc(6px + var(--sab) * 0.4);
  background: var(--card);
  border-top: 1px solid var(--line);
  position: relative;  /* '↓' 버튼을 트랜스크립트 하단 위에 띄우는 기준 */
}

/* 맨 아래로: 하단에서 벗어나 있을 때만 트랜스크립트 우측 하단에 뜬다.
   위로 올려 읽는 동안 도착한 새 버블은 .has-new 점으로 알린다. */
#to-bottom {
  position: absolute;
  bottom: calc(100% + 8px);
  right: 12px;
  width: 36px;
  height: 36px;
  padding: 0;
  border-radius: 50%;
  border: 1px solid var(--line);
  background: var(--card);
  color: var(--dim);
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 5;
}
/* 작성자 display가 UA의 hidden 규칙을 덮으므로 반드시 명시한다 */
#to-bottom[hidden] { display: none !important; }
#to-bottom svg { fill: currentColor; }
#to-bottom.has-new { color: var(--user); border-color: var(--user); }
#to-bottom.has-new::after {
  content: '';
  position: absolute;
  top: 1px;
  right: 1px;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--user);
  border: 2px solid var(--card);
}
/* 상태 라벨: 채팅 공간 바로 아래, 입력창 바로 위 */
#status {
  font-size: 12px;
  color: var(--dim);
  text-align: center;
  padding: 2px 0 6px;
}
/* 입력창 아래 홈 인디케이터 쪽 여백 한 줄: 왼쪽 LLM 구성, 오른쪽 게이지.
   게이지가 숨어도(관측 전) 왼쪽 구성 표시는 자리를 지킨다. */
#meta-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  /* 좌우를 footer 여백보다 더 들여 입력창 라인 안쪽으로 넣는다 - 화면
     가장자리에 붙으면 캡션이 프레임에 매달린 것처럼 보인다 */
  padding: 5px 12px 0;
}

/* LLM 구성: 맥 세션 행 태그와 같은 "제공자 과금 · 모델 · 사고 수준" 표기를
   알약 배경 없이 캡션으로만 둔다 (입력 영역이라 장식을 더하지 않는다). */
#llm-info {
  font-size: 11px;
  color: var(--dim);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* 컨텍스트 게이지: 맥 패널 캡션과 같은 임계로 색이 바뀐다
   (75%+ 주황, 90%+ 빨강). */
#ctx-gauge {
  font-size: 11px;
  color: var(--dim);
  text-align: right;
  flex: 0 0 auto;
  font-variant-numeric: tabular-nums;
}
#ctx-gauge[hidden] { display: none !important; }
#ctx-gauge.warn { color: #ffb86c; }
#ctx-gauge.crit { color: #ff5555; }

#composer { display: flex; align-items: flex-end; gap: 8px; }

/* 컨텍스트 압축: 70%를 넘으면 입력창을 왼쪽으로 밀며 미끄러져 나온다.
   [hidden]/display 토글은 전환이 안 걸리므로 폭·투명도를 애니메이션하고,
   접힌 동안에는 composer의 gap(8px)까지 음수 마진으로 상쇄해 흔적을
   남기지 않는다. */
#compact-btn {
  flex: 0 0 auto;
  height: 46px;
  max-width: 0;
  padding: 0;
  margin-left: -8px;
  opacity: 0;
  overflow: hidden;
  white-space: nowrap;
  border: 1px solid var(--accent);
  border-radius: 23px;
  background: var(--accent-weak);
  color: var(--accent);
  font-size: 13px;
  font-weight: 600;
  transition: max-width .3s ease, padding .3s ease, margin .3s ease, opacity .25s ease;
}
#compact-btn.show {
  max-width: 90px;
  padding: 0 16px;
  margin-left: 0;
  opacity: 1;
}
#compact-btn:active { background: var(--accent); color: var(--bg); }
#compact-btn:disabled { opacity: 0.5; }
#composer button {
  border: none;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
}
/* display:flex가 UA의 [hidden] 규칙을 덮는다 - 중단 버튼이 유휴 상태에도
   상시 표시되던 실사용 버그 (인증 카드와 같은 계열) */
#composer button[hidden] { display: none !important; }
#composer svg { fill: currentColor; }

#mic-btn {
  position: relative;
  width: 46px; height: 46px;
  background: var(--bg);
  color: var(--dim);
  border: 1px solid var(--line) !important;
  transition: border-color 0.25s, background 0.25s, color 0.25s, box-shadow 0.25s;
}
/* 상태 색상: 대기 중립(홀드·항시는 상시 무장이라 그린 상수 표시는 무정보 -
   .armed는 버튼이 스위치인 토글 모드에서만 붙는다) / 캡처 그린 채움
   펄스(사용자 화자색 - '내가 말하는 중', 사용자 결정) / 생각 주황 브리딩 /
   발화 시안(kia-soul-voice 팔레트). 겹침 우선순위는 캡처 > 생각·발화 >
   무장이라 그 순서로 규칙을 두고(동일 특이성은 뒤가 이긴다), 링(#mic-ring)도
   상태별로 함께 덮는다 - 색 규칙만 덮으면 주황 버튼에 그린 링이 겹쳐
   보인다(실사용). */
#mic-btn.armed, #float-mic.armed { color: var(--user); border-color: var(--user-border) !important; }
/* 발화는 노랑 + 링 펄스. 생각(주황 + 본체 브리딩)과 색이 가까운 계열이라
   애니메이션 종류로도 갈리게 한다 - 펄스는 캡처와 같은 링 확산이고 그쪽은
   그린이라 색으로 구분된다. */
#mic-btn.speaking, #float-mic.speaking {
  color: #ffc400;
  border-color: rgba(255, 196, 0, 0.95) !important;
  background: rgba(255, 196, 0, 0.22);
}
#mic-btn.thinking, #float-mic.thinking {
  color: #ffa726;
  border-color: rgba(255, 167, 38, 0.7) !important;
  animation: think-breathe 1.2s linear infinite;
}
#mic-btn.capturing, #float-mic.capturing {
  color: var(--bg);
  background: var(--user);
  border-color: var(--user) !important;
  animation: none;
}
.mic-ring {
  position: absolute;
  inset: -3px;
  border-radius: 50%;
  border: 2px solid transparent;
  pointer-events: none;
}

/* 부유 마이크: 상태 색·링 규칙은 입력창 마이크와 공유하고(위 선택자들)
   여기서는 배치와 크기만 정한다. 위치는 JS가 left/top 인라인으로 박는다
   (localStorage 영속, 화면 밖으로 못 나가게 clamp). */
#float-mic {
  position: fixed;
  z-index: 8;  /* 시트(9)보다 아래 - 시트가 열리면 덮인다 */
  /* 대화 위에 늘 떠 있으므로 상태와 무관하게 항상 살짝 비친다
     (사용자 결정 - 상태는 색·링·애니메이션이 알린다). */
  opacity: 0.8;
  width: 56px; height: 56px;
  padding: 0;
  border-radius: 50%;
  background: var(--bg);
  color: var(--dim);
  border: 1px solid var(--line) !important;
  box-shadow: 0 3px 14px rgba(0, 0, 0, 0.35);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: border-color 0.25s, background 0.25s, color 0.25s, box-shadow 0.25s;
}
#float-mic[hidden] { display: none !important; }
#float-mic svg { fill: currentColor; }
/* 위치 조정 모드: 잡아 옮기는 중임을 보이게 하고 녹음이 안 된다는 신호를 준다 */
#float-mic.moving {
  border-color: var(--accent) !important;
  box-shadow: 0 0 0 4px var(--accent-weak), 0 3px 14px rgba(0, 0, 0, 0.35);
}
#mic-btn.armed .mic-ring, #float-mic.armed .mic-ring { border-color: var(--user-border); }
#mic-btn.speaking .mic-ring, #float-mic.speaking .mic-ring {
  border-color: #ffc400;
  animation: pulse 1.2s ease-out infinite;
}
#mic-btn.thinking .mic-ring, #float-mic.thinking .mic-ring { border-color: transparent; }
#mic-btn.capturing .mic-ring, #float-mic.capturing .mic-ring {
  border-color: var(--user);
  animation: pulse 1.2s ease-out infinite;
}
@keyframes pulse {
  0% { transform: scale(1); opacity: 1; }
  100% { transform: scale(1.35); opacity: 0; }
}
@keyframes think-breathe {
  0%, 100% { box-shadow: 0 0 0 3px rgba(255, 167, 38, 0.35); }
  50% { box-shadow: 0 0 0 7px rgba(255, 167, 38, 0.08); }
}

#text-input {
  flex: 1 1 auto;
  min-height: 42px;
  max-height: 120px;
  resize: none;
  border: 1px solid var(--line);
  border-radius: 21px;
  background: var(--bg);
  color: var(--text);
  font-size: 15px;
  line-height: 1.4;
  padding: 10px 14px;
  outline: none;
}
#text-input:focus { border-color: var(--accent); }


/* ---------- auth ---------- */
#auth-screen {
  position: fixed;
  inset: 0;
  background: var(--bg);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  z-index: 10;
}
/* hidden 속성이 display:flex에 덮이지 않게 명시한다 - UA 스타일시트의
   [hidden]{display:none}은 작성자 display 선언에 지므로(iOS Safari 실사용),
   이 규칙이 없으면 카드가 영구히 화면을 덮는다 */
#auth-screen[hidden] { display: none !important; }
.auth-card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 16px;
  padding: 24px 20px;
  text-align: center;
  max-width: 320px;
}
.auth-title { font-size: 16px; font-weight: 700; margin-bottom: 10px; }
.auth-body { font-size: 13px; color: var(--dim); line-height: 1.6; }
#token-input {
  width: 100%;
  margin-top: 14px;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--bg);
  color: var(--text);
  font-size: 13px;
}
#token-submit {
  width: 100%;
  margin-top: 8px;
  padding: 10px;
  border: none;
  border-radius: 10px;
  background: var(--accent);
  color: var(--bg);
  font-size: 14px;
  font-weight: 600;
}

/* 하단 띠 정밀진단용 safe-area 계측 변수 (viewport diag가 읽는다) */
:root {
  --sa-top: env(safe-area-inset-top, 0px);
  --sa-bottom: env(safe-area-inset-bottom, 0px);
}
