{"version":3,"sources":["../src/index.ts","../src/types/theme-augmentation.ts","../src/components/AI-feedback/AIFeedback.tsx","../src/components/tooltip/Tooltip.tsx","../src/icons/ArrowLeft.tsx","../src/icons/ArrowRight.tsx","../src/icons/Close.tsx","../src/icons/Micro.tsx","../src/icons/Reset.tsx","../src/icons/SelectedCheckbox.tsx","../src/icons/SelectedRadio.tsx","../src/icons/UnselectedCheckbox.tsx","../src/icons/UnselectedRadio.tsx","../src/icons/Send.tsx","../src/icons/QuestionBubble.tsx","../src/icons/SearchIcon.tsx","../src/icons/MoreColumn.tsx","../src/icons/NumbersIcon.tsx","../src/icons/RecordPause.tsx","../src/icons/Recording.tsx","../src/icons/ReadyRecord.tsx","../src/icons/RecordPlay.tsx","../src/icons/SendArrow.tsx","../src/hooks/useAIDTMediaQuery.ts","../src/tokens/colors/index.ts","../src/tokens/colors/mint.ts","../src/tokens/colors/bluepurple.ts","../src/tokens/colors/gray.ts","../src/tokens/colors/green.ts","../src/tokens/colors/orange.ts","../src/tokens/colors/pink.ts","../src/tokens/colors/purple.ts","../src/tokens/colors/yellow.ts","../src/tokens/colors/bluesky.ts","../src/tokens/colors/common.ts","../src/tokens/breakpoints/breakpoints.ts","../src/components/badge/Badge.tsx","../src/components/button/Button.tsx","../src/theme/transitions.ts","../src/components/chat/Chat.tsx","../src/components/icon-button/IconButton.tsx","../src/components/tokenColorTemporary.ts","../src/components/recorder-step/RecorderContext.tsx","../src/components/chat/AssistantAvatar.tsx","../src/components/chat/UserAvatar.tsx","../src/components/chat/TypingIndicator.tsx","../src/components/recorder-step/RecorderStep.tsx","../src/components/sound-visualizer/SoundVisualizer.tsx","../src/components/dialog/Dialog.tsx","../src/components/dotted-pagination/DottedPagination.tsx","../src/components/header-title/HeaderTitle.tsx","../src/components/layout/Layout.tsx","../src/icons/ScrollMoreIcon.tsx","../src/components/layout/layout-pagination/LayoutPagination.tsx","../src/components/pagination-button/PaginationButton.tsx","../src/components/layout/Footer/LayoutFooterPaging.tsx","../src/components/layout/Footer/LayoutFooterSubmit.tsx","../src/components/layout/Header/LayoutHeaderSubTitle.tsx","../src/components/layout/Header/LayoutHeaderTitle.tsx","../src/components/layout/index.ts","../src/components/header-title/InnerHeader.tsx","../src/components/selection/Selection.tsx","../src/components/answer-feedback/AnswerFeedback.tsx","../src/components/answer-feedback/Correct.tsx","../src/components/answer-feedback/Incorrect.tsx","../src/components/table/Table.tsx","../src/components/table/RowInfoTable.tsx","../src/components/table/ColInfoTable.tsx","../src/components/textarea/Textarea.tsx","../src/components/AIDTTypography/AIDTTypography.tsx","../src/typography/typographyFontFamily.ts","../src/typography/TypographyType.ts","../src/typography/typography.ts","../src/components/AdaptiveImage/AdaptiveImage.tsx","../src/components/subtitle-button/SubtitleButton.tsx","../src/components/base-input/BaseInput.tsx","../src/components/Modal/Modal.tsx","../src/components/recorder-chat/RecorderChat.tsx","../src/components/recorder-chat/AssistantAvatar.tsx","../src/components/recorder-chat/UserAvatar.tsx","../src/components/recorder-chat/TypingIndicator.tsx","../src/components/video/VideoPlayer.tsx","../src/components/video/VideoV2.tsx","../src/components/video/VideoV3.tsx","../src/components/recorder/Recorder.tsx","../src/components/recorder/recorderStore.tsx","../src/components/audio/Audio.tsx","../src/components/audio/Pause.tsx","../src/components/audio/Play.tsx","../src/components/html-viewer/HtmlViewer.tsx","../src/components/html-viewer/HtmlViewerContext.tsx","../src/components/html-viewer/HtmlViewerToolbar.tsx","../src/components/html-viewer/HtmlViewerContent.tsx","../src/components/html-viewer/hooks/useHighlightRects.ts","../src/components/html-viewer/hooks/useAnchorResolver.ts","../src/components/html-viewer/hooks/useIntersectionVisibility.ts","../src/components/html-viewer/HtmlViewerHighlightLayer.tsx","../src/components/html-viewer/HtmlViewerMemoMenu.tsx","../src/components/html-viewer/hooks/useGestureStateMachine.ts","../src/theme/createAIDTTheme.ts","../src/breakpoints/breakpoints.ts","../src/theme/_base.ts","../src/palettes/eliceDefault.ts","../src/palettes/type1.ts","../src/palettes/type2.ts","../src/theme/AIDTTheme.ts","../src/theme/createEliceThemeOverride.ts"],"sourcesContent":["import './types/theme-augmentation';\n\nexport * from './components';\nexport * from './theme';\nexport * from './tokens';\nexport * from './icons';\nexport * from './hooks';\nexport type { BaseTypographyVariant, ContentTypographyVariant } from './typography';\n\n// Override createEliceTheme from @elice/mui-system\nexport { createEliceTheme } from './theme/createEliceThemeOverride';","import '@mui/material/styles';\n\ndeclare module '@mui/material/styles' {\n  interface TypographyVariants {\n    subtitle3: React.CSSProperties;\n    body3: React.CSSProperties;\n    title1: React.CSSProperties;\n    title2: React.CSSProperties;\n    clampH1: React.CSSProperties;\n    pagination: React.CSSProperties;\n    buttoninput: React.CSSProperties;\n    textarea: React.CSSProperties;\n  }\n\n  interface TypographyVariantsOptions {\n    subtitle3?: React.CSSProperties;\n    body3?: React.CSSProperties;\n    title1?: React.CSSProperties;\n    title2?: React.CSSProperties;\n    clampH1?: React.CSSProperties;\n    pagination?: React.CSSProperties;\n    buttoninput?: React.CSSProperties;\n    textarea?: React.CSSProperties;\n  }\n\n  interface CommonColors {\n    white: string;\n    black: string;\n    text: {\n      primary: string;\n      secondary: string;\n      teritary: string;\n      inverse: string;\n    };\n    point: {\n      point1: string;\n      point2: string;\n      point3: string;\n      point4: string;\n    };\n    red: {\n      50: string;\n      100: string;\n      200: string;\n      600: string;\n      900: string;\n    };\n    green: {\n      50: string;\n      100: string;\n      200: string;\n      600: string;\n      900: string;\n      opacity: {\n        15: string;\n      };\n    };\n    yellow: {\n      200: string;\n      900: string;\n      opacity: {\n        '200-30': string;\n        '900-30': string;\n        '900-60': string;\n      };\n    };\n  }\n}\n\ndeclare module '@mui/material/Typography' {\n  interface TypographyPropsVariantOverrides {\n    subtitle3: true;\n    body3: true;\n    title1: true;\n    title2: true;\n    clampH1: true;\n    pagination: true;\n    buttoninput: true;\n    textarea: true;\n  }\n}\n","import React from 'react';\nimport { Stack } from '@mui/material';\n\nimport { EliceTooltip } from '../tooltip';\nimport type { EliceTooltipProps } from '../tooltip';\n\nimport AIAvatar from '../../assets/AIAvatar.png';\n\nexport type EliceAIFeedbackProps = Omit<EliceTooltipProps, 'children'> & {\n  CustomAvatar?: React.ReactNode;\n};\n\nconst EliceAIFeedback = ({\n  title,\n  placement = 'left',\n  CustomAvatar,\n  ...rest\n}: EliceAIFeedbackProps) => {\n  return (\n    <EliceTooltip\n      title={title}\n      placement={placement}\n      {...rest}\n      isControl\n      triggerAction=\"click\"\n    >\n      <Stack\n        position=\"relative\"\n        width=\"fit-content\"\n        height=\"fit-content\"\n        maxWidth=\"100%\"\n        maxHeight=\"100%\"\n      >\n        {CustomAvatar ?? <img src={AIAvatar} alt=\"AI Avatar\" />}\n      </Stack>\n    </EliceTooltip>\n  );\n};\n\nexport default EliceAIFeedback;\n","import React, { useState } from 'react';\nimport styled from '@emotion/styled';\nimport { Stack, Tooltip, Typography, useTheme, ClickAwayListener } from '@mui/material';\n\nimport { Close } from '../../icons';\nimport { main300Color, main400Color } from '../tokenColorTemporary';\n\nimport type { Theme, TooltipProps } from '@mui/material';\nimport type { ReactElement, ReactNode } from 'react';\nimport useAIDTMediaQuery from '../../hooks/useAIDTMediaQuery';\n\nexport interface EliceTooltipProps extends TooltipProps {\n  title: string | ReactNode;\n  isControl?: boolean;\n  children: ReactElement<any, any>;\n  initOpen?: boolean;\n  triggerAction?: 'default' | 'click';\n  backgroundColor?: string;\n  closeColor?: string;\n  fontColor?: string;\n  closeOnScroll?: boolean;\n  slotStyles?: React.CSSProperties;\n  allowMultiple?: boolean;\n  maxHeight?: string;\n}\n\nconst StyledScrollBar = styled(Typography)`\n  ::-webkit-scrollbar {\n    width: 0.5rem;\n  }\n\n  /* Track */\n  ::-webkit-scrollbar-track {\n    display: none;\n  }\n\n  /* Handle */\n  ::-webkit-scrollbar-thumb {\n    background: ${({ theme }: { theme: Theme }) => theme.palette.primary.main};\n    border-radius: 0.5rem;\n  }\n\n  /* Handle on hover */\n  ::-webkit-scrollbar-thumb:hover {\n    background: ${({ theme }: { theme: Theme }) => theme.palette.primary.main};\n  }\n`;\n\nconst EliceTooltip = ({\n  title,\n  initOpen = false,\n  isControl,\n  placement = 'left',\n  triggerAction = 'default',\n  children,\n  backgroundColor,\n  closeColor,\n  fontColor,\n  closeOnScroll = false,\n  slotStyles,\n  allowMultiple = false,\n  maxHeight = '16rem',\n  ...rest\n}: EliceTooltipProps) => {\n  const theme = useTheme();\n  const { isTablet, isHeightSmall } = useAIDTMediaQuery();\n  const triggerActionTry =\n    triggerAction === 'default' && (isTablet || isHeightSmall) ? 'click' : triggerAction;\n  const slotProps = {\n    tooltip: {\n      style: {\n        backgroundColor: backgroundColor || theme.palette.primary.main,\n        color: fontColor || '#fff',\n        borderRadius: '1rem',\n        padding: '0.75rem',\n        maxWidth: '15.7rem',\n        whiteSpace: 'pre-wrap',\n        ...slotStyles,\n      },\n    },\n    arrow: {\n      style: {\n        color: backgroundColor || theme.palette.primary.main,\n        fontSize: '0.75rem',\n      },\n    },\n  };\n\n  const [open, setOpen] = useState(false);\n  const isFirstRender = React.useRef(true);\n  React.useEffect(() => {\n    if (isFirstRender.current) {\n      isFirstRender.current = false;\n      setOpen(initOpen);\n      return;\n    }\n  }, [initOpen]);\n\n  React.useEffect(() => {\n    const handleScroll = () => {\n      setOpen(true);\n    };\n\n    if (open && closeOnScroll) {\n      window.addEventListener('scroll', handleScroll, true);\n    }\n\n    return () => {\n      window.removeEventListener('scroll', handleScroll, true);\n    };\n  }, [open, closeOnScroll]);\n\n  // allowMultiple이 true일 때는 MUI Tooltip의 기본 동작(다른 툴팁 열릴 때 자동 닫힘)을 비활성화\n  // MUI Tooltip은 기본적으로 다른 툴팁이 열릴 때 자동으로 닫히는데, 이를 방지하기 위해\n  // onClose 핸들러에서 allowMultiple이 true일 때는 닫히지 않도록 처리\n  const handleClose = React.useCallback(\n    (event: Event | React.SyntheticEvent) => {\n      // allowMultiple이 true일 때는 다른 툴팁이 열려도 닫히지 않도록 함\n      // 단, 사용자가 명시적으로 닫는 경우(Close 버튼 클릭, ClickAway 등)는 닫힘\n      if (!allowMultiple) {\n        setOpen(false);\n      }\n      // allowMultiple이 true일 때는 onClose에서 아무것도 하지 않음\n      // (다른 툴팁이 열려도 현재 툴팁이 닫히지 않음)\n    },\n    [allowMultiple]\n  );\n\n  return isControl ? (\n    <ClickAwayListener onClickAway={() => setOpen(false)} mouseEvent=\"onClick\">\n      <Tooltip\n        arrow\n        title={\n          <Stack direction=\"row\" gap=\"0.625rem\">\n            <Close\n              style={{\n                opacity: 0.7,\n                flexShrink: 0,\n                cursor: 'pointer',\n              }}\n              color={closeColor || 'currentColor'}\n              onClick={() => setOpen(false)}\n            />\n            <StyledScrollBar\n              style={{\n                maxHeight: maxHeight,\n                overflowY: 'auto',\n              }}\n              theme={theme}\n            >\n              <Typography variant=\"subtitle2\">{title}</Typography>\n            </StyledScrollBar>\n          </Stack>\n        }\n        placement={placement}\n        open={open}\n        onOpen={() => {\n          setOpen(true);\n        }}\n        onClose={handleClose}\n        onClick={() => {\n          setOpen(true);\n        }}\n        slotProps={slotProps}\n        style={{\n          cursor: 'pointer',\n        }}\n        {...rest}\n      >\n        <Stack\n          position=\"relative\"\n          width=\"fit-content\"\n          height=\"fit-content\"\n          whiteSpace=\"pre-wrap\"\n        >\n          {children}\n        </Stack>\n      </Tooltip>\n    </ClickAwayListener>\n  ) : (\n    <ClickAwayListener onClickAway={() => setOpen(false)} mouseEvent=\"onClick\">\n      <Tooltip\n        arrow\n        title={\n          <StyledScrollBar\n            style={{\n              fontWeight: 700,\n              fontSize: '1.375rem',\n              maxHeight: '15rem',\n              overflowY: 'auto',\n            }}\n            theme={theme}\n          >\n            <Typography variant=\"subtitle2\">{title}</Typography>\n          </StyledScrollBar>\n        }\n        placement={placement}\n        slotProps={slotProps}\n        onClose={handleClose}\n        {...rest}\n      >\n        <Stack position=\"relative\" width=\"fit-content\" height=\"fit-content\">\n          {children}\n        </Stack>\n      </Tooltip>\n    </ClickAwayListener>\n  );\n};\nexport default EliceTooltip;\n","import React from 'react';\n\nconst ArrowLeft = ({ size = 36, color = 'currentColor', ...other }) => {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 36 36\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      aria-label=\"이전 페이지로 가기\"\n      {...other}\n    >\n      <path\n        d=\"M22.1673 4.21094L24.2886 6.33226L12.621 17.9989L24.2886 29.6662L22.1673 31.7875L9.43934 19.0596C8.89861 18.5195 8.85702 17.6686 9.31456 17.0802L9.45 16.9264L22.1673 4.21094Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default ArrowLeft;\n","import React from 'react';\n\nconst ArrowRight = ({ size = 36, color = 'currentColor', ...other }) => {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 36 36\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      aria-label=\"다음 페이지로 가기\"\n      {...other}\n    >\n      <path\n        d=\"M13.8323 31.7875L11.7109 29.6662L23.3785 17.9995L11.7109 6.33226L13.8323 4.21094L26.5602 16.9389C27.1009 17.479 27.1425 18.3298 26.685 18.9183L26.5495 19.072L13.8323 31.7875Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default ArrowRight;\n","import React from 'react';\n\nconst Close = ({ size = 24, color = 'currentColor', ...other }) => {\n  return (\n    <svg\n      height={size}\n      width={size}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        d=\"M18.3641 4.22183L19.7783 5.63605L13.4139 11.9998L19.7783 18.364L18.3641 19.7782L11.9999 13.4138L5.63614 19.7782L4.22192 18.364L10.5859 11.9998L4.22192 5.63605L5.63614 4.22183L11.9999 10.5858L18.3641 4.22183Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default Close;\n","const Micro = ({ size = 20, color = 'currentColor', ...other }) => {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <g clip-path=\"url(#clip0_766_783)\">\n        <path\n          d=\"M16.9711 8.8101C16.9711 8.63513 16.9016 8.46733 16.7779 8.34361C16.6542 8.21989 16.4864 8.15039 16.3114 8.15039C16.1364 8.15039 15.9686 8.21989 15.8449 8.34361C15.7212 8.46733 15.6517 8.63513 15.6517 8.8101C15.6517 10.3649 15.034 11.8561 13.9346 12.9556C12.8351 14.055 11.344 14.6727 9.78911 14.6727C8.23425 14.6727 6.74308 14.055 5.64364 12.9556C4.54419 11.8561 3.92653 10.3649 3.92653 8.8101C3.92653 8.63513 3.85702 8.46733 3.7333 8.34361C3.60958 8.21989 3.44179 8.15039 3.26682 8.15039C3.09186 8.15039 2.92406 8.21989 2.80034 8.34361C2.67662 8.46733 2.60712 8.63513 2.60712 8.8101C2.60932 10.5996 3.27906 12.3238 4.48533 13.6456C5.69159 14.9674 7.3476 15.7915 9.1294 15.9569V17.7161H6.11675C5.94178 17.7161 5.77399 17.7856 5.65027 17.9093C5.52655 18.0331 5.45704 18.2009 5.45704 18.3758C5.45704 18.5508 5.52655 18.7186 5.65027 18.8423C5.77399 18.966 5.94178 19.0355 6.11675 19.0355H13.4615C13.6364 19.0355 13.8042 18.966 13.9279 18.8423C14.0517 18.7186 14.1212 18.5508 14.1212 18.3758C14.1212 18.2009 14.0517 18.0331 13.9279 17.9093C13.8042 17.7856 13.6364 17.7161 13.4615 17.7161H10.4488V15.9569C12.2306 15.7915 13.8866 14.9674 15.0929 13.6456C16.2992 12.3238 16.9689 10.5996 16.9711 8.8101Z\"\n          fill={color}\n        />\n        <path\n          d=\"M9.78914 12.8875C10.8701 12.8863 11.9064 12.4564 12.6707 11.6921C13.435 10.9277 13.865 9.89142 13.8661 8.81049V4.19695C13.6462 -1.20823 5.94965 -1.20823 5.71216 4.19695V8.81049C5.71332 9.89142 6.14323 10.9277 6.90756 11.6921C7.67189 12.4564 8.70821 12.8863 9.78914 12.8875ZM7.03157 4.19695C7.15911 0.546586 12.4192 0.546586 12.5467 4.19695V8.81049C12.5467 9.54185 12.2562 10.2432 11.739 10.7604C11.2219 11.2775 10.5205 11.5681 9.78914 11.5681C9.05778 11.5681 8.35639 11.2775 7.83924 10.7604C7.3221 10.2432 7.03157 9.54185 7.03157 8.81049V4.19695Z\"\n          fill={color}\n        />\n      </g>\n      <defs>\n        <clipPath id=\"clip0_766_783\">\n          <rect\n            width=\"19.7143\"\n            height=\"19.7143\"\n            fill=\"white\"\n            transform=\"translate(0.142883 0.143066)\"\n          />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n};\n\nexport default Micro;\n","const Reset = ({ size = 20, color = 'currentColor', ...other }) => {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        d=\"M5.75413 3.14911C3.64229 4.41804 2.30625 6.48622 1.90047 8.73415L3.32078 8.95861C3.66204 7.11581 4.76174 5.42244 6.4945 4.38129C9.48842 2.58236 13.3143 3.36629 15.3785 6.08645L12.7949 5.67738L12.5701 7.09718L16.6266 7.73968L16.7294 7.74948C17.1374 7.76277 17.501 7.47047 17.5665 7.05687L18.209 3.00029L16.7892 2.77541L16.4233 5.08766C13.8992 1.89446 9.33561 0.997147 5.75413 3.14911ZM3.26268 12.2896C2.85471 12.2763 2.49115 12.5686 2.42564 12.9822L1.78314 17.0388L3.20294 17.2637L3.56881 14.9514C6.09286 18.1446 10.6565 19.0419 14.238 16.89C16.3516 15.62 17.6881 13.5494 18.0927 11.2993L16.6725 11.0743C16.3325 12.9195 15.2323 14.6155 13.4976 15.6578C10.5037 17.4567 6.67784 16.6728 4.61355 13.9526L7.19716 14.3617L7.42203 12.9419L3.36546 12.2994L3.26268 12.2896Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default Reset;\n","import React from 'react';\n\nconst SelectedCheckbox = ({ color = 'currentColor' }: { color: string }) => {\n  return (\n    <svg\n      width=\"22\"\n      height=\"23\"\n      viewBox=\"0 0 22 23\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M6.875 4.625H15.125C16.6438 4.625 17.875 5.85622 17.875 7.375V15.625C17.875 17.1438 16.6438 18.375 15.125 18.375H6.875C5.35622 18.375 4.125 17.1438 4.125 15.625V7.375C4.125 5.85622 5.35622 4.625 6.875 4.625ZM2.75 7.375C2.75 5.09683 4.59683 3.25 6.875 3.25H15.125C17.4032 3.25 19.25 5.09683 19.25 7.375V15.625C19.25 17.9032 17.4032 19.75 15.125 19.75H6.875C4.59683 19.75 2.75 17.9032 2.75 15.625V7.375ZM16.2344 8.74304C16.4306 8.93736 16.4321 9.25394 16.2378 9.45014L10.67 15.0717C10.1642 15.5727 9.36741 15.6003 8.82945 15.1573L8.72547 15.0624L5.6392 11.9466C5.44487 11.7504 5.44638 11.4339 5.64257 11.2395L6.23461 10.6531C6.43081 10.4588 6.7474 10.4603 6.94172 10.6565L9.70201 13.4433L14.9352 8.16C15.1295 7.96382 15.4461 7.9623 15.6423 8.15661L16.2344 8.74304Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default SelectedCheckbox;\n","import React from 'react';\n\nconst SelectedRadio = ({ color = 'currentColor' }: { color: string }) => {\n  return (\n    <svg\n      width=\"22\"\n      height=\"23\"\n      viewBox=\"0 0 22 23\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M11 2.3335C16.0627 2.3335 20.1667 6.43755 20.1667 11.5002C20.1667 16.5628 16.0627 20.6668 11 20.6668C5.93743 20.6668 1.83337 16.5628 1.83337 11.5002C1.83337 6.43755 5.93743 2.3335 11 2.3335ZM11 3.93766C6.82339 3.93766 3.43754 7.32351 3.43754 11.5002C3.43754 15.6768 6.82339 19.0627 11 19.0627C15.1767 19.0627 18.5625 15.6768 18.5625 11.5002C18.5625 7.32351 15.1767 3.93766 11 3.93766ZM16.5 11.5002C16.5 8.4626 14.0376 6.00016 11 6.00016C7.96247 6.00016 5.50004 8.4626 5.50004 11.5002C5.50004 14.5377 7.96247 17.0002 11 17.0002C14.0376 17.0002 16.5 14.5377 16.5 11.5002Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default SelectedRadio;\n","import React from 'react';\n\nconst UnselectedCheckbox = ({ color = 'currentColor' }: { color: string }) => {\n  return (\n    <svg\n      width=\"22\"\n      height=\"23\"\n      viewBox=\"0 0 22 23\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M15.125 4.625H6.875C5.35622 4.625 4.125 5.85622 4.125 7.375V15.625C4.125 17.1438 5.35622 18.375 6.875 18.375H15.125C16.6438 18.375 17.875 17.1438 17.875 15.625V7.375C17.875 5.85622 16.6438 4.625 15.125 4.625ZM6.875 3.25C4.59683 3.25 2.75 5.09683 2.75 7.375V15.625C2.75 17.9032 4.59683 19.75 6.875 19.75H15.125C17.4032 19.75 19.25 17.9032 19.25 15.625V7.375C19.25 5.09683 17.4032 3.25 15.125 3.25H6.875Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default UnselectedCheckbox;\n","import React from 'react';\n\nconst UnselectedRadio = ({ color = 'currentColor' }: { color: string }) => {\n  return (\n    <svg\n      width=\"22\"\n      height=\"23\"\n      viewBox=\"0 0 22 23\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M20.1667 11.5002C20.1667 6.43755 16.0627 2.3335 11 2.3335C5.93743 2.3335 1.83337 6.43755 1.83337 11.5002C1.83337 16.5628 5.93743 20.6668 11 20.6668C16.0627 20.6668 20.1667 16.5628 20.1667 11.5002ZM3.43754 11.5002C3.43754 7.32351 6.82339 3.93766 11 3.93766C15.1767 3.93766 18.5625 7.32351 18.5625 11.5002C18.5625 15.6768 15.1767 19.0627 11 19.0627C6.82339 19.0627 3.43754 15.6768 3.43754 11.5002Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default UnselectedRadio;\n","const Send = ({ size = 20, color = 'currentColor', ...other }) => {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        d=\"M8.76785 11.8481C8.61075 11.8481 8.45366 11.7865 8.33352 11.6664C8.09325 11.4261 8.09325 11.0349 8.33352 10.7947L17.1125 2.01565C17.3528 1.77538 17.744 1.77538 17.9843 2.01565C18.2245 2.25592 18.2245 2.64712 17.9843 2.88739L9.20526 11.6664C9.08513 11.7865 8.92803 11.8481 8.77093 11.8481H8.76785Z\"\n        fill={color}\n      />\n      <path\n        d=\"M11.9869 18.625C11.2476 18.625 10.613 18.1784 10.3728 17.4884L8.41364 11.8667C8.36744 11.7312 8.26579 11.6326 8.13025 11.5833L2.5086 9.6242C1.8186 9.38393 1.37195 8.74938 1.37195 8.01009C1.37195 7.21536 1.88329 6.5038 2.64106 6.23889L16.3086 1.47974C16.9586 1.25487 17.6547 1.40581 18.126 1.87402C18.5973 2.34532 18.7482 3.04148 18.5203 3.69143L13.7581 17.3559C13.4932 18.1167 12.7816 18.625 11.9869 18.625ZM16.5119 2.05884L16.7152 2.64103L3.05074 7.40634C2.72422 7.52032 2.60717 7.80371 2.60717 8.01317C2.60717 8.13947 2.64722 8.36741 2.91829 8.46291L8.53994 10.422C9.02972 10.5914 9.4086 10.9734 9.5811 11.4632L11.5402 17.0848C11.6357 17.3559 11.8636 17.3959 11.9899 17.3959C12.1994 17.3959 12.4828 17.2789 12.5968 16.9524L17.359 3.28791C17.4607 2.99527 17.322 2.81353 17.2573 2.74884C17.1927 2.68416 17.0109 2.54554 16.7183 2.64719L16.515 2.065L16.5119 2.05884Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default Send;\n","import { IconProps } from \"./_types\";\n\nconst QuestionBubble = ({ size = 24, color = '#072567', ...other }: IconProps) => {\n  return (\n    <svg\n      width={size}\n      height={size * (25 / 24)}\n      viewBox=\"0 0 24 25\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        d=\"M0 3C0 1.35938 1.3125 0 3 0H21C22.6406 0 24 1.35938 24 3V16.5C24 18.1875 22.6406 19.5 21 19.5H14.4844L8.67188 23.8594C8.4375 24.0469 8.15625 24.0469 7.875 23.9531C7.64062 23.8125 7.5 23.5781 7.5 23.25V19.5H3C1.3125 19.5 0 18.1875 0 16.5V3ZM7.92188 5.53125V5.57812C7.73438 6.14062 8.01562 6.79688 8.625 7.03125C9.1875 7.21875 9.84375 6.89062 10.0312 6.32812L10.0781 6.28125C10.125 6.14062 10.2656 6 10.4062 6H13.125C13.5469 6 13.8281 6.32812 13.8281 6.75C13.8281 6.98438 13.7344 7.21875 13.5 7.35938L11.4375 8.53125C11.0625 8.71875 10.8281 9.09375 10.8281 9.51562V10.125C10.8281 10.7812 11.3438 11.25 11.9531 11.25C12.6094 11.25 13.0781 10.7812 13.0781 10.1719L14.625 9.28125C15.5156 8.76562 16.0781 7.78125 16.0781 6.70312C16.0781 5.10938 14.7656 3.75 13.125 3.75H10.4062C9.28125 3.75 8.29688 4.45312 7.92188 5.53125ZM13.5 14.25C13.5 13.4531 12.7969 12.75 12 12.75C11.1562 12.75 10.5 13.4531 10.5 14.25C10.5 15.0938 11.1562 15.75 12 15.75C12.7969 15.75 13.5 15.0938 13.5 14.25Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default QuestionBubble;\n","import { IconProps } from \"./_types\";\n\nconst SearchIcon = ({ size = 24, color = '#072567', ...other }: IconProps) => {\n  return (\n    <svg\n      width={size}\n      height={size * (28 / 24)}\n      viewBox=\"0 0 24 28\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        d=\"M6 2H13.5V8C13.5 8.84375 14.1562 9.5 15 9.5H21V23C21 24.6875 19.6406 26 18 26H6C4.3125 26 3 24.6875 3 23V5C3 3.35938 4.3125 2 6 2ZM15 2L21 8H15V2ZM15.75 16.25C15.75 13.7656 13.7344 11.75 11.25 11.75C8.76562 11.75 6.75 13.7656 6.75 16.25C6.75 18.7344 8.76562 20.75 11.25 20.75C12.0469 20.75 12.8438 20.5625 13.5 20.1406L15.3281 21.9688C15.75 22.3906 16.4531 22.3906 16.9219 21.9688C17.3438 21.5 17.3438 20.7969 16.9219 20.375L15.0938 18.5469C15.5156 17.8906 15.75 17.0938 15.75 16.25ZM11.25 18.5C10.4062 18.5 9.70312 18.0781 9.28125 17.375C8.85938 16.7188 8.85938 15.8281 9.28125 15.125C9.70312 14.4688 10.4062 14 11.25 14C12.0469 14 12.75 14.4688 13.1719 15.125C13.5938 15.8281 13.5938 16.7188 13.1719 17.375C12.75 18.0781 12.0469 18.5 11.25 18.5Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default SearchIcon;\n","import { IconProps } from \"./_types\";\n\nconst MoreColumn = ({ size = 6, color = '#072567', ...other }: IconProps) => {\n  return (\n    <svg\n      width={size}\n      height={size * (18 / 6)}\n      viewBox=\"0 0 6 18\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        d=\"M3 13.5625C3.78125 13.5625 4.48438 13.9922 4.875 14.6562C5.26562 15.3594 5.26562 16.1797 4.875 16.8438C4.48438 17.5469 3.78125 17.9375 3 17.9375C2.17969 17.9375 1.47656 17.5469 1.08594 16.8438C0.695312 16.1797 0.695312 15.3594 1.08594 14.6562C1.47656 13.9922 2.17969 13.5625 3 13.5625ZM3 7.3125C3.78125 7.3125 4.48438 7.74219 4.875 8.40625C5.26562 9.10938 5.26562 9.92969 4.875 10.5938C4.48438 11.2969 3.78125 11.6875 3 11.6875C2.17969 11.6875 1.47656 11.2969 1.08594 10.5938C0.695312 9.92969 0.695312 9.10938 1.08594 8.40625C1.47656 7.74219 2.17969 7.3125 3 7.3125ZM5.1875 3.25C5.1875 4.07031 4.75781 4.77344 4.09375 5.16406C3.39062 5.55469 2.57031 5.55469 1.90625 5.16406C1.20312 4.77344 0.8125 4.07031 0.8125 3.25C0.8125 2.46875 1.20312 1.76562 1.90625 1.375C2.57031 0.984375 3.39062 0.984375 4.09375 1.375C4.75781 1.76562 5.1875 2.46875 5.1875 3.25Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default MoreColumn;\n","import React from \"react\";\nimport { useTheme } from \"@mui/material\";\n\ninterface NumbersIconProps {\n  value: number | string; // ✅ 숫자(1-9), 문자(A-E), 두 자리 이상도 가능\n  size?: number; // ✅ 아이콘 크기 조정\n  color?: string; // ✅ 원형(circle) 색상 (기본값: theme.palette.primary.main)\n  textColor?: string; // ✅ 숫자(text) 색상 (기본값: theme.palette.text.primary)\n  pathColor?: string; // ✅ 숫자(path) 색상 (기본값: theme.palette.text.primary)\n  customBackgroundPath?: string;\n  type?: 'default' | 'spark';\n}\n\nconst backgroundPaths: Record<string, string> = {\n  spark: `M60 42.4274C60 42.4274 46.7999 45.2863 42.4263 60C42.4263 60 31.0711 52.6884 17.5737 60C17.5737 60 14.7148 46.7999 0 42.4263C0 42.4263 7.31164 31.0711 0 17.5737C0 17.5737 13.2001 14.7148 17.5737 0C17.5737 0 28.9289 7.31164 42.4263 0C42.4263 0 45.2852 13.2001 60 17.5737C60 17.5737 52.6884 28.9289 60 42.4263V42.4274Z`,\n  // 추가 배경이 있다면 여기에 계속 추가\n};\n\n// ✅ 숫자 및 문자별 `path` 값을 정적으로 저장\nconst numberPaths: Record<string, string> = {\n  \"1\": \"M25.7758 31.16H21.3838V16.376L16.9678 19.064V14.84L22.1038 11.864H25.7758V31.16Z\",\n  \"2\": \"M21.8238 27.368H30.0558V31.16H15.1278V27.824C17.4558 26.024 20.3358 23.624 22.2558 21.944C24.4158 20.072 25.4238 19.328 25.4238 17.672C25.4238 16.256 24.3198 15.296 22.5438 15.296C20.6238 15.296 19.3998 16.424 19.2798 18.296H14.8638C15.1038 14.216 18.1758 11.504 22.4718 11.504C27.1278 11.504 29.8398 13.832 29.8398 17.528C29.8398 20.168 28.1838 21.848 25.7838 24.152C24.6558 25.232 23.4558 26.216 21.8238 27.368Z\",\n  \"3\": \"M26.9678 20.936C28.8878 21.752 30.2078 23.312 30.2078 25.28C30.2078 28.952 26.6318 31.592 22.0478 31.592C17.5838 31.592 14.4398 28.856 14.0078 25.04H18.5918C18.8318 26.72 20.3438 27.824 22.1918 27.824C24.3038 27.824 25.7678 26.864 25.7678 25.304C25.7678 23.792 24.4238 23.048 21.7358 23.048H20.0798L20.0558 19.376H21.7358C23.7278 19.376 25.0478 18.608 25.0478 17.336C25.0478 16.064 23.8478 15.272 22.0718 15.272C20.0798 15.272 18.8318 16.328 18.6158 17.864H14.3438C14.8478 14.336 17.5838 11.504 22.1678 11.504C26.2478 11.504 29.4638 13.736 29.4638 16.952C29.4638 18.632 28.6478 20 26.9678 20.936Z\",\n  \"4\": \"M27.304 24.248H29.56V27.992H27.304V31.16H22.912V27.992H13.504L13.48 25.112L23.8 11.624H27.304V24.248ZM22.912 18.776L18.904 24.248H22.912V18.776Z\",\n  \"5\": \"M23.6721 18.344C27.7041 18.344 30.5361 20.768 30.5361 24.416C30.5361 28.616 27.5601 31.496 23.0961 31.496C18.8961 31.496 16.0641 29.312 15.2241 25.616H19.8801C20.1681 26.792 21.4401 27.704 23.0961 27.704C24.8721 27.704 26.1921 26.504 26.1921 24.656C26.1921 22.976 24.8961 21.8 22.8801 21.8C21.7521 21.8 20.5041 22.304 19.6161 23.288L15.8001 22.496L16.6641 11.864H29.1921V15.656H20.5041L20.2401 19.16C21.2721 18.632 22.4481 18.344 23.6721 18.344Z\",\n  \"6\": \"M22.1678 31.496C17.3198 31.496 14.0078 28.088 14.0078 21.464C14.0078 15.032 17.4398 11.504 22.4318 11.504C26.4638 11.504 29.2718 13.904 29.8238 17.048H25.5998C25.3358 15.896 24.0158 15.08 22.5758 15.08C20.2478 15.08 18.6878 16.664 18.3518 19.88C19.4318 18.968 20.7998 18.368 22.4318 18.368C27.1118 18.368 29.8478 20.816 29.8478 24.68C29.8478 28.352 26.7278 31.496 22.1678 31.496ZM22.2158 27.872C24.3278 27.872 25.7198 26.696 25.7198 24.848C25.7198 23.048 24.3758 21.848 22.3118 21.848C19.8398 21.848 18.6878 23.24 18.6878 24.848C18.8078 26.384 20.0798 27.872 22.2158 27.872Z\",\n  \"7\": \"M22.5359 32.16H17.9039L25.5839 16.656H15.6719V12.864H30.4799V15.576L22.5359 32.16Z\",\n  \"8\": \"M22.9278 31.688C18.1278 31.688 15.0078 29.216 15.0078 25.448C15.0078 23.552 15.8958 21.992 17.6718 20.96C16.3038 19.88 15.6558 18.488 15.6318 17C15.5838 13.616 18.3918 11.504 22.7838 11.504C27.1518 11.504 29.9838 13.52 29.9838 17C29.9838 18.392 29.3838 19.76 28.0638 20.816C29.9358 21.872 30.8718 23.48 30.8718 25.448C30.8718 29.216 27.7278 31.688 22.9278 31.688ZM22.7838 19.448C24.5838 19.448 25.7598 18.68 25.7598 17.408C25.7598 16.064 24.5838 15.32 22.7838 15.32C20.9838 15.32 19.8078 16.064 19.8078 17.408C19.8078 18.68 20.9838 19.448 22.7838 19.448ZM22.9518 27.848C24.9438 27.848 26.4318 26.72 26.4318 25.208C26.4318 23.744 24.9438 22.88 22.9518 22.88C20.9598 22.88 19.4718 23.744 19.4718 25.208C19.4718 26.72 20.9598 27.848 22.9518 27.848Z\",\n  \"9\": \"M22.6878 12.504C27.5358 12.504 30.8478 15.912 30.8478 22.536C30.8478 28.968 27.4158 32.496 22.4238 32.496C18.3918 32.496 15.5838 30.096 15.0318 26.952H19.2558C19.5198 28.104 20.8398 28.92 22.2798 28.92C24.6078 28.92 26.1678 27.336 26.5038 24.12C25.4238 25.032 24.0558 25.632 22.4238 25.632C17.7438 25.632 15.0078 23.184 15.0078 19.32C15.0078 15.648 18.1278 12.504 22.6878 12.504ZM22.6398 16.128C20.5278 16.128 19.1358 17.304 19.1358 19.152C19.1358 20.952 20.4798 22.152 22.5438 22.152C25.0158 22.152 26.1678 20.76 26.1678 19.152C26.0478 17.616 24.7758 16.128 22.6398 16.128Z\",\n  \"A\": \"M32 31.9756L27.3799 31.9758L26.1776 28.4636L18.8937 28.4639L17.6446 31.9763L13.0008 31.9765L20.2131 13.0005L25.0218 13.0003L32 31.9756ZM21.9106 20.0014L20.19 24.8338L24.9281 24.8336L23.2542 20.0013C22.9949 19.2706 22.877 18.6577 22.5941 17.9506C22.3348 18.6578 22.1699 19.2471 21.9106 20.0014Z\",\n  \"B\": \"M27.4281 21.5321C29.3345 22.087 30.9997 23.7761 30.9998 25.948C30.9999 29.3023 28.5145 31.4259 23.5434 31.4262L15.0009 31.4265L15 12.0007L23.5425 12.0003C28.0069 12.0001 30.2994 14.0753 30.2996 17.1883C30.2997 19.3843 29.2621 20.7598 27.4281 21.5321ZM22.867 15.7166L19.3921 15.7168L19.3923 20.0845L22.8672 20.0844C24.8701 20.0843 25.8595 19.2397 25.8594 17.6711C25.8594 16.4645 24.8458 15.7165 22.867 15.7166ZM19.3926 27.686L23.4467 27.6858C25.5461 27.6857 26.5596 26.8893 26.5596 25.5862C26.5595 24.1142 25.5701 23.3903 23.4465 23.3904L19.3924 23.3906L19.3926 27.686Z\",\n  \"C\": \"M23.5897 31.0006C18.2359 31.0008 15.0007 27.3331 15.0004 21.4781C15.0002 15.7826 18.349 12.0234 23.5888 12.0004C28.2591 12.0002 31.4943 14.9389 31.9729 18.903L27.7355 18.9031C27.4392 16.7616 25.7077 15.6226 23.5662 15.6227C20.7868 15.6228 19.1922 17.9239 19.1923 21.4323C19.1925 25.0319 20.7645 27.3556 23.6806 27.3555C25.9133 27.3554 27.4624 26.1251 27.7129 24.2114L31.9732 24.2112C31.6316 28.2436 28.1916 31.0004 23.5897 31.0006Z\",\n  \"D\": \"M21.3962 12.0004C27.7451 12.0002 31.3564 15.3043 31.3567 21.1812C31.3569 27.365 27.6516 30.9999 21.397 31.0002L15.0008 31.0004L15 12.0007L21.3962 12.0004ZM19.2963 27.2711L21.3968 27.271C25.126 27.2709 27.0141 25.1466 27.0139 21.1814C27.0137 17.5939 25.1491 15.7058 21.3963 15.706L19.2957 15.7061L19.2963 27.2711Z\",\n  \"E\": \"M20.3484 23.2524L20.3486 27.2897L29.9999 27.2892L30.0001 31.231L16.0009 31.2316L16 12.0006L29.7364 12L29.7366 15.7745L20.348 15.775L20.3482 19.4778L29.0201 19.4774L29.0202 23.252L20.3484 23.2524Z\",\n};\n\nconst NumbersIcon = ({\n  value,\n  size = 45,\n  type = 'default',\n  color,\n  textColor,\n  pathColor = \"#fff\",\n  customBackgroundPath,\n}: NumbersIconProps) => {\n  const theme = useTheme();\n  const path = numberPaths[value.toString()];\n  const fillColor = color || theme.palette.primary.main;\n  const textFill = textColor || theme.palette.text.primary;\n  const resolvedBackgroundPath =\n    customBackgroundPath || (type !== \"default\" ? backgroundPaths[type] : undefined);\n\n  return (\n    <svg width={size} height={size} viewBox=\"0 0 45 45\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      {/* ✅ 원형 유지 */}\n      {\n        resolvedBackgroundPath ? (\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} viewBox=\"0 0 60 60\" fill=\"none\">\n            <path d={resolvedBackgroundPath} fill={fillColor} />\n          </svg>\n        ) : (\n          <circle cx=\"22.5\" cy=\"22.5\" r=\"22.5\" fill={color || theme.palette.primary.main} />\n        )\n      }\n      {/* ✅ path 값이 있으면 `path` 렌더링, 없으면 `text` 렌더링 */}\n      {path ? (\n        <path d={path} fill={pathColor || theme.palette.text.primary} />\n      ) : (\n        <text\n          x=\"50%\"\n          y=\"50%\"\n          dominantBaseline=\"middle\"\n          textAnchor=\"middle\"\n          fontSize={size * 0.5} // ✅ 크기 비율 유지\n          fill={textFill}\n          fontFamily=\"Arial, sans-serif\"\n          fontWeight=\"bold\"\n        >\n          {value}\n        </text>\n      )}\n    </svg>\n  );\n};\n\nexport default NumbersIcon;\n","import { IconProps } from \"./_types\";\n\nconst RecordPause = ({ size = 29, color = \"white\", ...other }: IconProps) => {\n  return (\n    <svg\n      width={size}\n      height={size * (28 / 29)} // 원본 비율 유지\n      viewBox=\"0 0 29 28\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M20 4.83333H9C6.97496 4.83333 5.33333 6.47496 5.33333 8.5V19.5C5.33333 21.525 6.97496 23.1667 9 23.1667H20C22.025 23.1667 23.6667 21.525 23.6667 19.5V8.5C23.6667 6.47496 22.025 4.83333 20 4.83333ZM9 3C5.96243 3 3.5 5.46243 3.5 8.5V19.5C3.5 22.5376 5.96243 25 9 25H20C23.0376 25 25.5 22.5376 25.5 19.5V8.5C25.5 5.46243 23.0376 3 20 3H9Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default RecordPause;\n","import { IconProps } from \"./_types\";\n\nconst Recording = ({ size = 21, color = \"#FFB1AF\", squareColor = \"#FF5D58\", ...other }: IconProps & { squareColor?: string }) => {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 21 21\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        d=\"M10.5 1.75C8.17936 1.75 5.95376 2.67187 4.31282 4.31282C2.67187 5.95376 1.75 8.17936 1.75 10.5C1.75 12.8206 2.67187 15.0462 4.31282 16.6872C5.95376 18.3281 8.17936 19.25 10.5 19.25C12.8206 19.25 15.0462 18.3281 16.6872 16.6872C18.3281 15.0462 19.25 12.8206 19.25 10.5C19.25 8.17936 18.3281 5.95376 16.6872 4.31282C15.0462 2.67187 12.8206 1.75 10.5 1.75ZM10.5 18C6.365 18 3 14.635 3 10.5C3 6.365 6.365 3 10.5 3C14.635 3 18 6.365 18 10.5C18 14.635 14.635 18 10.5 18Z\"\n        fill={color}\n      />\n      <rect x=\"6.3335\" y=\"6.33337\" width=\"8.33333\" height=\"8.33333\" rx=\"2\" fill={squareColor} />\n    </svg>\n  );\n};\n\nexport default Recording;\n","import { IconProps } from \"./_types\";\n\nconst ReadyRecord = ({ \n  size = 21, \n  outerColor = \"#FFF1F1\", \n  innerColor = \"white\", \n  ...other \n}: IconProps & { outerColor?: string; innerColor?: string }) => {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 21 21\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        d=\"M10.5 1.75C8.17936 1.75 5.95376 2.67187 4.31282 4.31282C2.67187 5.95376 1.75 8.17936 1.75 10.5C1.75 12.8206 2.67187 15.0462 4.31282 16.6872C5.95376 18.3281 8.17936 19.25 10.5 19.25C12.8206 19.25 15.0462 18.3281 16.6872 16.6872C18.3281 15.0462 19.25 12.8206 19.25 10.5C19.25 8.17936 18.3281 5.95376 16.6872 4.31282C15.0462 2.67187 12.8206 1.75 10.5 1.75ZM10.5 18C6.365 18 3 14.635 3 10.5C3 6.365 6.365 3 10.5 3C14.635 3 18 6.365 18 10.5C18 14.635 14.635 18 10.5 18Z\"\n        fill={outerColor}\n      />\n      <path\n        d=\"M10.5 15.5C13.2614 15.5 15.5 13.2614 15.5 10.5C15.5 7.73858 13.2614 5.5 10.5 5.5C7.73858 5.5 5.5 7.73858 5.5 10.5C5.5 13.2614 7.73858 15.5 10.5 15.5Z\"\n        fill={innerColor}\n      />\n    </svg>\n  );\n};\n\nexport default ReadyRecord;\n","import { IconProps } from \"./_types\";\n\nconst RecordPlay = ({ size = 28, color = \"white\", ...other }: IconProps) => {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 28 28\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <path\n        d=\"M23.1161 16.0649C23.5038 15.8516 23.8228 15.5325 24.0361 15.1448C24.6571 14.0157 24.2452 12.5969 23.1161 11.9759L6.95781 3.08882C6.61331 2.89934 6.22651 2.79999 5.83333 2.79999C4.54467 2.79999 3.5 3.84466 3.5 5.13332V22.9074C3.5 23.3006 3.59935 23.6874 3.78883 24.0319C4.40986 25.161 5.82866 25.5729 6.95781 24.9519L23.1161 16.0649ZM5.54167 4.63165L22.5963 14.0133L5.54167 23.3942V4.63165Z\"\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport default RecordPlay;\n","const SendArrow = ({ color = 'currentColor' }: { color?: string }) => {\n  return (\n    <svg\n      width=\"22\"\n      height=\"23\"\n      viewBox=\"0 0 22 23\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <g>\n        <path\n          d=\"M1.69775 11.3023L11.0001 2L20.3024 11.3023\"\n          stroke={color}\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n        />\n        <path\n          d=\"M11 22L11 3.39535\"\n          stroke={color}\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport default SendArrow;\n","import { useTheme, useMediaQuery } from '@mui/material';\nimport { breakpoints as DEFAULT_BREAKPOINTS } from '../tokens';\n\ninterface UseAIDTMediaQueryOptions {\n  breakpoints?: typeof DEFAULT_BREAKPOINTS;\n}\n\nconst useAIDTMediaQuery = (options: UseAIDTMediaQueryOptions = {}) => {\n  const { breakpoints = DEFAULT_BREAKPOINTS } = options;\n  const theme = useTheme();\n\n  const isMobile = useMediaQuery(theme.breakpoints.down(breakpoints.xs)); // 390px 이하\n  const isMiniTablet = useMediaQuery(theme.breakpoints.down(breakpoints.sm)); // 512px 이하\n  const isTablet = useMediaQuery(theme.breakpoints.down(breakpoints.md)); // 830px 이하\n  const isNotebook = useMediaQuery(theme.breakpoints.down(breakpoints.lg)); // 1024px 이하\n  const isDesktop = useMediaQuery(theme.breakpoints.up(breakpoints.lg + 1)); // 1025px 이상\n\n  const isHeightSmall = useMediaQuery(`(max-height: ${breakpoints.height}px)`);\n\n  return {\n    isMobile,\n    isMiniTablet,\n    isTablet,\n    isNotebook,\n    isDesktop,\n    isHeightSmall,\n  };\n};\n\nexport default useAIDTMediaQuery;\n","export { mint } from './mint';\nexport { bluepurple } from './bluepurple';\nexport { gray } from './gray';\nexport { green } from './green';\nexport { orange } from './orange';\nexport { pink } from './pink';\nexport { purple } from './purple';\nexport { yellow } from './yellow';\nexport { bluesky } from './bluesky';\nexport { common } from './common';\n","import type { AIDTColor } from './_typing';\n\nexport const mint: AIDTColor = Object.freeze({\n  50: '#e0f7fa',\n  100: '#DAF0F2',\n  200: '#B5E0E5',\n  300: '#91D1D9', // science elementary key\n  400: '#6CC1CC',\n  500: '#47B2BF', // science middle key\n  600: '#359AA8',\n  700: '#248192',\n  800: '#12697B',\n  900: '#005064', // science high bg\n  950: '#003543',\n  0: '#001B21', // science high key\n} as const);\n","import type { AIDTColor } from './_typing';\n\nexport const bluepurple: AIDTColor = Object.freeze({\n  50: '#f4f6ff',\n  100: '#dfe1f0',\n  200: '#bec4e1',\n  300: '#9ea6d1', // korean elementary key\n  400: '#7d89c2',\n  500: '#5d6bb3', //korean middle key\n  600: '#485ead',\n  700: '#3451A7',\n  800: '#1F44A1',\n  900: '#0A379B',\n  950: '#072567',\n  0: '#031234', // korean high key\n} as const);\n","import type { AIDTColor } from './_typing';\n\nexport const gray: AIDTColor = Object.freeze({\n  50: '#FAFAFD',\n  100: '#F3F4FA',\n  200: '#F1F1F6',\n  300: '#D8D8E2',\n  400: '#9B9BA9',\n  500: '#77778A',\n  600: '#616177',\n  700: '#48485C',\n  800: '#2E2E3C',\n  900: '#1E1E1E',\n  950: '#B2B2B2', // cs, korean middle bg color\n  0: '#',\n} as const);\n","import type { AIDTColor } from './_typing';\n\nexport const green: AIDTColor = Object.freeze({\n  50: '#e8f5e9',\n  100: '#E0F0DE',\n  200: '#C0E0BD',\n  300: '#A1D19C', // english elementary key\n  400: '#81C17B',\n  500: '#62B25A', // english middle key\n  600: '#539D4C',\n  700: '#45893E',\n  800: '#367431',\n  900: '#285F23', //english high bg\n  950: '#1B3F17',\n  0: '#0D200C', // english high key\n} as const);\n","import type { AIDTColor } from './_typing';\n\nexport const orange: AIDTColor = Object.freeze({\n  50: '#fff3e0',\n  100: '#FAE5DC',\n  200: '#F5CAB9',\n  300: '#EFB096', // social elementary key\n  400: '#EA9573',\n  500: '#E57B50', // social middle key\n  600: '#D06C47',\n  700: '#BA5D3D',\n  800: '#A54D34',\n  900: '#5F291D', //social high bg\n  950: '#1B3F17',\n  0: '#30150E', // social high key\n} as const);\n","import type { AIDTColor } from './_typing';\n\nexport const pink: AIDTColor = Object.freeze({\n  50: '#fce4ec',\n  100: '#F7E1ED',\n  200: '#EEC4DB',\n  300: '#E6A6C8', // math elementary key\n  400: '#DD89B6',\n  500: '#D56BA4', // math middle key\n  600: '#BF5392',\n  700: '#A93B7F',\n  800: '#93226C',\n  900: '#7D0A5A', // math high bg\n  950: '#53073C',\n  0: '#2A031E', // math high key\n} as const);\n","import type { AIDTColor } from './_typing';\n\nexport const purple: AIDTColor = Object.freeze({\n  50: '#F1EEFA',\n  100: '#E2DDEF',\n  200: '#C5BBDF',\n  300: '#A899CF', // cs elementary key\n  400: '#8B77BF',\n  500: '#6E55AF', //cs middle key\n  600: '#6147AA',\n  700: '#553AA5',\n  800: '#482CA0',\n  900: '#3C1E9B', //cs high bg\n  950: '#281467',\n  0: '#140A34', // cs high key\n} as const);\n","import type { AIDTColor } from './_typing';\n\nexport const yellow: AIDTColor = Object.freeze({\n  50: '#',\n  100: '#',\n  200: '#',\n  300: '#',\n  400: '#',\n  500: '#FBEB97',\n  600: '#',\n  700: '#',\n  800: '#',\n  900: '#',\n  950: '#',\n  0: '#',\n} as const);\n","import type { AIDTColor } from './_typing';\n\nexport const bluesky: AIDTColor = Object.freeze({\n  50: '#',\n  100: '#',\n  200: '#',\n  300: '#',\n  400: '#',\n  500: '#9BCAFF',\n  600: '#',\n  700: '#',\n  800: '#',\n  900: '#',\n  950: '#',\n  0: '#',\n} as const);\n","import type { CommonColors } from '@mui/material';\n\nexport const common: CommonColors = Object.freeze({\n  white: '#ffffff',\n  black: '#000000',\n\n  text: {\n    primary: '#1E1E1E',\n    secondary: '#363643',\n    teritary: '#525265',\n    inverse: '#ffffff',\n    quaternary: '#9FA0B1',\n  },\n\n  point: {\n    point1: '#BB7CF5',\n    point2: '#A670FF',\n    point3: '#8F68F6',\n    point4: '#7233F9',\n  },\n\n  red: {\n    50: '#FFFBFB',\n    100: '#FFF1F1',\n    200: '#FBE0E0',\n    600: '#FFB1AF',\n    900: '#FF5D58',\n  },\n\n  green: {\n    50: '#F9FFFA',\n    100: '#EFFFF3',\n    200: '#B9E0C1',\n    600: '#7fc89a',\n    900: '#00B100',\n    opacity: {\n      15: 'rgba(0, 177, 0, 0.15)',\n    },\n  },\n\n  yellow: {\n    200: '#FFFB98',\n    opacity: {\n      '200-30': 'rgba(255, 251, 152, 0.3)',\n      '900-30': 'rgba(248, 201, 36, 0.3)',\n      '900-60': 'rgba(248, 201, 36, 0.6)',\n    },\n    900: '#f8c924',\n  },\n} as const);\n","export const breakpoints = Object.freeze({\n  xs: 390, // 모바일\n  sm: 512, // 소형 태블릿\n  md: 830, // 태블릿\n  lg: 1024, // 노트북\n  xl: 1280, // 데스크톱\n  tablet: 480,\n  notebook: 640,\n  desktop: 800,\n  height: 600,\n});\n","import React from 'react';\nimport { Stack, Typography, useTheme } from '@mui/material';\n\nimport type { StackProps } from '@mui/material';\n\nexport interface BadgeProps extends StackProps {\n  color: 'primary' | 'secondary' | 'black';\n  label: string;\n}\n\nconst EliceBadge = ({ label, color, ...rest }: BadgeProps) => {\n  const theme = useTheme();\n  return (\n    <Stack\n      sx={{\n        borderRadius: '0.6875rem',\n        padding: '0.375rem 0.875rem',\n        color: '#fff',\n        width: 'fit-content',\n        backgroundColor:\n          color === 'primary'\n            ? theme.palette.primary.main\n            : color === 'secondary'\n              ? theme.palette.secondary.main\n              : theme.palette.primary.dark,\n      }}\n      {...rest}\n    >\n      <Typography\n        variant=\"h3\"\n        style={{\n          whiteSpace: 'nowrap',\n        }}\n      >\n        {label}\n      </Typography>\n    </Stack>\n  );\n};\nexport default EliceBadge;\n","import React, { forwardRef } from 'react';\nimport { Button, type ButtonProps, Typography, useTheme, alpha, darken } from '@mui/material';\nimport { smoothColorTransform } from '../../theme/transitions';\n\nexport interface EliceButtonProps extends ButtonProps {\n  children?: React.ReactNode;\n  variant?: 'contained' | 'outlined' | 'text';\n  onClick?: () => void;\n  customColor?: string;\n  textColor?: string;\n}\n\nconst EliceButton = forwardRef<HTMLButtonElement, EliceButtonProps>(\n  ({ children, variant = 'contained', color = 'primary', customColor, textColor: customTextColor, sx, ...rest }, ref) => {\n    const theme = useTheme();\n\n    // 커스텀 색상이 있으면 해당 색상 사용, 없으면 팔레트 색상 사용\n    let colorMain: string;\n    let colorHover: string;\n    let colorDark: string;\n    let textColor: string;\n\n    if (customColor) {\n      colorMain = customColor;\n      // 호버 시 매우 미세한 색상 변화만 적용 (alpha 사용)\n      colorHover = alpha(customColor, 0.9);\n      colorDark = darken(customColor, 0.15);\n      textColor = customTextColor || theme.palette.getContrastText(customColor);\n    } else {\n      const paletteColor = theme.palette[color as keyof typeof theme.palette] as { main: string; dark: string } | undefined;\n      colorMain = paletteColor?.main || theme.palette.primary.main;\n      // 팔레트 색상의 경우 hover용 색상을 alpha로 약간만 어둡게\n      colorHover = alpha(colorMain, 0.9);\n      colorDark = paletteColor?.dark || theme.palette.primary.dark;\n      textColor = customTextColor || theme.palette.getContrastText(colorMain);\n    }\n\n    // sx prop에서 hover, focus, active, disabled 스타일 추출 (deep merge를 위해)\n    const sxObj = typeof sx === 'function' ? sx(theme) : (Array.isArray(sx) ? sx.reduce((acc, item) => ({ ...acc, ...(typeof item === 'function' ? item(theme) : item) }), {}) : sx) || {};\n    const sxHover = sxObj['&:hover'];\n    const sxFocus = sxObj['&:focus-visible'] ?? sxObj['&:focus'];\n    const sxActive = sxObj['&:active'];\n    const sxDisabled = sxObj['&:disabled'];\n\n    // sx에서 hover, focus, active, disabled 제외한 나머지\n    const {\n      '&:hover': _,\n      '&:focus': __,\n      '&:focus-visible': ___,\n      '&:active': ____,\n      '&:disabled': _____,\n      ...restSx\n    } = sxObj;\n\n    return (\n      <Button\n        ref={ref}\n        variant={variant}\n        color={customColor ? undefined : color}\n        sx={[\n          {\n            borderRadius: '0.75rem',\n            fontWeight: 600,\n            transition: smoothColorTransform(theme),\n            // Contained variant 스타일\n            ...(variant === 'contained' && {\n              backgroundColor: colorMain,\n              color: textColor,\n              border: `1px solid ${colorMain}`,\n\n              '&:hover': {\n                backgroundColor: colorHover,\n                borderColor: colorHover,\n                transform: 'translateY(-1px)',\n                boxShadow: `0 4px 12px ${alpha(colorMain, 0.3)}`,\n                // sx에서 전달된 hover 스타일 병합\n                ...sxHover,\n              },\n\n              '&:focus-visible': {\n                backgroundColor: `${alpha(colorDark, 0.4)}`,\n                borderColor: `${alpha(colorDark, 0.25)}`,\n                outlineOffset: '2px',\n                // sx에서 전달된 focus 스타일 병합\n                ...sxFocus,\n              },\n\n              '&:active': {\n                backgroundColor: colorDark,\n                transform: 'translateY(0)',\n                // sx에서 전달된 active 스타일 병합\n                ...sxActive,\n              },\n            }),\n\n            // Outlined variant 스타일\n            ...(variant === 'outlined' && {\n              backgroundColor: 'transparent',\n              color: colorMain,\n              border: `1px solid ${colorMain}`,\n\n              '&:hover': {\n                backgroundColor: alpha(colorMain, 0.08),\n                borderColor: colorHover,\n                transform: 'translateY(-1px)',\n                boxShadow: `0 4px 8px ${alpha(colorMain, 0.12)}`,\n                // sx에서 전달된 hover 스타일 병합\n                ...sxHover,\n              },\n\n              '&:focus-visible': {\n                backgroundColor: alpha(colorMain, 0.2),\n                borderColor: `${alpha(colorMain, 0.25)}`,\n                outlineOffset: '2px',\n                // sx에서 전달된 focus 스타일 병합\n                ...sxFocus,\n              },\n\n              '&:active': {\n                backgroundColor: alpha(colorMain, 0.3),\n                transform: 'translateY(0)',\n                // sx에서 전달된 active 스타일 병합\n                ...sxActive,\n              },\n            }),\n\n            // Text variant 스타일\n            ...(variant === 'text' && {\n              backgroundColor: 'transparent',\n              color: colorMain,\n              border: 'none',\n\n              '&:hover': {\n                backgroundColor: alpha(colorMain, 0.08),\n                transform: 'translateY(-1px)',\n                // sx에서 전달된 hover 스타일 병합\n                ...sxHover,\n              },\n\n              '&:focus-visible': {\n                backgroundColor: alpha(colorMain, 0.2),\n                outlineOffset: '2px',\n                // sx에서 전달된 focus 스타일 병합\n                ...sxFocus,\n              },\n\n              '&:active': {\n                backgroundColor: alpha(colorMain, 0.3),\n                transform: 'translateY(0)',\n                // sx에서 전달된 active 스타일 병합\n                ...sxActive,\n              },\n            }),\n\n            // Disabled 상태 - variant별로 다르게 처리\n            '&:disabled': {\n              transform: 'none',\n              boxShadow: 'none',\n              ...(variant === 'contained' && {\n                backgroundColor: theme.palette.action.disabledBackground,\n                color: theme.palette.action.disabled,\n                border: 'none',\n              }),\n              ...(variant === 'outlined' && {\n                backgroundColor: 'transparent',\n                color: theme.palette.action.disabled,\n                border: `1px solid ${theme.palette.action.disabledBackground}`,\n              }),\n              ...(variant === 'text' && {\n                backgroundColor: 'transparent',\n                color: theme.palette.action.disabled,\n                border: 'none',\n              }),\n              // sx에서 전달된 disabled 스타일 병합\n              ...sxDisabled,\n            },\n\n            // sx의 나머지 스타일 적용\n            ...restSx,\n          },\n          // sx가 함수나 배열인 경우를 대비해 원본도 전달 (MUI가 자동으로 처리)\n          ...(typeof sx === 'function' || Array.isArray(sx) ? [sx] : []),\n        ]}\n        {...rest}\n      >\n        <Typography variant=\"buttoninput\">{children}</Typography>\n      </Button>\n    );\n  }\n);\n\nexport default EliceButton;\n","import type { Theme } from '@mui/material';\n\n/**\n * 부드러운 색상 및 transform 변화를 위한 transition\n * 버튼, 카드 등 인터랙티브 요소의 hover/focus 상태 변화에 사용\n * \n * @param theme - MUI Theme 객체\n * @returns CSS transition 문자열\n * \n * @example\n * ```tsx\n * const theme = useTheme();\n * const transition = smoothColorTransform(theme);\n * \n * <Box sx={{ transition }}>\n *   Content\n * </Box>\n * ```\n */\nexport const smoothColorTransform = (theme: Theme): string => {\n  return theme.transitions.create(\n    ['background-color', 'border-color', 'transform', 'box-shadow', 'outline', 'color'],\n    {\n      duration: theme.transitions.duration.shorter, // 200ms\n      easing: theme.transitions.easing.easeInOut,\n    }\n  );\n};\n\n/**\n * 빠른 상태 변화를 위한 transition\n * 토글, 스위치 등 즉각적인 피드백이 필요한 요소에 사용\n * \n * @param theme - MUI Theme 객체\n * @returns CSS transition 문자열\n */\nexport const quickStateChange = (theme: Theme): string => {\n  return theme.transitions.create(\n    ['background-color', 'color', 'opacity'],\n    {\n      duration: theme.transitions.duration.shortest, // 150ms\n      easing: theme.transitions.easing.sharp,\n    }\n  );\n};\n\n/**\n * 표준적인 상호작용을 위한 transition\n * 일반적인 UI 요소의 상태 변화에 사용\n * \n * @param theme - MUI Theme 객체\n * @returns CSS transition 문자열\n */\nexport const standardInteraction = (theme: Theme): string => {\n  return theme.transitions.create(\n    ['background-color', 'color', 'border-color'],\n    {\n      duration: theme.transitions.duration.standard, // 300ms\n      easing: theme.transitions.easing.easeInOut,\n    }\n  );\n};\n\n/**\n * 호버 시 살짝 올라가는 효과를 위한 transition\n * 카드, 버튼 등 호버 시 transform 효과가 필요한 요소에 사용\n * \n * @param theme - MUI Theme 객체\n * @param options - 옵션 객체\n * @param options.defaultLift - 기본 lift 값 (기본값: '-1px', Button과 동일)\n * @returns CSS transition 문자열\n * \n * @example\n * ```tsx\n * const theme = useTheme();\n * const transition = hoverLift(theme); // 기본값: -1px\n * const transitionLarge = hoverLift(theme, { defaultLift: '-8px' }); // 커스텀 값\n * \n * <Box\n *   sx={{\n *     transition,\n *     '&:hover': {\n *       transform: `translateY(${defaultLift})`, // transition 함수에서 반환된 값 사용\n *     },\n *   }}\n * >\n * ```\n */\nexport const hoverLift = (theme: Theme, options?: { defaultLift?: string }): string => {\n  return theme.transitions.create(\n    ['transform', 'box-shadow'],\n    {\n      duration: theme.transitions.duration.shorter, // 200ms\n      easing: theme.transitions.easing.easeOut,\n    }\n  );\n};\n\n/**\n * hoverLift transition과 함께 사용할 기본 lift 값\n * Button 컴포넌트에서 사용하는 값과 동일\n */\nexport const HOVER_LIFT_DEFAULT = '-1px';\n\n/**\n * 복잡한 애니메이션을 위한 transition\n * 모달, 드로어 등 복잡한 상태 변화가 있는 요소에 사용\n * \n * @param theme - MUI Theme 객체\n * @returns CSS transition 문자열\n */\nexport const complexAnimation = (theme: Theme): string => {\n  return theme.transitions.create(\n    ['background-color', 'transform', 'opacity', 'box-shadow', 'border-color'],\n    {\n      duration: theme.transitions.duration.complex, // 375ms\n      easing: theme.transitions.easing.easeInOut,\n    }\n  );\n};\n\n","import React, { useState, useEffect, useRef } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { useAIDTMediaQuery } from \"../../hooks\";\nimport { Stack, Input, Typography, useTheme, Theme, Box } from \"@mui/material\";\nimport { Micro, ReadyRecord, Reset, SendArrow } from \"../../icons\";\nimport { EliceIconButton } from \"../icon-button\";\nimport { RecorderProvider, useRecorder } from \"../recorder-step/RecorderContext\";\n\nimport type { RecorderType } from \"../recorder-step/RecorderStep\";\nimport AIAvatar from '../../assets/AIAvatar.png';\nimport AssistantAvatar from \"./AssistantAvatar\";\nimport UserAvatar from \"./UserAvatar\";\nimport TypingIndicator from \"./TypingIndicator\";\nimport { EliceRecorderStep } from \"../recorder-step\";\n\nexport type EliceMessageItem = { role: \"system\" | \"user\" | \"assistant\"; content: string }\n\nexport interface EliceChatProps {\n  placeholder?: string;\n  messages: EliceMessageItem[];\n  content: string;\n  onReset: () => void;\n  onChange: (text: string) => void;\n  onSend: (text: string) => void;\n  onRecord?: () => void;\n  setAudioFile?: (file: File | null) => void;\n  onTransform?: () => void;\n  height?: string;\n  onTranscribingChange?: (value: boolean) => void;\n  isLoadingMessage?: boolean;\n  isDisabled?: boolean;\n  backgroundImage?: string;\n  CustomAssistantAvatar?: React.ReactNode;\n  CustomUserAvatar?: React.ReactNode;\n  type?: string;\n  recorderType?: RecorderType;\n  isOnlyRecord: boolean;\n  isRecordDisabled?: boolean;\n  isResetDisabled?: boolean;\n  maxRows?: number;\n  iconButtonColor?: string;\n  recordButtonColor?: string;\n  resetButtonColor?: string;\n  sendButtonColor?: string;\n  inputFontSize?: string;\n}\n\nconst EliceChat = (props: React.ComponentProps<typeof EliceChatContainer>) => {\n  return (\n    <RecorderProvider>\n      <EliceChatContainer {...props} />\n    </RecorderProvider>\n  );\n};\n\nconst EliceChatContainer = ({\n  placeholder = \"AI와 대화를 시작해 보세요.\",\n  messages = [],\n  content = \"\",\n  onReset,\n  onSend,\n  onChange,\n  onRecord,\n  onTranscribingChange,\n  setAudioFile,\n  onTransform,\n  isLoadingMessage,\n  CustomAssistantAvatar,\n  CustomUserAvatar,\n  isDisabled = false,\n  backgroundImage,\n  height = \"100%\",\n  recorderType = 'notNeed',\n  isOnlyRecord = false,\n  isResetDisabled = false,\n  isRecordDisabled = false,\n  maxRows = 8,\n  iconButtonColor,\n  recordButtonColor,\n  resetButtonColor,\n  sendButtonColor,\n  inputFontSize,\n}: EliceChatProps) => {\n  const theme = useTheme();\n  const [inputValue, setInputValue] = useState(content);\n  const scrollRef = useRef<HTMLDivElement>(null);\n  const { state: recorderState, setIsRecording, resetAnalyzer } = useRecorder();\n\n  useEffect(() => {\n    if (scrollRef.current) {\n      scrollRef.current.scrollIntoView({ behavior: \"smooth\" });\n    }\n  }, [messages, isLoadingMessage]);\n  useEffect(() => {\n    if (recorderState.step === \"ready\") {\n      resetAnalyzer();\n    }\n  }, [recorderState.step])\n\n  const onClickRecordSubmit = () => {\n    onTransform?.();\n  }\n\n  const onClickCloseIsRecording = () => {\n    onTranscribingChange?.(false);\n    setIsRecording(false);\n  }\n\n  const handleSend = () => {\n    if (inputValue.trim()) {\n      onSend(inputValue);\n      setInputValue(\"\");\n    }\n  };\n\n  return (\n    <StyledChatContainer\n      theme={theme}\n      height={height}\n      backgroundImage={backgroundImage}\n    >\n      {\n        (recorderState.isRecording && setAudioFile) && (\n          <RecordingOverlay onClick={onClickCloseIsRecording}>\n            <OverlayContent onClick={(e) => e.stopPropagation()}>\n              <EliceRecorderStep\n                closeRecorder={onClickCloseIsRecording}\n                onAudioReady={setAudioFile}\n                onRecord={onRecord}\n                onTransform={onTransform}\n                type={recorderType}\n                visualType=\"bar\"\n                onTranscribingChange={onTranscribingChange}\n                isLoadingMessage={isLoadingMessage}\n              />\n            </OverlayContent>\n          </RecordingOverlay>\n        )\n      }\n      <EliceChat.MessageList\n        messages={messages}\n        isLoadingMessage={isLoadingMessage}\n        scrollRef={scrollRef}\n        CustomAssistantAvatar={CustomAssistantAvatar}\n        CustomUserAvatar={CustomUserAvatar}\n      />\n      <EliceChat.InputArea\n        placeHolder={placeholder}\n        value={inputValue}\n        onChange={(e) => {\n          setInputValue(e.target.value);\n          onChange(e.target.value);\n        }}\n        isOnlyRecord={isOnlyRecord}\n        setAudioFile={setAudioFile}\n        onTransform={onClickRecordSubmit}\n        onSend={handleSend}\n        onReset={onReset}\n        onRecord={onRecord}\n        onTranscribingChange={onTranscribingChange}\n        isDisabled={isDisabled}\n        type={recorderType}\n        isResetDisabled={isResetDisabled}\n        isRecordDisabled={isRecordDisabled}\n        maxRows={maxRows}\n        iconButtonColor={iconButtonColor}\n        recordButtonColor={recordButtonColor}\n        resetButtonColor={resetButtonColor}\n        sendButtonColor={sendButtonColor}\n        inputFontSize={inputFontSize}\n      />\n    </StyledChatContainer>\n  );\n};\n\n// ✅ 메시지 리스트 컴포넌트\nEliceChat.MessageList = ({\n  messages,\n  isLoadingMessage,\n  scrollRef,\n  height = \"100%\",\n  CustomAssistantAvatar,\n  CustomUserAvatar,\n}: {\n  messages: { role: \"system\" | \"user\" | \"assistant\"; content: string }[];\n  isLoadingMessage?: boolean;\n  scrollRef: React.RefObject<HTMLDivElement>;\n  height?: string;\n  CustomAssistantAvatar: React.ReactNode;\n  CustomUserAvatar: React.ReactNode;\n}) => {\n  const theme = useTheme();\n  const lastMessage = messages.length > 0 ? messages[messages.length - 1] : null;\n  const isAssistantLoading = !lastMessage || lastMessage.role === 'user';\n\n  return (\n    <StyledScrollBarStack theme={theme} height={height}>\n      {messages.length === 0 && !isLoadingMessage ? (\n        <EmptyMessageContainer>\n          <AIAvatarImage src={AIAvatar} alt=\"Ai-avatar\" />\n          <Typography color={theme.palette.text.disabled} variant=\"subtitle1\">\n            AI와 대화를 시작해 보세요.\n          </Typography>\n        </EmptyMessageContainer>\n      ) : (\n        <>\n          {messages.map((msg, index) => {\n            if (msg.role === \"system\") return null;\n            const isAssistant = msg.role === \"assistant\";\n\n            return (\n              <Stack\n                key={index}\n                direction={isAssistant ? \"row\" : \"row-reverse\"}\n                gap=\"0.5rem\"\n                alignItems=\"center\"\n              >\n                <Stack flexShrink={0}>\n                  {isAssistant ? (CustomAssistantAvatar ?? <AssistantAvatar />) : (CustomUserAvatar ?? <UserAvatar />)}\n                </Stack>\n                <StyledMessage isAssistant={isAssistant} theme={theme}>\n                  {msg.content}\n                </StyledMessage>\n              </Stack>\n            );\n          })}\n          {isLoadingMessage &&\n            (isAssistantLoading ? (\n              <Stack direction=\"row\" gap=\"0.5rem\" alignItems=\"center\">\n                <Stack flexShrink={0}>\n                  {CustomAssistantAvatar ?? <AssistantAvatar />}\n                </Stack>\n                <TypingIndicator />\n              </Stack>\n            ) : (\n              <Stack direction=\"row-reverse\" gap=\"0.5rem\" alignItems=\"center\">\n                <Stack flexShrink={0}>\n                  {CustomUserAvatar ?? <UserAvatar />}\n                </Stack>\n                <TypingIndicator />\n              </Stack>\n            ))}\n          <div ref={scrollRef} />\n        </>\n      )}\n    </StyledScrollBarStack>\n  );\n};\n\nEliceChat.InputArea = ({\n  placeHolder,\n  value,\n  isDisabled,\n  onChange,\n  onSend,\n  onReset,\n  onRecord,\n  onTranscribingChange,\n  isOnlyRecord,\n  isResetDisabled,\n  isRecordDisabled,\n  maxRows,\n  iconButtonColor,\n  recordButtonColor,\n  resetButtonColor,\n  sendButtonColor,\n  inputFontSize,\n}: {\n  placeHolder: string,\n  value: string;\n  isDisabled: boolean;\n  onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n  onSend: () => void;\n  onReset: () => void;\n  onRecord?: () => void;\n  onTransform?: () => void;\n  setAudioFile?: (file: File) => void;\n  onTranscribingChange?: (value: boolean) => void;\n  type: RecorderType;\n  isOnlyRecord: boolean;\n  isResetDisabled: boolean;\n  isRecordDisabled: boolean;\n  maxRows: number;\n  iconButtonColor?: string;\n  recordButtonColor?: string;\n  resetButtonColor?: string;\n  sendButtonColor?: string;\n  inputFontSize?: string;\n}) => {\n  const theme = useTheme();\n  const { state: recorderState, setIsRecording } = useRecorder();\n  const { isTablet } = useAIDTMediaQuery();\n  const defaultButtonColor = iconButtonColor || theme.palette.primary.main;\n  const iconButtonSize = 'clamp(2.5rem, 10cqi, 3.5rem)';\n  const iconButtonGap = 'clamp(0.375rem, 2cqi, 0.625rem)';\n  return (\n    <InputAreaContainer\n      direction={isTablet ? \"column\" : \"row\"}\n      display={recorderState.isRecording ? \"none\" : \"\"}\n      bgcolor={theme.palette.grey[50]}\n      borderRadius=\"1.125rem\"\n      height={'auto'}\n      width={recorderState.isRecording ? \"100%\" : \"auto\"}\n      justifyContent={recorderState.isRecording ? \"center\" : \"none\"}\n      alignItems={recorderState.isRecording ? \"center\" : \"none\"}\n      p=\"0.5rem 1rem\"\n      gap=\"0.625rem\"\n      zIndex=\"50\"\n    >\n      {\n        isOnlyRecord ? (\n          <OnlyRecordButton\n            theme={theme}\n            onClick={() => {\n              onRecord?.();\n              setIsRecording(true);\n              onTranscribingChange?.(true);\n            }}>\n            <ReadyRecord />\n            <Typography variant=\"h3\">녹음 시작</Typography>\n          </OnlyRecordButton>\n        ) : (\n          <>\n            <Stack flexGrow={1} maxHeight=\"14.625rem\" height=\"100%\">\n              <StyledInput\n                isTablet={isTablet}\n                $fontSize={inputFontSize}\n                disabled={isDisabled}\n                value={value}\n                onChange={onChange}\n                placeholder={placeHolder}\n                theme={theme}\n                multiline\n                maxRows={maxRows}\n                onKeyUpCapture={e => {\n                  if (e.key === 'Enter' && !e.shiftKey) {\n                    e.preventDefault();\n                    if (value.trim()) {\n                      onSend();\n                    }\n                  }\n                }}\n              />\n            </Stack>\n            <Stack\n              direction={\"row\"}\n              display=\"flex\"\n              justifyContent={isTablet ? 'flex-end' : 'center'}\n              gap={iconButtonGap}\n              height={iconButtonSize}\n            >\n              {onRecord && (\n                <EliceIconButton\n                  width={iconButtonSize}\n                  height={iconButtonSize}\n                  onClick={() => {\n                    onRecord();\n                    setIsRecording(true);\n                    onTranscribingChange?.(true);\n                  }}\n                  disabled={isRecordDisabled}\n                  backgroundColor={recordButtonColor || defaultButtonColor}\n                >\n                  <Micro color={theme.palette.primary.light} />\n                </EliceIconButton>\n              )}\n              <EliceIconButton\n                onClick={onReset}\n                width={iconButtonSize}\n                height={iconButtonSize}\n                disabled={isResetDisabled}\n                backgroundColor={resetButtonColor || defaultButtonColor}\n              >\n                <Reset color={theme.palette.primary.light} />\n              </EliceIconButton>\n              <EliceIconButton\n                onClick={onSend} width={iconButtonSize}\n                height={iconButtonSize}\n                disabled={!value.trim()}\n                backgroundColor={sendButtonColor || defaultButtonColor}\n              >\n                <SendArrow color={theme.palette.primary.light} />\n              </EliceIconButton>\n            </Stack>\n          </>\n        )\n      }\n    </InputAreaContainer>\n  );\n};\n\nconst StyledChatContainer = styled(Stack) <{ theme: Theme; height: string; backgroundImage?: string; }>`\n  position: relative;\n  max-height: 100%;\n  height: ${({ height }) => height ?? 'fit-content'};\n  width: 100%;\n  flex: 1;\n  min-height: 0;\n  max-width: 100%;\n  border: 2px solid ${({ theme }) => theme.palette.grey[300]};\n  border-radius: 1.5rem;\n  padding: 1.5rem;\n  gap: 1.75rem;\n\n  ${({ backgroundImage }) =>\n    backgroundImage &&\n    `\n    background-image: url(${backgroundImage});\n    background-size: cover;\n    background-position: center;\n  `}\n`;\nconst StyledScrollBarStack = styled(Stack) <{ theme: Theme, height: string }>`\n  flex: 1;\n  overflow-y: auto;\n  border-radius: 1.125rem;\n  padding-right: 1rem;\n  ::-webkit-scrollbar {\n    width: 0.25rem;\n  }\n  ::-webkit-scrollbar-track {\n    background: ${({ theme }) => theme.palette.grey[200]};\n    border-radius: 0.5rem;\n  }\n  ::-webkit-scrollbar-thumb {\n    background: ${({ theme }) => theme.palette.primary.main};\n    border-radius: 0.5rem;\n  }\n  ::-webkit-scrollbar-thumb:hover {\n    background: ${({ theme }) => theme.palette.secondary.main};\n  }\n`;\n\nconst StyledInput = styled(Input) <{ theme: Theme; isTablet: boolean; $fontSize?: string }>`\n  width: 100%;\n  height: 100%;\n  background-color: transparent;\n  font-size: ${({ isTablet, $fontSize }) => $fontSize ?? (isTablet ? '1.125rem' : '1.4rem')};\n  font-weight: ${({ isTablet }) => isTablet ? 500 : 700};\n  outline: none;\n  resize: none;\n  overflow-y: auto;\n  color: ${({ theme }) => theme.palette.text.primary};\n  ::placeholder {\n    color: ${({ theme }) => theme.palette.grey[300]};\n  }\n  &:has(> textarea:disabled)::before {\n    border: none;\n  }\n  \n  ::before {\n    border: none;\n  }\n  :hover {\n    ::before {\n      border: none;\n    }\n  }\n  ::after {\n    border-bottom: none !important;\n  }\n  \n   ::-webkit-scrollbar {\n    width: 0.25rem;\n  }\n  ::-webkit-scrollbar-track {\n    background: ${({ theme }) => theme.palette.grey[200]};\n    border-radius: 0.5rem;\n  }\n  ::-webkit-scrollbar-thumb {\n    background: ${({ theme }) => theme.palette.primary.main};\n    border-radius: 0.5rem;\n  }\n  ::-webkit-scrollbar-thumb:hover {\n    background: ${({ theme }) => theme.palette.secondary.main};\n  }\n`;\n\nconst StyledMessage = styled(Typography) <{ isAssistant: boolean, theme: Theme }>`\n  color: ${({ theme }) => theme.palette.text.secondary};\n  font-size: ${({ theme }) => theme.typography.body1.fontSize};\n  font-weight: ${({ isAssistant }) => (isAssistant ? 500 : 700)};\n  background-color: ${({ isAssistant, theme }) =>\n    isAssistant ? theme.palette.grey[50] : theme.palette.primary.light};\n  border-radius: 1rem;\n  white-space: pre-wrap;\n  padding: 0.75rem;\n  margin-bottom: 16px;\n`;\n\nconst InputAreaContainer = styled(Stack)`\n  container-type: inline-size;\n`;\n\nconst EmptyMessageContainer = styled(Stack)`\n  display:flex;\n  justify-content: center;\n  align-items: center;\n  height: 100%;\n  gap: 1rem;\n`\n\nconst AIAvatarImage = styled.img`\n  width: 10rem;\n  height: 10rem;\n  aspect-ratio: 1 / 1;\n  flex-shrink: 0;\n`\n\nconst RecordingOverlay = styled(Box)`\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 100;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: flex-end;\n  border-radius: 1.5rem;\n  background-color: rgba(0, 0, 0, 0.3);\n  display: flex;\n`;\n\nconst OverlayContent = styled(Box)`\n  width: 100%;\n  height: 212px;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  background-color: #fff;\n  border-radius: 1.5rem;\n`;\n\nconst OnlyRecordButton = styled(Stack) <{ theme: Theme }>`\n  color: ${({ theme }) => theme.palette.common.white};\n  background:${({ theme }) => theme.palette.common.red[900]};\n  width: 100%;\n  flex-direction: row;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  border-radius: 16px;\n  height: 55px;\n  gap: 8px;\n\n  &:hover {\n    background: ${({ theme }) => theme.palette.common.red[600]};\n    color: ${({ theme }) => theme.palette.common.red[900]};\n  }\n`\n\nexport default EliceChat;\n","import { IconButton, type IconButtonProps, useTheme } from '@mui/material';\n\nimport { gray300Color, gray400Color } from '../tokenColorTemporary';\nimport useAIDTMediaQuery from '../../hooks/useAIDTMediaQuery';\nimport type { ReactNode } from 'react';\n\nexport interface EliceIconButtonProps extends IconButtonProps {\n  children: ReactNode;\n  backgroundColor?: string;\n  width?: number | string;\n  height?: number | string;\n  borderRadius?: number;\n}\nconst EliceIconButton = ({\n  children,\n  disabled,\n  backgroundColor,\n  width,\n  height,\n  borderRadius,\n  ...rest\n}: EliceIconButtonProps) => {\n  const theme = useTheme();\n  const { isMiniTablet } = useAIDTMediaQuery();\n  return (\n    <IconButton\n      disabled={disabled}\n      style={{\n        flexShrink: 0,\n        height: height ?? '3.5rem',\n        width: width ?? '3.5rem',\n        boxSizing: 'border-box',\n        backgroundColor: disabled ? gray300Color : backgroundColor ? backgroundColor : theme.palette.primary.main,\n        borderRadius: borderRadius ?? '1rem',\n        padding: isMiniTablet ? 8 : 10,\n        color: disabled ? gray400Color : theme.palette.primary.light,\n      }}\n      {...rest}\n    >\n      {children}\n    </IconButton>\n  );\n};\n\nexport default EliceIconButton;\n","// This is using token colors of blue-purple theme of Elice UI Content\n// https://www.figma.com/design/dtsncp7RSV7wMqPf3jiCvf/Design-System?node-id=51-10973&node-type=SECTION&t=gCjy5t3c42ojVpyW-0\n// TODO: apply theme;\nexport const primaryColor = '#5D6BB3';\nexport const secondaryColor = '#0A379B';\nexport const blackColor = '#031234';\nexport const main50Color = '#F4F6FF';\nexport const main100Color = '#DFE1F0';\nexport const main200Color = '#BEC4E1';\nexport const main300Color = '#9EA6D1';\nexport const main400Color = '#7D89C2';\nexport const main950Color = '#072567';\nexport const gray50Color = '#FAFAFD';\nexport const gray100Color = '#F3F4FA';\nexport const gray200Color = '#F1F1F6';\nexport const gray300Color = '#D8D8E2';\nexport const gray400Color = '#9B9BA9';\nexport const textPrimaryColor = '#1E1E1E';\nexport const textSecondaryColor = '#363643';\nexport const textTeriaryColor = '#525265';\nexport const textQuaternaryColor = '#9FA0B1';\nexport const quaternaryColor = '#9FA0B1';\nexport const point3Color = '#8F68F6';\nexport const KeyElementaryBg = '#9BCAFF';\nexport const KeyMiddleBg = '#B2B2B2';\nexport const KeyHighBg = '#0A379B';\n","import React, { createContext, useContext, useReducer, useRef } from 'react';\n\nimport type { Dispatch } from 'react';\n\nexport type AudioStep = 'ready' | 'recording' | 'pause' | 'waiting' | '';\n\nexport type StepFlowType =\n  | 'basic'\n  | 'pauseable'\n  | 'oneClick'\n  | 'recordOnly'\n  | 'instantRecord';\n\ninterface RecorderState {\n  step: AudioStep;\n  analyser: AnalyserNode | null;\n  isRecording: boolean;\n  file: File | null;\n  audioUrl: string;\n}\n\ntype RecorderContextType = {\n  state: RecorderState;\n  dispatch: Dispatch<RecorderAction>;\n  startRecording: (onComplete?: (file: File) => void) => Promise<void>;\n  stopRecording: (isSubmit: boolean) => void;\n  pauseRecording: () => void;\n  resumeRecording: () => void;\n  setIsRecording: (isRecording: boolean) => void;\n  setStep: (step: AudioStep) => void;\n  resetAnalyzer: () => void;\n};\n\ntype RecorderAction =\n  | { type: 'SET_STEP'; payload: AudioStep }\n  | { type: 'SET_ANALYSER'; payload: AnalyserNode | null }\n  | { type: 'SET_IS_RECORDING'; payload: boolean }\n  | { type: 'SET_FILE'; payload: File }\n  | { type: 'SET_URL'; payload: string };\n\nconst RecorderContext = createContext<RecorderContextType | null>(null);\n\nconst initialState: RecorderState = {\n  step: 'ready',\n  analyser: null,\n  isRecording: false,\n  file: null,\n  audioUrl: '',\n};\n\nconst recorderReducer = (\n  state: RecorderState,\n  action: RecorderAction\n): RecorderState => {\n  switch (action.type) {\n    case 'SET_STEP':\n      return { ...state, step: action.payload };\n\n    case 'SET_ANALYSER':\n      return { ...state, analyser: action.payload };\n\n    case 'SET_IS_RECORDING':\n      return { ...state, isRecording: action.payload };\n\n    case 'SET_FILE':\n      return { ...state, file: action.payload };\n\n    case 'SET_URL':\n      return { ...state, audioUrl: action.payload };\n\n    default:\n      return state;\n  }\n};\n\nexport const RecorderProvider = ({\n  children,\n}: {\n  children: React.ReactNode;\n}) => {\n  const [state, dispatch] = useReducer(recorderReducer, initialState);\n\n  const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n  const audioChunks = useRef<Blob[]>([]);\n  const streamRef = useRef<MediaStream | null>(null);\n  const audioContextRef = useRef<AudioContext | null>(null);\n  const analyserRef = useRef<AnalyserNode | null>(null);\n  const sourceRef = useRef<MediaStreamAudioSourceNode | null>(null);\n\n  const startRecording = async (\n    onComplete?: (file: File) => void | Promise<void>\n  ) => {\n    try {\n      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n      streamRef.current = stream;\n      audioChunks.current = [];\n\n      const recorder = new MediaRecorder(stream, { mimeType: 'audio/webm' });\n\n      mediaRecorderRef.current = recorder;\n\n      recorder.addEventListener('dataavailable', event => {\n        if (event.data.size > 0) {\n          audioChunks.current.push(event.data);\n        }\n      });\n\n      recorder.addEventListener('stop', async () => {\n        const file = new File(\n          [...(audioChunks.current ?? [])],\n          `recording-${Date.now()}.webm`,\n          {\n            type: 'audio/webm',\n          }\n        );\n        const url = URL.createObjectURL(file);\n\n        dispatch({ type: 'SET_FILE', payload: file });\n        dispatch({ type: 'SET_URL', payload: url });\n\n        await onComplete?.(file);\n      });\n\n      // AudioContext 연결\n      audioContextRef.current = new AudioContext();\n      analyserRef.current = audioContextRef.current.createAnalyser();\n      sourceRef.current =\n        audioContextRef.current.createMediaStreamSource(stream);\n      sourceRef.current.connect(analyserRef.current);\n      analyserRef.current.fftSize = 256;\n\n      dispatch({ type: 'SET_ANALYSER', payload: analyserRef.current });\n      recorder.addEventListener('start', () => {\n        dispatch({ type: 'SET_STEP', payload: 'recording' });\n      });\n\n      recorder.start();\n    } catch (error) {\n      console.error('🎤 마이크 권한 오류:', error);\n    }\n  };\n\n  const stopRecording = (isSubmit?: boolean) => {\n    mediaRecorderRef.current?.stop();\n    streamRef.current?.getTracks().forEach(track => track.stop());\n\n    if (audioContextRef.current?.state !== 'closed') {\n      audioContextRef.current\n        ?.close()\n        .catch(e => console.warn('AudioContext already closed', e));\n    }\n    if (isSubmit) {\n      dispatch({ type: 'SET_STEP', payload: 'ready' });\n    } else {\n      dispatch({ type: 'SET_STEP', payload: 'waiting' });\n    }\n  };\n\n  const pauseRecording = () => {\n    const recorder = mediaRecorderRef.current;\n    if (recorder && recorder.state === 'recording') {\n      recorder.pause();\n      dispatch({ type: 'SET_STEP', payload: 'pause' });\n    }\n  };\n\n  const resumeRecording = () => {\n    const recorder = mediaRecorderRef.current;\n    if (recorder && recorder.state === 'paused') {\n      recorder.resume();\n      dispatch({ type: 'SET_STEP', payload: 'recording' });\n    }\n  };\n\n  const setIsRecording = (isRecording: boolean) =>\n    dispatch({ type: 'SET_IS_RECORDING', payload: isRecording });\n\n  const setStep = (step: AudioStep) => {\n    dispatch({ type: 'SET_STEP', payload: step });\n  };\n\n  const resetAnalyzer = () => {\n    if (audioContextRef.current?.state !== 'closed') {\n      audioContextRef.current\n        ?.close()\n        .catch(e => console.warn('AudioContext already closed', e));\n    }\n    analyserRef.current = null;\n    sourceRef.current = null;\n    audioContextRef.current = null;\n    dispatch({ type: 'SET_ANALYSER', payload: null });\n  };\n\n  return (\n    <RecorderContext.Provider\n      value={{\n        state,\n        dispatch,\n        startRecording,\n        stopRecording,\n        pauseRecording,\n        resumeRecording,\n        setIsRecording,\n        setStep,\n        resetAnalyzer,\n      }}\n    >\n      {children}\n    </RecorderContext.Provider>\n  );\n};\n\nexport const useRecorder = () => {\n  const context = useContext(RecorderContext);\n  if (!context) {\n    throw new Error('useRecorder must be used within RecorderProvider');\n  }\n  return context;\n};\n","const AssistantAvatar = (props: any) => {\n  return (\n    <svg\n      width=\"36\"\n      height=\"36\"\n      viewBox=\"0 0 36 36\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <mask\n        id=\"mask0_126_24810\"\n        maskUnits=\"userSpaceOnUse\"\n        x=\"0\"\n        y=\"0\"\n        width=\"36\"\n        height=\"36\"\n      >\n        <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#D9D9D9\" />\n      </mask>\n      <g mask=\"url(#mask0_126_24810)\">\n        <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#F1F1F6\" />\n        <path\n          d=\"M15.4502 31.1221C15.2243 30.7552 13.0394 28.6078 12.6163 28.4149C11.8395 27.4387 8.28283 20.9291 7.12702 20.387C5.73431 19.7348 2.52359 22.8981 3.24529 24.3084C3.41717 24.6434 7.38374 28.5483 8.71805 30.2285C11.325 33.5935 15.9846 31.9904 15.4502 31.1221Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M7.1105 21.9956C7.14907 22.0177 7.1678 22.065 7.15127 22.108C6.27312 24.3701 4.01328 24.5838 3.99014 24.586C3.94056 24.5904 3.89648 24.553 3.89208 24.5034C3.88767 24.4538 3.92513 24.4097 3.97471 24.4053C3.99675 24.4031 6.14531 24.1971 6.98049 22.043C6.99922 21.9967 7.05101 21.9725 7.09838 21.9912C7.10279 21.9923 7.1061 21.9945 7.1094 21.9967L7.1105 21.9956Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M12.1237 27.6481C12.1677 27.6547 12.2019 27.6921 12.2008 27.7384C12.1854 30.1646 10.1492 31.1684 10.1283 31.1783C10.0831 31.2004 10.0291 31.1805 10.0071 31.1353C9.98504 31.0902 10.0049 31.0362 10.05 31.0141C10.0699 31.0042 12.0047 30.0467 12.019 27.7373C12.019 27.6866 12.0598 27.647 12.1105 27.647C12.1149 27.647 12.1193 27.647 12.1237 27.647V27.6481Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M5.41928 25.3143C5.42259 25.3022 5.4292 25.2912 5.43801 25.2802C5.47107 25.2416 5.52836 25.2383 5.56582 25.2703C6.96073 26.4701 9.61393 29.8715 9.63376 29.8957C9.66571 29.9343 9.6602 29.9916 9.62164 30.0235C9.58307 30.0555 9.52578 30.05 9.49383 30.0114C9.47399 29.9861 6.83072 26.598 5.44683 25.408C5.41928 25.3837 5.40936 25.3463 5.41928 25.3132V25.3143Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M30.9088 35.8654C30.7788 34.5961 26.4728 28.3543 25.8084 27.2987C25.7666 26.836 25.6101 26.371 25.338 26.0372C24.6945 25.2461 21.9531 25.8289 21.2017 26.0945C20.2068 26.4459 19.0884 26.8723 18.4383 27.4618C18.4284 27.4519 18.4163 27.4431 18.4053 27.4343C18.3943 27.4442 18.3832 27.453 18.3722 27.4618C17.7221 26.8723 16.6038 26.4459 15.6088 26.0945C14.8574 25.8289 11.9078 22.6039 12.3067 33.9747C12.2913 35.6891 12.472 43.4217 13.1154 44.1611C14.1831 45.3896 17.2627 45.1747 17.5932 44.0134C17.7486 43.4702 17.7883 39.2458 17.7883 39.2458C17.7883 39.2458 17.9844 39.3119 18.4053 39.3119C18.8262 39.3119 19.0223 39.2458 19.0223 39.2458C19.0223 39.2458 19.0631 43.4702 19.2173 44.0134C19.5479 45.1747 22.6275 45.3896 23.6951 44.1611C24.3386 43.4206 24.5182 35.6891 24.5039 33.9747C25.0361 35.9745 26.1808 37.7198 26.4409 37.992C27.535 39.1379 31.0652 37.3959 30.9088 35.8665V35.8654Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M22.1792 32.669C22.1329 32.2789 21.9103 31.9671 21.5677 31.8139C21.1324 31.6189 20.7622 31.7522 20.4647 31.858C20.3358 31.9043 20.2135 31.9484 20.1 31.9605C19.797 31.9935 19.4951 31.8679 19.1326 31.7016L19.1282 31.6994C18.6566 31.4834 18.1685 31.2597 17.5934 31.4294C17.3565 31.4999 17.1758 31.6211 17.016 31.7291C16.8629 31.8327 16.7417 31.9142 16.6084 31.9285C16.4894 31.9418 16.41 31.912 16.28 31.8646C16.0971 31.7974 15.8459 31.7049 15.4768 31.7677C15.122 31.8283 14.8212 32.096 14.6912 32.4673C14.5557 32.8552 14.635 33.2805 14.8994 33.5769C15.2212 33.9372 15.7721 34.1487 16.4122 34.1575C16.431 34.1575 16.4497 34.1575 16.4684 34.1575C16.7957 34.1575 17.0954 34.1223 17.3862 34.087C17.6947 34.0507 18.0187 34.0121 18.3867 34.0132C18.9167 34.0143 19.3332 34.0562 19.699 34.0936C19.9315 34.1168 20.1518 34.1388 20.3711 34.1476C20.9341 34.1696 21.3682 34.0484 21.7351 33.7664C22.0558 33.5196 22.2299 33.0888 22.1803 32.669H22.1792Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M16.4672 34.2489H16.4099C15.7455 34.2401 15.1692 34.0175 14.831 33.6374C14.5445 33.3168 14.4586 32.8573 14.6051 32.4375C14.7461 32.0354 15.0745 31.7445 15.4612 31.6784C15.8546 31.6123 16.1289 31.7125 16.3107 31.7797C16.4374 31.826 16.5002 31.8491 16.5983 31.8392C16.7085 31.8271 16.822 31.7511 16.9641 31.6552C17.1294 31.5439 17.3167 31.4183 17.5668 31.3434C18.175 31.1638 18.6774 31.3941 19.1645 31.6178C19.5203 31.7808 19.8112 31.902 20.0889 31.8712C20.1914 31.8602 20.3081 31.8183 20.4326 31.7731C20.729 31.6662 21.1345 31.5208 21.6039 31.7312C21.9763 31.8976 22.2187 32.2359 22.2683 32.659C22.3212 33.1096 22.1328 33.5724 21.7879 33.839C21.4034 34.1354 20.9505 34.2632 20.3643 34.239C20.1418 34.2302 19.9203 34.2081 19.6867 34.1839C19.3209 34.1475 18.9077 34.1057 18.3833 34.1046H18.3645C18.0097 34.1046 17.6979 34.142 17.3949 34.1773C17.0996 34.2126 16.7966 34.2489 16.465 34.2489H16.4672ZM15.7157 31.8381C15.6463 31.8381 15.5725 31.8436 15.4921 31.858C15.1703 31.913 14.896 32.1577 14.777 32.4981C14.6525 32.8551 14.7252 33.2452 14.9665 33.5162C15.2717 33.8578 15.7984 34.0583 16.4121 34.066H16.4672C16.7878 34.066 17.0853 34.0308 17.3729 33.9966C17.688 33.9591 18.0141 33.9217 18.3855 33.9217C18.9198 33.9228 19.3374 33.9646 19.7054 34.0021C19.9379 34.0252 20.1561 34.0473 20.3732 34.0561C20.9141 34.077 21.3284 33.9624 21.6777 33.6936C21.973 33.4655 22.135 33.0678 22.0887 32.6788C22.0468 32.3218 21.843 32.0365 21.5301 31.8965C21.1279 31.7169 20.7918 31.837 20.4955 31.9439C20.361 31.9924 20.2332 32.0376 20.1098 32.0508C19.787 32.086 19.4719 31.9571 19.0939 31.7841C18.6334 31.5726 18.1618 31.3566 17.6186 31.5175C17.396 31.5836 17.2208 31.7015 17.0666 31.8051C16.909 31.9108 16.7735 32.0023 16.6181 32.0188C16.4782 32.0343 16.3812 31.999 16.2479 31.9494C16.1146 31.9009 15.9438 31.837 15.7157 31.837V31.8381Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M18.9727 32.052C19.3627 32.2305 19.7374 32.3869 20.1417 32.344C20.588 32.2966 20.9538 31.9605 21.4099 32.1655C21.9212 32.3947 21.9135 33.1417 21.4981 33.4612C21.1995 33.6915 20.8458 33.7819 20.3841 33.7631C19.8387 33.7411 19.2724 33.6309 18.3854 33.6287C17.6108 33.6265 17.0754 33.7808 16.4165 33.773C15.9074 33.7664 15.448 33.6144 15.1868 33.3213C14.8177 32.907 15.0733 32.2283 15.5427 32.1479C16.0474 32.0619 16.206 32.3594 16.6512 32.312C17.0632 32.268 17.3012 31.9187 17.7045 31.7997C18.143 31.6697 18.5199 31.8438 18.9738 32.052\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M29.2726 34.2224C29.2384 34.2224 29.2054 34.2026 29.1899 34.1695C28.4341 32.5091 25.9109 29.175 25.8922 29.1485C25.8635 29.1067 25.8746 29.0505 25.9164 29.0218C25.9583 28.9932 26.0145 29.0042 26.0431 29.0461C26.0619 29.0725 28.5939 32.4198 29.3563 34.0946C29.3773 34.1398 29.3563 34.1938 29.3111 34.2147C29.299 34.2202 29.2858 34.2224 29.2737 34.2224H29.2726Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M8.75773 28.8853C9.20618 28.4997 8.68832 27.4397 7.75177 26.5484C6.92871 25.7639 6.18277 25.7462 6.05386 26.2266C5.93376 26.6729 6.2621 27.3637 6.8637 28.0336C7.42783 28.6606 8.32031 29.2622 8.75773 28.8853Z\"\n          fill=\"#DDD6FB\"\n        />\n        <path\n          d=\"M5.96023 26.6377C5.93048 26.4768 5.93268 26.3303 5.96684 26.2013C6.01642 26.0184 6.14423 25.8895 6.32824 25.8377C6.72048 25.7276 7.27691 25.9689 7.8146 26.4812C8.55502 27.1864 9.0244 27.9819 9.01118 28.5053C9.00677 28.6959 8.94066 28.8468 8.81615 28.9537C8.2994 29.3977 7.32428 28.6827 6.79541 28.0932C6.32824 27.5731 6.03625 27.0586 5.95912 26.6377H5.96023ZM8.81505 28.3202C8.72911 27.8519 8.3005 27.1952 7.69009 26.6134C7.11053 26.0614 6.62132 25.9446 6.37782 26.0129C6.25441 26.0471 6.17508 26.1264 6.14313 26.2487C6.03515 26.6498 6.33705 27.3098 6.93204 27.972C7.52041 28.6276 8.34347 29.1223 8.69936 28.816C8.7831 28.7444 8.82717 28.6375 8.83158 28.5009C8.83268 28.4447 8.82717 28.3841 8.81615 28.3202H8.81505Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M8.3413 29.0451C8.75669 28.6881 8.2774 27.7053 7.40916 26.8789C6.64559 26.1517 5.95475 26.1352 5.83575 26.5803C5.72447 26.9946 6.02857 27.6348 6.5861 28.2551C7.10836 28.8369 7.93583 29.3944 8.3424 29.0451H8.3413Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M26.5026 37.0069C26.4662 36.9805 26.4552 36.9309 26.4773 36.8901C27.6408 34.7603 29.9094 34.8418 29.9326 34.8429C29.9833 34.8451 30.0218 34.8881 30.0196 34.9377C30.0174 34.9884 29.9745 35.0269 29.9249 35.0247C29.9028 35.0247 27.7455 34.9509 26.6381 36.9783C26.6139 37.0223 26.5588 37.0389 26.5147 37.0146C26.5114 37.0124 26.507 37.0102 26.5037 37.008L26.5026 37.0069Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M17.3518 7.34349C10.3883 8.03213 5.34083 13.3705 6.5914 21.7113C7.18198 25.6503 10.3012 28.2374 12.852 28.991C14.7339 29.5464 16.9155 29.77 19.5433 29.51C22.1701 29.25 24.2658 28.6043 26.0033 27.6909C28.3568 26.4524 30.9098 23.3045 30.7169 19.3258C30.3104 10.9002 24.3142 6.65485 17.3518 7.34239V7.34349Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M16.7911 13.7771C16.5619 12.5651 16.0187 10.9113 14.7263 9.91301C13.955 9.31692 13.2719 9.23649 13.2653 9.23539L13.2851 9.05469C13.3137 9.05799 16.1531 9.40947 16.9707 13.7441L16.7922 13.7782L16.7911 13.7771Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M19.1611 13.5435L18.9793 13.5457C18.9661 12.2775 19.1842 10.4969 20.3004 9.22102C20.9736 8.45195 21.6468 8.23489 21.6755 8.22607L21.7295 8.39906C21.703 8.40788 19.1159 9.27501 19.1611 13.5435Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M12.5655 17.5111C14.0363 17.0341 14.8863 15.592 14.4641 14.2902C14.0419 12.9884 12.5073 12.3198 11.0364 12.7969C9.56563 13.2739 8.71557 14.716 9.1378 16.0178C9.56003 17.3196 11.0946 17.9882 12.5655 17.5111Z\"\n          fill=\"#DDD6FB\"\n        />\n        <path\n          d=\"M11.911 17.7415C11.3976 17.7922 10.8863 17.7161 10.4246 17.5145C9.75363 17.2214 9.26662 16.7003 9.05397 16.0458C8.84132 15.3913 8.92947 14.6828 9.30078 14.0515C9.67099 13.4234 10.2781 12.9474 11.0097 12.7094C12.5258 12.2169 14.1147 12.9133 14.5521 14.2608C14.7647 14.9153 14.6766 15.6238 14.3053 16.2551C13.9351 16.8832 13.3279 17.3591 12.5963 17.5971C12.3705 17.671 12.1413 17.7183 11.9121 17.7415H11.911ZM11.7072 12.748C11.4945 12.7689 11.2797 12.813 11.0659 12.8824C10.3762 13.1061 9.80432 13.5545 9.45724 14.144C9.11237 14.7302 9.02973 15.3847 9.22586 15.9896C9.42198 16.5945 9.87373 17.0771 10.4963 17.3481C11.1232 17.6214 11.8493 17.6478 12.539 17.4242C13.2288 17.2005 13.8006 16.752 14.1477 16.1626C14.4926 15.5764 14.5752 14.9219 14.3791 14.317C14.0342 13.2537 12.9093 12.629 11.7072 12.7469V12.748Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M27.1037 14.2414C27.2629 12.8822 26.147 11.6345 24.6113 11.4546C23.0755 11.2747 21.7015 12.2308 21.5423 13.5901C21.3831 14.9494 22.499 16.1971 24.0348 16.3769C25.5705 16.5568 26.9445 15.6007 27.1037 14.2414Z\"\n          fill=\"#DDD6FB\"\n        />\n        <path\n          d=\"M24.7186 16.4743C24.4938 16.4963 24.2602 16.4952 24.0244 16.4677C23.2598 16.3784 22.5711 16.0302 22.0852 15.487C21.5971 14.9405 21.3723 14.264 21.4528 13.5798C21.5332 12.8967 21.9078 12.2896 22.5094 11.8709C23.1077 11.4544 23.858 11.2748 24.6227 11.3651C26.206 11.5502 27.3596 12.846 27.1944 14.253C27.0544 15.4507 26.0044 16.3487 24.7186 16.4754V16.4743ZM23.9407 11.5381C23.4581 11.5855 23.0008 11.7497 22.613 12.0196C22.0555 12.4074 21.7073 12.9694 21.6335 13.6007C21.5596 14.2321 21.7679 14.859 22.2218 15.3658C22.678 15.876 23.3259 16.2032 24.0465 16.287C25.5306 16.4611 26.8616 15.5388 27.0148 14.231C27.1679 12.9231 26.0859 11.7188 24.6018 11.5447C24.3792 11.5183 24.1577 11.5172 23.9418 11.5381H23.9407Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M25.8106 25.744C24.0741 26.6574 21.9784 27.3041 19.3506 27.5631C16.7238 27.8231 14.5422 27.5994 12.6603 27.0441C10.1272 26.296 7.03549 23.7397 6.41406 19.847C6.4383 20.4508 6.4967 21.0722 6.59256 21.7113C7.18314 25.6503 10.3024 28.2374 12.8531 28.991C14.735 29.5464 16.9167 29.77 19.5434 29.51C22.1701 29.25 24.2658 28.6043 26.0034 27.6909C28.3569 26.4524 30.9098 23.3045 30.717 19.3258C30.6861 18.6802 30.6211 18.0587 30.5264 17.4626C30.6784 21.4006 28.1475 24.5143 25.8095 25.7429L25.8106 25.744Z\"\n          fill=\"#F0EEF9\"\n        />\n        <path\n          d=\"M17.9854 13.7529C13.9594 14.1507 12.213 14.5363 10.7905 15.2294C8.77858 16.2089 8.23758 18.1117 8.80392 19.803C9.17744 20.9203 10.7024 22.5014 12.8553 22.1587C16.163 21.6321 16.2754 18.3035 18.414 18.0919\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M12.6526 22.4133C10.5315 22.6238 8.98237 21.0537 8.58792 19.8747C7.91911 17.876 8.74438 15.972 10.6902 15.0245C12.1898 14.294 14.0254 13.916 17.9622 13.5271L18.0074 13.9799C14.1312 14.3634 12.3352 14.7303 10.8896 15.4344C9.16087 16.2762 8.42706 17.963 9.01873 19.7315C9.37903 20.8068 10.8378 22.2502 12.8189 21.9351C14.5411 21.6608 15.3641 20.57 16.0913 19.607C16.726 18.7663 17.3254 17.973 18.3909 17.8672L18.436 18.32C17.5678 18.406 17.0521 19.0891 16.4538 19.8813C15.6749 20.9126 14.7923 22.0817 12.8905 22.3847C12.8101 22.3979 12.7308 22.4078 12.6526 22.4155V22.4133Z\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M17.9855 13.7528C22.0115 13.3551 23.7987 13.3903 25.3302 13.7914C27.4953 14.3588 28.3977 16.1174 28.174 17.888C28.0264 19.057 26.8408 20.9059 24.6625 20.9907C21.3163 21.1218 20.5538 17.8803 18.4152 18.0918\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M24.9115 21.2011C24.8333 21.2088 24.7528 21.2143 24.6713 21.2177C22.7464 21.2926 21.6512 20.3197 20.686 19.4602C19.9445 18.8003 19.3043 18.2317 18.4372 18.3177L18.392 17.8648C19.4586 17.759 20.2012 18.4201 20.9879 19.1209C21.8892 19.923 22.9106 20.832 24.6526 20.7637C24.7242 20.7604 24.7958 20.756 24.8652 20.7494C26.7405 20.5643 27.8104 18.9446 27.947 17.8593C28.1806 16.0093 27.1306 14.4987 25.2707 14.0117C23.7149 13.604 21.8826 13.5963 18.0064 13.9798L17.9612 13.5269C21.898 13.138 23.7722 13.149 25.3864 13.5721C27.4798 14.1208 28.6621 15.8264 28.3977 17.9166C28.2412 19.1495 27.0303 20.9918 24.9093 21.2022L24.9115 21.2011Z\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M14.324 18.3331C14.8011 18.3331 15.1879 17.9464 15.1879 17.4693C15.1879 16.9922 14.8011 16.6055 14.324 16.6055C13.847 16.6055 13.4602 16.9922 13.4602 17.4693C13.4602 17.9464 13.847 18.3331 14.324 18.3331Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M23.639 15.9476C21.8639 15.5312 20.923 16.9338 20.923 16.9338C20.923 16.9338 22.1537 16.547 23.6169 17.1486\"\n          stroke=\"white\"\n          stroke-width=\"0.330547\"\n          stroke-linejoin=\"bevel\"\n        />\n        <path\n          d=\"M13.2729 8.81779L13.2608 8.80897C12.9457 8.55886 12.3077 8.08508 11.5739 7.71927C10.3828 7.12539 9.46059 7.07801 8.83145 7.57934C8.38961 7.93082 8.28384 8.7043 8.50641 9.94275C8.65736 10.779 8.90417 11.5294 8.90747 11.5371C8.95485 11.6803 9.08156 11.7806 9.23141 11.7949C9.25565 11.7971 9.27989 11.7971 9.30413 11.7949C9.35481 11.7894 9.40329 11.7751 9.44736 11.7508C9.51017 11.7167 9.56195 11.6649 9.59721 11.6021C9.59942 11.5988 9.81317 11.2242 10.3354 10.7867C10.8357 10.367 11.7259 9.80172 13.1208 9.4921C13.252 9.46566 13.3599 9.3698 13.4029 9.24309C13.4558 9.08774 13.4029 8.91805 13.2718 8.81999L13.2729 8.81779Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M21.8253 8.12797C22.0788 7.82827 22.5999 7.25092 23.2313 6.76171C24.2064 6.00586 25.0184 5.78659 25.6465 6.10943C26.0608 6.32208 26.2811 7.01402 26.3032 8.16323C26.3186 8.98629 26.2282 9.74104 26.2238 9.77299C26.2172 9.83139 26.1753 9.87987 26.1192 9.8964C26.0905 9.90521 26.0608 9.90411 26.0332 9.8964C26.0057 9.88868 25.9825 9.87216 25.9638 9.85012C25.9605 9.84681 25.6608 9.49533 25.0151 9.14275C24.419 8.81661 23.3987 8.42105 21.9201 8.3902C21.8683 8.3902 21.8187 8.36156 21.7923 8.31638C21.7592 8.26019 21.7681 8.18967 21.811 8.14229L21.8231 8.12797H21.8253Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M26.1147 10.129C26.0651 10.1334 26.0144 10.129 25.9659 10.1135C25.8976 10.0926 25.837 10.0518 25.7919 9.99784C25.7897 9.99454 25.5054 9.6695 24.9082 9.34226C24.3352 9.02824 23.3513 8.64811 21.9178 8.61836C21.7878 8.61836 21.6644 8.54564 21.5983 8.43105C21.5168 8.29002 21.5344 8.11483 21.6435 7.99363L21.6534 7.98261C21.9134 7.6752 22.4456 7.08572 23.0935 6.58329C24.1446 5.76904 25.0382 5.54207 25.7522 5.90897C26.2535 6.1668 26.508 6.90392 26.5323 8.1611C26.5477 8.97976 26.4618 9.72018 26.4518 9.80172C26.4331 9.95047 26.3295 10.0739 26.1863 10.1157C26.1632 10.1223 26.14 10.1268 26.1158 10.1301L26.1147 10.129ZM22.0908 8.16882C23.5287 8.22611 24.5303 8.61836 25.1253 8.9434C25.5737 9.1891 25.8657 9.43481 26.0166 9.57915C26.0431 9.31031 26.0871 8.75499 26.0761 8.16882C26.0497 6.77942 25.7313 6.4092 25.5428 6.31224C25.0007 6.03348 24.2691 6.24503 23.3712 6.94138C22.8235 7.36559 22.3619 7.8581 22.0908 8.16771V8.16882ZM21.9234 8.16331C21.9234 8.16331 21.9245 8.16331 21.9256 8.16331C21.9256 8.16331 21.9245 8.16331 21.9234 8.16331Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M26.0508 17.9012L25.3621 18.3805L25.3522 18.2791L26.1213 18.614L25.9847 18.9248L25.2365 18.5821L25.2916 18.5391L25.3765 19.3368L25.0547 19.3688L24.9809 18.57L25.0437 18.6019L24.3771 19.0845L24.1821 18.8069L24.8762 18.3265L24.8862 18.4278L24.1116 18.0929L24.2482 17.7767L24.9963 18.1248L24.9412 18.1678L24.8575 17.3701L25.1792 17.3381L25.2531 18.137L25.1903 18.105L25.8558 17.6169L26.0519 17.9001L26.0508 17.9012Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M12.8289 19.2081L12.1402 19.6873L12.1303 19.586L12.8994 19.9209L12.7627 20.2316L12.0146 19.889L12.0697 19.846L12.1545 20.6437L11.8328 20.6757L11.759 19.8769L11.8218 19.9088L11.1552 20.3914L10.9602 20.1137L11.6543 19.6334L11.6642 19.7347L10.8896 19.3998L11.0263 19.0835L11.7744 19.4317L11.7193 19.4747L11.6356 18.677L11.9573 18.645L12.0311 19.4438L11.9683 19.4119L12.6338 18.9238L12.83 19.2069L12.8289 19.2081Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M9.21048 10.6787C9.18183 10.6821 9.15098 10.6699 9.13115 10.6457C9.09919 10.6071 9.1047 10.5498 9.14327 10.5179L9.55315 10.1785C9.44517 9.92069 9.07716 8.96211 9.30854 8.474C9.4044 8.27126 9.55315 8.13464 9.75037 8.06853C10.1757 7.92529 10.6968 8.15777 10.9007 8.26465C11.2698 8.45747 11.543 8.7175 11.6532 8.83209L12.0267 8.5963C12.0697 8.56986 12.1259 8.58198 12.1523 8.62495C12.1788 8.66792 12.1667 8.72301 12.1237 8.75056L11.6202 9.06898L11.5684 9.00948C11.5684 9.00948 11.2599 8.658 10.8158 8.42552C10.6329 8.32966 10.168 8.12031 9.80767 8.24151C9.65672 8.2922 9.54653 8.39356 9.47161 8.55223C9.2832 8.95109 9.60603 9.85458 9.74597 10.1686L9.77351 10.2314L9.25896 10.6578C9.24463 10.6699 9.22701 10.6765 9.21048 10.6787Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M22.3045 20.2592C22.0324 19.0604 20.7388 17.7041 18.3997 17.9354C16.0605 18.1668 15.0578 19.7501 15.0248 20.9787C14.9642 23.2473 17.1921 24.4604 19.0266 24.2786C20.8611 24.0968 22.8081 22.4716 22.3045 20.2592Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M18.6013 19.9652C19.3341 19.8928 19.8767 19.3151 19.8134 18.675C19.7501 18.0349 19.1048 17.5748 18.372 17.6473C17.6393 17.7198 17.0966 18.2975 17.1599 18.9375C17.2233 19.5776 17.8686 20.0377 18.6013 19.9652Z\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M18.7975 21.9646C18.2201 22.0219 17.4224 21.72 17.0379 20.9234C16.9839 20.811 16.996 20.6601 17.0665 20.5874C17.1371 20.5146 18.0461 20.3637 18.6333 20.3053C19.2206 20.2469 20.1428 20.2172 20.2255 20.2755C20.3081 20.3328 20.35 20.4783 20.3191 20.5995C20.0977 21.4567 19.376 21.9085 18.7975 21.9657V21.9646Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M25.9879 9.01947C25.9703 9.02167 25.9527 9.01837 25.9362 9.00845L25.3478 8.69113L25.3632 8.62392C25.4392 8.28786 25.5781 7.33919 25.3158 6.9855C25.2112 6.84447 25.0844 6.76624 24.9258 6.74641C24.5501 6.69793 24.1347 6.99542 23.9727 7.12433C23.5816 7.43945 23.3513 7.83942 23.3491 7.84382L23.3105 7.91214L22.7541 7.69838C22.7067 7.68075 22.6836 7.62787 22.7023 7.58049C22.7199 7.53421 22.7728 7.50997 22.8202 7.5287L23.2323 7.68736C23.3182 7.55294 23.5353 7.24443 23.8592 6.9833C24.0388 6.83896 24.5027 6.50952 24.9489 6.56571C25.1561 6.59215 25.3279 6.69682 25.4613 6.87642C25.783 7.31054 25.61 8.32202 25.5549 8.59637L26.0232 8.84869C26.0673 8.87293 26.0838 8.92802 26.0596 8.97209C26.0441 8.99964 26.0177 9.01616 25.9879 9.01947Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M8.35775 25.5271C8.31368 25.5315 8.27181 25.5029 8.26079 25.4577C7.69004 23.0998 9.42321 21.6333 9.44084 21.6189C9.47941 21.587 9.5367 21.5925 9.56865 21.6311C9.60061 21.6696 9.5951 21.7269 9.55653 21.7589C9.54001 21.7732 7.89388 23.1692 8.43708 25.4147C8.4492 25.4632 8.41945 25.5128 8.36987 25.5249C8.36546 25.5249 8.36105 25.5271 8.35775 25.5271Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M29.7331 23.4136C29.7331 23.4136 29.7243 23.4136 29.7199 23.4136C29.6692 23.4114 29.6307 23.3696 29.6329 23.3189C29.7265 21.0062 27.8391 19.9627 27.8193 19.9528C27.7752 19.9286 27.7587 19.8735 27.7818 19.8294C27.806 19.7853 27.8611 19.7688 27.9052 19.7919C27.925 19.803 29.9127 20.9004 29.8136 23.3255C29.8114 23.3718 29.7761 23.4081 29.732 23.4125L29.7331 23.4136Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M25.0371 5.73703C25.2916 5.73703 25.5307 5.79432 25.7511 5.90781C26.2524 6.16564 26.5069 6.90276 26.5312 8.15994C26.5466 8.9786 26.4607 9.71902 26.4508 9.80056C26.4474 9.8237 26.4419 9.84683 26.4353 9.86887C28.888 11.8951 30.5132 15.0794 30.7181 19.3258C30.9098 23.3045 28.358 26.4524 26.0045 27.6909C24.268 28.6043 22.1724 29.2511 19.5445 29.51C18.8063 29.5827 18.1033 29.618 17.4323 29.618C15.7157 29.618 14.2073 29.3899 12.8542 28.991C10.3035 28.2385 7.18426 25.6503 6.59368 21.7113C5.96344 17.5078 6.93304 14.0679 8.93946 11.6009C8.92845 11.58 8.91743 11.5591 8.90971 11.5359C8.90751 11.5282 8.6596 10.7779 8.50865 9.94159C8.28498 8.70314 8.39186 7.92966 8.83369 7.57818C9.12126 7.349 9.47054 7.23551 9.87822 7.23551C10.363 7.23551 10.9305 7.39638 11.5761 7.71921C12.094 7.97704 12.5623 8.28885 12.9049 8.53787C14.2514 7.90762 15.7509 7.50215 17.353 7.34349C17.84 7.29501 18.3226 7.27187 18.7997 7.27187C19.8905 7.27187 20.9471 7.39748 21.952 7.64429C22.2385 7.33357 22.6373 6.93692 23.0935 6.58323C23.8185 6.0202 24.4697 5.73813 25.0382 5.73813M25.0371 5.07593C24.3198 5.07593 23.5287 5.40648 22.6869 6.05986C22.3685 6.30667 22.049 6.59315 21.7316 6.91488C20.7885 6.71214 19.8034 6.60967 18.7975 6.60967C18.3006 6.60967 17.7915 6.63502 17.2858 6.6846C15.7498 6.83665 14.302 7.20466 12.9743 7.77871C12.5997 7.52529 12.2295 7.30603 11.8681 7.12643C11.1321 6.75952 10.4622 6.57331 9.87491 6.57331C9.31519 6.57331 8.82487 6.73749 8.4194 7.06032C7.55447 7.74896 7.68338 9.1009 7.85637 10.0584C7.95994 10.6346 8.10538 11.1657 8.19573 11.472C6.11218 14.2068 5.33099 17.7712 5.93699 21.8082C6.56613 25.9996 9.865 28.7971 12.6647 29.6235C14.1566 30.0642 15.7146 30.278 17.4301 30.278C18.1298 30.278 18.8625 30.2405 19.6073 30.1667C22.179 29.9122 24.3716 29.2929 26.3097 28.2737C28.8935 26.9152 31.5808 23.5249 31.377 19.2917C31.1798 15.2138 29.7155 11.8698 27.135 9.59562C27.1636 9.27499 27.2022 8.72848 27.1912 8.14451C27.1724 7.17271 27.0347 5.82297 26.053 5.31723C25.739 5.15527 25.3963 5.07373 25.036 5.07373L25.0371 5.07593Z\"\n          fill=\"#DFD5FE\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport default AssistantAvatar;\n","const UserAvatar = (props: any) => {\n  return (\n    <svg\n      width=\"36\"\n      height=\"36\"\n      viewBox=\"0 0 36 36\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <mask\n        id=\"mask0_126_24814\"\n        maskUnits=\"userSpaceOnUse\"\n        x=\"0\"\n        y=\"0\"\n        width=\"36\"\n        height=\"36\"\n      >\n        <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#D9D9D9\" />\n      </mask>\n      <g mask=\"url(#mask0_126_24814)\">\n        <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#F1F1F6\" />\n        <g clip-path=\"url(#clip0_126_24814)\">\n          <mask\n            id=\"mask1_126_24814\"\n            maskUnits=\"userSpaceOnUse\"\n            x=\"-1\"\n            y=\"0\"\n            width=\"37\"\n            height=\"36\"\n          >\n            <path\n              d=\"M17.8888 36C27.8299 36 35.8888 27.9411 35.8888 18C35.8888 8.05887 27.8299 0 17.8888 0C7.94767 0 -0.111206 8.05887 -0.111206 18C-0.111206 27.9411 7.94767 36 17.8888 36Z\"\n              fill=\"white\"\n            />\n          </mask>\n          <g mask=\"url(#mask1_126_24814)\">\n            <path\n              d=\"M37.5707 -1.68335H-1.79456V37.6819H37.5707V-1.68335Z\"\n              fill=\"#EFECF9\"\n            />\n            <path\n              d=\"M12.2814 14.7556C12.2814 14.7556 14.3738 12.083 10.3158 14.3322C6.99376 16.1726 5.13184 19.3622 5.13184 19.3622L10.2467 23.0558C10.2467 23.0558 13.5328 17.889 12.2829 14.7542L12.2814 14.7556Z\"\n              fill=\"#74492C\"\n            />\n            <path\n              d=\"M23.1521 14.7556C23.1521 14.7556 21.0598 12.083 25.1177 14.3322C28.4398 16.1726 30.3017 19.3622 30.3017 19.3622L25.1868 23.0558C25.1868 23.0558 21.9007 17.889 23.1506 14.7542L23.1521 14.7556Z\"\n              fill=\"#74492C\"\n            />\n            <path\n              d=\"M26.2974 13.9783C26.4266 12.6725 25.748 11.5364 24.7816 11.4408C23.8153 11.3452 22.9272 12.3263 22.798 13.6321C22.6688 14.938 23.3475 16.0741 24.3138 16.1697C25.2801 16.2653 26.1682 15.2842 26.2974 13.9783Z\"\n              fill=\"#F0BEBA\"\n            />\n            <path\n              d=\"M11.1038 16.1679C12.0701 16.0723 12.7487 14.9362 12.6195 13.6303C12.4904 12.3245 11.6023 11.3434 10.6359 11.439C9.6696 11.5346 8.99096 12.6707 9.12015 13.9765C9.24934 15.2824 10.1374 16.2635 11.1038 16.1679Z\"\n              fill=\"#F0BEBA\"\n            />\n            <path\n              d=\"M13.7214 16.7141H21.735V29.3847C21.735 30.492 20.835 31.392 19.7277 31.392H15.7273C14.62 31.392 13.72 30.492 13.72 29.3847V16.7141H13.7214Z\"\n              fill=\"#F2D1D2\"\n            />\n            <path\n              d=\"M21.7365 24.8068C21.7365 24.8068 19.2266 25.0804 16.9341 24.1516C14.9944 23.3668 13.7214 21.3134 13.7214 21.3134V18.802H21.735V24.8068H21.7365Z\"\n              fill=\"#F0BEBA\"\n            />\n            <path\n              d=\"M17.716 3.95557C14.0123 3.95557 10.9811 6.98677 10.9811 10.6904V16.0357C10.9811 19.7394 13.995 22.7706 17.716 22.7706C21.4369 22.7706 24.4508 19.7394 24.4508 16.0357V10.6904C24.4508 6.98677 21.4196 3.95557 17.716 3.95557Z\"\n              fill=\"#F2D1D2\"\n            />\n            <path\n              d=\"M17.5144 14.4907C17.5144 14.4907 17.068 15.0739 17.5158 15.6946\"\n              stroke=\"#E78990\"\n              stroke-width=\"0.724832\"\n              stroke-miterlimit=\"10\"\n              stroke-linecap=\"round\"\n            />\n            <path\n              d=\"M13.2722 12.8375C13.1685 12.9138 13.7906 12.6229 14.4703 12.6042C15.3213 12.5811 15.6367 12.8303 15.7029 12.7079C15.7937 12.5408 15.0809 12.3594 14.4271 12.4386C13.8079 12.512 13.4537 12.7021 13.2708 12.8375H13.2722Z\"\n              fill=\"#141418\"\n              stroke=\"#141418\"\n              stroke-width=\"0.454228\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M22.1599 12.8375C22.2636 12.9138 21.6415 12.6229 20.9618 12.6042C20.1108 12.5811 19.7954 12.8303 19.7292 12.7079C19.6384 12.5408 20.3512 12.3594 21.005 12.4386C21.6242 12.512 21.9784 12.7021 22.1613 12.8375H22.1599Z\"\n              fill=\"#141418\"\n              stroke=\"#141418\"\n              stroke-width=\"0.454228\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M9.16097 9.99637C9.16961 10.7408 9.25745 11.6898 10.1978 12.7252C10.7378 13.3199 11.7602 13.4826 11.8984 11.972C12.0727 10.0669 16.1911 9.60037 17.0579 7.54405C17.6008 6.25813 17.4727 4.99813 15.5344 4.98517C10.8458 4.95061 9.13649 7.88101 9.15953 9.99781L9.16097 9.99637Z\"\n              fill=\"#F0BEBA\"\n            />\n            <path\n              d=\"M25.6965 9.99657C25.6878 10.7411 25.6 11.69 24.6597 12.7254C24.1197 13.3201 17.6742 11.1961 16.1104 7.71562C15.5373 6.43834 15.4307 4.57354 17.3603 4.41082C23.8691 3.86506 25.7195 7.87977 25.6965 9.99657Z\"\n              fill=\"#F0BEBA\"\n            />\n            <g>\n              <path\n                d=\"M15.3156 14.5211C15.3156 15.002 15.0737 15.3174 14.7756 15.3174C14.4775 15.3174 14.2356 15.0006 14.2356 14.5211C14.2356 14.0416 14.4775 13.804 14.7756 13.804C15.0737 13.804 15.3156 14.0416 15.3156 14.5211Z\"\n                fill=\"#232323\"\n              />\n            </g>\n            <g>\n              <path\n                d=\"M20.1179 14.5211C20.1179 15.002 20.3598 15.3174 20.6579 15.3174C20.956 15.3174 21.1979 15.0006 21.1979 14.5211C21.1979 14.0401 20.956 13.804 20.6579 13.804C20.3598 13.804 20.1179 14.0416 20.1179 14.5211Z\"\n                fill=\"#232323\"\n              />\n            </g>\n            <g opacity=\"0.3\">\n              <path\n                d=\"M14.2817 15.6946C14.2817 16.2662 13.7719 16.7285 12.882 16.7285C11.9921 16.7285 11.4823 16.2648 11.4823 15.6946C11.4823 15.1243 11.9921 14.6606 12.882 14.6606C13.7719 14.6606 14.2817 15.1243 14.2817 15.6946Z\"\n                fill=\"#E78990\"\n              />\n              <path\n                d=\"M21.1519 15.6946C21.1519 16.2662 21.6616 16.7285 22.5515 16.7285C23.4415 16.7285 23.9512 16.2648 23.9512 15.6946C23.9512 15.1243 23.4415 14.6606 22.5515 14.6606C21.6616 14.6606 21.1519 15.1243 21.1519 15.6946Z\"\n                fill=\"#E78990\"\n              />\n            </g>\n            <path\n              d=\"M8.95081 9.13823C8.95945 10.0699 9.05017 11.2579 10.0279 12.5539C10.5895 13.2969 11.6508 13.5014 11.7948 11.6107C11.9748 9.22607 16.2531 8.64143 17.1545 6.06815C17.7175 4.45823 17.5851 2.88287 15.5719 2.86415C10.7019 2.82095 8.92633 6.48863 8.95081 9.13823Z\"\n              fill=\"#74492C\"\n            />\n            <path\n              d=\"M26.127 9.13824C26.1184 10.0699 26.0277 11.2579 25.0499 12.5539C24.4883 13.297 17.7938 10.6402 16.1709 6.28272C15.5747 4.68432 15.4653 2.34864 17.4683 2.14704C24.2291 1.46304 26.1515 6.49008 26.127 9.13824Z\"\n              fill=\"#74492C\"\n            />\n            <path\n              d=\"M19.2453 17.8544C19.2453 18.5831 18.5656 19.1749 17.729 19.1749C16.8923 19.1749 16.2126 18.5845 16.2126 17.8544C16.2126 17.1244 16.8923 17.3476 17.729 17.3476C18.5656 17.3476 19.2453 17.1244 19.2453 17.8544Z\"\n              fill=\"#E78990\"\n            />\n            <path\n              d=\"M27.8838 26.9943C27.1379 25.8697 24.0952 25.6465 21.6011 25.3757C21.0669 26.99 19.8803 28.178 17.8873 28.178C15.7806 28.178 14.2398 26.522 13.7531 24.9797C11.2835 25.2548 8.52734 25.8841 7.7915 26.9943C4.8251 31.4713 8.17166 46.5365 9.82046 52.6277C10.1661 53.9036 10.2568 53.8633 11.3541 53.9482C15.0102 54.2319 20.4433 54.373 24.1801 54.1023C25.3523 54.0173 25.3998 53.9237 25.7843 52.5615C27.6289 46.0441 30.8488 31.4698 27.8838 26.9943Z\"\n              fill=\"white\"\n            />\n            <path\n              d=\"M8.51447 26.3333C4.85111 27.216 4.61927 29.2838 -1.22713 46.9497C-4.61545 57.1867 -5.68969 59.9011 -6.07993 61.2878C-6.12745 61.4577 -6.03817 61.6363 -5.87401 61.6997L-1.41865 63.4133C-1.24729 63.4795 -1.05433 63.3989 -0.982326 63.2304L11.2764 36.7517L8.51447 26.3347V26.3333Z\"\n              fill=\"#BFAAFC\"\n            />\n            <path\n              d=\"M27.0069 26.4426C30.6702 27.3253 30.7293 29.2837 36.5771 46.9482C39.9654 57.1852 41.0397 59.8996 41.4299 61.2863C41.4774 61.4562 41.3882 61.6348 41.224 61.6981L36.7686 63.4117C36.5973 63.478 36.4043 63.3973 36.3323 63.2289L24.0736 36.7501L27.0083 26.4426H27.0069Z\"\n              fill=\"#BFAAFC\"\n            />\n            <path\n              d=\"M10.3403 29.7935H25.4373\"\n              stroke=\"#6725EC\"\n              stroke-width=\"0.717584\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M10.3403 31.9924H25.4373\"\n              stroke=\"#6725EC\"\n              stroke-width=\"0.717584\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M10.3403 34.1929H25.4373\"\n              stroke=\"#6725EC\"\n              stroke-width=\"0.717584\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M13.383 24.4727L14.2355 43.9112H9.65919L8.06079 26.5376C8.06079 26.5376 10.8458 24.7218 13.383 24.4727Z\"\n              fill=\"#BFAAFC\"\n            />\n            <path\n              d=\"M22.3946 24.4727L21.5421 43.9112H26.1184L27.7168 26.5376C27.7168 26.5376 24.9319 24.7218 22.3946 24.4727Z\"\n              fill=\"#BFAAFC\"\n            />\n          </g>\n        </g>\n      </g>\n      <defs>\n        <clipPath id=\"clip0_126_24814\">\n          <rect\n            width=\"36\"\n            height=\"36\"\n            fill=\"white\"\n            transform=\"translate(-0.111206)\"\n          />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n};\n\nexport default UserAvatar;\n","import React from 'react';\nimport CircleIcon from '@mui/icons-material/Circle';\nimport { Box } from '@mui/material';\n\nconst TypingIndicator: React.FC = () => {\n  return (\n    <Box display=\"flex\" alignItems=\"center\">\n      <Box display=\"flex\" ml={1}>\n        <CircleIcon className=\"dot first-dot\" />\n        <CircleIcon className=\"dot second-dot\" />\n        <CircleIcon className=\"dot third-dot\" />\n      </Box>\n\n      <style>\n        {`\n          @keyframes blink {\n            0%, 20% {\n              opacity: 0;\n            }\n            50% {\n              opacity: 1;\n            }\n            100% {\n              opacity: 0;\n            }\n          }\n\n          .dot {\n            font-size: 0.8rem;\n            margin-left: 3px;\n            opacity: 0;\n          }\n\n          .first-dot {\n            animation: blink 1.5s infinite 0s;\n          }\n\n          .second-dot {\n            animation: blink 1.5s infinite 0.2s;\n          }\n\n          .third-dot {\n            animation: blink 1.5s infinite 0.4s;\n          }\n        `}\n      </style>\n    </Box>\n  );\n};\n\nexport default TypingIndicator;\n","import React, { useEffect, useRef, useState } from 'react';\nimport {\n  EliceAudioPlayer,\n  EliceButton,\n  ReadyRecord,\n  Recording,\n  RecordPause,\n  RecordPlay,\n} from '@elicecontents/content-ui';\nimport { Button, Stack, styled, Typography } from '@mui/material';\n\nimport { SoundVisualizer } from '../sound-visualizer';\nimport { type AudioStep, useRecorder } from './RecorderContext';\n\nimport type { SoundVisualizerVariant } from '@elicecontents/content-ui';\nimport type { SxProps } from '@mui/material';\n\nexport type RecorderStep = 'ready' | 'recording' | 'pause' | 'waiting';\nexport type RecorderType = 'needPause' | 'needWaiting' | 'allNeed' | 'notNeed';\n\nexport interface EliceRecorderStepProps {\n  onAudioReady: (file: File) => void;\n  onTransform?: () => void;\n  type?: RecorderType;\n  visualType?: SoundVisualizerVariant;\n  isReadyVisual?: boolean;\n  onRecord?: () => void;\n  onResume?: () => void;\n  onPause?: () => void;\n  defaultBarColor?: string;\n  closeRecorder?: () => void;\n  onTranscribingChange?: (value: boolean) => void;\n  isLoadingMessage?: boolean;\n  forcedStep?: AudioStep;\n  sx?: SxProps;\n  onRecordStep?: (step: AudioStep) => void;\n  initFile?: File;\n  disabled?: boolean;\n  isNotAudioPlayer?: boolean;\n  isNotRecordingPlayer?: boolean;\n  notNeedSubmit?: boolean;\n}\n\nconst EliceRecorderStep = ({\n  onAudioReady,\n  onTransform,\n  visualType = 'bar',\n  onRecord,\n  type = 'notNeed',\n  isReadyVisual = false,\n  onResume,\n  onPause,\n  onTranscribingChange,\n  forcedStep,\n  closeRecorder,\n  defaultBarColor,\n  sx,\n  onRecordStep,\n  initFile,\n  disabled = false,\n  isNotAudioPlayer = false,\n  isNotRecordingPlayer = false,\n  notNeedSubmit = false,\n}: EliceRecorderStepProps) => {\n  const {\n    state: recorderState,\n    startRecording,\n    stopRecording,\n    pauseRecording,\n    resumeRecording,\n    setIsRecording,\n    setStep,\n  } = useRecorder();\n  const [audioUrl, setAudioUrl] = useState<string>('');\n  const currentStep = forcedStep ?? recorderState.step;\n\n  const audioRef = useRef<HTMLAudioElement | null>(null);\n  const [isPlaying, setIsPlaying] = useState(false);\n\n  const handleStart = async () => {\n    onTranscribingChange?.(true);\n    onRecord?.();\n\n    await startRecording(async file => {\n      const arrayBuffer = await file.arrayBuffer();\n      const audioContext = new AudioContext();\n      const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);\n      const wavBuffer = audioBufferToWav(audioBuffer);\n      const wavFile = new Blob([wavBuffer], { type: 'audio/wav' });\n      const wavFileWithName = new File([wavFile], 'recorded_audio.wav', {\n        type: 'audio/wav',\n      });\n      onAudioReady(wavFileWithName);\n      const url = URL.createObjectURL(file);\n      setAudioUrl(url);\n    });\n  };\n\n  const firstTimeInit = React.useRef(false);\n\n  React.useEffect(() => {\n    if (initFile && !firstTimeInit.current) {\n      const url = URL.createObjectURL(initFile);\n      setAudioUrl(url);\n      setStep('waiting');\n      firstTimeInit.current = true;\n    }\n\n    if (!initFile) {\n      setStep('ready');\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [initFile]);\n\n  const handlePause = () => {\n    onPause?.();\n    pauseRecording();\n  };\n\n  const handleResume = () => {\n    onResume?.();\n    resumeRecording();\n  };\n\n  const handleStop = () => {\n    stopRecording(false);\n    onTranscribingChange?.(false);\n  };\n\n  const handleSubmit = () => {\n    onTransform?.();\n    closeRecorder?.();\n    stopRecording(true);\n    setIsRecording(false);\n  };\n\n  const handleOnlySubmit = () => {\n    stopRecording(true);\n    onTranscribingChange?.(false);\n    onTransform?.();\n    closeRecorder?.();\n    setIsRecording(false);\n  };\n\n  const handlePlayPause = () => {\n    if (audioRef.current) {\n      if (isPlaying) {\n        audioRef.current.pause();\n        setIsPlaying(false);\n      } else {\n        audioRef.current.currentTime = 0;\n        audioRef.current\n          .play()\n          .catch(e => console.error('Audio play failed', e));\n        setIsPlaying(true);\n      }\n    }\n  };\n\n  useEffect(() => {\n    if (isNotAudioPlayer && audioUrl) {\n      audioRef.current = new Audio(audioUrl);\n      audioRef.current.onended = () => {\n        setIsPlaying(false);\n        if (audioRef.current) audioRef.current.currentTime = 0;\n      };\n    }\n    return () => {\n      if (audioRef.current) {\n        audioRef.current.pause();\n        audioRef.current = null;\n      }\n    };\n  }, [audioUrl, isNotAudioPlayer]);\n\n  useEffect(() => {\n    onRecordStep?.(currentStep);\n  }, [currentStep, onRecordStep]);\n\n  if (!currentStep) {\n    return <SkeletonVisualizerBox sx={sx} />;\n  }\n  return (\n    <StyledVisualizerBox sx={sx ? (currentStep !== 'ready' ? sx : {}) : {}}>\n      {currentStep === 'ready' && (\n        <>\n          {!isReadyVisual && (\n            <SoundVisualizer\n              analyser={recorderState.analyser}\n              variant={visualType}\n              bgColor={'transparnet'}\n              defaultBarColor={defaultBarColor}\n            />\n          )}\n          <StyledRecorderButton onClick={handleStart} step={currentStep}>\n            <ReadyRecord />\n            <Typography variant='subtitle2'>녹음 시작</Typography>\n          </StyledRecorderButton>\n        </>\n      )}\n      {currentStep === 'recording' && (\n        <>\n          {!isNotRecordingPlayer && (\n            <SoundVisualizer\n              analyser={recorderState.analyser}\n              variant={visualType}\n              defaultBarColor={defaultBarColor}\n              bgColor={'transparnet'}\n            />\n          )}\n          <StyledVisualizerBoxButtonContainer>\n            {(type === 'needPause' || type === 'allNeed') && (\n              <StyledPauseButton\n                onClick={handlePause}\n                recorderType={type}\n                isRecording={currentStep === 'recording'}\n              >\n                <Recording color=\"#485EAD\" squareColor=\"#0A379B\" />\n                <Typography variant=\"subtitle2\">일시 정지</Typography>\n              </StyledPauseButton>\n            )}\n            <StyledRecorderButton\n              onClick={\n                type === 'needPause' ||\n                  type === 'allNeed' ||\n                  type === 'needWaiting'\n                  ? handleStop\n                  : handleOnlySubmit\n              }\n              recorderType={type}\n              step={currentStep}\n            >\n              <Recording />\n              <Typography variant=\"subtitle2\">녹음 완료</Typography>\n            </StyledRecorderButton>\n          </StyledVisualizerBoxButtonContainer>\n        </>\n      )}\n      {currentStep === 'pause' && (\n        <>\n          {!isNotAudioPlayer && (\n            <SoundVisualizer\n              analyser={null}\n              variant={visualType}\n              bgColor={'transparnet'}\n            />\n          )}\n          <StyledVisualizerBoxButtonContainer>\n            {(type === 'needPause' || type === 'allNeed') && (\n              <StyledPauseButton onClick={handleResume} recorderType={type}>\n                <Recording color=\"#485EAD\" squareColor=\"#0A379B\" />\n                <Typography variant=\"subtitle2\">이어서 녹음</Typography>\n              </StyledPauseButton>\n            )}\n            <StyledRecorderButton\n              onClick={handleStop}\n              step={currentStep}\n              recorderType={type}\n            >\n              <Recording />\n              <Typography variant=\"subtitle2\">녹음 완료</Typography>\n            </StyledRecorderButton>\n          </StyledVisualizerBoxButtonContainer>\n        </>\n      )}\n      {currentStep === 'waiting' &&\n        (type === 'needWaiting' || type === 'allNeed') && (\n          <>\n            {isNotAudioPlayer ? (\n              <StyledVisualizerBoxButtonContainer>\n                <StyledPauseButton\n                  onClick={handlePlayPause}\n                  recorderType={type}\n                >\n                  {isPlaying ? <RecordPause /> : <RecordPlay />}\n                  <Typography variant=\"subtitle2\">{isPlaying ? '정지' : '재생'}</Typography>\n                </StyledPauseButton>\n                <StyledRecorderButton\n                  disabled={disabled}\n                  onClick={handleStart}\n                  step={currentStep}\n                >\n                  <ReadyRecord />\n                  <Typography variant=\"subtitle2\">다시 녹음</Typography>\n                </StyledRecorderButton>\n                {!notNeedSubmit && (\n                  <EliceButton disabled={disabled} onClick={handleSubmit}>\n                    <Typography variant=\"subtitle2\">완료</Typography>\n                  </EliceButton>\n                )}\n              </StyledVisualizerBoxButtonContainer>\n            ) : (\n              <>\n                {audioUrl && <EliceAudioPlayer src={audioUrl} />}\n                <StyledVisualizerBoxButtonContainer>\n                  <StyledRecorderButton\n                    disabled={disabled}\n                    onClick={handleStart}\n                    step={currentStep}\n                  >\n                    <ReadyRecord />\n                    <Typography variant=\"subtitle2\">다시 녹음</Typography>\n                  </StyledRecorderButton>\n                  {!notNeedSubmit && (\n                    <EliceButton disabled={disabled} onClick={handleSubmit}>\n                      <Typography variant=\"subtitle2\">완료</Typography>\n                    </EliceButton>\n                  )}\n                </StyledVisualizerBoxButtonContainer>\n              </>\n            )}\n          </>\n        )}\n    </StyledVisualizerBox>\n  );\n};\n\nexport default EliceRecorderStep;\n\nconst StyledVisualizerBox = styled(Stack)`\n  width: 100%;\n  font-size: 20px;\n  background-color: transparent;\n  border-radius: 1.2em;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  gap: 1.6em;\n`;\nconst SkeletonVisualizerBox = styled(Stack)`\n  width: 100%;\n  font-size: 20px;\n  height: 10.6em;\n  border-radius: 1.2em;\n  background: linear-gradient(\n    90deg,\n    #e0e0e0 25%,\n    #f5f5f5 37%,\n    #f5f5f5 63%,\n    #e0e0e0 75%\n  );\n  background-size: 400% 100%;\n  animation: skeleton-loading 1.5s ease-in-out infinite;\n\n  @keyframes skeleton-loading {\n    0% {\n      background-position: 100% 50%;\n    }\n    100% {\n      background-position: -100% 50%;\n    }\n  }\n`;\n\nconst StyledVisualizerBoxButtonContainer = styled(Stack)`\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  gap: 1.2em;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst StyledRecorderButtonDefault = styled(Button)`\n  display: flex;\n  border: none;\n  height: 46px;\n  padding: 12px 20px 12px 17px;\n  justify-content: center;\n  align-items: center;\n  gap: 0.4em;\n  cursor: pointer;\n  flex-shrink: 0;\n  border-radius: 16px;\n`;\n\nconst StyledRecorderButton = styled(StyledRecorderButtonDefault) <{\n  step: RecorderStep;\n  recorderType?: RecorderType | undefined;\n}>`\n  width: ${({ recorderType }) =>\n    recorderType === 'needPause' || recorderType === 'allNeed'\n      ? '155px'\n      : '155px'};\n  color: ${({ step }) =>\n    step === 'ready' || step === 'waiting' ? '#fff' : '#FF5D58'};\n  background: ${({ step }) =>\n    step === 'ready' || step === 'waiting' ? '#FF5D58' : '#FBE0E0'};\n\n  &:hover {\n    background: #FFB1AF !important;\n    color: #FF5D58 !important;\n  }\n`;\n\nconst StyledPauseButton = styled(StyledRecorderButtonDefault) <{\n  recorderType?: RecorderType | undefined;\n  isRecording?: boolean;\n}>`\n  width: ${({ recorderType }) =>\n    recorderType === 'needPause' || recorderType === 'allNeed'\n      ? '155px'\n      : '155px'};\n  color: #0a379b;\n  background: #bec4e1;\n\n  @keyframes blinker {\n    50% {\n      background-color: #0a379b;\n      color: #bec4e1;\n    }\n  }\n\n  animation: ${({ isRecording }) =>\n    isRecording ? 'blinker 1s linear infinite' : 'none'};\n\n  &:hover {\n    color: #bec4e1;\n    background-color: #0a379b;\n  }\n`;\n\nfunction audioBufferToWav(buffer: AudioBuffer): ArrayBuffer {\n  const numOfChannels = buffer.numberOfChannels; // 채널 수 가져오기\n  const sampleRate = buffer.sampleRate; // 샘플 레이트 가져오기\n  const format = numOfChannels === 1 ? 1 : 2; // 포맷 설정 (1: mono, 2: stereo)\n  // WAV 데이터의 총 바이트 길이 계산 (헤더 44바이트 포함)\n  const byteLength = buffer.length * numOfChannels * 2 + 44; // 파일 전체 크기 (오디오 샘플의 총 수 * 오디오 채널 수 * 2(16bit-PCM) + 44(wav 헤더의 크기))\n  const wavArrayBuffer = new ArrayBuffer(byteLength); // WAV 데이터 저장을 위한 ArrayBuffer 생성\n  const wavView = new DataView(wavArrayBuffer); // ArrayBuffer를 다루기 위한 DataView 생성\n  // WAV 헤더 작성\n  let offset = 0; // 현재 오프셋 초기화\n  const writeString = (str: string) => {\n    // 문자열을 DataView에 쓰는 함수\n    for (let i = 0; i < str.length; i++) {\n      wavView.setUint8(offset + i, str.charCodeAt(i)); // 문자열의 각 문자에 대한 ASCII 값을 설정\n    }\n    offset += str.length; // 오프셋 업데이트\n  };\n\n  writeString('RIFF'); // Chunk ID : RIFF 헤더 시작\n  wavView.setUint32(offset, byteLength - 8, true); // Chunk Size : 전체 데이터 크기 설정(전체 파일 크기 - Chunk ID, Chunk Size)\n  offset += 4; // 오프셋 업데이트\n  writeString('WAVE'); // Format\n\n  writeString('fmt '); // fmt ChunkID : fmt 청크 시작\n  wavView.setUint32(offset, 16, true); // Subchunk1Size (16바이트)\n  offset += 4; // 오프셋 업데이트\n  wavView.setUint16(offset, 1, true); // AudioFormat (1: PCM)\n  offset += 2; // 오프셋 업데이트\n  wavView.setUint16(offset, format, true); // NumChannels 설정\n  offset += 2; // 오프셋 업데이트\n  wavView.setUint32(offset, sampleRate, true); // SampleRate 설정\n  offset += 4; // 오프셋 업데이트\n  wavView.setUint32(offset, sampleRate * numOfChannels * 2, true); // ByteRate 설정\n  offset += 4; // 오프셋 업데이트\n  wavView.setUint16(offset, numOfChannels * 2, true); // BlockAlign 설정\n  offset += 2; // 오프셋 업데이트\n  wavView.setUint16(offset, 16, true); // BitsPerSample 설정\n  offset += 2; // 오프셋 업데이트\n\n  writeString('data'); // data 청크 시작\n  wavView.setUint32(offset, byteLength - offset - 4, true); // Subchunk2Size 설정\n  offset += 4; // 오프셋 업데이트\n  // PCM 데이터 복사, Raw Data 삽입\n  for (let channel = 0; channel < numOfChannels; channel++) {\n    // 각 채널에 대해 반복\n    const channelData = buffer.getChannelData(channel); // 해당 채널의 데이터 가져오기\n    for (let i = 0; i < channelData.length; i++) {\n      // 각 샘플에 대해 반복\n      wavView.setInt16(\n        // PCM 데이터를 WAV 포맷으로 변환하여 DataView에 설정\n        44 + i * 2 * numOfChannels + channel * 2, // WAV 데이터 시작 위치 계산\n        channelData[i] * 0x7fff, // 샘플 값을 16-bit PCM 형식으로 변환\n        true // little-endian 형식\n      );\n    }\n  }\n  return wavArrayBuffer;\n}\n","import React from 'react';\nimport { Box, Stack, styled, useTheme } from '@mui/material';\n\nimport type { SxProps } from '@mui/material';\nexport type SoundVisualizerVariant = 'both' | 'bar' | 'circle';\nexport interface SoundVisualizerProps {\n  analyser: AnalyserNode | null;\n  sensitivity?: number;\n  decay?: number;\n  variant?: SoundVisualizerVariant;\n  bgColor?: string;\n  defaultBarColor?: string;\n  onClickRecord?: () => void;\n  visualContainerStyle?: SxProps;\n  visualBoxStyle?: SxProps;\n}\n\nexport const SoundVisualizer = ({\n  analyser,\n  sensitivity = 3,\n  decay = 0.5,\n  variant = 'bar',\n  bgColor,\n  defaultBarColor = '#D8D8E2',\n  visualContainerStyle = {},\n  visualBoxStyle = {},\n  onClickRecord,\n}: SoundVisualizerProps) => {\n  const theme = useTheme();\n  const TOTAL_BARS = 17;\n  const [filledBars, setFilledBars] = React.useState(0);\n\n  React.useEffect(() => {\n    if (!analyser) return;\n    analyser.fftSize = 128;\n\n    const dataArray = new Uint8Array(analyser.frequencyBinCount);\n    let prevVolume = 0;\n\n    const update = () => {\n      analyser.getByteFrequencyData(dataArray);\n      const avg = dataArray.reduce((acc, v) => acc + v, 0) / dataArray.length;\n\n      const scaled = Math.min(avg * sensitivity, 255);\n      const smooth = prevVolume * decay + scaled * (1 - decay);\n      prevVolume = smooth;\n\n      setFilledBars(Math.round((smooth / 255) * TOTAL_BARS));\n      requestAnimationFrame(update);\n    };\n\n    update();\n    return () => setFilledBars(0);\n  }, [analyser, sensitivity, decay]);\n\n  return (\n    <Stack\n      alignItems=\"center\"\n      justifyContent=\"center\"\n      width=\"100%\"\n      position=\"relative\"\n      sx={{\n        ...visualContainerStyle,\n      }}\n    >\n      {(variant === 'bar' || variant === 'both') && (\n        <Box\n          display=\"flex\"\n          justifyContent=\"center\"\n          alignItems=\"center\"\n          p=\"6px 0 7.5px\"\n          width=\"100%\"\n          gap=\"11px\"\n          bgcolor={bgColor ?? theme.palette.grey[50]}\n          zIndex={1}\n        >\n          {Array.from({ length: TOTAL_BARS }).map((_, i) => (\n            <WaveBar\n              key={i}\n              isFilled={i < filledBars}\n              defaultBarColor={defaultBarColor ?? theme.palette.grey[200]}\n            />\n          ))}\n        </Box>\n      )}\n    </Stack>\n  );\n};\n\nconst WaveBar = styled(Box) <{ isFilled: boolean; defaultBarColor: string }>`\n  width: 11px;\n  height: 34px;\n  border-radius: 11px;\n  background-color: ${({ isFilled, defaultBarColor, theme }) =>\n    isFilled ? theme.palette.primary.main : defaultBarColor};\n  transition: background-color 0.1s ease-in-out;\n`;\n\nexport default SoundVisualizer;\n","import React, { useState } from 'react';\nimport {\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogContentText,\n  DialogTitle,\n  Stack,\n  Typography,\n} from '@mui/material';\nimport styled from '@emotion/styled';\n\nimport { EliceButton } from '../button';\nimport { textPrimaryColor, textSecondaryColor } from '../tokenColorTemporary';\n\nconst DialogTitleText = styled(Typography)({\n  fontSize: '1.375rem',\n  fontWeight: 700,\n  color: textPrimaryColor,\n});\n\nconst DialogBodyText = styled(Typography)({\n  fontSize: '1.375rem',\n  color: textSecondaryColor,\n});\n\nimport type { DialogProps } from '@mui/material';\n\nexport interface EliceDialogProps extends Omit<DialogProps, 'open' | 'onClose' | 'title' | 'content'> {\n  open?: boolean;\n  onClose?: () => void;\n  title?: React.ReactNode;\n  content?: React.ReactNode;\n  children?: React.ReactNode;\n  // Legacy props for backward compatibility\n  anchorElement?: React.ReactNode;\n  type?: 'YesOrNo' | 'OK';\n  onConfirm?: VoidFunction;\n  onAgree?: VoidFunction;\n  onDisagree?: VoidFunction;\n}\n\nconst EliceDialog = ({\n  open: controlledOpen,\n  onClose: controlledOnClose,\n  title,\n  content,\n  children,\n  anchorElement,\n  type = 'OK',\n  onConfirm,\n  onAgree,\n  onDisagree,\n  sx,\n  ...dialogProps\n}: EliceDialogProps) => {\n  const [internalOpen, setInternalOpen] = useState(false);\n\n  // Use controlled open if provided, otherwise use internal state\n  const isControlled = controlledOpen !== undefined;\n  const open = isControlled ? controlledOpen : internalOpen;\n  const handleClose = isControlled ? controlledOnClose : () => setInternalOpen(false);\n\n  // Generate IDs for accessibility\n  const titleId = React.useId();\n  const descriptionId = React.useId();\n\n  const dialogContent = (\n    <Dialog\n      open={open}\n      onClose={handleClose}\n      aria-labelledby={title ? titleId : undefined}\n      aria-describedby={content ? descriptionId : undefined}\n      sx={{\n        borderRadius: '1rem',\n        '& .MuiDialog-paper': {\n          borderRadius: '1rem',\n        },\n        ...sx,\n      }}\n      PaperProps={{\n        style: {\n          minWidth: '40rem',\n          padding: '1.25rem 1.5rem',\n          gap: '1rem',\n        },\n      }}\n      {...dialogProps}\n    >\n      {title && (\n        <DialogTitle id={titleId}>\n          {typeof title === 'string' ? (\n            <DialogTitleText variant=\"subtitle1\">\n              {title}\n            </DialogTitleText>\n          ) : (\n            title\n          )}\n        </DialogTitle>\n      )}\n      {content && (\n        <DialogContent>\n          <DialogContentText id={descriptionId}>\n            {typeof content === 'string' ? (\n              <DialogBodyText variant=\"body1\">\n                {content}\n              </DialogBodyText>\n            ) : (\n              content\n            )}\n          </DialogContentText>\n        </DialogContent>\n      )}\n      {children ? (\n        <DialogActions>\n          {children}\n        </DialogActions>\n      ) : (\n        <DialogActions>\n          {type === 'OK' && (\n            <EliceButton\n              textColor='#fff'\n              onClick={() => {\n                if (onConfirm) {\n                  onConfirm();\n                }\n                handleClose?.();\n              }}\n            >\n              닫기\n            </EliceButton>\n          )}\n          {type === 'YesOrNo' && (\n            <>\n              <EliceButton\n                variant=\"outlined\"\n                onClick={() => {\n                  if (onDisagree) {\n                    onDisagree();\n                  }\n                  handleClose?.();\n                }}\n              >\n                취소\n              </EliceButton>\n              <EliceButton\n                variant=\"contained\"\n                textColor='#fff'\n                onClick={() => {\n                  if (onAgree) {\n                    onAgree();\n                  }\n                  handleClose?.();\n                }}\n              >\n                확인\n              </EliceButton>\n            </>\n          )}\n        </DialogActions>\n      )}\n    </Dialog>\n  );\n\n  // If anchorElement is provided, use legacy behavior\n  if (anchorElement) {\n    return (\n      <>\n        <Stack onClick={() => setInternalOpen(true)}>{anchorElement}</Stack>\n        {dialogContent}\n      </>\n    );\n  }\n\n  return dialogContent;\n};\n\nexport default EliceDialog;\n","import { Stack, useTheme } from '@mui/material';\n\nimport { ArrowLeft, ArrowRight } from '../../icons';\nimport { gray300Color } from '../tokenColorTemporary';\n\nexport interface DottedPaginationProps {\n  currentPage?: number;\n  totalPage?: number;\n  onPrev?: VoidFunction;\n  onNext?: VoidFunction;\n  DotColor?: string;\n}\n\nconst EliceDottedPagination = (props: DottedPaginationProps) => {\n  const { currentPage = 1, totalPage = 1, onNext, onPrev, DotColor } = props;\n  const isPrevAble = currentPage > 1;\n  const isNextAble = currentPage < totalPage;\n  const theme = useTheme();\n  const dotColor = DotColor || theme.palette.primary.main;\n  if (totalPage > 10 || currentPage > 10) return 'Total page is at most 10';\n\n  return (\n    <Stack direction=\"row\" gap=\"1rem\">\n      <ArrowLeft\n        size={24}\n        color={isPrevAble ? dotColor : gray300Color}\n        style={{ cursor: 'pointer' }}\n        onClick={() => {\n          if (onPrev && isPrevAble) {\n            onPrev();\n          }\n        }}\n      />\n      <Stack direction=\"row\" gap=\"0.375rem\" alignItems=\"center\">\n        {Array.from({ length: totalPage }, i => i).map((_, index: number) => {\n          return (\n            <Stack\n              key={index}\n              borderRadius=\"0.3rem\"\n              height=\"0.75rem\"\n              width=\"0.75rem\"\n              bgcolor={\n                currentPage === index + 1\n                  ? dotColor\n                  : gray300Color\n              }\n            ></Stack>\n          );\n        })}\n      </Stack>\n      <ArrowRight\n        size={24}\n        color={isNextAble ? dotColor : gray300Color}\n        style={{ cursor: 'pointer' }}\n        onClick={() => {\n          if (onNext && isNextAble) {\n            onNext();\n          }\n        }}\n      />\n    </Stack>\n  );\n};\n\nexport default EliceDottedPagination;\n","import React from 'react';\nimport { Box, Typography, SxProps, Theme, useTheme } from '@mui/material';\nimport BookIcon from '@mui/icons-material/Book';\nimport { useAIDTMediaQuery } from '../../hooks';\nimport { EliceLayout } from '../layout';\n\nexport interface HeaderTitleProps {\n  title: string;\n  breadcrumbItems?: string[];\n  icon?: React.ReactNode;\n  type?: 'breadcrumb';\n  backgroundColor?: string;\n  sx?: SxProps<Theme>;\n}\n\nconst HeaderTitle = ({\n  title,\n  breadcrumbItems,\n  icon,\n  type = 'breadcrumb',\n  backgroundColor,\n  sx,\n  ...rest\n}: HeaderTitleProps): JSX.Element => {\n  const theme = useTheme();\n  const { isNotebook, isTablet } = useAIDTMediaQuery();\n\n  if (isTablet) {\n    const baseSx = {\n      backgroundColor: `${backgroundColor || theme.palette.primary.main} !important`,\n    };\n    const mergedSx =\n      sx !== undefined\n        ? Array.isArray(sx)\n          ? [baseSx, ...sx]\n          : [baseSx, sx]\n        : baseSx;\n    return (\n      <EliceLayout.HeaderTitle sx={mergedSx} {...rest}>\n        {title}\n      </EliceLayout.HeaderTitle>\n    );\n  }\n\n\n  return (\n    <Box\n      display=\"flex\"\n      alignItems=\"center\"\n      justifyContent=\"space-between\"\n      p={2}\n      bgcolor=\"white\"\n      borderBottom=\"1px solid #e0e0e0\"\n      sx={{\n        flexWrap: 'nowrap',\n        whiteSpace: 'nowrap',\n        gap: 1,\n        ...sx,\n      }}\n    >\n      {/* Left: Main Title Area */}\n      <Box\n        display=\"flex\"\n        alignItems=\"center\"\n        gap={1.5}\n        sx={{ flex: '0 0 auto' }}\n      >\n        {icon ? (\n          icon\n        ) : (\n          <BookIcon\n            sx={{\n              fontSize: '1.5rem',\n              color: '#7c3aed',\n            }}\n          />\n        )}\n        <Typography\n          variant=\"h1\"\n          fontWeight=\"bold\"\n          color=\"primary.main\"\n          sx={{\n            whiteSpace: 'nowrap',\n            overflow: 'visible',\n            textOverflow: 'unset',\n          }}\n        >\n          {title}\n        </Typography>\n      </Box>\n\n      {/* Right: Breadcrumb Area (Conditional Rendering) */}\n      {!isNotebook && breadcrumbItems && breadcrumbItems.length > 0 && (\n        <Box\n          sx={{\n            flex: '1 1 auto',\n            justifyContent: 'flex-end',\n            minWidth: 0,\n            display: 'flex',\n            alignItems: 'center',\n            gap: 0.5,\n            whiteSpace: 'nowrap',\n            overflow: 'hidden',\n          }}\n        >\n          <Typography\n            variant=\"caption\"\n            fontWeight=\"normal\"\n            color=\"text.secondary\"\n            sx={{\n              fontSize: {\n                xs: '0.75rem',\n                sm: '0.8125rem',\n                md: '0.875rem',\n              },\n              whiteSpace: 'nowrap',\n              overflow: 'hidden',\n              textOverflow: 'ellipsis',\n              minWidth: 0,\n            }}\n          >\n            {breadcrumbItems.join(' | ')}\n          </Typography>\n        </Box>\n      )}\n    </Box>\n  );\n};\n\nexport default HeaderTitle;\n\n\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport {\n  Box as MuiBox,\n  Stack as MuiStack,\n  Typography as MuiTypography,\n  useTheme,\n  Button,\n} from \"@mui/material\";\nimport useAIDTMediaQuery from \"../../hooks/useAIDTMediaQuery\";\nimport ScrollMoreIcon from \"../../icons/ScrollMoreIcon\";\nimport { LayoutPagination } from \"./layout-pagination\";\nimport { LayoutFooterPaging, LayoutFooterSubmit } from \"./Footer\";\nimport { LayoutHeaderSubTitle, LayoutHeaderTitle } from \"./Header\";\n\nimport type { BoxProps, StackProps, SxProps, Theme, TypographyProps } from \"@mui/material\";\n\ninterface EliceLayoutContextProps {\n  isScrollActive: boolean;\n  setIsScrollActive: (isSticky: boolean) => void;\n  enableScrollTracking: boolean;\n}\n\nconst EliceLayoutContext = React.createContext<EliceLayoutContextProps | undefined>(undefined);\n\nexport interface EliceLayoutProps {\n  children: React.ReactNode;\n  backgroundImage?: string;\n  backgroundColor?: string;\n  onPrev?: () => void;\n  onNext?: () => void;\n  allowPrev?: boolean;\n  allowNext?: boolean;\n  onlyPage?: boolean;\n  enableScrollTracking?: boolean;\n  sx?: SxProps<Theme>;\n}\n\ntype Alignment = \"left\" | \"center\" | \"right\";\n\ninterface EliceStepProps<T extends React.ElementType> {\n  step?: -1 | 0 | 1 | 2 | 3;\n  component?: T;\n}\ntype EliceBoxProps<T extends React.ElementType> = BoxProps<T> &\n  EliceStepProps<T>;\ntype EliceStackProps<T extends React.ElementType> = StackProps<T> &\n  EliceStepProps<T>;\ntype EliceTypographyProps = TypographyProps &\n  Omit<EliceStepProps<React.ElementType>, 'component'>;\n\n/**\n *  @summary Alpha of Design System. Wrapper of MUI Box\n * */\nexport const Box = React.forwardRef(function Box<T extends React.ElementType>({\n  component,\n  step,\n  sx,\n  ...props\n}: EliceBoxProps<T>, ref: React.Ref<unknown>) {\n  const stepSx = {\n    ...(step !== undefined ? ({\n      '--fluid-size': `var(--step-${step})`,\n      '& *:not([class*=Typography]):not([class*=Typography] *)': {\n        'font-size': 'var(--fluid-size)',\n      }\n    }) : {}),\n    ...sx\n  };\n\n  return <MuiBox ref={ref} component={component} sx={stepSx} {...props} />;\n});\n\n/**\n *  @summary Alpha of Design System. Wrapper of MUI Stack\n * */\nexport const Stack = React.forwardRef(function Stack<T extends React.ElementType>({\n  component,\n  step,\n  sx,\n  ...props\n}: EliceStackProps<T>, ref: React.Ref<unknown>) {\n  const stepSx = {\n    ...(step !== undefined ? ({\n      '--fluid-size': `var(--step-${step})`,\n      '& *:not([class*=Typography]):not([class*=Typography] *)': {\n        'font-size': 'var(--fluid-size)',\n      }\n    }) : {}),\n    ...sx,\n  };\n\n  return (\n    <MuiStack\n      ref={ref}\n      // FIXME: delete any in React 19.\n      component={component as any}\n      sx={stepSx}\n      {...props}\n    />\n  );\n});\n\n\n/**\n *  @summary Alpha of Design System. Wrapper of MUI Typography\n * */\nexport function Typography({ step, sx, ...props }: EliceTypographyProps) {\n  const stepSx = {\n    '&:is([class*=\"Typography\"])': {\n      ...(sx ?? ({} as any)),\n      '--fluid-size': `var(--step-${step ?? 0})`,\n      fontSize: (sx as any)?.fontSize,\n    },\n  };\n\n  return <MuiTypography sx={stepSx} {...props} />;\n}\n\n\nexport const Layout = ({\n  children,\n  onPrev,\n  onNext,\n  allowPrev,\n  allowNext,\n  backgroundImage,\n  backgroundColor,\n  onlyPage = false,\n  enableScrollTracking = false,\n  sx\n}: EliceLayoutProps) => {\n  const { isTablet, isMiniTablet } = useAIDTMediaQuery();\n  const [isScrollActive, setIsScrollActive] = React.useState(false);\n\n  return (\n    <EliceLayoutContext.Provider value={{ isScrollActive, setIsScrollActive, enableScrollTracking }}>\n      <MainContainer\n        isMiniTablet={isMiniTablet}\n        backgroundImage={backgroundImage}\n        backgroundColor={backgroundColor}\n        sx={sx}\n      >\n        {\n          !onlyPage && (\n            !isTablet && (\n              <LayoutPagination onPrev={onPrev} onNext={onNext} allowPrev={allowPrev} allowNext={allowNext} />\n            )\n          )\n        }\n        {children}\n      </MainContainer>\n    </EliceLayoutContext.Provider>\n  );\n}\n\nconst HeaderContainerInner = styled(Stack)`\n  height: 4.625rem;\n  width: 100%;\n  justify-content: space-between;\n  flex-direction: row;\n`;\nexport const HeaderContainer = ({ children, sx }: { children: React.ReactNode, sx?: SxProps<Theme> }) => {\n  return <HeaderContainerInner sx={sx}>{children}</HeaderContainerInner>;\n}\nexport const HeaderTitle = LayoutHeaderTitle;\nexport const HeaderSubTitle = LayoutHeaderSubTitle;\n\nconst ContentContainerInner = styled(Stack) <{ theme: Theme }>`\n  flex: 1;\n  width: 100%;\n  max-height: calc(100vh - 4.625rem - 5rem);\n  overflow-y: auto;\n  min-height: 0;\n  position: relative;\n\n  &::-webkit-scrollbar {\n    width: 0.5rem;\n  }\n\n  &::-webkit-scrollbar-thumb {\n    background-color: ${({ theme }) => theme.palette.primary.main};\n    border-radius: 0.25rem;\n  }\n\n  &::-webkit-scrollbar-track {\n    background-color: ${({ theme }) => theme.palette.grey[300]};\n    border-radius: 0.25rem;\n  }\n`;\nexport const ContentContainer = ({\n  children,\n  sx,\n  scrollbarPostion = 10\n}: {\n  children: React.ReactNode,\n  sx?: SxProps<Theme>,\n  scrollbarPostion?: number\n}) => {\n  const theme = useTheme();\n  const contentRef = React.useRef<HTMLDivElement>(null);\n  const context = React.useContext(EliceLayoutContext);\n\n  if (!context) {\n    throw new Error(\"EliceLayout components must be used within an EliceLayout provider.\");\n  }\n\n  const { isScrollActive, setIsScrollActive, enableScrollTracking } = context;\n  const [hasScroll, setHasScroll] = React.useState(false);\n  const scrollTopRef = React.useRef(0);\n  const scrollBarRef = React.useRef<HTMLDivElement>(null);\n\n  React.useEffect(() => {\n    if (!enableScrollTracking) return;\n\n    const element = contentRef.current;\n    if (!element) return;\n\n    const handleScroll = () => {\n      setIsScrollActive(element.scrollTop > 10);\n    };\n\n    element.addEventListener('scroll', handleScroll);\n\n    return () => {\n      element.removeEventListener('scroll', handleScroll);\n    };\n  }, [enableScrollTracking, setIsScrollActive]);\n\n  // ✅ 2. 스크롤 위치 계산용 useEffect (커스텀 스크롤바용)\n  React.useEffect(() => {\n    const el = contentRef.current;\n    if (!el) return;\n\n    const updateScrollBar = () => {\n      const { scrollTop, scrollHeight, clientHeight } = el;\n\n      // 상태로 관리하지 않고 직접 반영\n      scrollTopRef.current = scrollTop;\n\n      const thumbHeight = (clientHeight / scrollHeight) * clientHeight;\n      const top = (scrollTop / scrollHeight) * clientHeight;\n\n      if (scrollBarRef.current) {\n        scrollBarRef.current.style.height = `${thumbHeight}px`;\n        scrollBarRef.current.style.top = `${top}px`;\n      }\n\n      setHasScroll(scrollHeight > clientHeight);\n    };\n\n    el.addEventListener('scroll', updateScrollBar);\n\n    requestAnimationFrame(() => {\n      if (el.scrollHeight > el.clientHeight) {\n        el.scrollTop = 1;         // 👉 살짝 움직여줌\n        el.scrollTop = 0;         // 👉 바로 다시 원위치\n        updateScrollBar();        // 👉 thumb도 즉시 업데이트\n      }\n    });\n\n    return () => el.removeEventListener('scroll', updateScrollBar);\n  }, []);\n\n  return (\n    <ContentContainerWrapper>\n      <ContentContainerInner\n        ref={contentRef as any}\n        theme={theme}\n        flex={1}\n        sx={{\n          ...sx,\n          scrollbarWidth: 'none',\n          msOverflowStyle: 'none',\n          '&::-webkit-scrollbar': { display: 'none' },\n        }}\n      >\n        {children}\n        {enableScrollTracking && hasScroll && !isScrollActive && (\n          <ScrollMoreButton>\n            <ScrollMoreIcon size={32} color=\"white\" bgOpacity={0.5} />\n          </ScrollMoreButton>\n        )}\n      </ContentContainerInner>\n\n      {/* 커스텀 스크롤바 */}\n      {hasScroll && (\n        <div\n          style={{\n            position: 'absolute',\n            top: 0,\n            right: `${-1 * scrollbarPostion}px`,\n            width: '0.5rem',\n            height: '100%',\n            backgroundColor: '#eee',\n            borderRadius: '0.25rem',\n          }}\n        >\n          <div\n            ref={scrollBarRef}\n            style={{\n              width: '100%',\n              backgroundColor: theme.palette.primary.main,\n              borderRadius: '0.25rem',\n              position: 'absolute',\n              transition: 'top 0.01s linear',\n            }}\n          />\n        </div>\n      )}\n    </ContentContainerWrapper>\n  );\n}\nexport const Subtitle = ({ children, alignment = \"left\", justifyContent = \"flex-start\", sx }:\n  {\n    children: React.ReactNode;\n    alignment?: Alignment;\n    justifyContent?: string;\n    sx?: SxProps<Theme>\n  }) => {\n  const context = React.useContext(EliceLayoutContext);\n  if (!context) {\n    throw new Error(\"EliceLayout components must be used within an EliceLayout provider.\");\n  }\n  const { isScrollActive, enableScrollTracking } = context;\n\n  return (\n    <SubtitleContainer\n      isSticky={enableScrollTracking && isScrollActive}\n      alignment={alignment}\n      justifyContent={justifyContent}\n      sx={sx}\n    >\n      {React.Children.map(children, (child) => {\n        if (React.isValidElement(child) && child.type === MuiTypography) {\n          return React.cloneElement(child, {\n            variant: child.props.variant || 'h5',\n            ...child.props\n          });\n        }\n        return child;\n      })}\n    </SubtitleContainer>\n  );\n}\n\nconst ContentInner = styled(Stack) <{ alignment: Alignment; justifyContent: string }>`\n  flex: 1;\n  width: 100%;\n  min-height: 0;\n  display: flex;\n  text-align: ${({ alignment }) => alignment};\n  justify-content: ${({ justifyContent }) => justifyContent};\n`;\nexport const Content = ({\n  children,\n  alignment = \"left\",\n  justifyContent = \"flex-start\",\n  sx,\n}: {\n  children: React.ReactNode;\n  alignment?: Alignment;\n  justifyContent?: string;\n  sx?: SxProps<Theme>\n}) => {\n  return (\n    <ContentInner alignment={alignment} justifyContent={justifyContent} sx={sx}>\n      {children}\n    </ContentInner>\n  )\n}\n\nconst FooterContainerInner = styled(Stack)`\n  height: 4rem;\n  width: 100%;\n  padding: 0.75rem 0;\n  align-items: center;\n  justify-content: space-between;\n  flex-direction: row;\n`;\nexport const FooterContainer = ({ children, sx }: { children: React.ReactNode, sx?: SxProps<Theme> }) => {\n  return <FooterContainerInner sx={sx}>{children}</FooterContainerInner>;\n}\nexport const FooterPaging = LayoutFooterPaging;\nexport const FooterSubmit = LayoutFooterSubmit;\n\nconst MainContainer = styled(Stack) <{ isMiniTablet: boolean; backgroundImage?: string; backgroundColor?: string }>`\n  width: 100%;\n  height: 100vh;\n  justify-content: center;\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  padding: ${({ isMiniTablet }) => (isMiniTablet ? \"0 1.25rem\" : \"0 2.5rem\")};\n  box-sizing: border-box;\n  position: relative;\n  background-image: ${({ backgroundImage }) => (backgroundImage ? `url(${backgroundImage})` : \"none\")};\n  background-size: cover;\n  background-position: center;\n  background-color: ${({ backgroundColor }) => backgroundColor ?? \"#fff\"};\n  overflow-y: hidden;\n`;\n\nconst SubtitleContainer = styled(Stack) <{ isSticky: boolean; alignment: Alignment; justifyContent: string }>`\n  height: 5rem;\n  width: 100%;\n  padding: 1.25rem 2.5rem;\n  display: flex;\n  align-items: ${({ alignment }) => alignment};\n  justify-content: ${({ justifyContent }) => justifyContent};\n  background-color: ${({ isSticky }) => (isSticky ? \"#fff\" : \"none\")};\n  position: ${({ isSticky }) => (isSticky ? \"sticky\" : \"relative\")};\n  top: ${({ isSticky }) => (isSticky ? \"0\" : \"auto\")};\n  left: 0;\n  z-index: 10;\n  transition: all 0.2s ease-in-out;\n  box-shadow: ${({ isSticky }) => (isSticky ? \"0 0.125rem 0.3125rem rgba(0, 0, 0, 0.1)\" : \"none\")};\n`;\n\n\nconst ContentContainerWrapper = styled(MuiStack)({\n  position: 'relative',\n  width: '100%',\n  height: '100%',\n});\n\nconst ScrollMoreButton = styled(Button)`\n  position: absolute;\n  bottom: 1.25rem;\n  right: 2.875rem;\n  border-radius: 50%;\n  min-width: 2.25rem;\n  height: 2.25rem;\n  padding: 0;\n  z-index: 20;\n`;\n\n","import { IconProps } from \"./_types\";\n\ninterface ScrollMoreIconProps extends IconProps {\n  bgColor?: string;\n  arrowColor?: string;\n  bgOpacity?: number;\n  arrowOpacity?: number;\n}\n\nconst ScrollMoreIcon = ({\n  size = 36,\n  bgColor = \"#7D89C2\",\n  arrowColor = \"white\",\n  bgOpacity = 1,\n  arrowOpacity = 1,\n  ...other\n}: ScrollMoreIconProps) => {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 36 36\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...other}\n    >\n      <rect width=\"36\" height=\"36\" rx=\"16\" fill={bgColor} opacity={bgOpacity} />\n      <path\n        d=\"M17.1914 22.4336L12.6914 17.9336C12.375 17.6172 12.2695 17.125 12.4453 16.7031C12.6211 16.2812 13.043 16 13.5 16H22.5C22.957 16 23.3438 16.2812 23.5195 16.7031C23.6953 17.125 23.5898 17.6172 23.2734 17.9336L18.7734 22.4336C18.3516 22.8906 17.6133 22.8906 17.1914 22.4336Z\"\n        fill={arrowColor}\n        opacity={arrowOpacity}\n      />\n    </svg>\n  );\n};\n\nexport default ScrollMoreIcon;\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { PaginationButton } from \"../../pagination-button\";\n\nconst PaginationWrapper = styled.div`\n  position: absolute;\n  top: 50%;\n  left: 0.625rem;\n  width: calc(100% - 1.25rem);\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  z-index: 100;\n  transform: translateY(-50%);\n  pointer-events: none;\n`;\n\nexport interface LayoutPaginationProps {\n  onPrev?: () => void;\n  onNext?: () => void;\n  allowPrev?: boolean;\n  allowNext?: boolean;\n  hidePrev?: boolean;\n  hideNext?: boolean;\n}\n\nconst LayoutPagination = ({\n  onPrev,\n  onNext,\n  allowPrev = true,\n  allowNext = true,\n  hidePrev = false,\n  hideNext = false,\n}: LayoutPaginationProps): JSX.Element => {\n  return (\n    <PaginationWrapper>\n      {!hidePrev && <PaginationButton left onClick={onPrev} disabled={!allowPrev} />}\n      {!hideNext && <PaginationButton right onClick={onNext} disabled={!allowNext} />}\n    </PaginationWrapper>\n  );\n};\n\nexport default LayoutPagination;\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport useAIDTMediaQuery from \"../../hooks/useAIDTMediaQuery\";\nimport { ArrowLeft, ArrowRight } from \"../../icons\";\n\ninterface PaginationButtonProps {\n  left?: boolean;\n  right?: boolean;\n  onClick?: () => void;\n  disabled?: boolean;\n  size?: number;\n}\n\nconst Button = styled.button<{ disabled: boolean, isTablet: boolean, size?: number }>`\n  width: ${({ size }) => size ? `${size}px` : \"60px\"};\n  height: ${({ size }) => size ? `${size}px` : \"60px\"};\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border: none;\n  pointer-events: auto;\n  background-color: ${({ disabled }) => (disabled ? \"#ddd\" : \"#fff\")};\n  border-radius: 40px;\n  box-shadow:  ${({ isTablet }) => (isTablet ? \"none\" : \"0px 0px 1px 0px rgba(0, 0, 0, 0.40), 0px 8px 10px 0px rgba(0, 0, 0, 0.05), 0px 8px 30px 0px rgba(0, 0, 0, 0.12)\")};\n  cursor: ${({ disabled }) => (disabled ? \"not-allowed\" : \"pointer\")};\n  &:hover {\n    background-color: ${({ disabled, isTablet }) => isTablet ? (disabled ? \"#ddd\" : \"#e0e0e0\") : \"none\"};\n  }\n`;\n\nconst PaginationButton: React.FC<PaginationButtonProps> = ({ left, right, onClick, disabled = false, size }) => {\n  const { isTablet } = useAIDTMediaQuery();\n  return (\n    <Button onClick={onClick} disabled={disabled} isTablet={isTablet} size={size}>\n      {left && <ArrowLeft size={size} />}\n      {right && <ArrowRight size={size} />}\n    </Button>\n  );\n};\n\nexport default PaginationButton;\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { SxProps, Theme, Typography, useTheme, Stack, TypographyProps } from \"@mui/material\";\nimport { PaginationButton } from \"../../pagination-button\";\nimport useAIDTMediaQuery from \"../../../hooks/useAIDTMediaQuery\";\n\nconst FooterContainer = styled(Stack)`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  white-space: nowrap;\n  flex-direction: row;\n  gap: 0.75rem;\n  font-size: 0.875rem;\n`;\n\nconst FooterPagination = styled(Typography) <{ isTablet: boolean }>`\n  padding: ${({ isTablet }) => (isTablet ? \"0 0.625rem\" : \"0 2rem\")};\n  white-space: nowrap;\n`;\n\nconst StyledCurrentPage = styled.span<{ fontColor: string }>`\n  color: ${({ fontColor }) => fontColor};\n`;\n\nexport interface LayoutFooterPagingProps {\n  currentPage: number;\n  totalPage: number;\n  onPrev?: () => void;\n  onNext?: () => void;\n  allowPrev?: boolean;\n  allowNext?: boolean;\n  variant?: TypographyProps['variant'];\n  currentPageColor?: string;\n  textColor?: string;\n}\n\nconst LayoutFooterPaging: React.FC<LayoutFooterPagingProps> = ({\n  currentPage,\n  totalPage,\n  onPrev,\n  onNext,\n  allowPrev = true,\n  allowNext = true,\n  variant = \"subtitle1\",\n  currentPageColor,\n  textColor,\n}) => {\n  const theme = useTheme();\n  const { isTablet } = useAIDTMediaQuery();\n\n  return (\n    <FooterContainer>\n      {isTablet && <PaginationButton left onClick={onPrev} disabled={!allowPrev} size={24} />}\n      <FooterPagination variant={variant} sx={{ color: textColor || \"#D8D8E2\" }} isTablet={isTablet}>\n        <StyledCurrentPage fontColor={currentPageColor || theme.palette.primary.main}>\n          <span>{currentPage}</span>\n        </StyledCurrentPage>{\" \"}\n        <span>/</span>{\" \"}\n        <span>{totalPage}</span>\n      </FooterPagination>\n      {isTablet && <PaginationButton right onClick={onNext} disabled={!allowNext} size={24} />}\n    </FooterContainer>\n  );\n};\n\nexport default LayoutFooterPaging;\n","import { Stack } from \"@mui/material\";\nimport { EliceButton } from \"../../button\";\n\nexport interface LayoutFooterSubmitProps {\n  isRollback?: boolean;\n  isSubmit?: boolean;\n  disableRollback?: boolean;\n  disableSubmit?: boolean;\n  submitText?: string;\n  rollbackText?: string;\n  onRollback?: () => void;\n  onSubmit?: () => void;\n  submitButtonColor?: string;\n  rollbackButtonColor?: string;\n  submitTextColor?: string;\n  buttonSize?: 'small' | 'medium' | 'large';\n  rollbackTextColor?: string;\n}\n\nconst LayoutFooterSubmit = ({\n  isRollback = false,\n  isSubmit = false,\n  disableRollback = false,\n  disableSubmit = false,\n  submitText,\n  rollbackText,\n  onSubmit,\n  buttonSize = 'medium',\n  onRollback,\n  submitButtonColor,\n  rollbackButtonColor,\n  submitTextColor = '#fff',\n  rollbackTextColor,\n}: LayoutFooterSubmitProps) => {\n  return (\n    <Stack direction=\"row\" spacing={1}>\n      {isRollback && (\n        <EliceButton\n          disabled={disableRollback}\n          variant=\"outlined\"\n          size={buttonSize}\n          customColor={rollbackButtonColor}\n          textColor={rollbackTextColor}\n          onClick={onRollback}\n        >\n          {rollbackText ?? \"다시하기\"}\n        </EliceButton>\n      )}\n      {isSubmit && (\n        <EliceButton\n          disabled={disableSubmit}\n          variant=\"contained\"\n          size={buttonSize}\n          customColor={submitButtonColor}\n          textColor={submitTextColor}\n          onClick={onSubmit}\n        >\n          {submitText ?? \"제출하기\"}\n        </EliceButton>\n      )}\n    </Stack>\n  );\n};\n\nexport default LayoutFooterSubmit;\n","import React, { useState } from \"react\";\nimport { Menu } from \"@base-ui-components/react/menu\";\nimport { Stack, SxProps, Theme, styled } from \"@mui/material\";\nimport { EliceIconButton } from \"../../icon-button\";\nimport { MoreColumn } from \"../../../icons\";\nimport { colors } from \"../../../tokens\";\nimport useAIDTMediaQuery from \"../../../hooks/useAIDTMediaQuery\";\n\nconst StyledPopup = styled(Menu.Popup)`\n  display: flex;\n  flex-direction: column;\n  min-width: 150px;\n  background: transparent;\n  padding-top: 10px;\n  border-radius: 8px;\n`;\n\nconst StyledMenuItem = styled(Menu.Item)`\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n  flex-direction: column;\n`;\n\nconst StyledMoreTrigger = styled(Menu.Trigger)`\n  border: none;\n  background-color: #fff;\n  padding: 0;\n`;\n\nexport interface LayoutHeaderSubTitleProps {\n  children: React.ReactNode;\n  sx?: SxProps<Theme>\n}\n\nconst LayoutHeaderSubTitle = ({ children, sx }: LayoutHeaderSubTitleProps): JSX.Element => {\n  const [menuOpen, setMenuOpen] = useState(false);\n  const { isTablet } = useAIDTMediaQuery();\n\n  return (\n    <Stack direction=\"row\" spacing={2} alignItems=\"center\" sx={sx}>\n      {isTablet ? (\n        <Menu.Root open={menuOpen} onOpenChange={setMenuOpen}>\n          <StyledMoreTrigger>\n            <EliceIconButton width={48} height={48} backgroundColor={colors.bluepurple[100]} borderRadius={12}>\n              <MoreColumn />\n            </EliceIconButton>\n          </StyledMoreTrigger>\n          <Menu.Portal>\n            <Menu.Positioner align=\"start\">\n              <StyledPopup>\n                <Menu.Arrow />\n                {React.Children.map(children, (child, index) => (\n                  <StyledMenuItem key={index}>{child}</StyledMenuItem>\n                ))}\n              </StyledPopup>\n            </Menu.Positioner>\n          </Menu.Portal>\n        </Menu.Root>\n      ) : (\n        children\n      )}\n    </Stack>\n  );\n};\n\nexport default LayoutHeaderSubTitle;\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Stack, SxProps, Theme, Typography, useTheme } from \"@mui/material\";\n\nconst StyledTitle = styled(Stack) <{ bgColor: string }>`\n  flex-shrink: 0;\n  width: fit-content;\n  background-color: ${({ bgColor }) => bgColor};\n  position: relative;\n  top: auto;\n  height: 68px;\n  box-sizing: border-box;\n  padding-top: 17px;\n  border-radius: 0 0 26px 26px;\n`;\n\nconst Title = styled(Typography)`\n  border-top: 1px dashed #fff;\n  height: 35px;\n  display: flex;\n  justify-content: center;\n  padding: 11px 24px;\n  text-align: center;\n  color: #fff;\n`;\n\nexport interface LayoutHeaderTitleProps {\n  children?: React.ReactNode;\n  titleComponent?: React.ReactNode;\n  sx?: SxProps<Theme>\n}\n\nconst LayoutHeaderTitle = ({ children, titleComponent, sx }: LayoutHeaderTitleProps): JSX.Element => {\n  const theme = useTheme();\n\n  if (titleComponent) {\n    return <>{titleComponent}</>;\n  }\n\n  return (\n    <StyledTitle bgColor={theme.palette.secondary.main} sx={sx}>\n      {typeof children === \"string\" ? <Title variant=\"h1\">{children}</Title> : children}\n    </StyledTitle>\n  );\n};\n\nexport default LayoutHeaderTitle;\n","import {\n  Layout,\n  HeaderContainer,\n  HeaderTitle as LayoutHeaderTitle,\n  HeaderSubTitle,\n  ContentContainer,\n  Content,\n  Subtitle,\n  FooterContainer,\n  FooterPaging,\n  FooterSubmit,\n} from './Layout';\n\nexport {\n  Layout,\n  HeaderContainer,\n  HeaderSubTitle,\n  ContentContainer,\n  Content,\n  FooterContainer,\n  FooterPaging,\n  FooterSubmit,\n  Box,\n  Stack,\n  Typography,\n} from './Layout';\n\nexport const EliceLayout = Object.assign(Layout, {\n  HeaderContainer,\n  HeaderTitle: LayoutHeaderTitle,\n  HeaderSubTitle,\n  Subtitle,\n  ContentContainer,\n  Content,\n  FooterContainer,\n  FooterPaging,\n  FooterSubmit,\n});\n\nexport type { EliceLayoutProps } from './Layout';\n","import React from 'react';\nimport { Box, Stack, Typography, SxProps, Theme, useTheme } from '@mui/material';\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline';\nimport { EliceBadge } from '../badge';\nimport { useAIDTMediaQuery } from '../../hooks';\n\nexport interface InnerHeaderProps {\n  title: string;\n  showQuestionIcon?: boolean;\n  stepNumber?: number;\n  badgeLabel?: string;\n  sx?: SxProps<Theme>;\n}\n\nconst InnerHeader = ({\n  title,\n  showQuestionIcon = false,\n  stepNumber,\n  badgeLabel,\n  sx,\n}: InnerHeaderProps): JSX.Element => {\n  const theme = useTheme();\n  const { isTablet } = useAIDTMediaQuery();\n\n  // 우선순위: badgeLabel > showQuestionIcon > stepNumber\n  const containerBaseSx: SxProps<Theme> = {\n    width: '100%',\n    mx: 'auto',\n    minHeight: isTablet ? '3.2rem' : '4rem',\n    backgroundColor: 'transparent',\n    paddingLeft: isTablet ? '1rem' : '1.875rem',\n    paddingRight: isTablet ? '1rem' : '1.875rem',\n    py: isTablet ? '0.5rem' : '1rem',\n    margin: 0,\n  };\n\n  const mergedContainerSx: SxProps<Theme> =\n    sx !== undefined\n      ? [containerBaseSx, ...(Array.isArray(sx) ? sx : [sx])]\n      : containerBaseSx;\n\n  const gap = isTablet ? '0.75rem' : '1rem';\n  const iconSize = isTablet ? '1.25rem' : '1.5rem';\n\n  // Mode 1: Badge Label Mode\n  if (badgeLabel) {\n    return (\n      <Box\n        display=\"flex\"\n        alignItems=\"flex-start\"\n        gap={gap}\n        sx={mergedContainerSx}\n      >\n        <Stack\n          sx={{\n            display: 'flex',\n            height: '100%',\n            alignItems: 'center',\n            justifyContent: 'center',\n          }}\n        >\n          <EliceBadge\n            label={badgeLabel}\n            color=\"primary\"\n          />\n        </Stack>\n        <Typography\n          variant=\"h2\"\n          color=\"text.primary\"\n          sx={{\n            fontWeight: 600,\n            lineHeight: 1.4,\n            mt: { xs: 0.3, md: 0.2 },\n            flex: 1,\n            wordBreak: 'keep-all',\n            whiteSpace: 'normal',\n          }}\n        >\n          {title}\n        </Typography>\n      </Box>\n    );\n  }\n\n  // Mode 2: Question Icon Mode\n  if (showQuestionIcon) {\n    return (\n      <Box\n        display=\"flex\"\n        gap={gap}\n        sx={mergedContainerSx}\n      >\n        <Stack\n          sx={{\n            display: 'flex',\n            height: '100%',\n            alignItems: 'center',\n            justifyContent: 'center',\n            mt: isTablet ? '0.2rem' : '0.6rem'\n          }}\n        >\n          <Box\n            sx={{\n              width: iconSize,\n              height: iconSize,\n              display: 'flex',\n              flexShrink: 0,\n            }}\n          >\n            <HelpOutlineIcon\n              sx={{\n                fontSize: iconSize,\n                color: '#7c3aed',\n              }}\n            />\n          </Box>\n        </Stack>\n        <Typography\n          variant=\"h2\"\n          color=\"text.primary\"\n          sx={{\n            fontWeight: 600,\n            lineHeight: 1.4,\n            mt: { xs: 0.3, md: 0.2 },\n            flex: 1,\n            wordBreak: 'keep-all',\n            whiteSpace: 'normal',\n          }}\n        >\n          {title}\n        </Typography>\n      </Box>\n    );\n  }\n\n  // Mode 3: Step Number Mode or Title Only\n  const stepGap = isTablet ? '0.75rem' : '1rem';\n  return (\n    <Box\n      display=\"flex\"\n      gap={stepGap}\n      sx={mergedContainerSx}\n    >\n      {stepNumber && (\n        <Box\n          sx={{\n            width: iconSize,\n            height: iconSize,\n            borderRadius: '50%',\n            backgroundColor: '#7c3aed',\n            color: 'white',\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'center',\n            fontSize: isTablet ? '0.8125rem' : '0.875rem',\n            fontWeight: 'bold',\n            flexShrink: 0,\n            mt: isTablet ? '0.2rem' : '0.6rem'\n          }}\n        >\n          {stepNumber}\n        </Box>\n      )}\n      <Typography\n        variant=\"h2\"\n        color=\"text.primary\"\n        sx={{\n          fontWeight: 600,\n          lineHeight: 1.4,\n          mt: { xs: 0.3, md: 0.2 },\n          flex: 1,\n          wordBreak: 'keep-all',\n          whiteSpace: 'normal',\n          fontSize: isTablet\n            ? theme.typography.h2.fontSize\n            : theme.typography.h2?.fontSize,\n        }}\n      >\n        {title}\n      </Typography>\n    </Box>\n  );\n};\n\nexport default InnerHeader;\n","import styled from '@emotion/styled';\nimport {\n  Stack,\n  ToggleButton,\n  ToggleButtonGroup,\n  useTheme,\n} from '@mui/material';\n\nimport {\n  SelectedCheckbox,\n  SelectedRadio,\n  UnselectedCheckbox,\n  UnselectedRadio,\n} from '../../icons';\nimport {\n  gray100Color,\n  gray300Color,\n  textQuaternaryColor,\n  textTeriaryColor,\n} from '../tokenColorTemporary';\n\nimport type { ToggleButtonGroupProps } from '@mui/material';\nimport type { Dispatch, ReactNode, SetStateAction } from 'react';\n\nconst EliceToggleButton = styled(ToggleButton)`\n  border: none;\n  border-radius: 1.25rem !important;\n`;\n\nexport interface EliceSelectionProps extends ToggleButtonGroupProps {\n  type: 'checkbox' | 'radio';\n  options: { value: string; content: ReactNode | string }[];\n  value: string[];\n  setValue: Dispatch<SetStateAction<string[]>>;\n  limitSelectCount?: number;\n}\n\nconst EliceSelection = ({\n  type,\n  options,\n  value,\n  setValue,\n  orientation = 'vertical',\n  disabled,\n  limitSelectCount = 1,\n}: EliceSelectionProps) => {\n  const theme = useTheme();\n\nconst handleSelectionChange = (\n  event: React.MouseEvent<HTMLElement>,\n  newValue: string | null | string[]\n) => {\n  if (!newValue || disabled) return;\n\n  setValue(prevState => {\n    const newValuesArray = Array.isArray(newValue) ? newValue : [newValue];\n    const updatedValues: string[] = [...prevState];\n    newValuesArray.forEach(value => {\n      if (!updatedValues.includes(value)) {\n        updatedValues.push(value);\n      } else {\n        updatedValues.splice(updatedValues.indexOf(value), 1);\n      }\n    });\n    if (updatedValues.length > limitSelectCount) {\n      return updatedValues.slice(-limitSelectCount);\n    }\n    return updatedValues;\n  });\n};\n\n  return (\n    <ToggleButtonGroup\n      orientation={orientation}\n      value={value}\n      exclusive={type === 'radio'}\n      onChange={handleSelectionChange}\n      sx={{\n        backgroundColor: 'transparent',\n        gap: '1rem',\n        '> button': {\n          padding: '0 !important',\n          '&:hover': {\n            backgroundColor: 'transparent !important',\n          },\n        },\n        '.Mui-selected': {\n          backgroundColor: 'transparent !important',\n          boxShadow: 'none !important',\n        },\n      }}\n    >\n      {options.map(option => {\n        const isSelected = value.includes(option.value);\n        return (\n          <EliceToggleButton key={option.value} value={option.value}>\n            <Stack\n              direction=\"row\"\n              border=\"1px solid\"\n              borderColor={\n                isSelected ? theme.palette.secondary.main : gray300Color\n              }\n              borderRadius=\"1.25rem\"\n              padding=\"1rem\"\n              gap=\"0.75rem\"\n              height=\"4rem\"\n              width=\"22rem\"\n              maxWidth=\"100%\"\n              boxSizing=\"border-box\"\n              alignItems=\"center\"\n              bgcolor={disabled ? gray100Color : '#ffffff'}\n            >\n              {isSelected && type === 'checkbox' && (\n                <SelectedCheckbox color={theme.palette.secondary.main} />\n              )}\n              {!isSelected && type === 'checkbox' && (\n                <UnselectedCheckbox color={gray300Color} />\n              )}\n              {isSelected && type === 'radio' && (\n                <SelectedRadio color={theme.palette.secondary.main} />\n              )}\n              {!isSelected && type === 'radio' && (\n                <UnselectedRadio color={gray300Color} />\n              )}\n              <Stack\n                color={\n                  isSelected\n                    ? theme.palette.secondary.main\n                    : disabled\n                    ? textQuaternaryColor\n                    : textTeriaryColor\n                }\n                fontSize=\"1.375rem\"\n                fontWeight={700}\n              >\n                {option.content}\n              </Stack>\n            </Stack>\n          </EliceToggleButton>\n        );\n      })}\n    </ToggleButtonGroup>\n  );\n};\n\nexport default EliceSelection;\n","import { Stack, SxProps } from '@mui/material';\n\nimport Correct from './Correct';\nimport Incorrect from './Incorrect';\n\nexport interface EliceAnswerFeedbackProps {\n  isCorrect?: boolean;\n  sx?: SxProps;\n  size?: number;\n  correctComponent?: React.ReactNode;\n  incorrectComponent?: React.ReactNode;\n}\n\nconst AnswerFeedback = ({\n  isCorrect,\n  sx,\n  size,\n  correctComponent,\n  incorrectComponent,\n}: EliceAnswerFeedbackProps) => {\n  return (\n    <Stack\n      position=\"absolute\"\n      zIndex={99999}\n      height=\"100%\"\n      width=\"100%\"\n      top={0}\n      left={0}\n      alignItems=\"center\"\n      justifyContent=\"center\"\n      sx={{ ...sx }}\n    >\n      {isCorrect ? (\n        correctComponent ?? <Correct size={size} />\n      ) : (\n        incorrectComponent ?? <Incorrect size={size} />\n      )}\n    </Stack>\n  );\n};\n\nexport default AnswerFeedback;","import { useTheme } from '@mui/material';\ninterface CorrectType {\n  size?: number,\n}\n\nconst Correct = ({ size = 318 }: CorrectType) => {\n  const theme = useTheme();\n  return (\n    <svg\n      width={size + 1}\n      height={size}\n      viewBox={`0 0 ${size + 1} ${size}`}\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <g filter=\"url(#filter0_d_596_8851)\">\n        <path\n          d=\"M137.318 306L308.306 184.519C310.039 175.324 311 165.836 311 156.143C311 72.4571 243.274 4.61822 159.727 4.61821C76.1807 4.6182 8.45452 72.4571 8.45451 156.143C8.4545 232.197 64.3925 295.155 137.318 306Z\"\n          fill=\"#31A54C\"\n        />\n        <path\n          d=\"M305 156.143C305 164.614 304.235 172.935 302.836 181.045L135.835 299.693C66.9728 288.285 14.4545 228.363 14.4545 156.143C14.4545 75.7613 79.5038 10.6182 159.727 10.6182C239.951 10.6182 305 75.7614 305 156.143Z\"\n          stroke={`${theme.palette.primary.main ?? '#9BCAFF'}`}\n          stroke-width=\"12\"\n        />\n      </g>\n      <path\n        d=\"M237.364 154.727C237.364 111.922 202.545 77.0911 159.728 77.0911C116.922 77.0911 82.0915 111.911 82.0915 154.727C82.0915 197.544 116.911 232.364 159.728 232.364C202.545 232.364 237.364 197.533 237.364 154.727ZM213.868 154.727C213.868 184.579 189.58 208.867 159.728 208.867C129.876 208.867 105.588 184.579 105.588 154.727C105.588 124.876 129.876 100.588 159.728 100.588C189.58 100.588 213.868 124.876 213.868 154.727Z\"\n        fill=\"white\"\n        stroke=\"white\"\n        stroke-width=\"4\"\n      />\n      <path\n        d=\"M143.208 284.443C166.87 215.233 237.326 174.982 308.673 185.469L223.146 245.734L137.618 306C138.921 298.786 140.756 291.589 143.208 284.443Z\"\n        fill={`${theme.palette.primary.main ?? '#9BCAFF'}`}\n      />\n      <defs>\n        <filter\n          id=\"filter0_d_596_8851\"\n          x=\"0.45459\"\n          y=\"0.618164\"\n          width=\"318.545\"\n          height=\"317.382\"\n          filterUnits=\"userSpaceOnUse\"\n          color-interpolation-filters=\"sRGB\"\n        >\n          <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n          <feColorMatrix\n            in=\"SourceAlpha\"\n            type=\"matrix\"\n            values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n            result=\"hardAlpha\"\n          />\n          <feOffset dy=\"4\" />\n          <feGaussianBlur stdDeviation=\"4\" />\n          <feComposite in2=\"hardAlpha\" operator=\"out\" />\n          <feColorMatrix\n            type=\"matrix\"\n            values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n          />\n          <feBlend\n            mode=\"normal\"\n            in2=\"BackgroundImageFix\"\n            result=\"effect1_dropShadow_596_8851\"\n          />\n          <feBlend\n            mode=\"normal\"\n            in=\"SourceGraphic\"\n            in2=\"effect1_dropShadow_596_8851\"\n            result=\"shape\"\n          />\n        </filter>\n      </defs>\n    </svg>\n  );\n};\n\nexport default Correct;\n","import { useTheme } from '@mui/material';\n\ninterface IncorrectType {\n  size?: number,\n}\n\nconst Incorrect = ({ size = 318 }: IncorrectType) => {\n  const theme = useTheme();\n  return (\n    <svg\n      width={size + 1}\n      height={size}\n      viewBox={`0 0 ${size + 1} ${size}`}\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <g filter=\"url(#filter0_d_596_8855)\">\n        <path\n          d=\"M137.318 306L308.306 184.519C310.039 175.324 311 165.836 311 156.143C311 72.4571 243.274 4.61822 159.727 4.61821C76.1807 4.6182 8.45452 72.457 8.45451 156.143C8.4545 232.197 64.3925 295.155 137.318 306Z\"\n          fill=\"url(#paint0_linear_596_8855)\"\n        />\n        <path\n          d=\"M305 156.143C305 164.614 304.235 172.935 302.836 181.045L135.835 299.693C66.9728 288.285 14.4545 228.363 14.4545 156.143C14.4545 75.7613 79.5038 10.6182 159.727 10.6182C239.951 10.6182 305 75.7614 305 156.143Z\"\n          stroke={`${theme.palette.primary.main ?? '#9BCAFF'}`}\n          stroke-width=\"12\"\n        />\n      </g>\n      <mask\n        id=\"path-3-outside-1_596_8855\"\n        maskUnits=\"userSpaceOnUse\"\n        x=\"87.957\"\n        y=\"80.8818\"\n        width=\"148\"\n        height=\"148\"\n        fill=\"black\"\n      >\n        <rect fill=\"white\" x=\"87.957\" y=\"80.8818\" width=\"148\" height=\"148\" />\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M93.957 209.334L107.479 222.882L161.84 168.418L216.199 222.878L229.72 209.331L175.362 154.87L229.716 100.414L216.194 86.8664L161.84 141.323L107.483 86.8629L93.9613 100.41L148.319 154.87L93.957 209.334Z\"\n        />\n      </mask>\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M93.957 209.334L107.479 222.882L161.84 168.418L216.199 222.878L229.72 209.331L175.362 154.87L229.716 100.414L216.194 86.8664L161.84 141.323L107.483 86.8629L93.9613 100.41L148.319 154.87L93.957 209.334Z\"\n        fill=\"white\"\n      />\n      <path\n        d=\"M107.479 222.882L110.31 225.708L107.479 228.544L104.648 225.708L107.479 222.882ZM93.957 209.334L91.1259 212.16L88.3055 209.334L91.1259 206.509L93.957 209.334ZM161.84 168.418L159.009 165.592L161.84 162.755L164.672 165.592L161.84 168.418ZM216.199 222.878L219.03 225.704L216.199 228.541L213.367 225.704L216.199 222.878ZM229.72 209.331L232.551 206.505L235.372 209.331L232.551 212.157L229.72 209.331ZM175.362 154.87L172.531 157.696L169.711 154.87L172.531 152.044L175.362 154.87ZM229.716 100.414L232.547 97.588L235.368 100.414L232.547 103.239L229.716 100.414ZM216.194 86.8664L213.363 84.0406L216.194 81.2042L219.025 84.0406L216.194 86.8664ZM161.84 141.323L164.672 144.149L161.84 146.985L159.009 144.149L161.84 141.323ZM107.483 86.8629L104.652 84.0371L107.483 81.2007L110.314 84.0371L107.483 86.8629ZM93.9613 100.41L91.1302 103.236L88.3098 100.41L91.1302 97.5845L93.9613 100.41ZM148.319 154.87L151.15 152.044L153.97 154.87L151.15 157.696L148.319 154.87ZM104.648 225.708L91.1259 212.16L96.7881 206.509L110.31 220.056L104.648 225.708ZM164.672 171.243L110.31 225.708L104.648 220.056L159.009 165.592L164.672 171.243ZM213.367 225.704L159.009 171.243L164.672 165.592L219.03 220.053L213.367 225.704ZM232.551 212.157L219.03 225.704L213.367 220.053L226.889 206.505L232.551 212.157ZM178.193 152.044L232.551 206.505L226.889 212.157L172.531 157.696L178.193 152.044ZM232.547 103.239L178.193 157.696L172.531 152.044L226.885 97.588L232.547 103.239ZM219.025 84.0406L232.547 97.588L226.885 103.239L213.363 89.6921L219.025 84.0406ZM159.009 138.497L213.363 84.0406L219.025 89.6921L164.672 144.149L159.009 138.497ZM110.314 84.0371L164.672 138.497L159.009 144.149L104.652 89.6887L110.314 84.0371ZM91.1302 97.5845L104.652 84.0371L110.314 89.6887L96.7924 103.236L91.1302 97.5845ZM145.488 157.696L91.1302 103.236L96.7924 97.5845L151.15 152.044L145.488 157.696ZM91.1259 206.509L145.488 152.044L151.15 157.696L96.7881 212.16L91.1259 206.509Z\"\n        fill=\"white\"\n        mask=\"url(#path-3-outside-1_596_8855)\"\n      />\n      <path\n        d=\"M143.208 284.443C166.87 215.233 237.326 174.982 308.673 185.469L137.618 306C138.921 298.786 140.756 291.589 143.208 284.443Z\"\n        fill={`${theme.palette.primary.main ?? '#9BCAFF'}`}\n      />\n      <defs>\n        <filter\n          id=\"filter0_d_596_8855\"\n          x=\"0.454468\"\n          y=\"0.618164\"\n          width=\"318.546\"\n          height=\"317.382\"\n          filterUnits=\"userSpaceOnUse\"\n          color-interpolation-filters=\"sRGB\"\n        >\n          <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n          <feColorMatrix\n            in=\"SourceAlpha\"\n            type=\"matrix\"\n            values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n            result=\"hardAlpha\"\n          />\n          <feOffset dy=\"4\" />\n          <feGaussianBlur stdDeviation=\"4\" />\n          <feComposite in2=\"hardAlpha\" operator=\"out\" />\n          <feColorMatrix\n            type=\"matrix\"\n            values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n          />\n          <feBlend\n            mode=\"normal\"\n            in2=\"BackgroundImageFix\"\n            result=\"effect1_dropShadow_596_8855\"\n          />\n          <feBlend\n            mode=\"normal\"\n            in=\"SourceGraphic\"\n            in2=\"effect1_dropShadow_596_8855\"\n            result=\"shape\"\n          />\n        </filter>\n        <linearGradient\n          id=\"paint0_linear_596_8855\"\n          x1=\"160.002\"\n          y1=\"190.844\"\n          x2=\"233.1\"\n          y2=\"305.89\"\n          gradientUnits=\"userSpaceOnUse\"\n        >\n          <stop offset=\"0.1\" stop-color=\"#F84A4B\" />\n          <stop offset=\"0.94\" stop-color=\"#C34648\" />\n        </linearGradient>\n      </defs>\n    </svg>\n  );\n};\n\nexport default Incorrect;\n","import styled from '@emotion/styled';\nimport {\n  Stack,\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableRow,\n  useTheme,\n} from '@mui/material';\n\nimport { EliceDottedPagination } from '../dotted-pagination';\nimport {\n  gray50Color,\n  gray200Color,\n  main300Color,\n  main400Color,\n  textTeriaryColor,\n} from '../tokenColorTemporary';\n\nimport type { DottedPaginationProps } from '../dotted-pagination/DottedPagination';\n\nexport type EiceTableProps = {\n  type?: 'default' | 'single';\n  rows: object[];\n  columnNames: string[];\n  tableTitleProps?: any;\n  tableValueProps?: any;\n  pagination?: DottedPaginationProps;\n};\n\nconst StyledScrollBarStack = styled(Stack)<{\n  scrollbarTrackColor?: string;\n  scrollbarThumbColor: string;\n  scrollbarHoverColor: string;\n}>`\n  width: fit-content;\n  max-width: 100%;\n  position: relative;\n  overflow-x: auto;\n  box-sizing: border-box;\n  border-radius: 1.375rem;\n  gap: 0;\n\n  ::-webkit-scrollbar {\n    height: 0.25rem;\n  }\n\n  /* Track */\n  ::-webkit-scrollbar-track {\n    background: ${props => props.scrollbarTrackColor ?? gray200Color};\n    border-radius: 0.5rem;\n  }\n\n  /* Handle */\n  ::-webkit-scrollbar-thumb {\n    background: ${props => props.scrollbarThumbColor ?? main300Color};\n    border-radius: 0.5rem;\n  }\n\n  /* Handle on hover */\n  ::-webkit-scrollbar-thumb:hover {\n    background: ${props => props.scrollbarHoverColor ?? main400Color};\n  }\n`;\n\nconst EliceTable = ({\n  type = 'default',\n  rows,\n  columnNames,\n  tableTitleProps,\n  tableValueProps,\n  pagination,\n}: EiceTableProps) => {\n  const theme = useTheme();\n  if (type === 'default') {\n    return (\n      <Stack gap=\"2.5rem\" alignItems=\"center\">\n        <StyledScrollBarStack\n          scrollbarThumbColor={theme.palette.primary.main}\n          scrollbarHoverColor={theme.palette.secondary.main}\n          border={`1px solid ${gray50Color}`}\n        >\n          <Table>\n            <TableHead\n              style={{\n                backgroundColor: theme.palette.primary.light,\n              }}\n            >\n              <TableRow>\n                {columnNames.map((name: string, index: number) => {\n                  return (\n                    <TableCell\n                      align=\"center\"\n                      style={{\n                        height: '3.625rem',\n                        minWidth: '13.5rem',\n                        padding: '1rem',\n                        boxSizing: 'border-box',\n                        borderBottom: `1px solid ${theme.palette.secondary.main}`,\n                        borderRight:\n                          index < columnNames.length - 1\n                            ? `1px solid ${theme.palette.secondary.main}`\n                            : 'none',\n                        fontSize: '1rem',\n                        fontWeight: 700,\n                        color: theme.palette.primary.dark,\n                      }}\n                      {...tableTitleProps}\n                    >\n                      {name}\n                    </TableCell>\n                  );\n                })}\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row: object, index: number) => (\n                <TableRow key={`row${index}`}>\n                  {Object.values(row).map((value: any, index: number) => {\n                    return (\n                      <TableCell\n                        component=\"th\"\n                        scope=\"row\"\n                        align=\"center\"\n                        style={{\n                          height: '3.625rem',\n                          minWidth: '13.5rem',\n                          padding: '1rem',\n                          boxSizing: 'border-box',\n                          borderBottom: `1px solid ${theme.palette.secondary.main}`,\n                          borderRight:\n                            index < Object.values(row).length - 1\n                              ? `1px solid ${theme.palette.secondary.main}`\n                              : 'none',\n                          fontSize: '1rem',\n                          fontWeight: 500,\n                          color: textTeriaryColor,\n                        }}\n                        {...tableValueProps}\n                      >\n                        {value}\n                      </TableCell>\n                    );\n                  })}\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </StyledScrollBarStack>\n        {pagination && <EliceDottedPagination {...pagination} />}\n      </Stack>\n    );\n  } else {\n    return (\n      <Stack\n        direction=\"row\"\n        boxSizing=\"border-box\"\n        borderRadius=\"1.375rem\"\n        border={`1px solid ${theme.palette.secondary.main}`}\n        overflow=\"hidden\"\n        width=\"fit-content\"\n      >\n        <Stack\n          gap={0}\n          style={{\n            backgroundColor: theme.palette.primary.light,\n          }}\n        >\n          {columnNames.map((name: string, index: number) => {\n            return (\n              <TableCell\n                align=\"center\"\n                style={{\n                  height: '3.625rem',\n                  minWidth: '13.5rem',\n                  padding: '1rem',\n                  boxSizing: 'border-box',\n                  borderRight: `1px solid ${theme.palette.secondary.main}`,\n                  borderBottom:\n                    index < columnNames.length - 1\n                      ? `1px solid ${theme.palette.secondary.main}`\n                      : 'none',\n                  fontSize: '1rem',\n                  fontWeight: 700,\n                  color: theme.palette.primary.dark,\n                }}\n                {...tableTitleProps}\n              >\n                {name}\n              </TableCell>\n            );\n          })}\n        </Stack>\n        <Stack gap={0}>\n          {Object.values(rows[0]).map((value: any, index: number) => {\n            return (\n              <TableCell\n                component=\"th\"\n                scope=\"row\"\n                align=\"center\"\n                style={{\n                  height: '3.625rem',\n                  minWidth: '13.5rem',\n                  padding: '1rem',\n                  boxSizing: 'border-box',\n                  borderBottom:\n                    index < Object.values(rows[0]).length - 1\n                      ? `1px solid ${theme.palette.secondary.main}`\n                      : 'none',\n                  fontSize: '1rem',\n                  fontWeight: 500,\n                  color: textTeriaryColor,\n                }}\n                {...tableValueProps}\n              >\n                {value}\n              </TableCell>\n            );\n          })}\n        </Stack>\n      </Stack>\n    );\n  }\n};\n\nexport default EliceTable;\n","import React from 'react';\nimport {\n  Box,\n  TextField,\n  Typography,\n  Table,\n  TableBody,\n  TableRow,\n  TableCell,\n  useTheme,\n  alpha,\n} from '@mui/material';\nimport { useAIDTMediaQuery } from '../../hooks';\n\nexport interface RowInfoTableProps {\n  data: Array<{\n    id: string;\n    label: string | React.ReactNode;\n    value: string;\n    onChange: (value: string) => void;\n    placeholder?: string;\n    multiline?: boolean;\n    rows?: number;\n  }>;\n  disabled?: boolean;\n  borderColor?: string;\n  labelBackgroundColor?: string;\n  labelTextColor?: string;\n  rowBorderColor?: string;\n  rowBorderRightColor?: string;\n}\n\nconst RowInfoTable = ({\n  data,\n  disabled = false,\n  borderColor,\n  labelBackgroundColor,\n  labelTextColor,\n  rowBorderColor,\n  rowBorderRightColor,\n}: RowInfoTableProps): JSX.Element => {\n  const theme = useTheme();\n  const { isTablet } = useAIDTMediaQuery();\n\n  // 색상 계산 (primary 계열 기준, props로 오버라이드 가능)\n  const primaryColor = theme.palette.primary.main;\n  const finalBorderColor = borderColor || primaryColor;\n  const finalLabelBackgroundColor =\n    labelBackgroundColor || alpha(primaryColor, 0.1);\n  const finalLabelTextColor = labelTextColor || primaryColor;\n  const finalRowBorderColor = rowBorderColor || primaryColor;\n  const finalRowBorderRightColor =\n    rowBorderRightColor || alpha(primaryColor, 0.3);\n\n  return (\n    <Table\n      sx={{\n        width: '100%',\n        tableLayout: 'fixed',\n        border: `1px solid ${finalBorderColor}`,\n        borderRadius: '4px',\n        borderCollapse: 'separate',\n        borderSpacing: 0,\n        overflow: 'hidden',\n        '& .MuiTableCell-root': {\n          borderRight: `1px solid ${finalBorderColor}`,\n          borderBottom: `1px solid ${finalBorderColor}`,\n        },\n        '& .MuiTableRow-root:last-of-type .MuiTableCell-root': {\n          borderBottom: 'none',\n        },\n        '& .MuiTableCell-root:last-of-type': {\n          borderRight: 'none',\n        },\n      }}\n    >\n      <TableBody>\n        {data.map((row, index) => {\n          const isMultiline =\n            row.multiline !== undefined ? row.multiline : true;\n          const actualRows = row.rows || 1;\n\n          return (\n            <TableRow\n              key={row.id}\n              sx={{\n                borderRight: `1px solid ${finalRowBorderRightColor}`,\n                borderLeft: `1px solid ${finalRowBorderColor}`,\n                borderTop: `1px solid ${finalRowBorderColor}`,\n                borderBottom:\n                  index < data.length - 1\n                    ? `1px solid ${finalRowBorderColor}`\n                    : 'none',\n              }}\n            >\n              {/* 왼쪽 라벨 셀 */}\n              <TableCell\n                sx={{\n                  width: isTablet ? '35%' : '30%',\n                  backgroundColor: finalLabelBackgroundColor,\n                  padding: '0.5rem 1rem',\n                  verticalAlign: 'middle',\n                  textAlign: 'center',\n                }}\n              >\n                {typeof row.label === 'string' ? (\n                  <Typography\n                    variant=\"subtitle1\"\n                    sx={{\n                      color: finalLabelTextColor,\n                      wordBreak: 'keep-all',\n                      whiteSpace: 'normal',\n                    }}\n                  >\n                    {row.label}\n                  </Typography>\n                ) : (\n                  row.label\n                )}\n              </TableCell>\n\n              {/* 오른쪽 입력 셀 */}\n              <TableCell\n                sx={{\n                  width: isTablet ? '85%' : '70%',\n                  backgroundColor: 'transparent',\n                  padding: '0.5rem',\n                  verticalAlign: 'middle',\n                }}\n              >\n                <TextField\n                  fullWidth\n                  value={row.value}\n                  onChange={e => row.onChange(e.target.value)}\n                  placeholder={row.placeholder}\n                  disabled={disabled}\n                  multiline={isMultiline}\n                  minRows={actualRows}\n                  maxRows={actualRows > 1 ? actualRows : 2}\n                  variant=\"outlined\"\n                  sx={{\n                    '& .MuiOutlinedInput-root': {\n                      border: 'none',\n                      backgroundColor: '#fff',\n                      overflow: 'auto',\n                      '& fieldset': {\n                        border: 'none',\n                      },\n                      '&:hover fieldset': {\n                        border: 'none',\n                      },\n                      '&.Mui-focused fieldset': {\n                        border: 'none',\n                      },\n                    },\n                    '& .MuiInputBase-input': {\n                      color: '#1E1E1E',\n                      fontFamily: theme.typography.subtitle1.fontFamily,\n                      fontSize: theme.typography.subtitle1.fontSize,\n                      fontWeight: theme.typography.subtitle1.fontWeight,\n                      lineHeight: theme.typography.subtitle1.lineHeight,\n                      overflow: 'auto',\n                      whiteSpace: 'pre-wrap',\n                      wordBreak: 'break-word',\n                      overflowWrap: 'break-word',\n                    },\n                  }}\n                />\n              </TableCell>\n            </TableRow>\n          );\n        })}\n      </TableBody>\n    </Table>\n  );\n};\n\nexport default RowInfoTable;\n\n","import React from 'react';\nimport {\n  Box,\n  TextField,\n  Typography,\n  Table,\n  TableBody,\n  TableRow,\n  TableCell,\n  TableHead,\n  useTheme,\n  alpha,\n} from '@mui/material';\n\nexport interface ColInfoTableProps {\n  data: Array<{\n    id: string;\n    label: string | React.ReactNode;\n    value: string;\n    onChange: (value: string) => void;\n    placeholder?: string;\n    multiline?: boolean;\n    rows?: number;\n  }>;\n  disabled?: boolean;\n  borderColor?: string;\n  headerBackgroundColor?: string;\n  headerTextColor?: string;\n}\n\nconst ColInfoTable = ({\n  data,\n  disabled = false,\n  borderColor,\n  headerBackgroundColor,\n  headerTextColor,\n}: ColInfoTableProps): JSX.Element => {\n  const theme = useTheme();\n\n  // 색상 계산 (primary 계열 기준, props로 오버라이드 가능)\n  const primaryColor = theme.palette.primary.main;\n  const finalBorderColor = borderColor || primaryColor;\n  const finalHeaderBackgroundColor =\n    headerBackgroundColor || alpha(primaryColor, 0.1);\n  const finalHeaderTextColor = headerTextColor || primaryColor;\n\n  return (\n    <Table\n      sx={{\n        width: '100%',\n        border: `1px solid ${finalBorderColor}`,\n        borderRadius: '4px',\n        borderCollapse: 'separate',\n        borderSpacing: 0,\n        overflow: 'hidden',\n        '& .MuiTableCell-root': {\n          borderRight: `1px solid ${finalBorderColor} !important`,\n          borderBottom: `1px solid ${finalBorderColor}`,\n        },\n        '& .MuiTableRow-root:last-of-type .MuiTableCell-root': {\n          borderBottom: 'none',\n        },\n        '& .MuiTableCell-root:last-of-type': {\n          borderRight: 'none !important',\n        },\n      }}\n    >\n      <TableHead>\n        <TableRow>\n          {data.map((row, index) => (\n            <TableCell\n              key={`header-${row.id}`}\n              sx={{\n                backgroundColor: finalHeaderBackgroundColor,\n                padding: '1.3rem',\n                textAlign: 'center',\n                verticalAlign: 'middle',\n                borderBottom: `1px solid ${finalBorderColor} !important`,\n              }}\n            >\n              {typeof row.label === 'string' ? (\n                <Typography\n                  variant=\"subtitle1\"\n                  sx={{\n                    color: finalHeaderTextColor,\n                  }}\n                >\n                  {row.label}\n                </Typography>\n              ) : (\n                row.label\n              )}\n            </TableCell>\n          ))}\n        </TableRow>\n      </TableHead>\n      <TableBody>\n        <TableRow>\n          {data.map((row, index) => (\n            <TableCell\n              key={`input-${row.id}`}\n              sx={{\n                backgroundColor: 'transparent',\n                padding: '1rem',\n                verticalAlign: 'middle',\n                ...(row.multiline === false && {\n                  overflow: 'visible',\n                }),\n              }}\n            >\n              <TextField\n                fullWidth\n                value={row.value}\n                onChange={e => row.onChange(e.target.value)}\n                placeholder={row.placeholder}\n                disabled={disabled}\n                multiline={row.multiline !== false}\n                minRows={row.rows || 5}\n                maxRows={row.multiline !== false ? undefined : 5}\n                variant=\"outlined\"\n                sx={{\n                  '& .MuiOutlinedInput-root': {\n                    border: 'none',\n                    backgroundColor: '#fff',\n                    overflow: 'auto',\n                    '& fieldset': {\n                      border: 'none',\n                    },\n                    '&:hover fieldset': {\n                      border: 'none',\n                    },\n                    '&.Mui-focused fieldset': {\n                      border: 'none',\n                    },\n                  },\n                  '& .MuiInputBase-input': {\n                    color: '#000',\n                    fontFamily: theme.typography.subtitle1.fontFamily,\n                    fontSize: theme.typography.subtitle1.fontSize,\n                    fontWeight: theme.typography.subtitle1.fontWeight,\n                    lineHeight: theme.typography.subtitle1.lineHeight,\n                    padding: '0.5rem',\n                    WebkitTextFillColor: '#000',\n                    overflow: 'auto',\n                    whiteSpace: 'pre-wrap',\n                    wordBreak: 'break-word',\n                    overflowWrap: 'break-word',\n                  },\n                }}\n              />\n            </TableCell>\n          ))}\n        </TableRow>\n      </TableBody>\n    </Table>\n  );\n};\n\nexport default ColInfoTable;\n\n","import React from 'react';\nimport { TextField, TextFieldProps, useTheme } from '@mui/material';\n\ninterface EliceTextareaProps extends Omit<TextFieldProps, 'type'> {\n  maxLength?: number;\n  hideBorder?: boolean;\n  type: 'default' | 'textarea';\n  isCompleted?: boolean;\n  borderColor?: string;\n  hoverBorderColor?: string;\n  focusedBorderColor?: string;\n  disabledBackgroundColor?: string;\n}\n\nconst EliceTextarea = ({\n  type = 'textarea',\n  variant = 'outlined',\n  rows = 5,\n  placeholder = 'Placeholder...',\n  multiline = true,\n  maxLength,\n  value,\n  onChange,\n  hideBorder,\n  disabled,\n  isCompleted,\n  borderColor,\n  hoverBorderColor,\n  focusedBorderColor,\n  disabledBackgroundColor,\n  sx,\n  ...rest\n}: EliceTextareaProps) => {\n  const theme = useTheme();\n  const shouldHideBorder = hideBorder || disabled;\n\n  if (type === 'textarea') {\n    const defaultBorderColor = borderColor || '#d0d0d0';\n    const defaultHoverBorderColor = hoverBorderColor || `${theme.palette.primary.main}80`;\n    const defaultFocusedBorderColor = focusedBorderColor || theme.palette.primary.main;\n    const defaultDisabledBackgroundColor = disabledBackgroundColor || '#f5f5f5';\n\n    const baseSx = {\n      width: '100%',\n      '& .MuiOutlinedInput-root': {\n        backgroundColor: disabled ? defaultDisabledBackgroundColor : theme.palette.background.paper,\n        width: '100%',\n        borderRadius: '0.5rem',\n        '& fieldset': {\n          borderColor: shouldHideBorder ? 'transparent' : defaultBorderColor,\n        },\n        '&:hover fieldset': {\n          borderColor: shouldHideBorder ? 'transparent' : defaultHoverBorderColor,\n        },\n        '&.Mui-focused fieldset': {\n          borderColor: shouldHideBorder ? 'transparent' : defaultFocusedBorderColor,\n        },\n        '&.Mui-disabled': {\n          '& fieldset': {\n            borderColor: 'transparent',\n          },\n        },\n      },\n      '& .MuiInputBase-input': {\n        fontSize: theme.typography.subtitle1?.fontSize || '1.3rem',\n        fontWeight: theme.typography.subtitle1?.fontWeight || 500,\n        lineHeight: theme.typography.subtitle1?.lineHeight || 1.5,\n        alignItems: 'flex-start',\n        color: theme.palette.text.primary,\n        WebkitTextFillColor: theme.palette.text.primary,\n      },\n      '& .MuiInputBase-input.Mui-disabled': {\n        color: theme.palette.text.secondary,\n        WebkitTextFillColor: theme.palette.text.secondary,\n      },\n      '& .MuiInputBase-input::placeholder': {\n        color: theme.palette.text.secondary,\n        fontSize: theme.typography.subtitle1?.fontSize || '1.3rem',\n      },\n    };\n\n    const mergedSx = sx !== undefined\n      ? [baseSx, ...(Array.isArray(sx) ? sx : [sx])]\n      : baseSx;\n\n    return (\n      <TextField\n        value={value}\n        variant={variant}\n        onChange={onChange}\n        placeholder={placeholder}\n        disabled={disabled || isCompleted}\n        multiline={multiline}\n        rows={rows}\n        inputProps={{ maxLength }}\n        sx={mergedSx}\n        {...rest}\n      />\n    );\n  }\n\n  // default variant - 기존 스타일 유지\n  const defaultDisabledBackgroundColor = disabledBackgroundColor || '#f5f5f5';\n  const baseSx = {\n    width: '100%',\n    '& .MuiOutlinedInput-root': {\n      backgroundColor: disabled ? defaultDisabledBackgroundColor : theme.palette.background.paper,\n      borderRadius: '1.5rem',\n      padding: '1.375rem 1.5rem',\n      '& fieldset': {\n        borderColor: theme.palette.divider,\n      },\n      '&:hover fieldset': {\n        borderColor: `${theme.palette.primary.main}80`, // primary에 opacity 50%\n      },\n      '&.Mui-focused fieldset': {\n        borderColor: theme.palette.primary.main,\n      },\n    },\n    '& .MuiInputBase-input': {\n      fontSize: theme.typography.subtitle1?.fontSize || '1.375rem',\n      fontWeight: theme.typography.subtitle1?.fontWeight || 700,\n      lineHeight: theme.typography.subtitle1?.lineHeight || 1.925,\n      color: theme.palette.text.primary,\n      '&::placeholder': {\n        color: theme.palette.text.secondary,\n      },\n    },\n  };\n\n  const mergedSx = sx !== undefined\n    ? [baseSx, ...(Array.isArray(sx) ? sx : [sx])]\n    : baseSx;\n\n  return (\n    <TextField\n      value={value}\n      onChange={onChange}\n      multiline\n      rows={rows}\n      placeholder={placeholder}\n      disabled={disabled}\n      sx={mergedSx}\n      {...rest}\n    />\n  );\n};\n\nexport default EliceTextarea;\n","import React from 'react';\nimport { Typography, useTheme } from '@mui/material';\n\nimport { TYPOGRAPHY_FONT_FAMILY_NAMES } from '../../typography';\nimport type {\n  BaseTypographyVariant,\n  ContentTypographyVariant,\n} from '../../typography/TypographyType';\n\nimport type { TypographyProps } from '@mui/material';\nimport type { TypographyFontFamilyType } from '../../typography';\n\ninterface AIDTTypographyBaseProps\n  extends Omit<TypographyProps, 'variant'> {\n  fontFamily?: TypographyFontFamilyType;\n  fontWeight?: number;\n  fontSize?: string;\n  lineHeight?: number;\n}\n\n/** typographyType: 'Content' | 'ContentClamp' 일 때만 title1, title2, body3, subtitle3, clampH1 등 Content 전용 variant 사용 가능 */\ninterface AIDTTypographyPropsWithContent extends AIDTTypographyBaseProps {\n  typographyType: 'Content' | 'ContentClamp';\n  variant?: ContentTypographyVariant;\n}\n\ninterface AIDTTypographyPropsWithBase extends AIDTTypographyBaseProps {\n  typographyType?: 'Default' | 'Fluid' | 'Clamp';\n  variant?: BaseTypographyVariant;\n}\n\ntype AIDTTypographyProps =\n  | AIDTTypographyPropsWithContent\n  | AIDTTypographyPropsWithBase;\n\nconst AIDTTypography: React.FC<AIDTTypographyProps> = ({\n  fontFamily = 'pretendard',\n  fontWeight,\n  fontSize,\n  lineHeight,\n  children,\n  typographyType,\n  ...props\n}) => {\n  const theme = useTheme();\n\n  return (\n    <Typography\n      {...props}\n      sx={{\n        fontFamily: fontFamily\n          ? TYPOGRAPHY_FONT_FAMILY_NAMES[fontFamily] ||\n            theme.typography.fontFamily\n          : theme.typography.fontFamily,\n        fontWeight: fontWeight ?? theme.typography.body1.fontWeight,\n        fontSize: fontSize ?? theme.typography.body1.fontSize,\n        lineHeight: lineHeight ?? theme.typography.body1.lineHeight,\n      }}\n    >\n      {children}\n    </Typography>\n  );\n};\n\nexport default AIDTTypography;\n","export const TYPOGRAPHY_FONT_FAMILY_NAMES = Object.freeze({\n  pretendard: 'Pretendard, Arial, sans-serif',\n  elice: 'EliceDXNeolli',\n  roboto: 'Roboto, Arial, sans-serif',\n});\n\nexport type TypographyFontFamilyType =\n  keyof typeof TYPOGRAPHY_FONT_FAMILY_NAMES;\n","\nconst DEFAULT_TYPOGRAPHY_STYLES = {\n  h1: {\n    fontSize: '2rem',\n    fontWeight: 800,\n    lineHeight: '1.18',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.5rem',\n      lineHeight: '1.20',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.5rem',\n      lineHeight: '1.20',\n    },\n  },\n  h2: {\n    fontSize: '1.75rem',\n    fontWeight: 800,\n    lineHeight: '1.2',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.3rem',\n      lineHeight: '1.27',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.3rem',\n      lineHeight: '1.27',\n    },\n  },\n  h3: {\n    fontSize: '1.5rem',\n    fontWeight: 800,\n    lineHeight: '1.2',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.25rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.25rem',\n      lineHeight: '1.32',\n    },\n  },\n  h4: {\n    fontSize: '1.375rem',\n    fontWeight: 800,\n    lineHeight: '1.24',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.32',\n    },\n  },\n  h5: {\n    fontSize: '1.25rem',\n    fontWeight: 800,\n    lineHeight: '1.28',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.28',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.28',\n    },\n  },\n  h6: {\n    fontSize: '1.125rem',\n    fontWeight: 800,\n    lineHeight: '1.24',\n    [`@media (max-width:830px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.24',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.24',\n    },\n  },\n  subtitle1: {\n    fontSize: '1.3rem',\n    fontWeight: 700,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.1rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.1rem',\n      lineHeight: '1.32',\n    },\n  },\n  subtitle2: {\n    fontSize: '1.125rem',\n    fontWeight: 700,\n    lineHeight: '1.32',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.24',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.24',\n    },\n  },\n  body1: {\n    fontSize: '1rem',\n    fontWeight: 500,\n    lineHeight: '1.48',\n    [`@media (max-width:830px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.56',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.56',\n    },\n  },\n  body2: {\n    fontSize: '0.875rem',\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: '0.8125rem',\n      lineHeight: '1.4',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '0.8125rem',\n      lineHeight: '1.4',\n    },\n  },\n  caption: {\n    fontSize: 'clamp(0.5rem, 0.75rem, 0.875rem)',\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.4375rem, 0.6875rem, 0.75rem)',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.4375rem, 0.6875rem, 0.75rem)',\n      lineHeight: '1.32',\n    },\n  },\n  buttoninput: {\n    fontSize: '1.25rem', // body1과 동일\n    fontWeight: 700,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.25rem',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1rem',\n    },\n  },\n  pagination: {\n    fontSize: 'clamp(0.625rem, 0.875rem, 1rem)', // body2와 동일하게 작게\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.5rem, 0.8125rem, 0.875rem)',\n      lineHeight: '1.4',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.5rem, 0.8125rem, 0.875rem)',\n      lineHeight: '1.4',\n    },\n  },\n  textarea: {\n    fontSize: '1.3rem',\n    fontWeight: 500,\n    lineHeight: '1.48',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.625rem, 0.9375rem, 1rem)',\n      lineHeight: '1.56',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.625rem, 0.9375rem, 1rem)',\n      lineHeight: '1.56',\n    },\n  },\n};\n\nconst CLAMP_TYPOGRAPHY_STYLES = {\n  h1: {\n    fontSize: 'clamp(1.5rem, 2rem, 2.5rem)',\n    fontWeight: 800,\n    lineHeight: '1.18',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.5rem',\n      lineHeight: '1.20',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.5rem',\n      lineHeight: '1.20',\n    },\n  },\n  h2: {\n    fontSize: 'clamp(1.5rem, 1.75rem, 2rem)',\n    fontWeight: 800,\n    lineHeight: '1.2',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.5rem',\n      lineHeight: '1.27',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.5rem',\n      lineHeight: '1.27',\n    },\n  },\n  h3: {\n    fontSize: 'clamp(1.25rem, 1.5rem, 1.75rem)',\n    fontWeight: 800,\n    lineHeight: '1.2',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.25rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.25rem',\n      lineHeight: '1.32',\n    },\n  },\n  h4: {\n    fontSize: 'clamp(1.125rem, 1.375rem, 1.5rem)',\n    fontWeight: 800,\n    lineHeight: '1.24',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.32',\n    },\n  },\n  h5: {\n    fontSize: 'clamp(1rem, 1.25rem, 1.375rem)',\n    fontWeight: 800,\n    lineHeight: '1.28',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.28',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.28',\n    },\n  },\n  h6: {\n    fontSize: 'clamp(0.9375rem, 1.125rem, 1.25rem)',\n    fontWeight: 800,\n    lineHeight: '1.24',\n    [`@media (max-width:830px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.24',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.24',\n    },\n  },\n  subtitle1: {\n    fontSize: 'clamp(1.1rem, 1.3rem, 1.5rem)',\n    fontWeight: 800,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.1rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.1rem',\n      lineHeight: '1.32',\n    },\n  },\n  subtitle2: {\n    fontSize: 'clamp(1rem, 1.125rem, 1.25rem)',\n    fontWeight: 800,\n    lineHeight: '1.32',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.24',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.24',\n    },\n  },\n  body1: {\n    fontSize: 'clamp(0.9375rem, 1rem, 1.125rem)',\n    fontWeight: 500,\n    lineHeight: '1.48',\n    [`@media (max-width:830px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.56',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.56',\n    },\n  },\n  body2: {\n    fontSize: 'clamp(0.8125rem, 0.875rem, 1rem)',\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: '0.8125rem',\n      lineHeight: '1.4',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '0.8125rem',\n      lineHeight: '1.4',\n    },\n  },\n  caption: {\n    fontSize: 'clamp(0.5rem, 0.75rem, 0.875rem)',\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.4375rem, 0.6875rem, 0.75rem)',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.4375rem, 0.6875rem, 0.75rem)',\n      lineHeight: '1.32',\n    },\n  },\n  buttoninput: {\n    fontSize: 'clamp(0.75rem, 1rem, 1.125rem)', // body1과 동일\n    fontWeight: 700,\n    lineHeight: '1.48',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.625rem, 0.9375rem, 1rem)',\n      lineHeight: '1.56',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.625rem, 0.9375rem, 1rem)',\n      lineHeight: '1.56',\n    },\n  },\n  pagination: {\n    fontSize: 'clamp(0.625rem, 0.875rem, 1rem)', // body2와 동일하게 작게\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.5rem, 0.8125rem, 0.875rem)',\n      lineHeight: '1.4',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.5rem, 0.8125rem, 0.875rem)',\n      lineHeight: '1.4',\n    },\n  },\n  textarea: {\n    fontSize: '1.3rem',\n    fontWeight: 500,\n    lineHeight: '1.48',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.625rem, 0.9375rem, 1rem)',\n      lineHeight: '1.56',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.625rem, 0.9375rem, 1rem)',\n      lineHeight: '1.56',\n    },\n  },\n};\n\nconst FLUID_TYPOGRAPHY_STYLES = {\n  h1: {\n    fontSize: 'var(--step-2)',\n    fontWeight: 800,\n    lineHeight: '1.18',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step-1)',\n      lineHeight: '1.20',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step-1)',\n      lineHeight: '1.20',\n    },\n  },\n  h2: {\n    fontSize: 'var(--step-1)',\n    fontWeight: 800,\n    lineHeight: '1.2',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step-1)',\n      lineHeight: '1.27',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step-1)',\n      lineHeight: '1.27',\n    },\n  },\n  h3: {\n    fontSize: 'var(--step-0)',\n    fontWeight: 800,\n    lineHeight: '1.2',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.32',\n    },\n  },\n  h4: {\n    fontSize: 'var(--step--1)',\n    fontWeight: 800,\n    lineHeight: '1.24',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.32',\n    },\n  },\n  h5: {\n    fontSize: 'var(--step--1)',\n    fontWeight: 800,\n    lineHeight: '1.28',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step-0)',\n      lineHeight: '1.28',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step-0)',\n      lineHeight: '1.28',\n    },\n  },\n  h6: {\n    fontSize: 'var(--step--1)',\n    fontWeight: 800,\n    lineHeight: '1.24',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.24',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.24',\n    },\n  },\n  subtitle1: {\n    fontSize: 'var(--step--1)',\n    fontWeight: 800,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.32',\n    },\n  },\n  subtitle2: {\n    fontSize: 'var(--step-0)',\n    fontWeight: 800,\n    lineHeight: '1.32',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step-0)',\n      lineHeight: '1.24',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step-0)',\n      lineHeight: '1.24',\n    },\n  },\n  body1: {\n    fontSize: 'var(--step-0)',\n    fontWeight: 500,\n    lineHeight: '1.48',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.56',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.56',\n    },\n  },\n  body2: {\n    fontSize: 'var(--step--1)',\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.4',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step--1)',\n      lineHeight: '1.4',\n    },\n  },\n  caption: {\n    fontSize: 'clamp(0.5rem, 0.75rem, 0.875rem)',\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.4375rem, 0.6875rem, 0.75rem)',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.4375rem, 0.6875rem, 0.75rem)',\n      lineHeight: '1.32',\n    },\n  },\n  buttoninput: {\n    fontSize: 'clamp(0.75rem, 1rem, 1.125rem)', // body1과 동일\n    fontWeight: 700,\n    lineHeight: '1.48',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.625rem, 0.9375rem, 1rem)',\n      lineHeight: '1.56',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.625rem, 0.9375rem, 1rem)',\n      lineHeight: '1.56',\n    },\n  },\n  pagination: {\n    fontSize: 'clamp(0.625rem, 0.875rem, 1rem)', // body2와 동일하게 작게\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.5rem, 0.8125rem, 0.875rem)',\n      lineHeight: '1.4',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.5rem, 0.8125rem, 0.875rem)',\n      lineHeight: '1.4',\n    },\n  },\n  textarea: {\n    fontSize: 'var(--step-1)',\n    fontWeight: 500,\n    lineHeight: '1.48',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'var(--step-0)',\n      lineHeight: '1.56',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'var(--step-0)',\n      lineHeight: '1.56',\n    },\n  },\n};\n\n\nconst CONTENT_TYPOGRAPHY_STYLES = {\n  clampH1: {\n    fontSize: 'clamp(16px, 2vw, 32px)',\n    fontWeight: 800,\n    lineHeight: '1.24',\n    fontFamily: 'Elice DX Neolli'\n  },\n  h1: {\n    fontSize: '2rem',\n    fontWeight: 800,\n    lineHeight: '1.24',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.5rem',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.5rem',\n    },\n  },\n  h2: {\n    fontSize: '1.75rem',\n    fontWeight: 800,\n    lineHeight: '1.5',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.3rem',\n      lineHeight: '1.27',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.3rem',\n      lineHeight: '1.27',\n    },\n  },\n  h3: {\n    fontSize: '1.75rem',\n    fontWeight: 700,\n    lineHeight: '1.5',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.3rem',\n      lineHeight: '1.27',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.3rem',\n      lineHeight: '1.27',\n    },\n  },\n  h4: {\n    fontSize: '1.5rem',\n    fontWeight: 600,\n    lineHeight: '1.3',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.32',\n    },\n  },\n  h5: {\n    fontSize: '1.5rem',\n    fontWeight: 400,\n    lineHeight: '1.5',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.32',\n    },\n  },\n  h6: {\n    fontSize: '1.375rem',\n    fontWeight: 500,\n    lineHeight: '1.24',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.32',\n    },\n  },\n  subtitle1: {\n    fontSize: '2rem', // 32px\n    fontWeight: 600,\n    lineHeight: '1.2',\n    letterSpacing: '-0.32px',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.5rem',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.5rem',\n    },\n  },\n  subtitle2: {\n    fontSize: '1.75rem', // 28px\n    fontWeight: 400,\n    lineHeight: '1.5',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.3rem',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.3rem',\n    },\n  },\n  subtitle3: {\n    fontSize: '1.125rem', // 18px\n    fontWeight: 600,\n    lineHeight: '1.32',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.32',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.32',\n    },\n  },\n  body1: {\n    fontSize: '1.25rem', // 20px\n    fontWeight: 400,\n    lineHeight: '1.3',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.3',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.125rem',\n      lineHeight: '1.3',\n    },\n  },\n  body2: {\n    fontSize: '1.125rem', // 18px\n    fontWeight: 400,\n    lineHeight: '1.5',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.5',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1rem',\n      lineHeight: '1.5',\n    },\n  },\n  body3: {\n    fontSize: '1rem', // 16px\n    fontWeight: 400,\n    lineHeight: '1.5',\n    [`@media (max-width:830px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.5',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '0.9375rem',\n      lineHeight: '1.5',\n    },\n  },\n  caption: {\n    fontSize: '0.938rem', // 15px\n    fontWeight: 300,\n    lineHeight: '1.5',\n    [`@media (max-width:830px)`]: {\n      fontSize: '0.875rem',\n      lineHeight: '1.5',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '0.875rem',\n      lineHeight: '1.5',\n    },\n  },\n  title1: {\n    fontSize: '2.25rem', // 36px\n    fontWeight: 800,\n    lineHeight: '1.5',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.75rem',\n      lineHeight: '1.5',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.75rem',\n      lineHeight: '1.5',\n    },\n  },\n  title2: {\n    fontSize: '2.25rem', // 36px\n    fontWeight: 700,\n    lineHeight: '1.5',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1.75rem',\n      lineHeight: '1.5',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1.75rem',\n      lineHeight: '1.5',\n    },\n  },\n  buttoninput: {\n    fontSize: '1.25rem', // body1과 동일\n    fontWeight: 700,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: '1rem',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: '1rem',\n    },\n  },\n  pagination: {\n    fontSize: 'clamp(0.625rem, 2vw, 1rem)', // body2와 동일하게 작게\n    fontWeight: 500,\n    lineHeight: '1.4',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.5rem, 2vw, 0.875rem)',\n      lineHeight: '1.4',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.5rem, 2vw, 0.875rem)',\n      lineHeight: '1.4',\n    },\n  },  \n  textarea: {\n    fontSize: '1.3rem',\n    fontWeight: 500,\n    lineHeight: '1.48',\n    [`@media (max-width:830px)`]: {\n      fontSize: 'clamp(0.625rem, 2vw, 1rem)',\n      lineHeight: '1.56',\n    },\n    [`@media (max-height:600px)`]: {\n      fontSize: 'clamp(0.625rem, 2vw, 1rem)',\n      lineHeight: '1.56',\n    },\n  },\n};\n\n// 공식: clamp(min-rem, intercept + slope_vw*vw + slope_vh*vh, max-rem)\n// 기준 뷰포트: 768px(min) → 1280px(max) width, height 600px~900px\n// vw: 너비 반응, vh: 높이 반응 (짧은 화면에서 폰트 축소)\nconst CONTENT_CLAMP_TYPOGRAPHY_STYLES = {\n  // 14px → 28px | min/max 축소, vh 반응 추가\n  clampH1: {\n    fontSize: 'clamp(0.875rem, -0.6rem + 2.8vw + 0.15vh, 1.75rem)',\n    fontWeight: 800,\n    lineHeight: '1.24',\n    fontFamily: 'Elice DX Neolli',\n  },\n  // 21px → 28px\n  h1: {\n    fontSize: 'clamp(1.3125rem, 0.6rem + 1.4vw + 0.12vh, 1.75rem)',\n    fontWeight: 800,\n    lineHeight: '1.24',\n  },\n  // 18px → 24px\n  h2: {\n    fontSize: 'clamp(1.125rem, 0.5rem + 1.2vw + 0.1vh, 1.5rem)',\n    fontWeight: 800,\n    lineHeight: '1.5',\n  },\n  h3: {\n    fontSize: 'clamp(1.125rem, 0.5rem + 1.2vw + 0.1vh, 1.5rem)',\n    fontWeight: 700,\n    lineHeight: '1.5',\n  },\n  // 15px → 20px\n  h4: {\n    fontSize: 'clamp(0.9375rem, 0.45rem + 1vw + 0.08vh, 1.25rem)',\n    fontWeight: 600,\n    lineHeight: '1.3',\n  },\n  h5: {\n    fontSize: 'clamp(0.9375rem, 0.45rem + 1vw + 0.08vh, 1.25rem)',\n    fontWeight: 400,\n    lineHeight: '1.5',\n  },\n  // 14px → 19px\n  h6: {\n    fontSize: 'clamp(0.875rem, 0.35rem + 1vw + 0.08vh, 1.1875rem)',\n    fontWeight: 500,\n    lineHeight: '1.32',\n  },\n  // 21px → 28px (h1과 동일)\n  subtitle1: {\n    fontSize: 'clamp(1.3125rem, 0.6rem + 1.4vw + 0.12vh, 1.75rem)',\n    fontWeight: 600,\n    lineHeight: '1.2',\n    letterSpacing: '-0.32px',\n  },\n  // 18px → 24px (h2와 동일)\n  subtitle2: {\n    fontSize: 'clamp(1.125rem, 0.5rem + 1.2vw + 0.1vh, 1.5rem)',\n    fontWeight: 400,\n    lineHeight: '1.5',\n  },\n  // 14px → 16px\n  subtitle3: {\n    fontSize: 'clamp(0.875rem, 0.7rem + 0.35vw + 0.06vh, 1rem)',\n    fontWeight: 600,\n    lineHeight: '1.32',\n  },\n  // 16px → 18px\n  body1: {\n    fontSize: 'clamp(1rem, 0.8rem + 0.35vw + 0.06vh, 1.125rem)',\n    fontWeight: 400,\n    lineHeight: '1.3',\n  },\n  // 14px → 16px\n  body2: {\n    fontSize: 'clamp(0.875rem, 0.7rem + 0.35vw + 0.06vh, 1rem)',\n    fontWeight: 400,\n    lineHeight: '1.5',\n  },\n  // 13px → 14px\n  body3: {\n    fontSize: 'clamp(0.8125rem, 0.65rem + 0.2vw + 0.05vh, 0.875rem)',\n    fontWeight: 400,\n    lineHeight: '1.5',\n  },\n  // 12px → 13px\n  caption: {\n    fontSize: 'clamp(0.75rem, 0.6rem + 0.2vw + 0.05vh, 0.8125rem)',\n    fontWeight: 300,\n    lineHeight: '1.5',\n  },\n  // 24px → 32px\n  title1: {\n    fontSize: 'clamp(1.5rem, 0.85rem + 1.4vw + 0.12vh, 2rem)',\n    fontWeight: 800,\n    lineHeight: '1.5',\n  },\n  title2: {\n    fontSize: 'clamp(1.5rem, 0.85rem + 1.4vw + 0.12vh, 2rem)',\n    fontWeight: 700,\n    lineHeight: '1.5',\n  },\n  // 14px → 18px\n  buttoninput: {\n    fontSize: 'clamp(0.875rem, 0.5rem + 0.65vw + 0.06vh, 1.125rem)',\n    fontWeight: 700,\n    lineHeight: '1.4',\n  },\n  // 9px → 14px\n  pagination: {\n    fontSize: 'clamp(0.5625rem, 0rem + 0.9vw + 0.05vh, 0.875rem)',\n    fontWeight: 500,\n    lineHeight: '1.4',\n  },\n  // 14px → 18px\n  textarea: {\n    fontSize: 'clamp(0.875rem, 0.45rem + 0.8vw + 0.06vh, 1.125rem)',\n    fontWeight: 500,\n    lineHeight: '1.48',\n  },\n};\n\nexport const TYPOGRAPHY_STYLES_MAP = {\n  Default: DEFAULT_TYPOGRAPHY_STYLES,\n  Fluid: FLUID_TYPOGRAPHY_STYLES,\n  Clamp: CLAMP_TYPOGRAPHY_STYLES,\n  Content: CONTENT_TYPOGRAPHY_STYLES,\n  ContentClamp: CONTENT_CLAMP_TYPOGRAPHY_STYLES,\n};\n\n/** Default / Fluid / Clamp 공통 variant (Content 전용 variant 제외) */\nexport type BaseTypographyVariant = keyof typeof DEFAULT_TYPOGRAPHY_STYLES;\n\n/** typographyType: 'Content' | 'ContentClamp' 일 때만 사용 가능한 variant */\nexport type ContentTypographyVariant = keyof typeof CONTENT_TYPOGRAPHY_STYLES;\n","import { TYPOGRAPHY_FONT_FAMILY_NAMES } from './typographyFontFamily';\nimport { TYPOGRAPHY_STYLES_MAP } from './TypographyType';\n\nexport const createAIDTTypography = (\n  fontFamily: keyof typeof TYPOGRAPHY_FONT_FAMILY_NAMES,\n  typographyType?: keyof typeof TYPOGRAPHY_STYLES_MAP\n) => ({\n  fontFamily:\n    TYPOGRAPHY_FONT_FAMILY_NAMES[fontFamily] ||\n    TYPOGRAPHY_FONT_FAMILY_NAMES['pretendard'],\n  '@font-face': [\n    {\n      fontFamily: 'Pretendard',\n      fontStyle: 'normal',\n      fontWeight: 900,\n      fontDisplay: 'swap',\n      src: `url('https://cdnjs.cloudflare.com/ajax/libs/pretendard/1.3.9/static/pretendard.css') format('woff2')`,\n    },\n    {\n      fontFamily: 'Pretendard',\n      fontStyle: 'normal',\n      fontWeight: 700,\n      fontDisplay: 'swap',\n      src: `url('https://cdnjs.cloudflare.com/ajax/libs/pretendard/1.3.9/static/Pretendard-ExtraBold.min.css') format('woff2')`,\n    },\n    {\n      fontFamily: 'Pretendard',\n      fontStyle: 'normal',\n      fontWeight: 500,\n      fontDisplay: 'swap',\n      src: `url('https://cdnjs.cloudflare.com/ajax/libs/pretendard/1.3.9/static/Pretendard-Medium.min.css') format('woff2')`,\n    },\n    {\n      fontFamily: 'EliceDXNeolli',\n      fontStyle: 'normal',\n      fontWeight: 900,\n      fontDisplay: 'swap',\n      src: `url(https://cdn.jsdelivr.net/gh/fonts-archive/EliceDXNeolli/EliceDXNeolli-Bold.woff2) format('woff2')`,\n    },\n    {\n      fontFamily: 'EliceDXNeolli',\n      fontStyle: 'normal',\n      fontWeight: 700,\n      fontDisplay: 'swap',\n      src: `url(https://cdn.jsdelivr.net/gh/fonts-archive/EliceDXNeolli/EliceDXNeolli-Bold.woff2) format('woff2')`,\n    },\n    {\n      fontFamily: 'EliceDXNeolli',\n      fontStyle: 'normal',\n      fontWeight: 500,\n      fontDisplay: 'swap',\n      src: `url(https://cdn.jsdelivr.net/gh/fonts-archive/EliceDXNeolli/EliceDXNeolli-Medium.woff2) format('woff2')`,\n    },\n    {\n      fontFamily: 'Roboto',\n      fontStyle: 'normal',\n      fontWeight: 400,\n      fontDisplay: 'swap',\n      src: `url(https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700;900&display=swap) format('woff2')`,\n    },\n    {\n      fontFamily: 'Roboto',\n      fontStyle: 'normal',\n      fontWeight: 500,\n      fontDisplay: 'swap',\n      src: `url(https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700;900&display=swap) format('woff2')`,\n    },\n    {\n      fontFamily: 'Roboto',\n      fontStyle: 'normal',\n      fontWeight: 700,\n      fontDisplay: 'swap',\n      src: `url(https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700;900&display=swap) format('woff2')`,\n    },\n    {\n      fontFamily: 'Roboto',\n      fontStyle: 'normal',\n      fontWeight: 800,\n      fontDisplay: 'swap',\n      src: `url(https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700;900&display=swap) format('woff2')`,\n    },\n    {\n      fontFamily: 'Roboto',\n      fontStyle: 'normal',\n      fontWeight: 900,\n      fontDisplay: 'swap',\n      src: `url(https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700;900&display=swap) format('woff2')`,\n    },\n  ],\n  ...(TYPOGRAPHY_STYLES_MAP[typographyType ?? 'Default']),\n});\n","import { useState } from 'react';\nimport { Box, Dialog, DialogContent, IconButton } from '@mui/material';\nimport ZoomInIcon from '@mui/icons-material/ZoomIn';\nimport styled from '@emotion/styled';\n\nconst ImageClickArea = styled(Box)({\n  outline: 'none',\n  cursor: 'pointer',\n  position: 'relative',\n  width: '100%',\n  display: 'block',\n});\n\nconst DialogImageCenter = styled(Box)({\n  display: 'flex',\n  justifyContent: 'center',\n  alignItems: 'center',\n});\n\nconst ZeroPadDialogContent = styled(DialogContent)({\n  padding: 0,\n});\n\ninterface EliceImageProps {\n  src: string;\n  alt: string;\n  maxWidth?: string | { xs?: string; md?: string };\n  minWidth?: string;\n  borderRadius?: string;\n  justifyContent?:\n  | 'flex-start'\n  | 'center'\n  | 'flex-end'\n  | {\n    xs?: 'flex-start' | 'center' | 'flex-end';\n    md?: 'flex-start' | 'center' | 'flex-end';\n  };\n  iconBackgroundColor?: string;\n  iconHoverBackgroundColor?: string;\n}\n\nconst EliceImage = ({\n  src,\n  alt,\n  maxWidth = { xs: '100%', md: '25%' },\n  minWidth,\n  borderRadius = '14px',\n  justifyContent = { xs: 'flex-start', md: 'center' },\n  iconBackgroundColor = 'rgba(0, 0, 0, 0.5)',\n  iconHoverBackgroundColor,\n}: EliceImageProps): JSX.Element => {\n  const [isPreviewOpen, setIsPreviewOpen] = useState(false);\n\n  const handleOpenPreview = () => {\n    setIsPreviewOpen(true);\n  };\n\n  const handleClosePreview = () => {\n    setIsPreviewOpen(false);\n  };\n\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    if (e.key === 'Enter' || e.key === ' ') {\n      e.preventDefault();\n      handleOpenPreview();\n    }\n  };\n\n  return (\n    <>\n      <Box\n        sx={{\n          width: '100%',\n          display: 'flex',\n          justifyContent:\n            typeof justifyContent === 'object'\n              ? justifyContent\n              : { xs: 'flex-start', md: justifyContent },\n          alignItems: 'center',\n        }}\n      >\n        <Box\n          sx={{\n            position: 'relative',\n            display: 'inline-block',\n            width: '100%',\n            maxWidth:\n              typeof maxWidth === 'object'\n                ? maxWidth\n                : { xs: '100%', md: maxWidth },\n            minWidth,\n          }}\n        >\n          <ImageClickArea\n            role=\"button\"\n            tabIndex={0}\n            onClick={handleOpenPreview}\n            onKeyDown={handleKeyDown}\n          >\n            <Box\n              component=\"img\"\n              src={src}\n              alt={alt}\n              sx={{\n                width: '100%',\n                height: 'auto',\n                borderRadius,\n                display: 'block',\n              }}\n            />\n            {/* 우측 상단 돋보기 아이콘 */}\n            <IconButton\n              onClick={e => {\n                e.stopPropagation();\n                handleOpenPreview();\n              }}\n              sx={{\n                position: 'absolute',\n                top: { xs: '0.5rem', md: '0.75rem' },\n                right: { xs: '0.5rem', md: '0.75rem' },\n                backgroundColor: iconBackgroundColor,\n                color: 'white',\n                width: { xs: '2rem', md: '2.5rem' },\n                height: { xs: '2rem', md: '2.5rem' },\n                '&:hover': {\n                  backgroundColor:\n                    iconHoverBackgroundColor || iconBackgroundColor,\n                },\n                transition: 'background-color 0.2s ease',\n              }}\n              aria-label=\"이미지 확대\"\n            >\n              <ZoomInIcon\n                sx={{\n                  fontSize: { xs: '1rem', md: '1.25rem' },\n                }}\n              />\n            </IconButton>\n          </ImageClickArea>\n        </Box>\n      </Box>\n\n      {/* 확대 이미지 Dialog */}\n      <Dialog\n        open={isPreviewOpen}\n        onClose={handleClosePreview}\n        maxWidth=\"md\"\n        fullWidth\n      >\n        <ZeroPadDialogContent>\n          <DialogImageCenter>\n            <Box\n              component=\"img\"\n              src={src}\n              alt={`${alt} 확대`}\n              sx={{\n                maxWidth: '100%',\n                height: 'auto',\n                padding: '1rem',\n                borderRadius,\n                display: 'block',\n              }}\n            />\n          </DialogImageCenter>\n        </ZeroPadDialogContent>\n      </Dialog>\n    </>\n  );\n};\n\nexport default EliceImage;\n","import React, { forwardRef } from 'react';\nimport { Button, type ButtonProps, Typography } from '@mui/material';\nimport { colors } from '../../tokens';\nimport useAIDTMediaQuery from '../../hooks/useAIDTMediaQuery';\n\nexport interface EliceSubButtonProps extends ButtonProps {\n  children?: React.ReactNode;\n}\n\nconst EliceSubButton = forwardRef<HTMLButtonElement, EliceSubButtonProps>(\n  ({ children, variant = 'contained', disabled, ...rest }, ref) => {\n    const { isTablet } = useAIDTMediaQuery();\n\n    return (\n      <Button\n        ref={ref}\n        variant={variant}\n        disabled={disabled}\n        sx={{\n          width: isTablet ? '100%' : 'fit-content',\n          height: '52px',\n          borderRadius: isTablet ? 0 : '16px',\n          padding: '8px 12px',\n          backgroundColor: colors.bluepurple[100],\n          fontFamily: 'inherit',\n          display: 'flex',\n          justifyContent: 'flex-start',\n        }}\n        {...rest}\n      >\n        <Typography variant=\"buttoninput\" sx={{ color: `${colors.bluepurple[950]} !important` }}>\n          {children}\n        </Typography>\n      </Button>\n    );\n  }\n);\n\nexport default EliceSubButton;\n","import { Theme, useTheme } from \"@mui/material\";\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\n\nexport type BaseInputType = \"normal\" | \"area\"\nexport interface BaseInputProps {\n  value: string;\n  onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n  placeholder?: string;\n  children?: React.ReactNode;\n  isDisabled?: boolean;\n  inputType: BaseInputType;\n\n  containerStyle?: React.CSSProperties;\n  inputStyle?: React.CSSProperties;\n  underlineStyle?: React.CSSProperties;\n}\n\nconst BaseInputContainer = styled.div<{ type: BaseInputType, borderColor: string }>`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  width: 100%;\n  border: ${({ type, borderColor }) =>  type !== \"normal\" ? `1px solid ${borderColor}` : \"none\"};\n  border-radius: ${({ type }) =>  type !== \"normal\" ? \"1.5rem\" : \"none\"};\n  padding: ${({ type }) =>  type !== \"normal\" ? \"1.375rem 1.5rem\" : \"none\"};\n`;\n\nconst BaseInputContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n`;\n\nconst InputText = styled.input`\n  border: none;\n  outline: none;\n  font-size: 16px;\n  padding: 8px 0;\n  width: 100%;\n  background: transparent;\n`;\n\nconst UnderLineDivider = styled.div<{ theme: Theme }>`\n  width: 100%;\n  height: 2px;\n  background-color: ${({ theme }) => theme.palette.primary.main};\n`;\n\n// ✅ 합성 컴포넌트 패턴 적용\nconst BaseInput = Object.assign(\n  ({\n    value,\n    onChange,\n    placeholder = \"Enter text...\",\n    children,\n    isDisabled = false,\n    inputType = \"normal\",\n    containerStyle,\n    inputStyle,\n    underlineStyle,\n  }: BaseInputProps) => {\n    const theme = useTheme();\n\n    return (\n      <BaseInputContainer\n        type={inputType}\n        borderColor={theme.palette.secondary.main}\n        style={containerStyle}\n      >\n        {children && <div>{children}</div>}\n        <BaseInputContent>\n          <InputText\n            disabled={isDisabled}\n            value={value}\n            onChange={onChange}\n            placeholder={placeholder}\n            style={inputStyle}\n          />\n          <UnderLineDivider theme={theme} style={underlineStyle} />\n        </BaseInputContent>\n      </BaseInputContainer>\n    );\n  },\n  {\n    LeftElement: ({ children }: { children?: React.ReactNode }) => <>{children}</>,\n  }\n);\n\n\nexport default BaseInput;\n","import HighlightOffIcon from '@mui/icons-material/HighlightOff';\nimport { Box, Modal, Stack } from '@mui/material';\n\nimport type { ModalProps, SxProps } from '@mui/material';\n\nexport type EliceModalProps = {\n  open: boolean;\n  handleClose: () => void;\n  iconClose?: boolean;\n  fontFamily?: string;\n  sx?: SxProps;\n} & ModalProps;\n\nconst EliceModal = (props: EliceModalProps) => {\n  const {\n    open,\n    handleClose,\n    children,\n    iconClose = false,\n    sx = {},\n  } = props;\n  return (\n    <Modal\n      open={open}\n      onClose={handleClose}\n      aria-labelledby=\"modal-modal-title\"\n      aria-describedby=\"modal-modal-description\"\n    >\n      <Box\n        sx={[\n          {\n            position: 'absolute',\n            top: '50%',\n            left: '50%',\n            transform: 'translate(-50%, -50%)',\n            maxWidth: '95vw',\n            maxHeight: '95vh',\n            minWidth: '80vw',\n            bgcolor: '#F4F6FF',\n            borderRadius: '2.6rem',\n            padding: '2.4rem 3.2rem 2.4rem 3.2rem',\n            outline: 'none',\n          },\n          sx,\n        ] as any}\n      >\n        {iconClose && (\n          <Stack\n            display=\"flex\"\n            position=\"relative\"\n            justifyContent=\"flex-end\"\n            zIndex={1200}\n            alignItems=\"flex-end\"\n            onClick={handleClose}\n          >\n            <HighlightOffIcon\n              sx={{\n                width: '2.7rem',\n                height: '2.7rem',\n                cursor: 'pointer',\n              }}\n              color=\"secondary\"\n            />\n          </Stack>\n        )}\n        {children}\n      </Box>\n    </Modal>\n  );\n};\n\nexport default EliceModal;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Stack, Input, Box, Typography, useTheme, Theme } from \"@mui/material\";\n\nimport { Micro, Reset, Send, ReadyRecord, Recording } from \"../../icons\";\nimport { EliceIconButton } from \"../icon-button\";\nimport AssistantAvatar from \"./AssistantAvatar\";\nimport UserAvatar from \"./UserAvatar\";\nimport TypingIndicator from \"./TypingIndicator\";\n\nexport type EliceMessageItem = { role: \"system\" | \"user\" | \"assistant\"; content: string }\n\nexport interface EliceChatProps {\n  children: React.ReactNode;\n  messages: EliceMessageItem[];\n  height?: string;\n  isLoadingMessage?: boolean;\n  CustomAssistantAvatar?: React.ReactNode;\n}\n\nexport type AudioStep = \"ready\" | \"waiting\" | \"recording\";\n\n\nconst EliceChat = ({\n  messages = [],\n  isLoadingMessage,\n  children,\n  height,\n  CustomAssistantAvatar,\n}: EliceChatProps) => {\n  const theme = useTheme();\n  const scrollRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (scrollRef.current) {\n      scrollRef.current.scrollIntoView({ behavior: \"smooth\" });\n    }\n  }, [messages, isLoadingMessage]);\n\n  return (\n    <StyledChatContainer theme={theme} height={height}>\n      <EliceChat.MessageList\n        messages={messages}\n        isLoadingMessage={isLoadingMessage}\n        scrollRef={scrollRef}\n        CustomAssistantAvatar={CustomAssistantAvatar}\n      />\n      {children}\n    </StyledChatContainer>\n  );\n};\n\n// ✅ 메시지 리스트 컴포넌트\nEliceChat.MessageList = ({\n  messages,\n  isLoadingMessage,\n  scrollRef,\n  height,\n  CustomAssistantAvatar,\n}: {\n  messages: { role: \"system\" | \"user\" | \"assistant\"; content: string }[];\n  isLoadingMessage?: boolean;\n  scrollRef: React.RefObject<HTMLDivElement>;\n  height?: string;\n  CustomAssistantAvatar?: React.ReactNode;\n}) => {\n  const theme = useTheme();\n\n  return (\n    <StyledScrollBarStack theme={theme} height={height}>\n      {messages.length === 0 ? (\n        <Typography color={theme.palette.text.disabled} fontSize=\"2rem\" fontWeight={700}>\n          AI와 대화를 시작해 보세요.\n        </Typography>\n      ) : (\n        <>\n          {messages.map((msg, index) => {\n            if (msg.role === \"system\") return null;\n            const isAssistant = msg.role === \"assistant\";\n\n            return (\n              <Stack\n                key={index}\n                direction={isAssistant ? \"row\" : \"row-reverse\"}\n                gap=\"0.5rem\"\n                alignItems=\"center\"\n              >\n                <Stack flexShrink={0}>\n                  {isAssistant ? (CustomAssistantAvatar ?? <AssistantAvatar />) : <UserAvatar />}\n                </Stack>\n                <StyledMessage isAssistant={isAssistant} theme={theme}>\n                  {msg.content}\n                </StyledMessage>\n              </Stack>\n            );\n          })}\n          {isLoadingMessage && <TypingIndicator />}\n          <div ref={scrollRef} />\n        </>\n      )}\n    </StyledScrollBarStack>\n  );\n};\n\nEliceChat.InputArea = ({\n  placeHolder,\n  value,\n  onSend,\n  onReset,\n  onRecord,\n  onTranscribingChange,\n}: {\n  placeHolder: string,\n  value: string;\n  onSend: () => void;\n  onReset: () => void;\n  onRecord?: () => void;\n  onTranscribingChange?: (value: boolean) => void;\n}) => {\n  const theme = useTheme();\n  const [inputValue, setInputValue] = useState(value);\n  const handleSend = () => {\n    if (inputValue.trim()) {\n      onSend();\n      setInputValue(\"\");\n    }\n  };\n  const onChangeValue = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setInputValue(e.target.value);\n  }\n  return (\n    <Stack\n      direction=\"row\"\n      minHeight=\"3.875rem\"\n      bgcolor={theme.palette.grey[50]}\n      borderRadius=\"1.125rem\"\n      p=\"0.5rem 1rem\"\n      gap=\"0.625rem\"\n    >\n      <Stack flexGrow={1} maxHeight=\"14.625rem\">\n        <StyledInput\n          value={inputValue}\n          onChange={onChangeValue}\n          placeholder={placeHolder}\n          theme={theme}\n          multiline\n        />\n      </Stack>\n      {onRecord && (\n        <EliceIconButton\n          onClick={() => {\n            onRecord();\n            onTranscribingChange?.(true);\n          }}\n        >\n          <Micro />\n        </EliceIconButton>\n      )}\n      <EliceIconButton onClick={onReset}>\n        <Reset />\n      </EliceIconButton>\n      <EliceIconButton onClick={handleSend} disabled={!inputValue.trim()}>\n        <Send />\n      </EliceIconButton>\n    </Stack>\n  );\n};\n\nconst SoundWaveVisualizer = ({ analyser }: { analyser: AnalyserNode | null }) => {\n  const theme = useTheme();\n  const TOTAL_BARS = 17;\n  const [filledBars, setFilledBars] = useState(0);\n\n  useEffect(() => {\n    if (!analyser) return;\n\n    analyser.fftSize = 128; // ✅ FFT 크기 줄여 반응속도 개선\n    const dataArray = new Uint8Array(analyser.frequencyBinCount);\n    let prevVolume = 0;\n\n    const updateVolume = () => {\n      analyser.getByteFrequencyData(dataArray);\n      const averageVolume = dataArray.reduce((acc, val) => acc + val, 0) / dataArray.length;\n\n      // ✅ 더 높은 민감도 설정 (3배 증폭)\n      const scaledVolume = Math.min(averageVolume * 3, 255);\n\n      // ✅ 더 높은 가중치를 현재 값에 적용 (빠르게 반응)\n      const smoothedVolume = prevVolume * 0.5 + scaledVolume * 0.5;\n      prevVolume = smoothedVolume;\n\n      // ✅ TOTAL_BARS에 맞게 변환\n      const newFilledBars = Math.floor((smoothedVolume / 255) * TOTAL_BARS);\n\n      setFilledBars((prev) => Math.round(prev * 0.6 + newFilledBars * 0.4)); // ✅ 더 빠르게 반응\n\n      requestAnimationFrame(updateVolume);\n    };\n\n    updateVolume();\n\n    return () => setFilledBars(0);\n  }, [analyser]);\n\n  return (\n    <Stack alignItems=\"center\" justifyContent=\"center\" width=\"100%\" bgcolor=\"transparent\">\n      <Box\n        display=\"flex\"\n        justifyContent=\"center\"\n        alignItems=\"center\"\n        p=\"6px 36px 7.5px 31px\"\n        width=\"100%\"\n        gap=\"11px\"\n        bgcolor={theme.palette.grey[50]}\n      >\n        {Array(TOTAL_BARS)\n          .fill(0)\n          .map((_, idx) => (\n            <WaveBar key={idx} isFilled={idx < filledBars} theme={theme} />\n          ))}\n      </Box>\n    </Stack>\n  );\n};\n\n\nEliceChat.AudioArea = ({\n  onRecord,\n  onTranscribingChange,\n  isLoadingMessage,\n  setAudioFile,\n}: {\n  onRecord?: () => void;\n  onTranscribingChange?: (value: boolean) => void;\n  isLoadingMessage?: boolean;\n  setAudioFile: (file: File | null) => void;\n}) => {\n  const theme = useTheme();\n  const [recordingStep, setRecordingStep] = useState<AudioStep>(\"ready\");\n  const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n  const audioChunks = useRef<Blob[]>([]);\n  const streamRef = useRef<MediaStream | null>(null);\n\n  const audioContextRef = useRef<AudioContext | null>(null);\n  const analyserRef = useRef<AnalyserNode | null>(null);\n  const sourceRef = useRef<MediaStreamAudioSourceNode | null>(null);\n\n  const BUTTON_TEXT = {\n    ready: \"녹음 시작\",\n    recording: \"녹음 중지\",\n    waiting: \"AI 응답 대기 중...\",\n  };\n\n  const startRecording = async () => {\n    try {\n      const audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n      streamRef.current = audioStream;\n      audioChunks.current = [];\n\n      mediaRecorderRef.current = new MediaRecorder(audioStream);\n\n      mediaRecorderRef.current.ondataavailable = (event) => {\n        if (event.data.size > 0) {\n          audioChunks.current.push(event.data);\n        }\n      };\n\n      mediaRecorderRef.current.onstop = async () => {\n        const audioBlob = new Blob(audioChunks.current, { type: \"audio/wav\" });\n        const file = new File([audioBlob], `recording-${Date.now()}.wav`, { type: \"audio/wav\" });\n\n        setAudioFile(file);\n      };\n\n      // ✅ AudioContext 생성 및 오디오 분석기 연결\n      audioContextRef.current = new AudioContext();\n      analyserRef.current = audioContextRef.current.createAnalyser();\n      sourceRef.current = audioContextRef.current.createMediaStreamSource(audioStream);\n      sourceRef.current.connect(analyserRef.current);\n      analyserRef.current.fftSize = 256;\n\n      mediaRecorderRef.current.start();\n      setRecordingStep(\"recording\");\n      onRecord?.();\n      onTranscribingChange?.(true);\n    } catch (error) {\n      console.error(\"🎤 마이크 권한을 허용해주세요.\", error);\n    }\n  };\n\n  /**\n   * ⏹ 녹음 중지\n   */\n  const stopRecording = () => {\n    mediaRecorderRef.current?.stop();\n\n    if (streamRef.current) {\n      streamRef.current.getTracks().forEach(track => track.stop());\n    }\n\n    if (audioContextRef.current) {\n      audioContextRef.current.close();\n      audioContextRef.current = null;\n    }\n\n    setRecordingStep(\"waiting\");\n    onTranscribingChange?.(false);\n  };\n\n  /**\n   * ⏳ AI 응답 완료 시 `ready` 상태로 복귀\n   */\n  useEffect(() => {\n    if (!isLoadingMessage && recordingStep === \"waiting\") {\n      setRecordingStep(\"ready\");\n    }\n  }, [isLoadingMessage, recordingStep]);\n  return (\n    <Stack\n      direction=\"column\"\n      minHeight=\"70px\"\n      bgcolor={theme.palette.grey[50]}\n      padding=\"12px 9px 12px 8px\"\n      borderRadius=\"18px\"\n      alignItems=\"center\"\n      justifyContent=\"center\"\n    >\n      {recordingStep === \"recording\" && <SoundWaveVisualizer analyser={analyserRef.current} />}\n      <AudioChatButton onClick={recordingStep === \"ready\" ? startRecording : stopRecording} step={recordingStep}>\n        {recordingStep === \"ready\" ? <ReadyRecord /> : <Recording />}\n        <Typography variant=\"h1\">{BUTTON_TEXT[recordingStep]}</Typography>\n      </AudioChatButton>\n    </Stack>\n  );\n};\n\nexport default EliceChat;\n\nconst StyledChatContainer = styled(Stack) <{ theme: Theme, height?: string }>`\n  height: fit-content;\n  height: ${({ height }) => height ?? '100%'};\n  max-height: 100%;\n  min-width: 30rem;\n  max-width: 100%;\n  border: 2px solid ${({ theme }) => theme.palette.grey[300]};\n  border-radius: 1.5rem;\n  padding: 23px;\n  gap: 1.75rem;\n`;\n\nconst StyledScrollBarStack = styled(Stack) <{ theme: Theme, height?: string }>`\n  flex: 1;\n  overflow-y: auto;\n  height: ${({ height }) => height ?? '100%'};\n  border-radius: 1.125rem;\n  padding-right: 1rem;\n  ::-webkit-scrollbar {\n    width: 0.25rem;\n  }\n  ::-webkit-scrollbar-track {\n    background: ${({ theme }) => theme.palette.grey[200]};\n    border-radius: 0.5rem;\n  }\n  ::-webkit-scrollbar-thumb {\n    background: ${({ theme }) => theme.palette.primary.main};\n    border-radius: 0.5rem;\n  }\n  ::-webkit-scrollbar-thumb:hover {\n    background: ${({ theme }) => theme.palette.secondary.main};\n  }\n`;\n\nconst StyledInput = styled(Input) <{ theme: Theme }>`\n  width: 100%;\n  height: 100%;\n  border: none !important;\n  background-color: transparent;\n  font-size: 1.375rem;\n  font-weight: 700;\n  outline: none;\n  resize: none;\n  color: ${({ theme }) => theme.palette.secondary.main};\n  ::placeholder {\n    color: ${({ theme }) => theme.palette.grey[300]};\n  }\n  \n  ::before {\n    border: none;\n  }\n  :hover {\n    ::before {\n      border: none;\n    }\n  }\n  ::after {\n    border-bottom: none !important;\n  }\n  \n   ::-webkit-scrollbar {\n    width: 0.25rem;\n  }\n  ::-webkit-scrollbar-track {\n    background: ${({ theme }) => theme.palette.grey[200]};\n    border-radius: 0.5rem;\n  }\n  ::-webkit-scrollbar-thumb {\n    background: ${({ theme }) => theme.palette.primary.main};\n    border-radius: 0.5rem;\n  }\n  ::-webkit-scrollbar-thumb:hover {\n    background: ${({ theme }) => theme.palette.secondary.main};\n  }\n`;\n\nconst StyledMessage = styled(Typography) <{ isAssistant: boolean, theme: Theme }>`\n  color: ${({ isAssistant, theme }) =>\n    isAssistant ? theme.palette.text.secondary : theme.palette.secondary.main};\n  font-size: 1rem;\n  font-weight: ${({ isAssistant }) => (isAssistant ? 500 : 700)};\n  background-color: ${({ isAssistant, theme }) =>\n    isAssistant ? theme.palette.grey[50] : theme.palette.primary.light};\n  border-radius: 1rem;\n  padding: 0.75rem;\n  margin-bottom: 16px;\n  white-space: pre-wrap;\n`;\n\nconst WaveBar = styled(Box) <{ isFilled: boolean; theme: Theme }>`\n  width: 11px;\n  height: 34px;\n  border-radius: 11px;\n  background-color: ${({ isFilled, theme }) =>\n    isFilled ? theme.palette.primary.main : theme.palette.grey[200]};\n  transition: background-color 0.1s ease-in-out;\n`;\n\nconst AudioChatButton = styled.button<{ step: AudioStep }>`\n  display: flex;\n  width: 100%;\n  border: none;\n  height: 36px;\n  padding: 12px 20px 12px 17px;\n  justify-content: center;\n  align-items: center;\n  gap: 8px;\n  cursor: pointer;\n  flex-shrink: 0;\n  border-radius: 16px;\n  color: ${({ step }) => step === \"ready\" ? \"#fff\" : \"#FF5D58\"};\n  background: ${({ step }) => step === \"ready\" ? \"#FF5D58\" : \"#FBE0E0\"};\n`\n","const AssistantAvatar = (props: any) => {\n  return (\n    <svg\n      width=\"36\"\n      height=\"36\"\n      viewBox=\"0 0 36 36\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <mask\n        id=\"mask0_126_24810\"\n        maskUnits=\"userSpaceOnUse\"\n        x=\"0\"\n        y=\"0\"\n        width=\"36\"\n        height=\"36\"\n      >\n        <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#D9D9D9\" />\n      </mask>\n      <g mask=\"url(#mask0_126_24810)\">\n        <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#F1F1F6\" />\n        <path\n          d=\"M15.4502 31.1221C15.2243 30.7552 13.0394 28.6078 12.6163 28.4149C11.8395 27.4387 8.28283 20.9291 7.12702 20.387C5.73431 19.7348 2.52359 22.8981 3.24529 24.3084C3.41717 24.6434 7.38374 28.5483 8.71805 30.2285C11.325 33.5935 15.9846 31.9904 15.4502 31.1221Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M7.1105 21.9956C7.14907 22.0177 7.1678 22.065 7.15127 22.108C6.27312 24.3701 4.01328 24.5838 3.99014 24.586C3.94056 24.5904 3.89648 24.553 3.89208 24.5034C3.88767 24.4538 3.92513 24.4097 3.97471 24.4053C3.99675 24.4031 6.14531 24.1971 6.98049 22.043C6.99922 21.9967 7.05101 21.9725 7.09838 21.9912C7.10279 21.9923 7.1061 21.9945 7.1094 21.9967L7.1105 21.9956Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M12.1237 27.6481C12.1677 27.6547 12.2019 27.6921 12.2008 27.7384C12.1854 30.1646 10.1492 31.1684 10.1283 31.1783C10.0831 31.2004 10.0291 31.1805 10.0071 31.1353C9.98504 31.0902 10.0049 31.0362 10.05 31.0141C10.0699 31.0042 12.0047 30.0467 12.019 27.7373C12.019 27.6866 12.0598 27.647 12.1105 27.647C12.1149 27.647 12.1193 27.647 12.1237 27.647V27.6481Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M5.41928 25.3143C5.42259 25.3022 5.4292 25.2912 5.43801 25.2802C5.47107 25.2416 5.52836 25.2383 5.56582 25.2703C6.96073 26.4701 9.61393 29.8715 9.63376 29.8957C9.66571 29.9343 9.6602 29.9916 9.62164 30.0235C9.58307 30.0555 9.52578 30.05 9.49383 30.0114C9.47399 29.9861 6.83072 26.598 5.44683 25.408C5.41928 25.3837 5.40936 25.3463 5.41928 25.3132V25.3143Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M30.9088 35.8654C30.7788 34.5961 26.4728 28.3543 25.8084 27.2987C25.7666 26.836 25.6101 26.371 25.338 26.0372C24.6945 25.2461 21.9531 25.8289 21.2017 26.0945C20.2068 26.4459 19.0884 26.8723 18.4383 27.4618C18.4284 27.4519 18.4163 27.4431 18.4053 27.4343C18.3943 27.4442 18.3832 27.453 18.3722 27.4618C17.7221 26.8723 16.6038 26.4459 15.6088 26.0945C14.8574 25.8289 11.9078 22.6039 12.3067 33.9747C12.2913 35.6891 12.472 43.4217 13.1154 44.1611C14.1831 45.3896 17.2627 45.1747 17.5932 44.0134C17.7486 43.4702 17.7883 39.2458 17.7883 39.2458C17.7883 39.2458 17.9844 39.3119 18.4053 39.3119C18.8262 39.3119 19.0223 39.2458 19.0223 39.2458C19.0223 39.2458 19.0631 43.4702 19.2173 44.0134C19.5479 45.1747 22.6275 45.3896 23.6951 44.1611C24.3386 43.4206 24.5182 35.6891 24.5039 33.9747C25.0361 35.9745 26.1808 37.7198 26.4409 37.992C27.535 39.1379 31.0652 37.3959 30.9088 35.8665V35.8654Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M22.1792 32.669C22.1329 32.2789 21.9103 31.9671 21.5677 31.8139C21.1324 31.6189 20.7622 31.7522 20.4647 31.858C20.3358 31.9043 20.2135 31.9484 20.1 31.9605C19.797 31.9935 19.4951 31.8679 19.1326 31.7016L19.1282 31.6994C18.6566 31.4834 18.1685 31.2597 17.5934 31.4294C17.3565 31.4999 17.1758 31.6211 17.016 31.7291C16.8629 31.8327 16.7417 31.9142 16.6084 31.9285C16.4894 31.9418 16.41 31.912 16.28 31.8646C16.0971 31.7974 15.8459 31.7049 15.4768 31.7677C15.122 31.8283 14.8212 32.096 14.6912 32.4673C14.5557 32.8552 14.635 33.2805 14.8994 33.5769C15.2212 33.9372 15.7721 34.1487 16.4122 34.1575C16.431 34.1575 16.4497 34.1575 16.4684 34.1575C16.7957 34.1575 17.0954 34.1223 17.3862 34.087C17.6947 34.0507 18.0187 34.0121 18.3867 34.0132C18.9167 34.0143 19.3332 34.0562 19.699 34.0936C19.9315 34.1168 20.1518 34.1388 20.3711 34.1476C20.9341 34.1696 21.3682 34.0484 21.7351 33.7664C22.0558 33.5196 22.2299 33.0888 22.1803 32.669H22.1792Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M16.4672 34.2489H16.4099C15.7455 34.2401 15.1692 34.0175 14.831 33.6374C14.5445 33.3168 14.4586 32.8573 14.6051 32.4375C14.7461 32.0354 15.0745 31.7445 15.4612 31.6784C15.8546 31.6123 16.1289 31.7125 16.3107 31.7797C16.4374 31.826 16.5002 31.8491 16.5983 31.8392C16.7085 31.8271 16.822 31.7511 16.9641 31.6552C17.1294 31.5439 17.3167 31.4183 17.5668 31.3434C18.175 31.1638 18.6774 31.3941 19.1645 31.6178C19.5203 31.7808 19.8112 31.902 20.0889 31.8712C20.1914 31.8602 20.3081 31.8183 20.4326 31.7731C20.729 31.6662 21.1345 31.5208 21.6039 31.7312C21.9763 31.8976 22.2187 32.2359 22.2683 32.659C22.3212 33.1096 22.1328 33.5724 21.7879 33.839C21.4034 34.1354 20.9505 34.2632 20.3643 34.239C20.1418 34.2302 19.9203 34.2081 19.6867 34.1839C19.3209 34.1475 18.9077 34.1057 18.3833 34.1046H18.3645C18.0097 34.1046 17.6979 34.142 17.3949 34.1773C17.0996 34.2126 16.7966 34.2489 16.465 34.2489H16.4672ZM15.7157 31.8381C15.6463 31.8381 15.5725 31.8436 15.4921 31.858C15.1703 31.913 14.896 32.1577 14.777 32.4981C14.6525 32.8551 14.7252 33.2452 14.9665 33.5162C15.2717 33.8578 15.7984 34.0583 16.4121 34.066H16.4672C16.7878 34.066 17.0853 34.0308 17.3729 33.9966C17.688 33.9591 18.0141 33.9217 18.3855 33.9217C18.9198 33.9228 19.3374 33.9646 19.7054 34.0021C19.9379 34.0252 20.1561 34.0473 20.3732 34.0561C20.9141 34.077 21.3284 33.9624 21.6777 33.6936C21.973 33.4655 22.135 33.0678 22.0887 32.6788C22.0468 32.3218 21.843 32.0365 21.5301 31.8965C21.1279 31.7169 20.7918 31.837 20.4955 31.9439C20.361 31.9924 20.2332 32.0376 20.1098 32.0508C19.787 32.086 19.4719 31.9571 19.0939 31.7841C18.6334 31.5726 18.1618 31.3566 17.6186 31.5175C17.396 31.5836 17.2208 31.7015 17.0666 31.8051C16.909 31.9108 16.7735 32.0023 16.6181 32.0188C16.4782 32.0343 16.3812 31.999 16.2479 31.9494C16.1146 31.9009 15.9438 31.837 15.7157 31.837V31.8381Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M18.9727 32.052C19.3627 32.2305 19.7374 32.3869 20.1417 32.344C20.588 32.2966 20.9538 31.9605 21.4099 32.1655C21.9212 32.3947 21.9135 33.1417 21.4981 33.4612C21.1995 33.6915 20.8458 33.7819 20.3841 33.7631C19.8387 33.7411 19.2724 33.6309 18.3854 33.6287C17.6108 33.6265 17.0754 33.7808 16.4165 33.773C15.9074 33.7664 15.448 33.6144 15.1868 33.3213C14.8177 32.907 15.0733 32.2283 15.5427 32.1479C16.0474 32.0619 16.206 32.3594 16.6512 32.312C17.0632 32.268 17.3012 31.9187 17.7045 31.7997C18.143 31.6697 18.5199 31.8438 18.9738 32.052\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M29.2726 34.2224C29.2384 34.2224 29.2054 34.2026 29.1899 34.1695C28.4341 32.5091 25.9109 29.175 25.8922 29.1485C25.8635 29.1067 25.8746 29.0505 25.9164 29.0218C25.9583 28.9932 26.0145 29.0042 26.0431 29.0461C26.0619 29.0725 28.5939 32.4198 29.3563 34.0946C29.3773 34.1398 29.3563 34.1938 29.3111 34.2147C29.299 34.2202 29.2858 34.2224 29.2737 34.2224H29.2726Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M8.75773 28.8853C9.20618 28.4997 8.68832 27.4397 7.75177 26.5484C6.92871 25.7639 6.18277 25.7462 6.05386 26.2266C5.93376 26.6729 6.2621 27.3637 6.8637 28.0336C7.42783 28.6606 8.32031 29.2622 8.75773 28.8853Z\"\n          fill=\"#DDD6FB\"\n        />\n        <path\n          d=\"M5.96023 26.6377C5.93048 26.4768 5.93268 26.3303 5.96684 26.2013C6.01642 26.0184 6.14423 25.8895 6.32824 25.8377C6.72048 25.7276 7.27691 25.9689 7.8146 26.4812C8.55502 27.1864 9.0244 27.9819 9.01118 28.5053C9.00677 28.6959 8.94066 28.8468 8.81615 28.9537C8.2994 29.3977 7.32428 28.6827 6.79541 28.0932C6.32824 27.5731 6.03625 27.0586 5.95912 26.6377H5.96023ZM8.81505 28.3202C8.72911 27.8519 8.3005 27.1952 7.69009 26.6134C7.11053 26.0614 6.62132 25.9446 6.37782 26.0129C6.25441 26.0471 6.17508 26.1264 6.14313 26.2487C6.03515 26.6498 6.33705 27.3098 6.93204 27.972C7.52041 28.6276 8.34347 29.1223 8.69936 28.816C8.7831 28.7444 8.82717 28.6375 8.83158 28.5009C8.83268 28.4447 8.82717 28.3841 8.81615 28.3202H8.81505Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M8.3413 29.0451C8.75669 28.6881 8.2774 27.7053 7.40916 26.8789C6.64559 26.1517 5.95475 26.1352 5.83575 26.5803C5.72447 26.9946 6.02857 27.6348 6.5861 28.2551C7.10836 28.8369 7.93583 29.3944 8.3424 29.0451H8.3413Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M26.5026 37.0069C26.4662 36.9805 26.4552 36.9309 26.4773 36.8901C27.6408 34.7603 29.9094 34.8418 29.9326 34.8429C29.9833 34.8451 30.0218 34.8881 30.0196 34.9377C30.0174 34.9884 29.9745 35.0269 29.9249 35.0247C29.9028 35.0247 27.7455 34.9509 26.6381 36.9783C26.6139 37.0223 26.5588 37.0389 26.5147 37.0146C26.5114 37.0124 26.507 37.0102 26.5037 37.008L26.5026 37.0069Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M17.3518 7.34349C10.3883 8.03213 5.34083 13.3705 6.5914 21.7113C7.18198 25.6503 10.3012 28.2374 12.852 28.991C14.7339 29.5464 16.9155 29.77 19.5433 29.51C22.1701 29.25 24.2658 28.6043 26.0033 27.6909C28.3568 26.4524 30.9098 23.3045 30.7169 19.3258C30.3104 10.9002 24.3142 6.65485 17.3518 7.34239V7.34349Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M16.7911 13.7771C16.5619 12.5651 16.0187 10.9113 14.7263 9.91301C13.955 9.31692 13.2719 9.23649 13.2653 9.23539L13.2851 9.05469C13.3137 9.05799 16.1531 9.40947 16.9707 13.7441L16.7922 13.7782L16.7911 13.7771Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M19.1611 13.5435L18.9793 13.5457C18.9661 12.2775 19.1842 10.4969 20.3004 9.22102C20.9736 8.45195 21.6468 8.23489 21.6755 8.22607L21.7295 8.39906C21.703 8.40788 19.1159 9.27501 19.1611 13.5435Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M12.5655 17.5111C14.0363 17.0341 14.8863 15.592 14.4641 14.2902C14.0419 12.9884 12.5073 12.3198 11.0364 12.7969C9.56563 13.2739 8.71557 14.716 9.1378 16.0178C9.56003 17.3196 11.0946 17.9882 12.5655 17.5111Z\"\n          fill=\"#DDD6FB\"\n        />\n        <path\n          d=\"M11.911 17.7415C11.3976 17.7922 10.8863 17.7161 10.4246 17.5145C9.75363 17.2214 9.26662 16.7003 9.05397 16.0458C8.84132 15.3913 8.92947 14.6828 9.30078 14.0515C9.67099 13.4234 10.2781 12.9474 11.0097 12.7094C12.5258 12.2169 14.1147 12.9133 14.5521 14.2608C14.7647 14.9153 14.6766 15.6238 14.3053 16.2551C13.9351 16.8832 13.3279 17.3591 12.5963 17.5971C12.3705 17.671 12.1413 17.7183 11.9121 17.7415H11.911ZM11.7072 12.748C11.4945 12.7689 11.2797 12.813 11.0659 12.8824C10.3762 13.1061 9.80432 13.5545 9.45724 14.144C9.11237 14.7302 9.02973 15.3847 9.22586 15.9896C9.42198 16.5945 9.87373 17.0771 10.4963 17.3481C11.1232 17.6214 11.8493 17.6478 12.539 17.4242C13.2288 17.2005 13.8006 16.752 14.1477 16.1626C14.4926 15.5764 14.5752 14.9219 14.3791 14.317C14.0342 13.2537 12.9093 12.629 11.7072 12.7469V12.748Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M27.1037 14.2414C27.2629 12.8822 26.147 11.6345 24.6113 11.4546C23.0755 11.2747 21.7015 12.2308 21.5423 13.5901C21.3831 14.9494 22.499 16.1971 24.0348 16.3769C25.5705 16.5568 26.9445 15.6007 27.1037 14.2414Z\"\n          fill=\"#DDD6FB\"\n        />\n        <path\n          d=\"M24.7186 16.4743C24.4938 16.4963 24.2602 16.4952 24.0244 16.4677C23.2598 16.3784 22.5711 16.0302 22.0852 15.487C21.5971 14.9405 21.3723 14.264 21.4528 13.5798C21.5332 12.8967 21.9078 12.2896 22.5094 11.8709C23.1077 11.4544 23.858 11.2748 24.6227 11.3651C26.206 11.5502 27.3596 12.846 27.1944 14.253C27.0544 15.4507 26.0044 16.3487 24.7186 16.4754V16.4743ZM23.9407 11.5381C23.4581 11.5855 23.0008 11.7497 22.613 12.0196C22.0555 12.4074 21.7073 12.9694 21.6335 13.6007C21.5596 14.2321 21.7679 14.859 22.2218 15.3658C22.678 15.876 23.3259 16.2032 24.0465 16.287C25.5306 16.4611 26.8616 15.5388 27.0148 14.231C27.1679 12.9231 26.0859 11.7188 24.6018 11.5447C24.3792 11.5183 24.1577 11.5172 23.9418 11.5381H23.9407Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M25.8106 25.744C24.0741 26.6574 21.9784 27.3041 19.3506 27.5631C16.7238 27.8231 14.5422 27.5994 12.6603 27.0441C10.1272 26.296 7.03549 23.7397 6.41406 19.847C6.4383 20.4508 6.4967 21.0722 6.59256 21.7113C7.18314 25.6503 10.3024 28.2374 12.8531 28.991C14.735 29.5464 16.9167 29.77 19.5434 29.51C22.1701 29.25 24.2658 28.6043 26.0034 27.6909C28.3569 26.4524 30.9098 23.3045 30.717 19.3258C30.6861 18.6802 30.6211 18.0587 30.5264 17.4626C30.6784 21.4006 28.1475 24.5143 25.8095 25.7429L25.8106 25.744Z\"\n          fill=\"#F0EEF9\"\n        />\n        <path\n          d=\"M17.9854 13.7529C13.9594 14.1507 12.213 14.5363 10.7905 15.2294C8.77858 16.2089 8.23758 18.1117 8.80392 19.803C9.17744 20.9203 10.7024 22.5014 12.8553 22.1587C16.163 21.6321 16.2754 18.3035 18.414 18.0919\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M12.6526 22.4133C10.5315 22.6238 8.98237 21.0537 8.58792 19.8747C7.91911 17.876 8.74438 15.972 10.6902 15.0245C12.1898 14.294 14.0254 13.916 17.9622 13.5271L18.0074 13.9799C14.1312 14.3634 12.3352 14.7303 10.8896 15.4344C9.16087 16.2762 8.42706 17.963 9.01873 19.7315C9.37903 20.8068 10.8378 22.2502 12.8189 21.9351C14.5411 21.6608 15.3641 20.57 16.0913 19.607C16.726 18.7663 17.3254 17.973 18.3909 17.8672L18.436 18.32C17.5678 18.406 17.0521 19.0891 16.4538 19.8813C15.6749 20.9126 14.7923 22.0817 12.8905 22.3847C12.8101 22.3979 12.7308 22.4078 12.6526 22.4155V22.4133Z\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M17.9855 13.7528C22.0115 13.3551 23.7987 13.3903 25.3302 13.7914C27.4953 14.3588 28.3977 16.1174 28.174 17.888C28.0264 19.057 26.8408 20.9059 24.6625 20.9907C21.3163 21.1218 20.5538 17.8803 18.4152 18.0918\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M24.9115 21.2011C24.8333 21.2088 24.7528 21.2143 24.6713 21.2177C22.7464 21.2926 21.6512 20.3197 20.686 19.4602C19.9445 18.8003 19.3043 18.2317 18.4372 18.3177L18.392 17.8648C19.4586 17.759 20.2012 18.4201 20.9879 19.1209C21.8892 19.923 22.9106 20.832 24.6526 20.7637C24.7242 20.7604 24.7958 20.756 24.8652 20.7494C26.7405 20.5643 27.8104 18.9446 27.947 17.8593C28.1806 16.0093 27.1306 14.4987 25.2707 14.0117C23.7149 13.604 21.8826 13.5963 18.0064 13.9798L17.9612 13.5269C21.898 13.138 23.7722 13.149 25.3864 13.5721C27.4798 14.1208 28.6621 15.8264 28.3977 17.9166C28.2412 19.1495 27.0303 20.9918 24.9093 21.2022L24.9115 21.2011Z\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M14.324 18.3331C14.8011 18.3331 15.1879 17.9464 15.1879 17.4693C15.1879 16.9922 14.8011 16.6055 14.324 16.6055C13.847 16.6055 13.4602 16.9922 13.4602 17.4693C13.4602 17.9464 13.847 18.3331 14.324 18.3331Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M23.639 15.9476C21.8639 15.5312 20.923 16.9338 20.923 16.9338C20.923 16.9338 22.1537 16.547 23.6169 17.1486\"\n          stroke=\"white\"\n          stroke-width=\"0.330547\"\n          stroke-linejoin=\"bevel\"\n        />\n        <path\n          d=\"M13.2729 8.81779L13.2608 8.80897C12.9457 8.55886 12.3077 8.08508 11.5739 7.71927C10.3828 7.12539 9.46059 7.07801 8.83145 7.57934C8.38961 7.93082 8.28384 8.7043 8.50641 9.94275C8.65736 10.779 8.90417 11.5294 8.90747 11.5371C8.95485 11.6803 9.08156 11.7806 9.23141 11.7949C9.25565 11.7971 9.27989 11.7971 9.30413 11.7949C9.35481 11.7894 9.40329 11.7751 9.44736 11.7508C9.51017 11.7167 9.56195 11.6649 9.59721 11.6021C9.59942 11.5988 9.81317 11.2242 10.3354 10.7867C10.8357 10.367 11.7259 9.80172 13.1208 9.4921C13.252 9.46566 13.3599 9.3698 13.4029 9.24309C13.4558 9.08774 13.4029 8.91805 13.2718 8.81999L13.2729 8.81779Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M21.8253 8.12797C22.0788 7.82827 22.5999 7.25092 23.2313 6.76171C24.2064 6.00586 25.0184 5.78659 25.6465 6.10943C26.0608 6.32208 26.2811 7.01402 26.3032 8.16323C26.3186 8.98629 26.2282 9.74104 26.2238 9.77299C26.2172 9.83139 26.1753 9.87987 26.1192 9.8964C26.0905 9.90521 26.0608 9.90411 26.0332 9.8964C26.0057 9.88868 25.9825 9.87216 25.9638 9.85012C25.9605 9.84681 25.6608 9.49533 25.0151 9.14275C24.419 8.81661 23.3987 8.42105 21.9201 8.3902C21.8683 8.3902 21.8187 8.36156 21.7923 8.31638C21.7592 8.26019 21.7681 8.18967 21.811 8.14229L21.8231 8.12797H21.8253Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M26.1147 10.129C26.0651 10.1334 26.0144 10.129 25.9659 10.1135C25.8976 10.0926 25.837 10.0518 25.7919 9.99784C25.7897 9.99454 25.5054 9.6695 24.9082 9.34226C24.3352 9.02824 23.3513 8.64811 21.9178 8.61836C21.7878 8.61836 21.6644 8.54564 21.5983 8.43105C21.5168 8.29002 21.5344 8.11483 21.6435 7.99363L21.6534 7.98261C21.9134 7.6752 22.4456 7.08572 23.0935 6.58329C24.1446 5.76904 25.0382 5.54207 25.7522 5.90897C26.2535 6.1668 26.508 6.90392 26.5323 8.1611C26.5477 8.97976 26.4618 9.72018 26.4518 9.80172C26.4331 9.95047 26.3295 10.0739 26.1863 10.1157C26.1632 10.1223 26.14 10.1268 26.1158 10.1301L26.1147 10.129ZM22.0908 8.16882C23.5287 8.22611 24.5303 8.61836 25.1253 8.9434C25.5737 9.1891 25.8657 9.43481 26.0166 9.57915C26.0431 9.31031 26.0871 8.75499 26.0761 8.16882C26.0497 6.77942 25.7313 6.4092 25.5428 6.31224C25.0007 6.03348 24.2691 6.24503 23.3712 6.94138C22.8235 7.36559 22.3619 7.8581 22.0908 8.16771V8.16882ZM21.9234 8.16331C21.9234 8.16331 21.9245 8.16331 21.9256 8.16331C21.9256 8.16331 21.9245 8.16331 21.9234 8.16331Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M26.0508 17.9012L25.3621 18.3805L25.3522 18.2791L26.1213 18.614L25.9847 18.9248L25.2365 18.5821L25.2916 18.5391L25.3765 19.3368L25.0547 19.3688L24.9809 18.57L25.0437 18.6019L24.3771 19.0845L24.1821 18.8069L24.8762 18.3265L24.8862 18.4278L24.1116 18.0929L24.2482 17.7767L24.9963 18.1248L24.9412 18.1678L24.8575 17.3701L25.1792 17.3381L25.2531 18.137L25.1903 18.105L25.8558 17.6169L26.0519 17.9001L26.0508 17.9012Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M12.8289 19.2081L12.1402 19.6873L12.1303 19.586L12.8994 19.9209L12.7627 20.2316L12.0146 19.889L12.0697 19.846L12.1545 20.6437L11.8328 20.6757L11.759 19.8769L11.8218 19.9088L11.1552 20.3914L10.9602 20.1137L11.6543 19.6334L11.6642 19.7347L10.8896 19.3998L11.0263 19.0835L11.7744 19.4317L11.7193 19.4747L11.6356 18.677L11.9573 18.645L12.0311 19.4438L11.9683 19.4119L12.6338 18.9238L12.83 19.2069L12.8289 19.2081Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M9.21048 10.6787C9.18183 10.6821 9.15098 10.6699 9.13115 10.6457C9.09919 10.6071 9.1047 10.5498 9.14327 10.5179L9.55315 10.1785C9.44517 9.92069 9.07716 8.96211 9.30854 8.474C9.4044 8.27126 9.55315 8.13464 9.75037 8.06853C10.1757 7.92529 10.6968 8.15777 10.9007 8.26465C11.2698 8.45747 11.543 8.7175 11.6532 8.83209L12.0267 8.5963C12.0697 8.56986 12.1259 8.58198 12.1523 8.62495C12.1788 8.66792 12.1667 8.72301 12.1237 8.75056L11.6202 9.06898L11.5684 9.00948C11.5684 9.00948 11.2599 8.658 10.8158 8.42552C10.6329 8.32966 10.168 8.12031 9.80767 8.24151C9.65672 8.2922 9.54653 8.39356 9.47161 8.55223C9.2832 8.95109 9.60603 9.85458 9.74597 10.1686L9.77351 10.2314L9.25896 10.6578C9.24463 10.6699 9.22701 10.6765 9.21048 10.6787Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M22.3045 20.2592C22.0324 19.0604 20.7388 17.7041 18.3997 17.9354C16.0605 18.1668 15.0578 19.7501 15.0248 20.9787C14.9642 23.2473 17.1921 24.4604 19.0266 24.2786C20.8611 24.0968 22.8081 22.4716 22.3045 20.2592Z\"\n          fill=\"#C2B4F9\"\n        />\n        <path\n          d=\"M18.6013 19.9652C19.3341 19.8928 19.8767 19.3151 19.8134 18.675C19.7501 18.0349 19.1048 17.5748 18.372 17.6473C17.6393 17.7198 17.0966 18.2975 17.1599 18.9375C17.2233 19.5776 17.8686 20.0377 18.6013 19.9652Z\"\n          fill=\"#222323\"\n        />\n        <path\n          d=\"M18.7975 21.9646C18.2201 22.0219 17.4224 21.72 17.0379 20.9234C16.9839 20.811 16.996 20.6601 17.0665 20.5874C17.1371 20.5146 18.0461 20.3637 18.6333 20.3053C19.2206 20.2469 20.1428 20.2172 20.2255 20.2755C20.3081 20.3328 20.35 20.4783 20.3191 20.5995C20.0977 21.4567 19.376 21.9085 18.7975 21.9657V21.9646Z\"\n          fill=\"#7953F5\"\n        />\n        <path\n          d=\"M25.9879 9.01947C25.9703 9.02167 25.9527 9.01837 25.9362 9.00845L25.3478 8.69113L25.3632 8.62392C25.4392 8.28786 25.5781 7.33919 25.3158 6.9855C25.2112 6.84447 25.0844 6.76624 24.9258 6.74641C24.5501 6.69793 24.1347 6.99542 23.9727 7.12433C23.5816 7.43945 23.3513 7.83942 23.3491 7.84382L23.3105 7.91214L22.7541 7.69838C22.7067 7.68075 22.6836 7.62787 22.7023 7.58049C22.7199 7.53421 22.7728 7.50997 22.8202 7.5287L23.2323 7.68736C23.3182 7.55294 23.5353 7.24443 23.8592 6.9833C24.0388 6.83896 24.5027 6.50952 24.9489 6.56571C25.1561 6.59215 25.3279 6.69682 25.4613 6.87642C25.783 7.31054 25.61 8.32202 25.5549 8.59637L26.0232 8.84869C26.0673 8.87293 26.0838 8.92802 26.0596 8.97209C26.0441 8.99964 26.0177 9.01616 25.9879 9.01947Z\"\n          fill=\"white\"\n        />\n        <path\n          d=\"M8.35775 25.5271C8.31368 25.5315 8.27181 25.5029 8.26079 25.4577C7.69004 23.0998 9.42321 21.6333 9.44084 21.6189C9.47941 21.587 9.5367 21.5925 9.56865 21.6311C9.60061 21.6696 9.5951 21.7269 9.55653 21.7589C9.54001 21.7732 7.89388 23.1692 8.43708 25.4147C8.4492 25.4632 8.41945 25.5128 8.36987 25.5249C8.36546 25.5249 8.36105 25.5271 8.35775 25.5271Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M29.7331 23.4136C29.7331 23.4136 29.7243 23.4136 29.7199 23.4136C29.6692 23.4114 29.6307 23.3696 29.6329 23.3189C29.7265 21.0062 27.8391 19.9627 27.8193 19.9528C27.7752 19.9286 27.7587 19.8735 27.7818 19.8294C27.806 19.7853 27.8611 19.7688 27.9052 19.7919C27.925 19.803 29.9127 20.9004 29.8136 23.3255C29.8114 23.3718 29.7761 23.4081 29.732 23.4125L29.7331 23.4136Z\"\n          fill=\"#CACACA\"\n        />\n        <path\n          d=\"M25.0371 5.73703C25.2916 5.73703 25.5307 5.79432 25.7511 5.90781C26.2524 6.16564 26.5069 6.90276 26.5312 8.15994C26.5466 8.9786 26.4607 9.71902 26.4508 9.80056C26.4474 9.8237 26.4419 9.84683 26.4353 9.86887C28.888 11.8951 30.5132 15.0794 30.7181 19.3258C30.9098 23.3045 28.358 26.4524 26.0045 27.6909C24.268 28.6043 22.1724 29.2511 19.5445 29.51C18.8063 29.5827 18.1033 29.618 17.4323 29.618C15.7157 29.618 14.2073 29.3899 12.8542 28.991C10.3035 28.2385 7.18426 25.6503 6.59368 21.7113C5.96344 17.5078 6.93304 14.0679 8.93946 11.6009C8.92845 11.58 8.91743 11.5591 8.90971 11.5359C8.90751 11.5282 8.6596 10.7779 8.50865 9.94159C8.28498 8.70314 8.39186 7.92966 8.83369 7.57818C9.12126 7.349 9.47054 7.23551 9.87822 7.23551C10.363 7.23551 10.9305 7.39638 11.5761 7.71921C12.094 7.97704 12.5623 8.28885 12.9049 8.53787C14.2514 7.90762 15.7509 7.50215 17.353 7.34349C17.84 7.29501 18.3226 7.27187 18.7997 7.27187C19.8905 7.27187 20.9471 7.39748 21.952 7.64429C22.2385 7.33357 22.6373 6.93692 23.0935 6.58323C23.8185 6.0202 24.4697 5.73813 25.0382 5.73813M25.0371 5.07593C24.3198 5.07593 23.5287 5.40648 22.6869 6.05986C22.3685 6.30667 22.049 6.59315 21.7316 6.91488C20.7885 6.71214 19.8034 6.60967 18.7975 6.60967C18.3006 6.60967 17.7915 6.63502 17.2858 6.6846C15.7498 6.83665 14.302 7.20466 12.9743 7.77871C12.5997 7.52529 12.2295 7.30603 11.8681 7.12643C11.1321 6.75952 10.4622 6.57331 9.87491 6.57331C9.31519 6.57331 8.82487 6.73749 8.4194 7.06032C7.55447 7.74896 7.68338 9.1009 7.85637 10.0584C7.95994 10.6346 8.10538 11.1657 8.19573 11.472C6.11218 14.2068 5.33099 17.7712 5.93699 21.8082C6.56613 25.9996 9.865 28.7971 12.6647 29.6235C14.1566 30.0642 15.7146 30.278 17.4301 30.278C18.1298 30.278 18.8625 30.2405 19.6073 30.1667C22.179 29.9122 24.3716 29.2929 26.3097 28.2737C28.8935 26.9152 31.5808 23.5249 31.377 19.2917C31.1798 15.2138 29.7155 11.8698 27.135 9.59562C27.1636 9.27499 27.2022 8.72848 27.1912 8.14451C27.1724 7.17271 27.0347 5.82297 26.053 5.31723C25.739 5.15527 25.3963 5.07373 25.036 5.07373L25.0371 5.07593Z\"\n          fill=\"#DFD5FE\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport default AssistantAvatar;\n","const UserAvatar = (props: any) => {\n  return (\n    <svg\n      width=\"36\"\n      height=\"36\"\n      viewBox=\"0 0 36 36\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <mask\n        id=\"mask0_126_24814\"\n        maskUnits=\"userSpaceOnUse\"\n        x=\"0\"\n        y=\"0\"\n        width=\"36\"\n        height=\"36\"\n      >\n        <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#D9D9D9\" />\n      </mask>\n      <g mask=\"url(#mask0_126_24814)\">\n        <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#F1F1F6\" />\n        <g clip-path=\"url(#clip0_126_24814)\">\n          <mask\n            id=\"mask1_126_24814\"\n            maskUnits=\"userSpaceOnUse\"\n            x=\"-1\"\n            y=\"0\"\n            width=\"37\"\n            height=\"36\"\n          >\n            <path\n              d=\"M17.8888 36C27.8299 36 35.8888 27.9411 35.8888 18C35.8888 8.05887 27.8299 0 17.8888 0C7.94767 0 -0.111206 8.05887 -0.111206 18C-0.111206 27.9411 7.94767 36 17.8888 36Z\"\n              fill=\"white\"\n            />\n          </mask>\n          <g mask=\"url(#mask1_126_24814)\">\n            <path\n              d=\"M37.5707 -1.68335H-1.79456V37.6819H37.5707V-1.68335Z\"\n              fill=\"#EFECF9\"\n            />\n            <path\n              d=\"M12.2814 14.7556C12.2814 14.7556 14.3738 12.083 10.3158 14.3322C6.99376 16.1726 5.13184 19.3622 5.13184 19.3622L10.2467 23.0558C10.2467 23.0558 13.5328 17.889 12.2829 14.7542L12.2814 14.7556Z\"\n              fill=\"#74492C\"\n            />\n            <path\n              d=\"M23.1521 14.7556C23.1521 14.7556 21.0598 12.083 25.1177 14.3322C28.4398 16.1726 30.3017 19.3622 30.3017 19.3622L25.1868 23.0558C25.1868 23.0558 21.9007 17.889 23.1506 14.7542L23.1521 14.7556Z\"\n              fill=\"#74492C\"\n            />\n            <path\n              d=\"M26.2974 13.9783C26.4266 12.6725 25.748 11.5364 24.7816 11.4408C23.8153 11.3452 22.9272 12.3263 22.798 13.6321C22.6688 14.938 23.3475 16.0741 24.3138 16.1697C25.2801 16.2653 26.1682 15.2842 26.2974 13.9783Z\"\n              fill=\"#F0BEBA\"\n            />\n            <path\n              d=\"M11.1038 16.1679C12.0701 16.0723 12.7487 14.9362 12.6195 13.6303C12.4904 12.3245 11.6023 11.3434 10.6359 11.439C9.6696 11.5346 8.99096 12.6707 9.12015 13.9765C9.24934 15.2824 10.1374 16.2635 11.1038 16.1679Z\"\n              fill=\"#F0BEBA\"\n            />\n            <path\n              d=\"M13.7214 16.7141H21.735V29.3847C21.735 30.492 20.835 31.392 19.7277 31.392H15.7273C14.62 31.392 13.72 30.492 13.72 29.3847V16.7141H13.7214Z\"\n              fill=\"#F2D1D2\"\n            />\n            <path\n              d=\"M21.7365 24.8068C21.7365 24.8068 19.2266 25.0804 16.9341 24.1516C14.9944 23.3668 13.7214 21.3134 13.7214 21.3134V18.802H21.735V24.8068H21.7365Z\"\n              fill=\"#F0BEBA\"\n            />\n            <path\n              d=\"M17.716 3.95557C14.0123 3.95557 10.9811 6.98677 10.9811 10.6904V16.0357C10.9811 19.7394 13.995 22.7706 17.716 22.7706C21.4369 22.7706 24.4508 19.7394 24.4508 16.0357V10.6904C24.4508 6.98677 21.4196 3.95557 17.716 3.95557Z\"\n              fill=\"#F2D1D2\"\n            />\n            <path\n              d=\"M17.5144 14.4907C17.5144 14.4907 17.068 15.0739 17.5158 15.6946\"\n              stroke=\"#E78990\"\n              stroke-width=\"0.724832\"\n              stroke-miterlimit=\"10\"\n              stroke-linecap=\"round\"\n            />\n            <path\n              d=\"M13.2722 12.8375C13.1685 12.9138 13.7906 12.6229 14.4703 12.6042C15.3213 12.5811 15.6367 12.8303 15.7029 12.7079C15.7937 12.5408 15.0809 12.3594 14.4271 12.4386C13.8079 12.512 13.4537 12.7021 13.2708 12.8375H13.2722Z\"\n              fill=\"#141418\"\n              stroke=\"#141418\"\n              stroke-width=\"0.454228\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M22.1599 12.8375C22.2636 12.9138 21.6415 12.6229 20.9618 12.6042C20.1108 12.5811 19.7954 12.8303 19.7292 12.7079C19.6384 12.5408 20.3512 12.3594 21.005 12.4386C21.6242 12.512 21.9784 12.7021 22.1613 12.8375H22.1599Z\"\n              fill=\"#141418\"\n              stroke=\"#141418\"\n              stroke-width=\"0.454228\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M9.16097 9.99637C9.16961 10.7408 9.25745 11.6898 10.1978 12.7252C10.7378 13.3199 11.7602 13.4826 11.8984 11.972C12.0727 10.0669 16.1911 9.60037 17.0579 7.54405C17.6008 6.25813 17.4727 4.99813 15.5344 4.98517C10.8458 4.95061 9.13649 7.88101 9.15953 9.99781L9.16097 9.99637Z\"\n              fill=\"#F0BEBA\"\n            />\n            <path\n              d=\"M25.6965 9.99657C25.6878 10.7411 25.6 11.69 24.6597 12.7254C24.1197 13.3201 17.6742 11.1961 16.1104 7.71562C15.5373 6.43834 15.4307 4.57354 17.3603 4.41082C23.8691 3.86506 25.7195 7.87977 25.6965 9.99657Z\"\n              fill=\"#F0BEBA\"\n            />\n            <g>\n              <path\n                d=\"M15.3156 14.5211C15.3156 15.002 15.0737 15.3174 14.7756 15.3174C14.4775 15.3174 14.2356 15.0006 14.2356 14.5211C14.2356 14.0416 14.4775 13.804 14.7756 13.804C15.0737 13.804 15.3156 14.0416 15.3156 14.5211Z\"\n                fill=\"#232323\"\n              />\n            </g>\n            <g>\n              <path\n                d=\"M20.1179 14.5211C20.1179 15.002 20.3598 15.3174 20.6579 15.3174C20.956 15.3174 21.1979 15.0006 21.1979 14.5211C21.1979 14.0401 20.956 13.804 20.6579 13.804C20.3598 13.804 20.1179 14.0416 20.1179 14.5211Z\"\n                fill=\"#232323\"\n              />\n            </g>\n            <g opacity=\"0.3\">\n              <path\n                d=\"M14.2817 15.6946C14.2817 16.2662 13.7719 16.7285 12.882 16.7285C11.9921 16.7285 11.4823 16.2648 11.4823 15.6946C11.4823 15.1243 11.9921 14.6606 12.882 14.6606C13.7719 14.6606 14.2817 15.1243 14.2817 15.6946Z\"\n                fill=\"#E78990\"\n              />\n              <path\n                d=\"M21.1519 15.6946C21.1519 16.2662 21.6616 16.7285 22.5515 16.7285C23.4415 16.7285 23.9512 16.2648 23.9512 15.6946C23.9512 15.1243 23.4415 14.6606 22.5515 14.6606C21.6616 14.6606 21.1519 15.1243 21.1519 15.6946Z\"\n                fill=\"#E78990\"\n              />\n            </g>\n            <path\n              d=\"M8.95081 9.13823C8.95945 10.0699 9.05017 11.2579 10.0279 12.5539C10.5895 13.2969 11.6508 13.5014 11.7948 11.6107C11.9748 9.22607 16.2531 8.64143 17.1545 6.06815C17.7175 4.45823 17.5851 2.88287 15.5719 2.86415C10.7019 2.82095 8.92633 6.48863 8.95081 9.13823Z\"\n              fill=\"#74492C\"\n            />\n            <path\n              d=\"M26.127 9.13824C26.1184 10.0699 26.0277 11.2579 25.0499 12.5539C24.4883 13.297 17.7938 10.6402 16.1709 6.28272C15.5747 4.68432 15.4653 2.34864 17.4683 2.14704C24.2291 1.46304 26.1515 6.49008 26.127 9.13824Z\"\n              fill=\"#74492C\"\n            />\n            <path\n              d=\"M19.2453 17.8544C19.2453 18.5831 18.5656 19.1749 17.729 19.1749C16.8923 19.1749 16.2126 18.5845 16.2126 17.8544C16.2126 17.1244 16.8923 17.3476 17.729 17.3476C18.5656 17.3476 19.2453 17.1244 19.2453 17.8544Z\"\n              fill=\"#E78990\"\n            />\n            <path\n              d=\"M27.8838 26.9943C27.1379 25.8697 24.0952 25.6465 21.6011 25.3757C21.0669 26.99 19.8803 28.178 17.8873 28.178C15.7806 28.178 14.2398 26.522 13.7531 24.9797C11.2835 25.2548 8.52734 25.8841 7.7915 26.9943C4.8251 31.4713 8.17166 46.5365 9.82046 52.6277C10.1661 53.9036 10.2568 53.8633 11.3541 53.9482C15.0102 54.2319 20.4433 54.373 24.1801 54.1023C25.3523 54.0173 25.3998 53.9237 25.7843 52.5615C27.6289 46.0441 30.8488 31.4698 27.8838 26.9943Z\"\n              fill=\"white\"\n            />\n            <path\n              d=\"M8.51447 26.3333C4.85111 27.216 4.61927 29.2838 -1.22713 46.9497C-4.61545 57.1867 -5.68969 59.9011 -6.07993 61.2878C-6.12745 61.4577 -6.03817 61.6363 -5.87401 61.6997L-1.41865 63.4133C-1.24729 63.4795 -1.05433 63.3989 -0.982326 63.2304L11.2764 36.7517L8.51447 26.3347V26.3333Z\"\n              fill=\"#BFAAFC\"\n            />\n            <path\n              d=\"M27.0069 26.4426C30.6702 27.3253 30.7293 29.2837 36.5771 46.9482C39.9654 57.1852 41.0397 59.8996 41.4299 61.2863C41.4774 61.4562 41.3882 61.6348 41.224 61.6981L36.7686 63.4117C36.5973 63.478 36.4043 63.3973 36.3323 63.2289L24.0736 36.7501L27.0083 26.4426H27.0069Z\"\n              fill=\"#BFAAFC\"\n            />\n            <path\n              d=\"M10.3403 29.7935H25.4373\"\n              stroke=\"#6725EC\"\n              stroke-width=\"0.717584\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M10.3403 31.9924H25.4373\"\n              stroke=\"#6725EC\"\n              stroke-width=\"0.717584\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M10.3403 34.1929H25.4373\"\n              stroke=\"#6725EC\"\n              stroke-width=\"0.717584\"\n              stroke-miterlimit=\"10\"\n            />\n            <path\n              d=\"M13.383 24.4727L14.2355 43.9112H9.65919L8.06079 26.5376C8.06079 26.5376 10.8458 24.7218 13.383 24.4727Z\"\n              fill=\"#BFAAFC\"\n            />\n            <path\n              d=\"M22.3946 24.4727L21.5421 43.9112H26.1184L27.7168 26.5376C27.7168 26.5376 24.9319 24.7218 22.3946 24.4727Z\"\n              fill=\"#BFAAFC\"\n            />\n          </g>\n        </g>\n      </g>\n      <defs>\n        <clipPath id=\"clip0_126_24814\">\n          <rect\n            width=\"36\"\n            height=\"36\"\n            fill=\"white\"\n            transform=\"translate(-0.111206)\"\n          />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n};\n\nexport default UserAvatar;\n","import React from 'react';\nimport CircleIcon from '@mui/icons-material/Circle';\nimport { Box } from '@mui/material';\n\nconst TypingIndicator: React.FC = () => {\n  return (\n    <Box display=\"flex\" alignItems=\"center\">\n      <Box display=\"flex\" ml={1}>\n        <CircleIcon className=\"dot first-dot\" />\n        <CircleIcon className=\"dot second-dot\" />\n        <CircleIcon className=\"dot third-dot\" />\n      </Box>\n\n      <style>\n        {`\n          @keyframes blink {\n            0%, 20% {\n              opacity: 0;\n            }\n            50% {\n              opacity: 1;\n            }\n            100% {\n              opacity: 0;\n            }\n          }\n\n          .dot {\n            font-size: 0.8rem;\n            margin-left: 3px;\n            opacity: 0;\n          }\n\n          .first-dot {\n            animation: blink 1.5s infinite 0s;\n          }\n\n          .second-dot {\n            animation: blink 1.5s infinite 0.2s;\n          }\n\n          .third-dot {\n            animation: blink 1.5s infinite 0.4s;\n          }\n        `}\n      </style>\n    </Box>\n  );\n};\n\nexport default TypingIndicator;\n","import React from 'react';\nimport FullscreenIcon from '@mui/icons-material/Fullscreen';\nimport FullscreenExitIcon from '@mui/icons-material/FullscreenExit';\nimport PauseIcon from '@mui/icons-material/Pause';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport SubtitlesIcon from '@mui/icons-material/Subtitles';\nimport VolumeOffIcon from '@mui/icons-material/VolumeOff';\nimport VolumeUpIcon from '@mui/icons-material/VolumeUp';\nimport { IconButton, Slider } from '@mui/material';\n\nimport { Box, Stack, Typography } from '../layout';\n\nexport interface EliceVideoPlayerProps {\n  source: string;\n  autoPlay?: boolean;\n  onPlay?: () => void;\n  onPause?: () => void;\n  onEnded?: () => void;\n  onProgress?: (seconds: number) => void;\n  tracks?: { src: string; kind: string; srclang: string; label: string }[];\n  sx?: React.CSSProperties;\n  height?: string;\n  pageKey?: string;\n  videoKey?: string;\n}\n\nconst EliceVideoPlayer = ({\n  source,\n  autoPlay = false,\n  onPlay,\n  onPause,\n  onEnded,\n  onProgress,\n  tracks,\n  sx,\n  height = 'auto',\n  videoKey,\n}: EliceVideoPlayerProps) => {\n  const videoRef = React.useRef<HTMLVideoElement | null>(null);\n  const lastTime = React.useRef<number>(\n    videoKey ? Number(localStorage.getItem(videoKey)) || 0 : 0\n  );\n\n  const [isPlaying, setIsPlaying] = React.useState(false);\n  const [isFullscreen, setIsFullscreen] = React.useState(false);\n  const [currentTime, setCurrentTime] = React.useState(lastTime.current);\n  const [duration, setDuration] = React.useState(0);\n  const [volume, setVolume] = React.useState(1);\n  const [speed, setSpeed] = React.useState(1);\n  const [isMuted, setIsMuted] = React.useState(false);\n\n  React.useEffect(() => {\n    const video = videoRef.current;\n    if (!video) return;\n\n    video.currentTime = lastTime.current;\n\n    const handlePlay = () => {\n      setIsPlaying(true);\n      onPlay?.();\n    };\n\n    const handlePause = () => {\n      setIsPlaying(false);\n      onPause?.();\n    };\n\n    const handleEnded = () => {\n      setIsPlaying(false);\n      onEnded?.();\n    };\n\n    const handleTimeUpdate = () => {\n      const seconds = video.currentTime;\n      setCurrentTime(seconds);\n      onProgress?.(seconds);\n\n      if (videoKey) {\n        localStorage.setItem(videoKey, seconds.toString());\n      }\n    };\n\n    const handleLoadedMetadata = () => {\n      setDuration(video.duration);\n    };\n    const handleFullscreenChange = () => {\n      const fullscreenElement = videoRef.current?.parentElement?.parentElement;\n      if (fullscreenElement === document.fullscreenElement) {\n        setIsFullscreen(true);\n      } else {\n        document.exitFullscreen()?.catch(error => {\n          console.warn(\"Could not exit fullscreen:\", error.message);\n        });\n        setIsFullscreen(false);\n      }\n    };\n\n    video.addEventListener('play', handlePlay);\n    video.addEventListener('pause', handlePause);\n    video.addEventListener('ended', handleEnded);\n    video.addEventListener('timeupdate', handleTimeUpdate);\n    video.addEventListener('loadedmetadata', handleLoadedMetadata);\n    document.addEventListener('fullscreenchange', handleFullscreenChange);\n\n    return () => {\n      video.removeEventListener('play', handlePlay);\n      video.removeEventListener('pause', handlePause);\n      video.removeEventListener('ended', handleEnded);\n      video.removeEventListener('timeupdate', handleTimeUpdate);\n      video.removeEventListener('loadedmetadata', handleLoadedMetadata);\n      document.removeEventListener('fullscreenchange', handleFullscreenChange);\n    };\n  }, [videoKey, onPlay, onPause, onEnded, onProgress]);\n\n  const handlePlayPause = () => {\n    const video = videoRef.current;\n    if (video) {\n      if (isPlaying) {\n        video.pause();\n      } else {\n        void video.play();\n      }\n    }\n  };\n\n  const handleVolumeChange = (event: Event, newValue: number | number[]) => {\n    const volume = newValue as number;\n    setVolume(volume);\n    const video = videoRef.current;\n    if (video) {\n      video.volume = volume;\n    }\n  };\n\n  const handleSpeedChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n    const speed = event.target.value as number;\n    setSpeed(speed);\n    const video = videoRef.current;\n    if (video) {\n      video.playbackRate = speed;\n    }\n  };\n\n  const toggleMute = () => {\n    setIsMuted(prev => {\n      const video = videoRef.current;\n      if (video) {\n        video.muted = !prev;\n        return !prev;\n      }\n      return prev;\n    });\n  };\n\n  const toggleFullscreen = () => {\n    const videoContainer = videoRef.current?.parentElement?.parentElement;\n    if (videoContainer) {\n      if (document.fullscreenElement) {\n        document.exitFullscreen?.().catch(error => {\n          console.warn(\"Could not exit fullscreen:\", error.message);\n        });\n      } else {\n        void videoContainer.requestFullscreen?.();\n      }\n    }\n  };\n\n  const handleSeek = (newValue: number, isInteraction: boolean) => {\n    const newTime = newValue;\n    const video = videoRef.current;\n    if (isInteraction && video) {\n      video.currentTime = newTime;\n      setCurrentTime(newTime);\n    }\n  };\n\n  return (\n    <Stack\n      step={2}\n      width=\"100%\"\n      height={height}\n      borderRadius=\"1rem\"\n      overflow=\"hidden\"\n      border=\"1px solid #e0e0e0\"\n      sx={{\n        '& video': {\n          width: '100%',\n          height: '100%',\n          borderTopRadius: '1rem',\n          objectFit: 'cover',\n        },\n        ...sx,\n      }}\n    >\n      <Box\n        sx={{ flex: '1 1 auto', overflow: 'hidden', position: 'relative' }}\n      >\n        <video\n          ref={ref => {\n            if (isPlaying) {\n              void ref?.play();\n            }\n            videoRef.current = ref;\n          }}\n          controls={false}\n          autoPlay={autoPlay}\n          width=\"100%\"\n          crossOrigin=\"anonymous\"\n        >\n          <source src={source} type=\"video/mp4\" />\n          {tracks?.map((track, i) => (\n            <track\n              key={i}\n              src={track.src}\n              kind={track.kind}\n              srcLang={track.srclang}\n              label={track.label}\n            />\n          ))}\n          Your browser does not support the video tag.\n        </video>\n      </Box>\n      {/* Custom Controls */}\n      <Stack\n        direction=\"row\"\n        height=\"max(30px, 3em)\"\n        backgroundColor=\"black\"\n        alignItems=\"center\"\n        justifyContent=\"space-between\"\n        padding=\"0.5em 1em\"\n        gap=\"0.5em\"\n      >\n        {/* Play/Pause Button */}\n        <IconButton onClick={handlePlayPause} color=\"primary\">\n          {isPlaying ? <PauseIcon /> : <PlayArrowIcon />}\n        </IconButton>\n\n        {/* Current Time */}\n        <Typography width=\"2.5em\" color=\"white\">\n          {`${Math.floor(currentTime / 60)}:${String(\n            Math.floor(currentTime % 60)\n          ).padStart(2, '0')}`}\n        </Typography>\n\n        {/* Progress Bar */}\n        <Box flex=\"1 1\" mx=\"0.5em\" width=\"10em\">\n          <Seekbar\n            value={currentTime}\n            max={duration}\n            onChange={handleSeek}\n            trackColor=\"#e0e0e0\"\n            progressBarColor=\"primary.main\"\n            videoRef={videoRef}\n          />\n        </Box>\n\n        {/* Video Duration */}\n        <Typography width=\"2.5em\" color=\"white\">\n          {`${Math.floor(duration / 60)}:${String(\n            Math.floor(duration % 60)\n          ).padStart(2, '0')}`}\n        </Typography>\n\n        {/* Speed Control */}\n        <select\n          onChange={handleSpeedChange}\n          value={speed}\n          style={{\n            backgroundColor: 'black',\n            color: 'white',\n            borderRadius: '0.25em',\n            border: '1px solid #e0e0e0',\n            padding: '0 0.5em',\n          }}\n        >\n          <option value={0.5}>0.5x</option>\n          <option value={1}>1x</option>\n          <option value={1.5}>1.5x</option>\n          <option value={2}>2x</option>\n        </select>\n\n        {/* Volume Control */}\n        <Stack\n          direction=\"row\"\n          justifyContent=\"space-around\"\n          alignItems=\"center\"\n          width=\"6em\"\n          gap=\"0.5em\"\n        >\n          <IconButton onClick={toggleMute} color=\"primary\">\n            {isMuted || volume === 0 ? <VolumeOffIcon /> : <VolumeUpIcon />}\n          </IconButton>\n          <Slider\n            value={isMuted ? 0 : volume}\n            onChange={handleVolumeChange}\n            min={0}\n            max={1}\n            step={0.01}\n          />\n        </Stack>\n\n        {/* Subtitles Toggle */}\n        <IconButton color=\"primary\">\n          <SubtitlesIcon />\n        </IconButton>\n\n        {/* Fullscreen Toggle */}\n        <IconButton onClick={toggleFullscreen} color=\"primary\">\n          {isFullscreen ? <FullscreenExitIcon /> : <FullscreenIcon />}\n        </IconButton>\n      </Stack>\n    </Stack>\n  );\n};\n\nexport default EliceVideoPlayer;\n\ninterface SeekbarProps {\n  videoRef?: React.RefObject<HTMLVideoElement>;\n  value: number;\n  onChange: (newValue: number, isUserInteraction: boolean) => void;\n  min?: number;\n  max?: number;\n  step?: number;\n  disabled?: boolean;\n  trackColor?: string; // 트랙 색상\n  progressBarColor?: string; // 진행 상태 표시 바 색상\n}\n\nconst Seekbar: React.FC<SeekbarProps> = ({\n  videoRef,\n  value,\n  onChange,\n  min = 0,\n  max = 100,\n  step = 1,\n  disabled = false,\n  trackColor = 'grey.300',\n  progressBarColor = 'primary.main',\n}) => {\n  const trackRef = React.useRef<HTMLDivElement>(null);\n  const progressBarRef = React.useRef<HTMLDivElement>(null);\n  const thumbRef = React.useRef<HTMLDivElement>(null);\n  const valueRef = React.useRef(value);\n  const [isDragging, setIsDragging] = React.useState(false);\n\n  // 마우스/터치 위치로부터 시크바의 값을 계산하는 함수\n  const calculateValueFromPosition = React.useCallback(\n    (clientX: number): number => {\n      if (!trackRef.current) return value;\n\n      const trackRect = trackRef.current.getBoundingClientRect();\n      console.log(`${trackRect.left} ${trackRect.width}, clientX: ${clientX}`);\n      const offsetX = Math.max(\n        0,\n        Math.min(clientX - trackRect.left, trackRect.width)\n      );\n      const percentage = offsetX / trackRect.width;\n      const rawValue = min + percentage * (max - min);\n\n      return rawValue;\n    },\n    [min, max, value]\n  );\n\n  // 드래그 시작 또는 트랙 클릭 시 호출\n  const handleInteractionStart = (clientX: number) => {\n    if (disabled) return;\n    setIsDragging(true);\n    const newValue = calculateValueFromPosition(clientX);\n    // 값이 실제로 변경되었을 때만 onChange 호출\n    if (newValue !== value) {\n      valueRef.current = newValue;\n      onChange(newValue, true);\n    }\n  };\n\n  // 드래그 중 마우스/터치 이동 시 호출\n  const handleInteractionMove = React.useCallback(\n    (clientX: number) => {\n      if (!isDragging || disabled) return;\n      const newValue = calculateValueFromPosition(clientX);\n      if (newValue !== value) {\n        const newPercentage = (newValue / max) * 100;\n        if (thumbRef.current && progressBarRef.current) {\n          thumbRef.current.style.left = `calc(${newPercentage}% - ${thumbRef.current.offsetWidth / 2\n            }px)`;\n          progressBarRef.current.style.width = `${newPercentage}%`;\n          valueRef.current = newValue;\n          onChange(newValue, true);\n        }\n      }\n    },\n    [isDragging, disabled, calculateValueFromPosition, onChange, value]\n  );\n\n  // 드래그 종료 시 호출\n  const handleInteractionEnd = React.useCallback(() => {\n    if (disabled) return; // 비활성화 시 아무것도 안 함\n    setIsDragging(false);\n  }, [disabled]);\n\n  // 전역 이벤트 리스너 등록 및 해제 (드래그 동작을 위함)\n  React.useEffect(() => {\n    const handleMouseMove = (event: MouseEvent) =>\n      handleInteractionMove(event.clientX);\n    const handleTouchMove = (event: TouchEvent) => {\n      if (event.touches.length > 0) {\n        handleInteractionMove(event.touches[0].clientX);\n      }\n    };\n    const handleMouseUp = () => handleInteractionEnd();\n    const handleTouchEnd = () => handleInteractionEnd();\n\n    if (isDragging) {\n      window.addEventListener('mousemove', handleMouseMove);\n      window.addEventListener('touchmove', handleTouchMove, { passive: false }); // passive: false로 스크롤 방지\n      window.addEventListener('mouseup', handleMouseUp);\n      window.addEventListener('touchend', handleTouchEnd);\n      window.addEventListener('mouseleave', handleMouseUp); // 마우스가 창 밖으로 나갔을 때도 종료 처리\n    }\n\n    return () => {\n      window.removeEventListener('mousemove', handleMouseMove);\n      window.removeEventListener('touchmove', handleTouchMove);\n      window.removeEventListener('mouseup', handleMouseUp);\n      window.removeEventListener('touchend', handleTouchEnd);\n      window.removeEventListener('mouseleave', handleMouseUp);\n    };\n  }, [isDragging, handleInteractionMove, handleInteractionEnd]);\n\n  React.useEffect(() => {\n    const video = videoRef?.current;\n    if (video && onChange) {\n      const handleTimeUpdate = () => {\n        const currentVideoTime = video.currentTime;\n\n        // 현재 Seekbar의 'value' prop과 다를 때만 onChange 호출 (무한 루프 방지)\n        // 부동 소수점 비교를 위해 작은 허용 오차(epsilon)를 사용하거나 step의 절반을 기준으로 비교\n        const epsilon = step > 0 ? step / 1000 : 0.00001;\n        const newPercentage = (currentVideoTime / max) * 100;\n        if (thumbRef.current && progressBarRef.current) {\n          thumbRef.current.style.left = `calc(${newPercentage}% - ${thumbRef.current.offsetWidth / 2\n            }px)`;\n          progressBarRef.current.style.width = `${newPercentage}%`;\n        }\n        if (Math.abs(currentVideoTime - value) > epsilon) {\n          valueRef.current = currentVideoTime;\n          onChange(currentVideoTime, false);\n        }\n      };\n\n      video.addEventListener('timeupdate', handleTimeUpdate);\n      return () => {\n        video.removeEventListener('timeupdate', handleTimeUpdate);\n      };\n    }\n  }, [videoRef, onChange, value, step, min, max]);\n  React.useEffect(() => {\n    valueRef.current = value;\n  }, [value]);\n\n  // 트랙 자체를 클릭했을 때 값 변경\n  const handleTrackClick = (\n    event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n  ) => {\n    if (\n      disabled ||\n      (event.target !== trackRef.current &&\n        event.target !== event.currentTarget.firstChild)\n    ) {\n      // Thumb 클릭 시 중복 방지\n      // event.target !== event.currentTarget.firstChild : progress bar 클릭 시에도 적용되도록 수정\n      if (event.target === thumbRef.current) return; // thumb 클릭 시에는 handleInteractionStart에서 처리하므로 중복 방지\n    }\n    const clientX =\n      'touches' in event ? event.touches[0].clientX : event.clientX;\n    const newValue = calculateValueFromPosition(clientX);\n    valueRef.current = newValue;\n    console.log('newValue', newValue);\n    onChange(newValue, true);\n  };\n\n  // 키보드 접근성 처리\n  const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n    if (disabled) return;\n    let newValue = value;\n    const largeStep = (max - min) / 10; // PageUp/PageDown을 위한 큰 스텝\n\n    switch (event.key) {\n      case 'ArrowLeft':\n      case 'ArrowDown':\n        newValue = value - step;\n        break;\n\n      case 'ArrowRight':\n      case 'ArrowUp':\n        newValue = value + step;\n        break;\n\n      case 'Home':\n        newValue = min;\n        break;\n\n      case 'End':\n        newValue = max;\n        break;\n\n      case 'PageUp':\n        newValue = value + (step > 0 ? Math.max(step, largeStep) : largeStep);\n        break;\n\n      case 'PageDown':\n        newValue = value - (step > 0 ? Math.max(step, largeStep) : largeStep);\n        break;\n\n      default:\n        return; // 다른 키는 무시\n    }\n    event.preventDefault(); // 기본 동작(예: 페이지 스크롤) 방지\n    if (newValue !== value) {\n      valueRef.current = newValue;\n      onChange(newValue, true);\n    }\n  };\n\n  // 현재 값에 따른 진행률(%) 계산\n  const percentage =\n    ((Math.max(min, Math.min(valueRef.current, max)) - min) / (max - min)) *\n    100;\n\n  const thumbSize = 0.8; // em, 핸들(thumb)의 크기\n  const trackHeight = 0.3; // em, 트랙의 높이\n\n  return (\n    <Box display=\"flex\" alignItems=\"center\" width=\"100%\">\n      <Box\n        ref={trackRef}\n        onClick={handleTrackClick}\n        onTouchStart={handleTrackClick} // 터치 장치에서 트랙 클릭으로 값 설정 허용\n        sx={{\n          position: 'relative', // 내부 요소들의 position: absolute 기준점\n          width: '100%',\n          height: `${trackHeight}em`,\n          backgroundColor: trackColor, // 트랙 배경색\n          borderRadius: `${trackHeight / 2}em`, // 둥근 트랙\n          cursor: disabled ? 'not-allowed' : 'pointer',\n          touchAction: 'none', // 터치 드래그 시 페이지 스크롤 방지 (중요)\n          flexGrow: 1,\n        }}\n        // 접근성 속성\n        role=\"slider\"\n        tabIndex={disabled ? -1 : 0} // 비활성화 시 포커스 불가, 활성화 시 포커스 가능\n        aria-valuenow={value}\n        aria-valuemin={min}\n        aria-valuemax={max}\n        aria-disabled={disabled}\n        aria-label={'Seekbar'} // 라벨이 없으면 기본 라벨 제공\n        onKeyDown={handleKeyDown} // 키보드 이벤트 핸들러\n      >\n        {/* 진행 상태 표시 바 */}\n        <Box\n          ref={progressBarRef}\n          position=\"absolute\"\n          width={`${percentage}%`}\n          height=\"100%\"\n          backgroundColor={disabled ? 'grey.400' : progressBarColor}\n          borderRadius={`${trackHeight / 2}em`}\n          sx={{\n            position: 'absolute',\n            width: `${percentage}%`,\n            height: '100%',\n            backgroundColor: disabled ? 'grey.400' : 'primary.main', // 비활성화 시 색상 변경\n            borderRadius: `${trackHeight / 2}px`,\n            pointerEvents: 'none', // 클릭 이벤트가 트랙으로 전달되도록 함\n          }}\n        />\n        {/* 핸들 (Thumb) */}\n        <Box\n          ref={thumbRef} // Thumb 참조 설정\n          onMouseDown={(e: React.MouseEvent<HTMLDivElement>) => {\n            e.stopPropagation(); // 이벤트 버블링 방지\n            handleInteractionStart(e.clientX);\n          }}\n          onTouchStart={(e: React.TouchEvent<HTMLDivElement>) => {\n            e.stopPropagation(); // 이벤트 버블링 방지\n            if (e.touches.length > 0) {\n              handleInteractionStart(e.touches[0].clientX);\n            }\n          }}\n          sx={{\n            position: 'absolute',\n            top: '50%',\n            left: `calc(${percentage}% - ${thumbSize / 2}em)`,\n            width: `${thumbSize}em`,\n            height: `${thumbSize}em`,\n            backgroundColor: disabled ? '#bababa' : progressBarColor,\n            borderRadius: '50%',\n            transform: 'translateY(-50%)',\n            cursor: disabled ? 'not-allowed' : isDragging ? 'grabbing' : 'grab',\n            boxShadow: '0px 1px 3px rgba(0,0,0,0.2)',\n            '&:hover': {\n              boxShadow: !disabled ? '0px 2px 5px rgba(0,0,0,0.3)' : undefined,\n            },\n            transition: isDragging\n              ? 'none'\n              : 'box-shadow 0.1s ease-in-out, left 0.01s linear',\n            zIndex: 1,\n          }}\n        />\n      </Box>\n    </Box>\n  );\n};\n","import React from \"react\";\nimport { css, Global } from \"@emotion/react\";\nimport { styled } from \"@mui/material\";\nimport { createDefu } from \"defu\";\nimport videojs from \"video.js\";\n\ninterface VideoV2Props {\n  /** video.js UI/에러 메시지 언어. 기본값: 'en' */\n  language?: \"en\" | \"ko\";\n  source: {\n    src: string;\n    type?: string;\n  }[];\n  textTrack?: {\n    src: string;\n    lang: string;\n    label?: string;\n    default?: boolean;\n  }[];\n  options?: {\n    autoplay?: boolean;\n    controls?: boolean;\n    poster?: string;\n    playbackRates?: number[];\n    // Add any other video.js options you want to support\n  };\n}\nconst DEFAULT_OPTIONS = {\n  autoplay: false,\n  controls: true,\n  poster: \"\",\n  playbackRates: [0.5, 1, 1.5, 2.0],\n};\n\nconst DOUBLE_TAP_INTERVAL_MS = 300;\nconst DOUBLE_TAP_MAX_DISTANCE_PX = 36;\nconst DOUBLE_TAP_FORWARD_SECONDS = 5;\nconst DOUBLE_TAP_BACKWARD_SECONDS = 5;\n\nconst CONTROL_AREA_SELECTOR =\n  \".vjs-control-bar, .vjs-menu, .vjs-control, .vjs-big-play-button\";\n\nconst VideoWrapper = styled(\"div\")(({ theme }) => ({\n  width: \"100%\",\n  height: \"auto\",\n  boxShadow: theme.shadows[1],\n  \"--theme-primary-color\": theme.palette.primary.main,\n  \"--theme-secondary-color\": theme.palette.secondary.main,\n  \"& .video-js.elice-video\": {\n    // minWidth: \"22.5rem\",\n    fontSize: \"var(--fluid-size)\",\n    fontFamily: \"Pretendard, Arial, sans-serif\",\n    touchAction: \"manipulation\",\n    \"& .vjs-control-bar\": {\n      backgroundColor: \"rgba(0, 0, 0, 0.70)\",\n      \"@media (max-width: 830px)\": {\n        height: \"2.5em\",\n      },\n    },\n    \"& button.vjs-control:not(.vjs-big-play-button), & button.vjs-menu-button\":\n    {\n      \"& .vjs-icon-placeholder:before\": {\n        content: '\" \"',\n        backgroundRepeat: \"no-repeat\",\n        backgroundPosition: \"center\",\n        fontSize: \"calc(var(--fluid-size) * 0.62)\",\n        lineHeight: \"calc(var(--fluid-size) * 3)\",\n      },\n    },\n    \"& .vjs-progress-control.vjs-control\": {\n      \"&>.vjs-slider\": {\n        margin: 0,\n        \"&>.vjs-play-progress\": {\n          backgroundColor: \"var(--theme-primary-color)\",\n        },\n      },\n      \"@media (max-width: 830px)\": {\n        position: \"absolute\",\n        bottom: \"2.3em\",\n        height: \"0.5em\",\n        left: 0,\n        width: \"100%\",\n      },\n    },\n    \"& .vjs-button\": {\n      \"&.vjs-paused .vjs-icon-placeholder:before\": {\n        backgroundImage:\n          \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M15.3516 11.5234L26.6016 18.3984C27.1484 18.75 27.5 19.375 27.5 20C27.5 20.6641 27.1484 21.2891 26.6016 21.6016L15.3516 28.4766C14.7656 28.8281 14.0234 28.8672 13.4375 28.5156C12.8516 28.2031 12.5 27.5781 12.5 26.875V13.125C12.5 12.4609 12.8516 11.8359 13.4375 11.5234C14.0234 11.1719 14.7656 11.1719 15.3516 11.5234Z' fill='white'/%3E%3C/svg%3E%0A\\\")\",\n      },\n      \"&.vjs-playing .vjs-icon-placeholder:before\": {\n        backgroundImage:\n          \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M15.625 12.5H16.875C17.8906 12.5 18.75 13.3594 18.75 14.375V25.625C18.75 26.6797 17.8906 27.5 16.875 27.5H15.625C14.5703 27.5 13.75 26.6797 13.75 25.625V14.375C13.75 13.3594 14.5703 12.5 15.625 12.5ZM23.125 12.5H24.375C25.3906 12.5 26.25 13.3594 26.25 14.375V25.625C26.25 26.6797 25.3906 27.5 24.375 27.5H23.125C22.0703 27.5 21.25 26.6797 21.25 25.625V14.375C21.25 13.3594 22.0703 12.5 23.125 12.5Z' fill='white'/%3E%3C/svg%3E%0A\\\")\",\n      },\n      '&.vjs-mute-control[title^=\"Un\"] .vjs-icon-placeholder:before, &.vjs-mute-control[title^=\"음소거 해제\"] .vjs-icon-placeholder:before, &.vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before, &.vjs-mute-control[aria-pressed=\"true\"] .vjs-icon-placeholder:before':\n      {\n        backgroundImage:\n          \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20.5078 11.3672C20.9375 11.5625 21.25 12.0312 21.25 12.5V27.5C21.25 28.0078 20.9375 28.4375 20.5078 28.6719C20.0391 28.8672 19.5312 28.7891 19.1406 28.4375L13.8672 23.75H11.25C9.84375 23.75 8.75 22.6562 8.75 21.25V18.75C8.75 17.3828 9.84375 16.25 11.25 16.25H13.8672L19.1406 11.6016C19.5312 11.25 20.0391 11.1719 20.5078 11.3672ZM25.3516 16.5234L27.5 18.6719L29.6484 16.5234C30 16.1719 30.5859 16.1719 30.9375 16.5234C31.3281 16.9141 31.3281 17.5 30.9375 17.8516L28.7891 20L30.9375 22.1484C31.3281 22.5391 31.3281 23.125 30.9375 23.4766C30.5859 23.8672 30 23.8672 29.6484 23.4766L27.5 21.3281L25.3516 23.4766C24.9609 23.8672 24.375 23.8672 24.0234 23.4766C23.6328 23.125 23.6328 22.5391 24.0234 22.1484L26.1719 20L24.0234 17.8516C23.6328 17.5 23.6328 16.9141 24.0234 16.5234C24.375 16.1719 24.9609 16.1719 25.3516 16.5234Z' fill='white'/%3E%3C/svg%3E%0A\\\")\",\n      },\n      \"&.vjs-mute-control .vjs-icon-placeholder:before\": {\n        backgroundImage:\n          \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.7578 11.3672C22.1875 11.5625 22.5 12.0312 22.5 12.5V27.5C22.5 28.0078 22.1875 28.4375 21.7578 28.6719C21.2891 28.8672 20.7812 28.7891 20.3906 28.4375L15.1172 23.75H12.5C11.0938 23.75 10 22.6562 10 21.25V18.75C10 17.3828 11.0938 16.25 12.5 16.25H15.1172L20.3906 11.6016C20.7812 11.25 21.2891 11.1719 21.7578 11.3672ZM28.4766 14.1797C30.1562 15.5859 31.25 17.6562 31.25 20C31.25 22.3828 30.1562 24.4531 28.4766 25.8203C28.0469 26.1719 27.4609 26.0938 27.1484 25.7031C26.7969 25.3125 26.875 24.7266 27.2656 24.375C28.5547 23.3594 29.375 21.7969 29.375 20C29.375 18.2422 28.5547 16.6797 27.2656 15.6641C26.875 15.3125 26.8359 14.7266 27.1484 14.3359C27.4609 13.9453 28.0469 13.8672 28.4766 14.1797ZM26.0938 17.1094C26.9531 17.8125 27.5 18.8281 27.5 20C27.5 21.2109 26.9531 22.2266 26.0938 22.9297C25.7031 23.2422 25.1172 23.2031 24.7656 22.7734C24.4531 22.3828 24.5312 21.7969 24.9219 21.4844C25.3516 21.1328 25.625 20.5859 25.625 20C25.625 19.4141 25.3516 18.9062 24.9219 18.5547C24.5312 18.2422 24.4531 17.6562 24.7656 17.2266C25.1172 16.8359 25.7031 16.7969 26.0938 17.1094Z' fill='white'/%3E%3C/svg%3E%0A\\\")\",\n      },\n      \"&.vjs-subs-caps-button .vjs-icon-placeholder:before\": {\n        backgroundImage:\n          \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.75 13.75C8.75 12.3828 9.84375 11.25 11.25 11.25H28.75C30.1172 11.25 31.25 12.3828 31.25 13.75V26.25C31.25 27.6562 30.1172 28.75 28.75 28.75H11.25C9.84375 28.75 8.75 27.6562 8.75 26.25V13.75ZM16.5625 18.125C17.1094 18.125 17.6172 18.3984 17.9297 18.75C18.2812 19.1406 18.8672 19.1797 19.2578 18.8281C19.6484 18.5156 19.6875 17.8906 19.3359 17.5C18.6719 16.7578 17.6562 16.25 16.5625 16.25C14.4922 16.25 12.8125 17.9297 12.8125 20C12.8125 22.0703 14.4922 23.75 16.5625 23.75C17.6562 23.75 18.6719 23.2812 19.3359 22.5C19.6875 22.1484 19.6484 21.5234 19.2578 21.2109C18.8672 20.8594 18.2812 20.8984 17.9297 21.25C17.6172 21.6406 17.1094 21.875 16.5625 21.875C15.5078 21.875 14.6875 21.0547 14.6875 20C14.6875 18.9844 15.5078 18.125 16.5625 18.125ZM22.1875 20C22.1875 18.9844 23.0078 18.125 24.0625 18.125C24.6094 18.125 25.1172 18.3984 25.4297 18.75C25.7812 19.1406 26.3672 19.1797 26.7578 18.8281C27.1484 18.5156 27.1875 17.8906 26.8359 17.5C26.1719 16.7578 25.1562 16.25 24.0625 16.25C21.9922 16.25 20.3125 17.9297 20.3125 20C20.3125 22.0703 21.9922 23.75 24.0625 23.75C25.1562 23.75 26.1719 23.2812 26.8359 22.5C27.1875 22.1484 27.1484 21.5234 26.7578 21.2109C26.3672 20.8594 25.7812 20.8984 25.4297 21.25C25.1172 21.6406 24.6094 21.875 24.0625 21.875C23.0078 21.875 22.1875 21.0547 22.1875 20Z' fill='white'/%3E%3C/svg%3E%0A\\\")\",\n      },\n      '&.vjs-subs-caps-button:has(> .vjs-menu .vjs-menu-item:not(.vjs-subtitles-menu-item)[aria-checked=\"true\"]) .vjs-icon-placeholder:before':\n      {\n        opacity: 0.5,\n      },\n      \"&.vjs-fullscreen-control .vjs-icon-placeholder:before\": {\n        backgroundImage:\n          \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.5 11.25H16.25C16.9141 11.25 17.5 11.8359 17.5 12.5C17.5 13.2031 16.9141 13.75 16.25 13.75H13.75V16.25C13.75 16.9531 13.1641 17.5 12.5 17.5C11.7969 17.5 11.25 16.9531 11.25 16.25V12.5C11.25 11.8359 11.7969 11.25 12.5 11.25ZM13.75 23.75V26.25H16.25C16.9141 26.25 17.5 26.8359 17.5 27.5C17.5 28.2031 16.9141 28.75 16.25 28.75H12.5C11.7969 28.75 11.25 28.2031 11.25 27.5V23.75C11.25 23.0859 11.7969 22.5 12.5 22.5C13.1641 22.5 13.75 23.0859 13.75 23.75ZM23.75 11.25H27.5C28.1641 11.25 28.75 11.8359 28.75 12.5V16.25C28.75 16.9531 28.1641 17.5 27.5 17.5C26.7969 17.5 26.25 16.9531 26.25 16.25V13.75H23.75C23.0469 13.75 22.5 13.2031 22.5 12.5C22.5 11.8359 23.0469 11.25 23.75 11.25ZM28.75 23.75V27.5C28.75 28.2031 28.1641 28.75 27.5 28.75H23.75C23.0469 28.75 22.5 28.2031 22.5 27.5C22.5 26.8359 23.0469 26.25 23.75 26.25H26.25V23.75C26.25 23.0859 26.7969 22.5 27.5 22.5C28.1641 22.5 28.75 23.0859 28.75 23.75Z' fill='white'/%3E%3C/svg%3E%0A\\\")\",\n      },\n      '&.vjs-fullscreen-control[title^=\"Exit\"] .vjs-icon-placeholder:before': {\n        backgroundImage:\n          \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5 12.5V16.25C17.5 16.9531 16.9141 17.5 16.25 17.5H12.5C11.7969 17.5 11.25 16.9531 11.25 16.25C11.25 15.5859 11.7969 15 12.5 15H15V12.5C15 11.8359 15.5469 11.25 16.25 11.25C16.9141 11.25 17.5 11.8359 17.5 12.5ZM12.5 22.5H16.25C16.9141 22.5 17.5 23.0859 17.5 23.75V27.5C17.5 28.2031 16.9141 28.75 16.25 28.75C15.5469 28.75 15 28.2031 15 27.5V25H12.5C11.7969 25 11.25 24.4531 11.25 23.75C11.25 23.0859 11.7969 22.5 12.5 22.5ZM25 12.5V15H27.5C28.1641 15 28.75 15.5859 28.75 16.25C28.75 16.9531 28.1641 17.5 27.5 17.5H23.75C23.0469 17.5 22.5 16.9531 22.5 16.25V12.5C22.5 11.8359 23.0469 11.25 23.75 11.25C24.4141 11.25 25 11.8359 25 12.5ZM23.75 22.5H27.5C28.1641 22.5 28.75 23.0859 28.75 23.75C28.75 24.4531 28.1641 25 27.5 25H25V27.5C25 28.2031 24.4141 28.75 23.75 28.75C23.0469 28.75 22.5 28.2031 22.5 27.5V23.75C22.5 23.0859 23.0469 22.5 23.75 22.5Z' fill='white'/%3E%3C/svg%3E%0A\\\")\",\n      },\n    },\n    \"& .vjs-big-play-button\": {\n      width: \"max(4.5rem, calc(var(--fluid-size) * 4.5))\",\n      height: \"max(4.5rem, calc(var(--fluid-size) * 4.5))\",\n      marginTop: \"calc(max(4.5rem, calc(var(--fluid-size) * 4.5)) / -2)\",\n      marginLeft: \"calc(max(4.5rem, calc(var(--fluid-size) * 4.5)) / -2)\",\n      backgroundColor: \"transparent\",\n      borderRadius: \"0.5em\",\n      \"&:before\": {\n        width: \"100%\",\n        height: \"100%\",\n        content: '\"\"',\n        backgroundColor: \"var(--theme-secondary-color)\",\n        opacity: 0.4,\n        borderRadius: \"0.5em\",\n        position: \"absolute\",\n        top: 0,\n        left: 0,\n      },\n      \"& .vjs-icon-placeholder:before\": {\n        fontSize: \"max(2rem, calc(var(--fluid-size) * 2.4))\",\n        lineHeight: \"max(4rem, calc(var(--fluid-size) * 3.5))\",\n        borderRadius: \"0.5em\",\n        top: \"5px\",\n      },\n    },\n    \"&.vjs-fullscreen .vjs-big-play-button\": {\n      width: \"max(5.5rem, calc(var(--fluid-size) * 6))\",\n      height: \"max(5.5rem, calc(var(--fluid-size) * 6))\",\n      marginTop: \"calc(max(5.5rem, calc(var(--fluid-size) * 6)) / -2)\",\n      marginLeft: \"calc(max(5.5rem, calc(var(--fluid-size) * 6)) / -2)\",\n      \"& .vjs-icon-placeholder:before\": {\n        fontSize: \"max(2.6rem, calc(var(--fluid-size) * 2.8))\",\n        lineHeight: \"max(5rem, calc(var(--fluid-size) * 5.2))\",\n      },\n    },\n    \"& .vjs-volume-bar\": {\n      margin: \"1.35em 0 1.35em\",\n      \"@media (max-width: 830px)\": {\n        margin: \"1.1em 0 1.1em\",\n        width: \"3em\",\n      },\n    },\n    \"& .vjs-time-tooltip\": {\n      fontSize: \"calc(var(--fluid-size) * 0.8)\",\n    },\n    \"& .vjs-control.vjs-button\": {\n      width: \"3em\",\n      padding: \"0 0.5em\",\n      \"&>*::before\": {\n        fontSize: \"calc(var(--fluid-size) * 1.5)\",\n        lineHeight: \"calc(var(--fluid-size) * 3)\",\n        \"@media (max-width: 830px)\": {\n          lineHeight: \"calc(var(--fluid-size) * 2.5)\",\n        },\n      },\n      \"@media (max-width: 830px)\": {\n        width: \"2em\",\n        padding: \"0 0.2em\",\n      },\n    },\n    \"& .vjs-control\": {\n      width: \"3em\",\n    },\n    \"& .vjs-volume-panel.vjs-volume-panel-horizontal\": {\n      width: \"3em\",\n      \"&.vjs-hover, &.vjs-slider-active, &:active, &:focus-within\": {\n        width: \"auto\",\n      },\n      \"& .vjs-control.vjs-volume-control\": {\n        width: \"1px\",\n        height: \"1px\",\n        opacity: 0,\n      },\n      \"&.vjs-hover .vjs-control.vjs-volume-control, &.vjs-slider-active .vjs-control.vjs-volume-control, &:active .vjs-control.vjs-volume-control, &:focus-within .vjs-control.vjs-volume-control\":\n      {\n        width: \"3em\",\n        height: \"3em\",\n        opacity: 1,\n      },\n    },\n    \"& .vjs-time-control\": {\n      padding: \"0 0.2em\",\n      \"&.vjs-current-time\": {\n        marginLeft: \"0.5em\",\n      },\n      \"&.vjs-duration\": {\n        marginRight: \"0.5em\",\n      },\n      fontSize: \"calc(var(--fluid-size) * 0.8)\",\n      lineHeight: \"calc(var(--fluid-size) * 3)\",\n      \"@media (max-width: 830px)\": {\n        lineHeight: \"calc(var(--fluid-size) * 2.5)\",\n      },\n    },\n    \"& .vjs-playback-rate\": {\n      display: \"block\",\n      marginLeft: \"auto\",\n      \"& .vjs-menu\": {\n        left: \"-0.5em\",\n      },\n      \"& .vjs-playback-rate-value\": {\n        fontSize: \"calc(var(--fluid-size) * 0.8)\",\n        lineHeight: \"calc(var(--fluid-size) * 3)\",\n        \"@media (max-width: 830px)\": {\n          lineHeight: \"calc(var(--fluid-size) * 2.5)\",\n        },\n      },\n      \"& .vjs-menu-item\": {\n        fontSize: \"calc(var(--fluid-size) * 1)\",\n        lineHeight: \"calc(var(--fluid-size) * 1.4)\",\n      },\n    },\n    \"& .vjs-menu.vjs-lock-showing .vjs-menu-item\": {\n      marginBlock: 0,\n    },\n    \"& .vjs-current-time, & .vjs-duration, & .vjs-time-divider\": {\n      display: \"block\",\n      fontFamily: \"Pretendard, Arial, sans-serif\",\n    },\n    \"& .vjs-time-divider\": {\n      width: \"auto\",\n      minWidth: 0,\n      padding: 0,\n    },\n    \"& .vjs-remaining-time\": {\n      display: \"none\",\n    },\n    \"& .vjs-volume-level\": {\n      backgroundColor: \"var(--theme-primary-color)\",\n      color: \"var(--theme-primary-color)\",\n    },\n    \"& .vjs-load-progress\": {\n      backgroundColor: \"var(--theme-secondary-color)\",\n      opacity: 0.5,\n    },\n    \"& .vjs-subs-caps-button .vjs-menu\": {\n      width: \"10em\",\n      left: \"-5em\",\n      \"& .vjs-texttrack-settings\": {\n        order: 10,\n      },\n      \"@media (max-width: 830px)\": {\n        left: \"-2em\",\n        width: \"6em\",\n      },\n    },\n    \"& .vjs-menu-button .vjs-menu::before\": {\n      content: '\"\"',\n      position: \"absolute\",\n      bottom: \"1em\",\n      left: 0,\n      width: \"100%\",\n      height: \"0.3em\",\n    },\n    \"& .vjs-menu-content\": {\n      marginBottom: \"0.5em\",\n      backgroundColor: \"rgba(0, 0, 0, 0.70)\",\n      borderRadius: \"0.6em\",\n      padding: \"0.4em\",\n      display: \"flex\",\n      flexDirection: \"column\",\n      \"& > .vjs-menu-item\": {\n        margin: 0,\n        marginBlock: 0,\n        padding: \"0.5em 1em\",\n        borderRadius: \"0.4em\",\n        color: \"white\",\n        fontSize: \"calc(var(--fluid-size) * 0.8)\",\n        \"@media (max-width: 830px)\": {\n          padding: \"0.4em\",\n          fontSize: \"calc(var(--fluid-size) * 0.7)\",\n        },\n        \"&.vjs-selected\": {\n          backgroundColor: \"rgba(255, 255, 255, 0.50)\",\n        },\n        \"&:hover\": {\n          backgroundColor: \"rgba(255, 255, 255, 0.30)\",\n        },\n      },\n    },\n    \"@media (max-width: 640px)\": {\n      \"& .vjs-control-bar\": {\n        height: \"2.2em\",\n        paddingInline: \"0.2em\",\n        width: \"100%\",\n      },\n      \"& .vjs-progress-control.vjs-control\": {\n        bottom: \"2em\",\n      },\n      \"& .vjs-control.vjs-button\": {\n        width: \"1.8em\",\n        minWidth: \"1.8em\",\n        padding: \"0 0.1em\",\n        \"&>*::before\": {\n          fontSize: \"calc(var(--fluid-size) * 1.2)\",\n          lineHeight: \"calc(var(--fluid-size) * 2.2)\",\n        },\n      },\n      \"& .vjs-time-control\": {\n        fontSize: \"calc(var(--fluid-size) * 0.65)\",\n        lineHeight: \"calc(var(--fluid-size) * 2.2)\",\n      },\n      // \"& .vjs-volume-panel.vjs-volume-panel-horizontal .vjs-control.vjs-volume-control\":\n      // {\n      //   display: \"none\",\n      // },\n      \"& .vjs-playback-rate\": {\n        display: \"visible\",\n        marginLeft: \"auto\",\n      },\n      \"& .vjs-current-time.vjs-time-control\": {\n        // marginLeft: \"0.3em\",\n      },\n      \"& .vjs-duration.vjs-time-control\": {\n        marginRight: \"0.3em\",\n      },\n    },\n    \"@media (max-width: 420px)\": {\n      \"& .vjs-control-bar\": {\n        height: \"2em\",\n      },\n      \"& .vjs-progress-control.vjs-control\": {\n        bottom: \"1.8em\",\n        height: \"0.4em\",\n      },\n      \"& .vjs-control.vjs-button\": {\n        width: \"1.6em\",\n        minWidth: \"1.6em\",\n      },\n      \"& .vjs-time-control\": {\n        fontSize: \"calc(var(--fluid-size) * 0.58)\",\n      },\n      // \"& .vjs-time-divider\": {\n      //   display: \"none\",\n      // },\n      // \"& .vjs-duration.vjs-time-control\": {\n      //   display: \"none\",\n      // },\n    },\n  },\n}));\n\nconst defu = createDefu((object, key, currentValue) => {\n  if (Array.isArray(object[key])) {\n    object[key] = currentValue;\n    return true;\n  }\n});\ndefu;\n\nexport function EliceVideoV2({\n  language = \"ko\",\n  source,\n  textTrack,\n  options: _options,\n}: VideoV2Props) {\n  const options = defu(_options ?? {}, DEFAULT_OPTIONS);\n  const videoRef = React.useRef<HTMLVideoElement | null>(null);\n  const playerRef = React.useRef<ReturnType<typeof videojs> | null>(null);\n  const gestureCleanupRef = React.useRef<(() => void) | null>(null);\n\n  const showGestureFeedback = React.useCallback(\n    (type: \"play\" | \"pause\" | \"forward\" | \"backward\") => {\n      const player = playerRef.current;\n      if (!player) {\n        return;\n      }\n      const root = player.el();\n      root.classList.remove(\n        \"elice-gesture-play\",\n        \"elice-gesture-pause\",\n        \"elice-gesture-forward\",\n        \"elice-gesture-backward\",\n      );\n      root.classList.add(`elice-gesture-${type}`);\n      window.setTimeout(() => {\n        root.classList.remove(\n          \"elice-gesture-play\",\n          \"elice-gesture-pause\",\n          \"elice-gesture-forward\",\n          \"elice-gesture-backward\",\n        );\n      }, 360);\n    },\n    [],\n  );\n\n  const togglePlayPauseByGesture = React.useCallback(() => {\n    const player = playerRef.current;\n    if (!player) {\n      return;\n    }\n\n    if (player.paused()) {\n      void player.play();\n      showGestureFeedback(\"play\");\n      return;\n    }\n\n    player.pause();\n    showGestureFeedback(\"pause\");\n  }, [showGestureFeedback]);\n\n  const seekForwardByGesture = React.useCallback(() => {\n    const player = playerRef.current;\n    if (!player) {\n      return;\n    }\n\n    const currentTime = player.currentTime() ?? 0;\n    const duration = player.duration();\n    const nextTime =\n      typeof duration === \"number\" && Number.isFinite(duration)\n        ? Math.min(currentTime + DOUBLE_TAP_FORWARD_SECONDS, duration)\n        : currentTime + DOUBLE_TAP_FORWARD_SECONDS;\n    player.currentTime(nextTime);\n    showGestureFeedback(\"forward\");\n  }, [showGestureFeedback]);\n\n  const seekBackwardByGesture = React.useCallback(() => {\n    const player = playerRef.current;\n    if (!player) {\n      return;\n    }\n\n    const currentTime = player.currentTime() ?? 0;\n    const nextTime = Math.max(currentTime - DOUBLE_TAP_BACKWARD_SECONDS, 0);\n    player.currentTime(nextTime);\n    showGestureFeedback(\"backward\");\n  }, [showGestureFeedback]);\n\n  const bindDoubleTapGesture = React.useCallback(\n    (player: ReturnType<typeof videojs>) => {\n      const root = player.el() as HTMLElement;\n      let lastTapAt = 0;\n      let lastTapX = 0;\n      let lastTapY = 0;\n      let singleTapTimeoutId: number | null = null;\n\n      const clearSingleTapTimeout = () => {\n        if (singleTapTimeoutId === null) {\n          return;\n        }\n        window.clearTimeout(singleTapTimeoutId);\n        singleTapTimeoutId = null;\n      };\n\n      const shouldIgnoreTarget = (target: EventTarget | null) => {\n        if (!(target instanceof Element)) {\n          return false;\n        }\n        return Boolean(target.closest(CONTROL_AREA_SELECTOR));\n      };\n\n      const handleTap = (tapAt: number, x: number, y: number, event: Event) => {\n        if (shouldIgnoreTarget(event.target)) {\n          clearSingleTapTimeout();\n          lastTapAt = 0;\n          return;\n        }\n\n        const elapsed = tapAt - lastTapAt;\n        const withinTime = elapsed > 0 && elapsed <= DOUBLE_TAP_INTERVAL_MS;\n        const deltaX = x - lastTapX;\n        const deltaY = y - lastTapY;\n        const withinDistance =\n          deltaX * deltaX + deltaY * deltaY <=\n          DOUBLE_TAP_MAX_DISTANCE_PX * DOUBLE_TAP_MAX_DISTANCE_PX;\n\n        if (withinTime && withinDistance) {\n          clearSingleTapTimeout();\n          event.preventDefault();\n          event.stopPropagation();\n          lastTapAt = 0;\n          const bounds = root.getBoundingClientRect();\n          const isLeftZone = x <= bounds.left + bounds.width * 0.35;\n          const isRightZone = x >= bounds.left + bounds.width * 0.65;\n\n          if (isLeftZone) {\n            seekBackwardByGesture();\n            return;\n          }\n\n          if (isRightZone) {\n            seekForwardByGesture();\n            return;\n          }\n\n          togglePlayPauseByGesture();\n          return;\n        }\n\n        lastTapAt = tapAt;\n        lastTapX = x;\n        lastTapY = y;\n        clearSingleTapTimeout();\n        singleTapTimeoutId = window.setTimeout(() => {\n          togglePlayPauseByGesture();\n          singleTapTimeoutId = null;\n          lastTapAt = 0;\n        }, DOUBLE_TAP_INTERVAL_MS);\n      };\n\n      const onPointerDown: EventListener = (event) => {\n        if (!(event instanceof PointerEvent)) {\n          return;\n        }\n        handleTap(event.timeStamp, event.clientX, event.clientY, event);\n      };\n\n      const onTouchStart: EventListener = (event) => {\n        if (!(event instanceof TouchEvent)) {\n          return;\n        }\n        if (typeof PointerEvent !== \"undefined\") {\n          return;\n        }\n        const touch = event.changedTouches.item(0);\n        if (!touch) {\n          return;\n        }\n        handleTap(event.timeStamp, touch.clientX, touch.clientY, event);\n      };\n\n      root.addEventListener(\"pointerdown\", onPointerDown, { passive: false });\n      root.addEventListener(\"touchstart\", onTouchStart, { passive: false });\n\n      return () => {\n        clearSingleTapTimeout();\n        root.removeEventListener(\"pointerdown\", onPointerDown);\n        root.removeEventListener(\"touchstart\", onTouchStart);\n      };\n    },\n    [seekBackwardByGesture, seekForwardByGesture, togglePlayPauseByGesture],\n  );\n\n  return (\n    <VideoWrapper>\n      <Global\n        styles={css`\n          @import url(\"https://cdn.jsdelivr.net/npm/video.js@8.22.0/dist/video-js.min.css\");\n\n          .video-js.elice-video.elice-gesture-play .vjs-tech,\n          .video-js.elice-video.elice-gesture-pause .vjs-tech,\n          .video-js.elice-video.elice-gesture-forward .vjs-tech,\n          .video-js.elice-video.elice-gesture-backward .vjs-tech {\n            animation: elice-gesture-tech-flash 360ms ease-out;\n          }\n\n          .video-js.elice-video.elice-gesture-play::after,\n          .video-js.elice-video.elice-gesture-pause::after,\n          .video-js.elice-video.elice-gesture-forward::after,\n          .video-js.elice-video.elice-gesture-backward::after {\n            position: absolute;\n            left: 50%;\n            top: 50%;\n            transform: translate(-50%, -50%);\n            z-index: 10;\n            width: min(22vw, 5rem);\n            height: min(22vw, 5rem);\n            border-radius: 50%;\n            background-color: rgba(0, 0, 0, 0.55);\n            border: 2px solid rgba(255, 255, 255, 0.92);\n            color: white;\n            display: grid;\n            place-items: center;\n            font-size: min(10vw, 2.4rem);\n            line-height: 1;\n            pointer-events: none;\n            animation: elice-gesture-indicator 360ms ease-out forwards;\n            content: \"\";\n          }\n\n          .video-js.elice-video.elice-gesture-play::after {\n            content: \"▶\";\n            padding-left: 0.2rem;\n          }\n\n          .video-js.elice-video.elice-gesture-pause::after {\n            content: \"❚❚\";\n            font-size: min(8vw, 2rem);\n            letter-spacing: 0.15rem;\n          }\n\n          .video-js.elice-video.elice-gesture-forward::after {\n            content: \"+5s\";\n            font-size: min(7vw, 1.8rem);\n            letter-spacing: 0.02rem;\n            font-weight: 700;\n          }\n\n          .video-js.elice-video.elice-gesture-backward::after {\n            content: \"-5s\";\n            font-size: min(7vw, 1.8rem);\n            letter-spacing: 0.02rem;\n            font-weight: 700;\n          }\n\n          @keyframes elice-gesture-tech-flash {\n            0% {\n              filter: brightness(1);\n            }\n            45% {\n              filter: brightness(1.14);\n            }\n            100% {\n              filter: brightness(1);\n            }\n          }\n\n          @keyframes elice-gesture-indicator {\n            0% {\n              opacity: 0;\n              transform: translate(-50%, -50%) scale(0.7);\n            }\n            35% {\n              opacity: 1;\n              transform: translate(-50%, -50%) scale(1);\n            }\n            100% {\n              opacity: 0;\n              transform: translate(-50%, -50%) scale(1.08);\n            }\n          }\n        `}\n      />\n      <video\n        ref={(r: HTMLVideoElement) => {\n          if (!videoRef.current) {\n            videoRef.current = r;\n            requestAnimationFrame(() => {\n              const player = videojs(\n                r,\n                defu(options, {\n                  disablePictureInPicture: true,\n                  fluid: true,\n                  userActions: {\n                    click: false,\n                    doubleClick: false,\n                  },\n                  language,\n                  languages: {\n                    ko: {\n                      \"Audio Player\": \"오디오 플레이어\",\n                      \"Video Player\": \"비디오 플레이어\",\n                      Play: \"재생\",\n                      Pause: \"일시중지\",\n                      Replay: \"다시 재생\",\n                      \"Current Time\": \"현재 시간\",\n                      Duration: \"지정 기간\",\n                      \"Remaining Time\": \"남은 시간\",\n                      \"Stream Type\": \"스트리밍 유형\",\n                      LIVE: \"라이브\",\n                      \"Seek to live, currently behind live\":\n                        \"Seek to Live, 현재 생중계보다 뒤처짐\",\n                      \"Seek to live, currently playing live\":\n                        \"Seek to Live, 현재 생중계 스트리밍 중\",\n                      Loaded: \"로드됨\",\n                      Progress: \"진행\",\n                      \"Progress Bar\": \"진행 표시줄\",\n                      \"progress bar timing: currentTime={1} duration={2}\":\n                        \"{2} 중 {1}\",\n                      Fullscreen: \"전체 화면\",\n                      \"Exit Fullscreen\": \"전체 화면 해제\",\n                      Mute: \"음소거\",\n                      Unmute: \"음소거 해제\",\n                      \"Playback Rate\": \"재생 속도\",\n                      Subtitles: \"자막\",\n                      \"subtitles off\": \"자막 끄기\",\n                      Captions: \"자막\",\n                      \"captions off\": \"자막 끄기\",\n                      Chapters: \"챕터\",\n                      Descriptions: \"제품 설명\",\n                      \"descriptions off\": \"제품 설명 끄기\",\n                      \"Audio Track\": \"오디오 트랙\",\n                      \"Volume Level\": \"볼륨 레벨\",\n                      \"You aborted the media playback\":\n                        \"비디오 재생을 취소했습니다.\",\n                      \"A network error caused the media download to fail part-way.\":\n                        \"네트워크 오류로 인하여 비디오 일부를 다운로드하지 못 했습니다.\",\n                      \"The media could not be loaded, either because the server or network failed or because the format is not supported.\":\n                        \"비디오를 로드할 수 없습니다. 서버 혹은 네트워크 오류 때문이거나 지원되지 않는 형식 때문일 수 있습니다.\",\n                      \"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.\":\n                        \"비디오 재생이 취소됐습니다. 비디오가 손상되었거나 비디오가 사용하는 기능을 브라우저에서 지원하지 않는 것 같습니다.\",\n                      \"No compatible source was found for this media.\":\n                        \"비디오에 호환되지 않는 소스가 있습니다.\",\n                      \"The media is encrypted and we do not have the keys to decrypt it.\":\n                        \"미디어는 암호화되어 있으며 이를 해독할 키를 갖고 있지 않습니다.\",\n                      \"Play Video\": \"영상 재생\",\n                      Close: \"닫기\",\n                      \"Close Modal Dialog\": \"대화 상자 닫기\",\n                      \"Modal Window\": \"모달 창\",\n                      \"This is a modal window\": \"모달 창입니다\",\n                      \"This modal can be closed by pressing the Escape key or activating the close button.\":\n                        \"이 모달은 Esc 키를 누르거나 닫기 버튼을 활성화하여 닫을 수 있습니다.\",\n                      \", opens captions settings dialog\":\n                        \", 자막 설정 대화 상자가 열립니다\",\n                      \", opens subtitles settings dialog\":\n                        \", 자막 설정 대화 상자가 열립니다\",\n                      \", opens descriptions settings dialog\":\n                        \", 설명 설정 대화 상자가 열립니다\",\n                      \", selected\": \", 선택됨\",\n                      \"captions settings\": \"자막 설정\",\n                      \"subtitles settings\": \"자막 설정\",\n                      \"descriptions settings\": \"설명 설정\",\n                      Text: \"텍스트\",\n                      White: \"화이트\",\n                      Black: \"블랙\",\n                      Red: \"레드\",\n                      Green: \"그린\",\n                      Blue: \"블루\",\n                      Yellow: \"옐로우\",\n                      Magenta: \"마젠타\",\n                      Cyan: \"씨엉\",\n                      Background: \"배경\",\n                      Window: \"창\",\n                      Transparent: \"투명\",\n                      \"Semi-Transparent\": \"반투명\",\n                      Opaque: \"불투명\",\n                      \"Font Size\": \"폰트 크기\",\n                      \"Text Edge Style\": \"텍스트 가장자리 스타일\",\n                      None: \"없음\",\n                      Raised: \"글자 위치 올림\",\n                      Depressed: \"글자 위치 내림\",\n                      Uniform: \"균일\",\n                      \"Drop shadow\": \"그림자 효과 넣기\",\n                      \"Font Family\": \"폰트 모음\",\n                      \"Proportional Sans-Serif\": \"비례 산세리프체\",\n                      \"Monospace Sans-Serif\": \"고정폭 산세리프체\",\n                      \"Proportional Serif\": \"비례 세리프체\",\n                      \"Monospace Serif\": \"고정폭 세리프체\",\n                      Casual: \"캐주얼\",\n                      Script: \"스크립트\",\n                      \"Small Caps\": \"소문자\",\n                      Reset: \"리셋\",\n                      \"restore all settings to the default values\":\n                        \"모든 설정을 기본값으로 복원\",\n                      Done: \"완료\",\n                      \"Caption Settings Dialog\": \"자막 설정 대화 상자\",\n                      \"Beginning of dialog window. Escape will cancel and close the window.\":\n                        \"대화창 시작. Esc 키를 누르면 취소되고 창이 닫힙니다.\",\n                      \"End of dialog window.\": \"대화창 종료\",\n                      \"{1} is loading.\": \"{1}이(가) 로딩 중입니다.\",\n                      \"Exit Picture-in-Picture\": \"Picture-in-Picture 종료\",\n                      \"Picture-in-Picture\": \"Picture-in-Picture\",\n                      \"No content\": \"콘텐츠 없음\",\n                      Color: \"색상\",\n                      Opacity: \"투명도\",\n                      \"Text Background\": \"텍스트 배경\",\n                      \"Caption Area Background\": \"자막 배경\",\n                    },\n                  },\n                }),\n              );\n              playerRef.current = player;\n              gestureCleanupRef.current = bindDoubleTapGesture(player);\n            });\n            return () => {\n              if (!r && playerRef.current) {\n                gestureCleanupRef.current?.();\n                gestureCleanupRef.current = null;\n                playerRef.current?.dispose();\n                playerRef.current = null;\n              }\n            };\n          }\n        }}\n        className=\"video-js elice-video vjs-default-skin\"\n      >\n        {source.map((srcInfo) => (\n          <source key={srcInfo.src} src={srcInfo.src} type={srcInfo.type} />\n        ))}\n        <track\n          kind=\"captions\"\n          src=\"data:text/vtt;charset=utf-8,WEBVTT%0A\"\n          srcLang={language}\n          label={language === \"ko\" ? \"기본 자막\" : \"Default captions\"}\n          default\n        />\n        {textTrack?.map((track) => (\n          <track\n            key={track.src}\n            src={track.src}\n            kind=\"captions\"\n            srcLang={track.lang}\n            label={track.label}\n            default={track.default}\n          />\n        ))}\n      </video>\n    </VideoWrapper>\n  );\n}\n","import React from 'react';\n\nexport interface VideoV3Track {\n  src: string;\n  lang: string;\n  label?: string;\n  default?: boolean;\n}\n\nexport interface VideoV3Source {\n  src: string;\n  type?: string;\n}\n\nexport interface EliceVideoV3Props {\n  language?: 'en' | 'ko';\n  source: VideoV3Source[];\n  textTrack?: VideoV3Track[];\n  poster?: string;\n  autoPlay?: boolean;\n  loop?: boolean;\n  muted?: boolean;\n  preload?: 'none' | 'metadata' | 'auto';\n  playbackRates?: number[];\n  rememberPositionKey?: string;\n  primaryColor?: string;\n  customColor?: {\n    background?: string;\n    text?: string;\n    mutedText?: string;\n    controlBackground?: string;\n    border?: string;\n    error?: string;\n    primary?: string;\n    focus?: string;\n  };\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nconst DEFAULT_RATES = [0.5, 1, 1.25, 1.5, 2];\nconst DOUBLE_TAP_INTERVAL_MS = 280;\nconst DOUBLE_TAP_SEEK_SECONDS = 10;\n\ntype GestureKind = 'play' | 'pause' | 'forward' | 'backward';\n\ntype FullscreenElement = HTMLElement & {\n  webkitRequestFullscreen?: () => Promise<void> | void;\n};\n\ntype FullscreenDocument = Document & {\n  webkitFullscreenElement?: Element | null;\n  webkitExitFullscreen?: () => Promise<void> | void;\n};\n\ntype PiPVideoElement = HTMLVideoElement & {\n  webkitSetPresentationMode?: (\n    mode: 'inline' | 'fullscreen' | 'picture-in-picture'\n  ) => void;\n  webkitPresentationMode?: 'inline' | 'fullscreen' | 'picture-in-picture';\n};\n\ntype PiPDocument = Document & {\n  pictureInPictureEnabled?: boolean;\n  pictureInPictureElement?: Element | null;\n  exitPictureInPicture?: () => Promise<void>;\n};\n\nfunction IconPlay() {\n  return (\n    <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n      <path fill=\"currentColor\" d=\"M6 4v16l14-8z\" />\n    </svg>\n  );\n}\n\nfunction IconPause() {\n  return (\n    <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n      <path fill=\"currentColor\" d=\"M6 4h5v16H6zM13 4h5v16h-5z\" />\n    </svg>\n  );\n}\n\nfunction IconVolumeOn() {\n  return (\n    <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n      <path\n        fill=\"currentColor\"\n        d=\"M3 10v4h4l5 4V6L7 10H3zm12.5 2a4.5 4.5 0 0 0-2.5-4.03v8.06A4.5 4.5 0 0 0 15.5 12zm0-9v2.06A7 7 0 0 1 20 12a7 7 0 0 1-4.5 6.94V21A9 9 0 0 0 22 12a9 9 0 0 0-6.5-9z\"\n      />\n    </svg>\n  );\n}\n\nfunction IconVolumeOff() {\n  return (\n    <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n      <path\n        fill=\"currentColor\"\n        d=\"M16.5 12c0 .77-.22 1.5-.6 2.11l1.45 1.45A5.95 5.95 0 0 0 18.5 12c0-1.45-.51-2.77-1.35-3.8L15.7 9.65c.5.66.8 1.48.8 2.35zM3 10v4h4l5 4V6L7 10H3zm16.19 11L2 3.81 3.41 2.4 21.6 20.59 20.19 22z\"\n      />\n    </svg>\n  );\n}\n\nfunction IconPiP() {\n  return (\n    <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n      <path\n        fill=\"currentColor\"\n        d=\"M3 5h18v14H3V5zm16 12V7H5v10h14zm-1-6h-6v4h6v-4z\"\n      />\n    </svg>\n  );\n}\n\nfunction IconFullscreen() {\n  return (\n    <svg viewBox=\"8 8 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n      <path\n        fill=\"currentColor\"\n        d=\"M12.5 11.25H16.25C16.9141 11.25 17.5 11.8359 17.5 12.5C17.5 13.2031 16.9141 13.75 16.25 13.75H13.75V16.25C13.75 16.9531 13.1641 17.5 12.5 17.5C11.7969 17.5 11.25 16.9531 11.25 16.25V12.5C11.25 11.8359 11.7969 11.25 12.5 11.25ZM13.75 23.75V26.25H16.25C16.9141 26.25 17.5 26.8359 17.5 27.5C17.5 28.2031 16.9141 28.75 16.25 28.75H12.5C11.7969 28.75 11.25 28.2031 11.25 27.5V23.75C11.25 23.0859 11.7969 22.5 12.5 22.5C13.1641 22.5 13.75 23.0859 13.75 23.75ZM23.75 11.25H27.5C28.1641 11.25 28.75 11.8359 28.75 12.5V16.25C28.75 16.9531 28.1641 17.5 27.5 17.5C26.7969 17.5 26.25 16.9531 26.25 16.25V13.75H23.75C23.0469 13.75 22.5 13.2031 22.5 12.5C22.5 11.8359 23.0469 11.25 23.75 11.25ZM28.75 23.75V27.5C28.75 28.2031 28.1641 28.75 27.5 28.75H23.75C23.0469 28.75 22.5 28.2031 22.5 27.5C22.5 26.8359 23.0469 26.25 23.75 26.25H26.25V23.75C26.25 23.0859 26.7969 22.5 27.5 22.5C28.1641 22.5 28.75 23.0859 28.75 23.75Z\"\n      />\n    </svg>\n  );\n}\n\nfunction IconFullscreenExit() {\n  return (\n    <svg viewBox=\"8 8 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n      <path\n        fill=\"currentColor\"\n        d=\"M17.5 12.5V16.25C17.5 16.9531 16.9141 17.5 16.25 17.5H12.5C11.7969 17.5 11.25 16.9531 11.25 16.25C11.25 15.5859 11.7969 15 12.5 15H15V12.5C15 11.8359 15.5469 11.25 16.25 11.25C16.9141 11.25 17.5 11.8359 17.5 12.5ZM12.5 22.5H16.25C16.9141 22.5 17.5 23.0859 17.5 23.75V27.5C17.5 28.2031 16.9141 28.75 16.25 28.75C15.5469 28.75 15 28.2031 15 27.5V25H12.5C11.7969 25 11.25 24.4531 11.25 23.75C11.25 23.0859 11.7969 22.5 12.5 22.5ZM25 12.5V15H27.5C28.1641 15 28.75 15.5859 28.75 16.25C28.75 16.9531 28.1641 17.5 27.5 17.5H23.75C23.0469 17.5 22.5 16.9531 22.5 16.25V12.5C22.5 11.8359 23.0469 11.25 23.75 11.25C24.4141 11.25 25 11.8359 25 12.5ZM23.75 22.5H27.5C28.1641 22.5 28.75 23.0859 28.75 23.75C28.75 24.4531 28.1641 25 27.5 25H25V27.5C25 28.2031 24.4141 28.75 23.75 28.75C23.0469 28.75 22.5 28.2031 22.5 27.5V23.75C22.5 23.0859 23.0469 22.5 23.75 22.5Z\"\n      />\n    </svg>\n  );\n}\n\nconst styles = `\n.elice-video-v3 {\n  --v3-bg: #07080a;\n  --v3-fg: #f7f9ff;\n  --v3-muted: #b9c2d9;\n  --v3-primary: #55d8ff;\n  --v3-primary-strong: #14bde8;\n  --v3-danger: #ff6b6b;\n  --v3-control-bg: rgba(12, 14, 20, 0.72);\n  --v3-border: rgba(255, 255, 255, 0.24);\n  --v3-focus: #55d8ff;\n  position: relative;\n  display: block;\n  width: 100%;\n  aspect-ratio: 16 / 9;\n  border-radius: 16px;\n  overflow: hidden;\n  background:\n    radial-gradient(120% 120% at 100% 0%, rgba(85, 216, 255, 0.18), transparent 45%),\n    radial-gradient(150% 110% at 0% 100%, rgba(69, 226, 159, 0.16), transparent 50%),\n    var(--v3-bg);\n  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.32);\n  touch-action: manipulation;\n}\n\n.elice-video-v3 video {\n  width: 100%;\n  height: 100%;\n  object-fit: contain;\n  background: #020204;\n}\n\n.elice-video-v3__surface {\n  position: absolute;\n  inset: 0;\n  cursor: pointer;\n}\n\n.elice-video-v3__gesture-hit {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 33.333%;\n}\n\n.elice-video-v3__gesture-hit--left { left: 0; }\n.elice-video-v3__gesture-hit--center { left: 33.333%; }\n.elice-video-v3__gesture-hit--right { right: 0; }\n\n.elice-video-v3__top {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 28%;\n  pointer-events: none;\n  background: linear-gradient(to bottom, rgba(0, 0, 0, 0.55), rgba(0, 0, 0, 0));\n}\n\n.elice-video-v3__top-actions {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  display: none;\n  align-items: center;\n  gap: 6px;\n  z-index: 9;\n}\n\n.elice-video-v3__loader {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  width: 52px;\n  height: 52px;\n  border: 3px solid rgba(255, 255, 255, 0.3);\n  border-top-color: white;\n  border-radius: 999px;\n  animation: elice-v3-spin 0.9s linear infinite;\n  pointer-events: none;\n}\n\n.elice-video-v3__error {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  width: min(88%, 440px);\n  padding: 12px 14px;\n  border-radius: 12px;\n  background: rgba(0, 0, 0, 0.74);\n  border: 1px solid rgba(255, 107, 107, 0.65);\n  color: #fff;\n  font-size: 14px;\n  line-height: 1.45;\n  text-align: center;\n}\n\n.elice-video-v3__feedback {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  pointer-events: none;\n  display: grid;\n  place-items: center;\n  width: 82px;\n  height: 82px;\n  border-radius: 999px;\n  background: rgba(8, 10, 16, 0.72);\n  border: 1px solid rgba(255, 255, 255, 0.26);\n  color: white;\n  font-size: 22px;\n  font-weight: 700;\n  opacity: 0;\n  animation: elice-v3-pop 380ms ease-out forwards;\n}\n\n.elice-video-v3__controls {\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 10;\n  padding: 8px 10px 10px;\n  color: var(--v3-fg);\n  background: linear-gradient(to top, rgba(0, 0, 0, 0.72), rgba(0, 0, 0, 0));\n  transition: opacity 180ms ease;\n}\n\n.elice-video-v3__timeline-wrap {\n  padding: 8px 0;\n  margin: -8px 0 6px 0;\n  cursor: pointer;\n}\n\n.elice-video-v3__controls[data-hidden=\"true\"] {\n  opacity: 0;\n  pointer-events: none;\n}\n\n.elice-video-v3__center-play {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  width: 72px;\n  height: 72px;\n  border-radius: 999px;\n  border: 1px solid var(--v3-border);\n  background: var(--v3-control-bg);\n  color: var(--v3-fg);\n  display: grid;\n  place-items: center;\n  cursor: pointer;\n  backdrop-filter: blur(8px);\n  z-index: 8;\n}\n\n.elice-video-v3__center-play svg {\n  width: 40px;\n  height: 40px;\n}\n\n.elice-video-v3__timeline {\n  width: 100%;\n  margin: 0;\n  height: 3px;\n  border-radius: 999px;\n  accent-color: var(--v3-primary);\n  cursor: pointer;\n}\n\n.elice-video-v3__row {\n  display: grid;\n  grid-template-columns: 1fr auto;\n  align-items: center;\n  gap: 6px;\n}\n\n.elice-video-v3__group {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  min-width: 0;\n}\n\n.elice-video-v3__group--right {\n  justify-content: flex-end;\n}\n\n.elice-video-v3__volume {\n  width: 84px;\n  accent-color: var(--v3-primary);\n}\n\n.elice-video-v3__time {\n  min-width: 84px;\n  font-size: 11px;\n  color: var(--v3-muted);\n  font-variant-numeric: tabular-nums;\n}\n\n.elice-video-v3__btn,\n.elice-video-v3__select {\n  border: 0;\n  background: transparent;\n  color: var(--v3-fg);\n  border-radius: 8px;\n  height: 36px;\n  transition:\n    border-color 160ms ease,\n    background-color 160ms ease,\n    transform 140ms ease;\n}\n\n.elice-video-v3__btn {\n  width: 36px;\n  min-width: 36px;\n  padding: 0;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  line-height: 1;\n}\n\n.elice-video-v3__btn svg {\n  width: 24px;\n  height: 24px;\n  display: block;\n  flex: 0 0 auto;\n}\n\n.elice-video-v3__btn:hover,\n.elice-video-v3__select:hover {\n  background: rgba(255, 255, 255, 0.14);\n}\n\n.elice-video-v3__btn:active {\n  transform: scale(0.96);\n}\n\n.elice-video-v3__btn:focus-visible,\n.elice-video-v3__select:focus-visible,\n.elice-video-v3 input[type=\"range\"]:focus-visible {\n  outline: 2px solid var(--v3-focus);\n  outline-offset: 2px;\n}\n\n.elice-video-v3__select {\n  font-size: 11px;\n  padding: 0 4px;\n  color: var(--v3-muted);\n}\n\n.elice-video-v3__hide-mobile {\n  display: initial;\n}\n\n@media (max-width: 830px) {\n  .elice-video-v3 { border-radius: 12px; }\n  .elice-video-v3__controls { padding: 7px 8px 8px; }\n  .elice-video-v3__time { min-width: 70px; font-size: 10px; }\n  .elice-video-v3__btn { width: 34px; min-width: 34px; height: 34px; }\n  .elice-video-v3__btn svg { width: 24px; height: 24px; }\n  .elice-video-v3__volume { width: 68px; }\n  .elice-video-v3__top-actions { display: flex; }\n  .elice-video-v3__bottom-hide-small { display: none; }\n}\n\n@media (max-width: 560px) {\n  .elice-video-v3__row { grid-template-columns: 1fr auto; gap: 4px; }\n  .elice-video-v3__group {\n    flex-wrap: nowrap;\n    gap: 4px;\n  }\n  .elice-video-v3__group--right { justify-content: flex-end; }\n  .elice-video-v3__btn,\n  .elice-video-v3__select {\n    height: 32px;\n    font-size: 10px;\n  }\n  .elice-video-v3__btn { width: 32px; min-width: 32px; }\n  .elice-video-v3__btn svg { width: 24px; height: 24px; }\n  .elice-video-v3__volume {\n    width: 60px;\n  }\n  .elice-video-v3__hide-mobile {\n    display: none;\n  }\n  .elice-video-v3__center-play {\n    width: 62px;\n    height: 62px;\n    border: 0;\n  }\n  .elice-video-v3__center-play svg {\n    width: 38px;\n    height: 38px;\n  }\n}\n\n@keyframes elice-v3-spin {\n  to { transform: translate(-50%, -50%) rotate(360deg); }\n}\n\n@keyframes elice-v3-pop {\n  0% { opacity: 0; transform: translate(-50%, -50%) scale(0.7); }\n  35% { opacity: 1; transform: translate(-50%, -50%) scale(1); }\n  100% { opacity: 0; transform: translate(-50%, -50%) scale(1.06); }\n}\n`;\n\nconst t = (language: 'en' | 'ko') => {\n  if (language === 'ko') {\n    return {\n      play: '재생',\n      pause: '일시정지',\n      mute: '음소거',\n      unmute: '음소거 해제',\n      fullscreen: '전체 화면',\n      exitFullscreen: '전체 화면 해제',\n      captions: '자막',\n      captionsOff: '자막 끄기',\n      pip: 'PIP',\n      speed: '속도',\n      loading: '로딩 중...',\n      error: '비디오를 재생할 수 없습니다. 소스/네트워크를 확인해 주세요.',\n      seek: '탐색',\n      player: '비디오 플레이어',\n    };\n  }\n  return {\n    play: 'Play',\n    pause: 'Pause',\n    mute: 'Mute',\n    unmute: 'Unmute',\n    fullscreen: 'Fullscreen',\n    exitFullscreen: 'Exit fullscreen',\n    captions: 'Captions',\n    captionsOff: 'Captions Off',\n    pip: 'PiP',\n    speed: 'Speed',\n    loading: 'Loading...',\n    error: 'Unable to play this video. Please check source/network.',\n    seek: 'Seek',\n    player: 'Video player',\n  };\n};\n\nconst formatTime = (seconds: number) => {\n  if (!Number.isFinite(seconds) || seconds < 0) {\n    return '0:00';\n  }\n  const total = Math.floor(seconds);\n  const h = Math.floor(total / 3600);\n  const m = Math.floor((total % 3600) / 60);\n  const s = total % 60;\n  if (h > 0) {\n    return `${h}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;\n  }\n  return `${m}:${String(s).padStart(2, '0')}`;\n};\n\nexport function EliceVideoV3({\n  language = 'ko',\n  source,\n  textTrack,\n  poster,\n  autoPlay = false,\n  loop = false,\n  muted = false,\n  preload = 'metadata',\n  playbackRates = DEFAULT_RATES,\n  rememberPositionKey,\n  primaryColor,\n  customColor,\n  className,\n  style,\n}: EliceVideoV3Props) {\n  const labels = React.useMemo(() => t(language), [language]);\n  const wrapperRef = React.useRef<HTMLDivElement | null>(null);\n  const videoRef = React.useRef<HTMLVideoElement | null>(null);\n  const hideControlsTimerRef = React.useRef<number | null>(null);\n  const lastTapRef = React.useRef<{ at: number; x: number; y: number } | null>(\n    null\n  );\n  const feedbackTimeoutRef = React.useRef<number | null>(null);\n\n  // refs for stable callbacks (avoids re-registering video event listeners on every play/pause)\n  const isPlayingRef = React.useRef(false);\n  const textTrackRef = React.useRef(textTrack);\n  const isDraggingTimelineRef = React.useRef(false);\n  const isSeekingRef = React.useRef(false);\n  const isMediaReloadingRef = React.useRef(false);\n  const singleTapTimerRef = React.useRef<number | null>(null);\n\n  const [isReady, setIsReady] = React.useState(false);\n  const [isPlaying, setIsPlaying] = React.useState(false);\n  const [isBuffering, setIsBuffering] = React.useState(false);\n  const [isMuted, setIsMuted] = React.useState(muted);\n  const [volume, setVolume] = React.useState(1);\n  const [currentTime, setCurrentTime] = React.useState(0);\n  const [duration, setDuration] = React.useState(0);\n  const [playbackRate, setPlaybackRate] = React.useState(\n    playbackRates.find(r => r === 1) ?? playbackRates[0] ?? 1\n  );\n  const [showControls, setShowControls] = React.useState(true);\n  const [isFullscreen, setIsFullscreen] = React.useState(false);\n  const [errorMessage, setErrorMessage] = React.useState('');\n  const [feedbackText, setFeedbackText] = React.useState('');\n  const [selectedCaption, setSelectedCaption] = React.useState<string>('off');\n  const [isHotkeyActive, setIsHotkeyActive] = React.useState(false);\n\n  // keep refs in sync with state (synchronous update during render, no useEffect needed)\n  isPlayingRef.current = isPlaying;\n  textTrackRef.current = textTrack;\n\n  const showFeedback = React.useCallback((kind: GestureKind) => {\n    const textMap: Record<GestureKind, string> = {\n      play: '▶',\n      pause: '❚❚',\n      forward: `+${DOUBLE_TAP_SEEK_SECONDS}s`,\n      backward: `-${DOUBLE_TAP_SEEK_SECONDS}s`,\n    };\n    setFeedbackText(textMap[kind]);\n    if (feedbackTimeoutRef.current !== null) {\n      window.clearTimeout(feedbackTimeoutRef.current);\n    }\n    feedbackTimeoutRef.current = window.setTimeout(() => {\n      setFeedbackText('');\n    }, 360);\n  }, []);\n\n  const resetControlsTimer = React.useCallback(() => {\n    if (!isPlayingRef.current) {\n      setShowControls(true);\n      return;\n    }\n    setShowControls(true);\n    if (hideControlsTimerRef.current !== null) {\n      window.clearTimeout(hideControlsTimerRef.current);\n    }\n    hideControlsTimerRef.current = window.setTimeout(() => {\n      setShowControls(false);\n    }, 2300);\n  }, []);\n\n  const seekBy = React.useCallback(\n    (delta: number, withFeedback = true) => {\n      const video = videoRef.current;\n      if (!video) {\n        return;\n      }\n      const next = Math.max(\n        0,\n        Math.min(\n          (video.currentTime ?? 0) + delta,\n          Number.isFinite(video.duration) ? video.duration : Infinity\n        )\n      );\n      video.currentTime = next;\n      setCurrentTime(next);\n      if (withFeedback) {\n        showFeedback(delta > 0 ? 'forward' : 'backward');\n      }\n    },\n    [showFeedback]\n  );\n\n  const togglePlayPause = React.useCallback(() => {\n    const video = videoRef.current;\n    if (!video) {\n      return;\n    }\n    if (video.paused) {\n      void video\n        .play()\n        .then(() => {\n          showFeedback('play');\n        })\n        .catch(() => {\n          setErrorMessage(labels.error);\n        });\n      return;\n    }\n    video.pause();\n    showFeedback('pause');\n  }, [labels.error, showFeedback]);\n\n  const toggleFullscreen = React.useCallback(() => {\n    const wrapper = wrapperRef.current as FullscreenElement | null;\n    const video = videoRef.current as\n      | (HTMLVideoElement & { webkitEnterFullscreen?: () => void })\n      | null;\n    const fsDocument = document as FullscreenDocument;\n    if (!wrapper || !video) {\n      return;\n    }\n    const activeElement =\n      document.fullscreenElement ?? fsDocument.webkitFullscreenElement;\n    if (activeElement) {\n      if (document.exitFullscreen) {\n        void document.exitFullscreen();\n      } else {\n        fsDocument.webkitExitFullscreen?.();\n      }\n      return;\n    }\n    if (wrapper.requestFullscreen) {\n      void wrapper.requestFullscreen();\n      return;\n    }\n    if (wrapper.webkitRequestFullscreen) {\n      wrapper.webkitRequestFullscreen();\n      return;\n    }\n    video.webkitEnterFullscreen?.();\n  }, []);\n\n  const togglePiP = React.useCallback(async () => {\n    const video = videoRef.current as PiPVideoElement | null;\n    const pipDocument = document as PiPDocument;\n    if (!video) {\n      return;\n    }\n    try {\n      if (pipDocument.pictureInPictureElement) {\n        await pipDocument.exitPictureInPicture?.();\n        return;\n      }\n      if (\n        pipDocument.pictureInPictureEnabled &&\n        video.requestPictureInPicture\n      ) {\n        await video.requestPictureInPicture();\n        return;\n      }\n      if (video.webkitSetPresentationMode) {\n        const nextMode =\n          video.webkitPresentationMode === 'picture-in-picture'\n            ? 'inline'\n            : 'picture-in-picture';\n        video.webkitSetPresentationMode(nextMode);\n      }\n    } catch {\n      setErrorMessage(labels.error);\n    }\n  }, [labels.error]);\n\n  const applyCaption = React.useCallback((value: string) => {\n    const video = videoRef.current;\n    if (!video?.textTracks) {\n      return;\n    }\n    setSelectedCaption(value);\n    Array.from(video.textTracks).forEach(track => {\n      const shouldShow = value !== 'off' && track.language === value;\n      track.mode = shouldShow ? 'showing' : 'disabled';\n    });\n  }, []);\n\n  const handleSurfacePointerDown: React.PointerEventHandler<HTMLDivElement> =\n    React.useCallback(\n      event => {\n        const target = event.target as HTMLElement | null;\n        if (target?.closest('[data-video-v3-control=\"true\"]')) {\n          return;\n        }\n        const now = event.timeStamp;\n        const x = event.clientX;\n        const y = event.clientY;\n        const prev = lastTapRef.current;\n\n        if (!prev || now - prev.at > DOUBLE_TAP_INTERVAL_MS) {\n          // 첫 번째 탭: 더블탭 대기 후 싱글탭으로 확정되면 play/pause\n          lastTapRef.current = { at: now, x, y };\n          resetControlsTimer();\n          if (singleTapTimerRef.current !== null) {\n            window.clearTimeout(singleTapTimerRef.current);\n          }\n          singleTapTimerRef.current = window.setTimeout(() => {\n            singleTapTimerRef.current = null;\n            lastTapRef.current = null;\n            togglePlayPause();\n          }, DOUBLE_TAP_INTERVAL_MS);\n          return;\n        }\n\n        // 더블탭 확정: 싱글탭 타이머 취소\n        if (singleTapTimerRef.current !== null) {\n          window.clearTimeout(singleTapTimerRef.current);\n          singleTapTimerRef.current = null;\n        }\n\n        const dx = x - prev.x;\n        const dy = y - prev.y;\n        const isNear = dx * dx + dy * dy <= 42 * 42;\n        lastTapRef.current = null;\n        if (!isNear) {\n          return;\n        }\n\n        event.preventDefault();\n        const wrapper = wrapperRef.current;\n        if (!wrapper) {\n          return;\n        }\n        const bounds = wrapper.getBoundingClientRect();\n        const leftLimit = bounds.left + bounds.width * 0.33;\n        const rightLimit = bounds.left + bounds.width * 0.67;\n        if (x <= leftLimit) {\n          seekBy(-DOUBLE_TAP_SEEK_SECONDS);\n          return;\n        }\n        if (x >= rightLimit) {\n          seekBy(DOUBLE_TAP_SEEK_SECONDS);\n          return;\n        }\n        togglePlayPause();\n      },\n      [resetControlsTimer, seekBy, togglePlayPause]\n    );\n\n  React.useEffect(() => {\n    const video = videoRef.current;\n    if (!video) {\n      return;\n    }\n    video.volume = volume;\n    video.muted = isMuted;\n    video.playbackRate = playbackRate;\n  }, [isMuted, playbackRate, volume]);\n\n  React.useEffect(() => {\n    const video = videoRef.current;\n    if (!video) {\n      return;\n    }\n\n    const onLoadedMetadata = () => {\n      isMediaReloadingRef.current = false;\n      setIsReady(true);\n      setDuration(Number.isFinite(video.duration) ? video.duration : 0);\n      if (rememberPositionKey) {\n        const saved = Number(window.localStorage.getItem(rememberPositionKey));\n        if (Number.isFinite(saved) && saved > 0 && saved < video.duration - 1) {\n          video.currentTime = saved;\n          setCurrentTime(saved);\n        }\n      }\n      const defaultTrack = textTrackRef.current?.find(track => track.default);\n      if (defaultTrack) {\n        applyCaption(defaultTrack.lang);\n      }\n    };\n\n    const onTimeUpdate = () => {\n      const time = video.currentTime || 0;\n      // 타임라인 드래그 중에는 timeupdate가 currentTime을 덮어쓰지 않도록 방지\n      if (!isDraggingTimelineRef.current) {\n        setCurrentTime(time);\n      }\n      if (rememberPositionKey) {\n        const shouldSkipRememberWrite =\n          isDraggingTimelineRef.current ||\n          isSeekingRef.current ||\n          isMediaReloadingRef.current ||\n          !Number.isFinite(time) ||\n          time < 0.25;\n        if (!shouldSkipRememberWrite) {\n          window.localStorage.setItem(rememberPositionKey, `${time}`);\n        }\n      }\n    };\n\n    const onSeeking = () => {\n      isSeekingRef.current = true;\n    };\n\n    const onSeeked = () => {\n      isSeekingRef.current = false;\n    };\n\n    const onLoadStart = () => {\n      isMediaReloadingRef.current = true;\n    };\n\n    const onEmptied = () => {\n      isMediaReloadingRef.current = true;\n    };\n\n    const onPlay = () => {\n      setIsPlaying(true);\n      setIsBuffering(false);\n      resetControlsTimer();\n    };\n\n    const onPause = () => {\n      setIsPlaying(false);\n      setShowControls(true);\n    };\n\n    const onWaiting = () => {\n      setIsBuffering(true);\n    };\n\n    const onPlaying = () => {\n      isMediaReloadingRef.current = false;\n      setIsBuffering(false);\n    };\n\n    const onError = () => {\n      setErrorMessage(labels.error);\n    };\n\n    video.addEventListener('loadedmetadata', onLoadedMetadata);\n    video.addEventListener('loadstart', onLoadStart);\n    video.addEventListener('emptied', onEmptied);\n    video.addEventListener('seeking', onSeeking);\n    video.addEventListener('seeked', onSeeked);\n    video.addEventListener('timeupdate', onTimeUpdate);\n    video.addEventListener('play', onPlay);\n    video.addEventListener('pause', onPause);\n    video.addEventListener('ended', onPause);\n    video.addEventListener('waiting', onWaiting);\n    video.addEventListener('stalled', onWaiting);\n    video.addEventListener('playing', onPlaying);\n    video.addEventListener('canplay', onPlaying);\n    video.addEventListener('error', onError);\n\n    return () => {\n      video.removeEventListener('loadedmetadata', onLoadedMetadata);\n      video.removeEventListener('loadstart', onLoadStart);\n      video.removeEventListener('emptied', onEmptied);\n      video.removeEventListener('seeking', onSeeking);\n      video.removeEventListener('seeked', onSeeked);\n      video.removeEventListener('timeupdate', onTimeUpdate);\n      video.removeEventListener('play', onPlay);\n      video.removeEventListener('pause', onPause);\n      video.removeEventListener('ended', onPause);\n      video.removeEventListener('waiting', onWaiting);\n      video.removeEventListener('stalled', onWaiting);\n      video.removeEventListener('playing', onPlaying);\n      video.removeEventListener('canplay', onPlaying);\n      video.removeEventListener('error', onError);\n    };\n  }, [applyCaption, labels.error, rememberPositionKey, resetControlsTimer]);\n\n  React.useEffect(() => {\n    const fsDocument = document as FullscreenDocument;\n    const onFullscreenChange = () => {\n      const activeElement =\n        document.fullscreenElement ?? fsDocument.webkitFullscreenElement;\n      setIsFullscreen(Boolean(activeElement));\n    };\n    document.addEventListener('fullscreenchange', onFullscreenChange);\n    document.addEventListener(\n      'webkitfullscreenchange',\n      onFullscreenChange as EventListener\n    );\n\n    return () => {\n      document.removeEventListener('fullscreenchange', onFullscreenChange);\n      document.removeEventListener(\n        'webkitfullscreenchange',\n        onFullscreenChange as EventListener\n      );\n    };\n  }, []);\n\n  React.useEffect(() => {\n    return () => {\n      if (hideControlsTimerRef.current !== null) {\n        window.clearTimeout(hideControlsTimerRef.current);\n      }\n      if (feedbackTimeoutRef.current !== null) {\n        window.clearTimeout(feedbackTimeoutRef.current);\n      }\n      if (singleTapTimerRef.current !== null) {\n        window.clearTimeout(singleTapTimerRef.current);\n      }\n    };\n  }, []);\n\n  const handleHotkey = React.useCallback(\n    (event: {\n      key: string;\n      code?: string;\n      metaKey?: boolean;\n      ctrlKey?: boolean;\n      altKey?: boolean;\n      preventDefault: () => void;\n      stopPropagation?: () => void;\n      stopImmediatePropagation?: () => void;\n    }) => {\n      if (event.metaKey || event.ctrlKey || event.altKey) {\n        return false;\n      }\n\n      const stopEvent = () => {\n        event.preventDefault();\n        event.stopPropagation?.();\n        event.stopImmediatePropagation?.();\n      };\n\n      const key = event.key.toLowerCase();\n      const code = event.code?.toLowerCase();\n      switch (key) {\n        case ' ':\n        case 'k':\n          stopEvent();\n          togglePlayPause();\n          return true;\n        case 'arrowleft':\n          stopEvent();\n          seekBy(-5, false);\n          return true;\n        case 'arrowright':\n          stopEvent();\n          seekBy(5, false);\n          return true;\n        case 'm':\n          stopEvent();\n          setIsMuted(prev => !prev);\n          return true;\n        case 'f':\n          stopEvent();\n          toggleFullscreen();\n          return true;\n        case 'c':\n          stopEvent();\n          applyCaption(\n            selectedCaption === 'off' ? (textTrack?.[0]?.lang ?? 'off') : 'off'\n          );\n          return true;\n        default:\n          break;\n      }\n\n      // 한/영 입력 상태와 무관하게 물리 키 기준으로 처리\n      switch (code) {\n        case 'keyk':\n          stopEvent();\n          togglePlayPause();\n          return true;\n        case 'keym':\n          stopEvent();\n          setIsMuted(prev => !prev);\n          return true;\n        case 'keyf':\n          stopEvent();\n          toggleFullscreen();\n          return true;\n        case 'keyc':\n          stopEvent();\n          applyCaption(\n            selectedCaption === 'off' ? (textTrack?.[0]?.lang ?? 'off') : 'off'\n          );\n          return true;\n        default:\n          return false;\n      }\n    },\n    [\n      applyCaption,\n      seekBy,\n      selectedCaption,\n      textTrack,\n      toggleFullscreen,\n      togglePlayPause,\n    ]\n  );\n\n  const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = event => {\n    handleHotkey(event);\n  };\n\n  React.useEffect(() => {\n    const onWindowKeyDown = (event: KeyboardEvent) => {\n      if (!isHotkeyActive) {\n        return;\n      }\n      const target = event.target as HTMLElement | null;\n      const isTypingTarget =\n        target instanceof HTMLInputElement ||\n        target instanceof HTMLTextAreaElement ||\n        target instanceof HTMLSelectElement ||\n        Boolean(target?.isContentEditable);\n      if (isTypingTarget) {\n        return;\n      }\n      const handled = handleHotkey(event);\n      if (!handled) {\n        return;\n      }\n    };\n\n    window.addEventListener('keydown', onWindowKeyDown, { capture: true });\n    return () => {\n      window.removeEventListener('keydown', onWindowKeyDown, { capture: true });\n    };\n  }, [handleHotkey, isHotkeyActive]);\n\n  React.useEffect(() => {\n    const onDocumentMouseDown = (event: MouseEvent) => {\n      const wrapper = wrapperRef.current;\n      const target = event.target as Node | null;\n      if (!wrapper || !target) {\n        return;\n      }\n      if (!wrapper.contains(target)) {\n        setIsHotkeyActive(false);\n      }\n    };\n    document.addEventListener('mousedown', onDocumentMouseDown);\n    return () => {\n      document.removeEventListener('mousedown', onDocumentMouseDown);\n    };\n  }, []);\n\n  const captionOptions = textTrack ?? [];\n  const rootClassName = ['elice-video-v3', className].filter(Boolean).join(' ');\n  const rootStyle: React.CSSProperties = {\n    ...style,\n    '--v3-primary': customColor?.primary ?? primaryColor ?? '#55d8ff',\n    '--v3-primary-strong': customColor?.primary ?? primaryColor ?? '#14bde8',\n    '--v3-bg': customColor?.background ?? '#07080a',\n    '--v3-fg': customColor?.text ?? '#f7f9ff',\n    '--v3-muted': customColor?.mutedText ?? '#b9c2d9',\n    '--v3-control-bg':\n      customColor?.controlBackground ?? 'rgba(12, 14, 20, 0.72)',\n    '--v3-border': customColor?.border ?? 'rgba(255, 255, 255, 0.24)',\n    '--v3-danger': customColor?.error ?? '#ff6b6b',\n    '--v3-focus':\n      customColor?.focus ?? customColor?.primary ?? primaryColor ?? '#55d8ff',\n  } as React.CSSProperties;\n\n  return (\n    <div\n      ref={wrapperRef}\n      className={rootClassName}\n      style={rootStyle}\n      onPointerMove={resetControlsTimer}\n      onPointerDown={() => {\n        setIsHotkeyActive(true);\n        wrapperRef.current?.focus();\n      }}\n      onMouseEnter={() => setIsHotkeyActive(true)}\n      onFocus={() => setIsHotkeyActive(true)}\n      onBlur={() => setIsHotkeyActive(false)}\n      onKeyDown={handleKeyDown}\n      tabIndex={0}\n      aria-label={labels.player}\n    >\n      <style>{styles}</style>\n      <video\n        ref={videoRef}\n        poster={poster}\n        autoPlay={autoPlay}\n        loop={loop}\n        playsInline\n        muted={isMuted}\n        preload={preload}\n        controls={false}\n      >\n        {source.map(srcInfo => (\n          <source key={srcInfo.src} src={srcInfo.src} type={srcInfo.type} />\n        ))}\n        {captionOptions.map(track => (\n          <track\n            key={track.src}\n            src={track.src}\n            kind=\"captions\"\n            srcLang={track.lang}\n            label={track.label}\n            default={track.default}\n          />\n        ))}\n      </video>\n\n      <div className=\"elice-video-v3__top\" />\n      <div className=\"elice-video-v3__top-actions\">\n        {captionOptions.length > 0 ? (\n          <select\n            data-video-v3-control=\"true\"\n            className=\"elice-video-v3__select\"\n            value={selectedCaption}\n            onChange={event => {\n              applyCaption(event.target.value);\n            }}\n            aria-label={labels.captions}\n            title={labels.captions}\n          >\n            <option value=\"off\">{labels.captionsOff}</option>\n            {captionOptions.map(track => (\n              <option key={track.src} value={track.lang}>\n                {track.label ?? track.lang}\n              </option>\n            ))}\n          </select>\n        ) : null}\n        <select\n          data-video-v3-control=\"true\"\n          className=\"elice-video-v3__select\"\n          value={String(playbackRate)}\n          onChange={event => {\n            setPlaybackRate(Number(event.target.value));\n          }}\n          aria-label={labels.speed}\n          title={labels.speed}\n        >\n          {playbackRates.map(rate => (\n            <option key={rate} value={String(rate)}>\n              {rate}x\n            </option>\n          ))}\n        </select>\n      </div>\n      <div\n        className=\"elice-video-v3__surface\"\n        onPointerDown={handleSurfacePointerDown}\n      >\n        <div className=\"elice-video-v3__gesture-hit elice-video-v3__gesture-hit--left\" />\n        <div className=\"elice-video-v3__gesture-hit elice-video-v3__gesture-hit--center\" />\n        <div className=\"elice-video-v3__gesture-hit elice-video-v3__gesture-hit--right\" />\n      </div>\n\n      {!isReady || isBuffering ? (\n        <div className=\"elice-video-v3__loader\" aria-label={labels.loading} />\n      ) : null}\n\n      {errorMessage ? (\n        <div className=\"elice-video-v3__error\">{errorMessage}</div>\n      ) : null}\n      {feedbackText ? (\n        <div className=\"elice-video-v3__feedback\">{feedbackText}</div>\n      ) : null}\n      {!isPlaying ? (\n        <button\n          data-video-v3-control=\"true\"\n          className=\"elice-video-v3__center-play\"\n          type=\"button\"\n          onClick={togglePlayPause}\n          aria-label={labels.play}\n          title={labels.play}\n        >\n          <IconPlay />\n        </button>\n      ) : null}\n\n      <div\n        className=\"elice-video-v3__controls\"\n        data-hidden={showControls ? 'false' : 'true'}\n      >\n        <div\n          className=\"elice-video-v3__timeline-wrap\"\n          data-video-v3-control=\"true\"\n        >\n          <input\n            data-video-v3-control=\"true\"\n            className=\"elice-video-v3__timeline\"\n            type=\"range\"\n            min={0}\n            max={Number.isFinite(duration) && duration > 0 ? duration : 0}\n            step={0.1}\n            value={Math.min(\n              currentTime,\n              Number.isFinite(duration) ? duration : currentTime\n            )}\n            onPointerDown={() => {\n              isDraggingTimelineRef.current = true;\n            }}\n            onPointerUp={() => {\n              isDraggingTimelineRef.current = false;\n            }}\n            onChange={event => {\n              const next = Number(event.target.value);\n              if (!Number.isFinite(next)) {\n                return;\n              }\n              setCurrentTime(next);\n              if (videoRef.current) {\n                videoRef.current.currentTime = next;\n              }\n            }}\n            aria-label={labels.seek}\n          />\n        </div>\n\n        <div className=\"elice-video-v3__row\">\n          <div className=\"elice-video-v3__group\">\n            <button\n              data-video-v3-control=\"true\"\n              className=\"elice-video-v3__btn\"\n              type=\"button\"\n              onClick={togglePlayPause}\n              aria-label={isPlaying ? labels.pause : labels.play}\n              title={isPlaying ? labels.pause : labels.play}\n            >\n              {isPlaying ? <IconPause /> : <IconPlay />}\n            </button>\n\n            <button\n              data-video-v3-control=\"true\"\n              className=\"elice-video-v3__btn\"\n              type=\"button\"\n              onClick={() => {\n                setIsMuted(prev => !prev);\n              }}\n              aria-label={isMuted ? labels.unmute : labels.mute}\n              title={isMuted ? labels.unmute : labels.mute}\n            >\n              {isMuted ? <IconVolumeOff /> : <IconVolumeOn />}\n            </button>\n\n            <input\n              data-video-v3-control=\"true\"\n              className=\"elice-video-v3__volume elice-video-v3__hide-mobile\"\n              type=\"range\"\n              min={0}\n              max={1}\n              step={0.01}\n              value={isMuted ? 0 : volume}\n              onChange={event => {\n                const next = Number(event.target.value);\n                setVolume(next);\n                setIsMuted(next <= 0);\n              }}\n              aria-label=\"Volume\"\n            />\n\n            <div className=\"elice-video-v3__time elice-video-v3__hide-mobile\">\n              {formatTime(currentTime)} / {formatTime(duration)}\n            </div>\n          </div>\n\n          <div className=\"elice-video-v3__group elice-video-v3__group--right\">\n            {captionOptions.length > 0 ? (\n              <select\n                data-video-v3-control=\"true\"\n                className=\"elice-video-v3__select elice-video-v3__bottom-hide-small\"\n                value={selectedCaption}\n                onChange={event => {\n                  applyCaption(event.target.value);\n                }}\n                aria-label={labels.captions}\n                title={labels.captions}\n              >\n                <option value=\"off\">{labels.captionsOff}</option>\n                {captionOptions.map(track => (\n                  <option key={track.src} value={track.lang}>\n                    {track.label ?? track.lang}\n                  </option>\n                ))}\n              </select>\n            ) : null}\n\n            <select\n              data-video-v3-control=\"true\"\n              className=\"elice-video-v3__select elice-video-v3__bottom-hide-small\"\n              value={String(playbackRate)}\n              onChange={event => {\n                setPlaybackRate(Number(event.target.value));\n              }}\n              aria-label={labels.speed}\n              title={labels.speed}\n            >\n              {playbackRates.map(rate => (\n                <option key={rate} value={String(rate)}>\n                  {rate}x\n                </option>\n              ))}\n            </select>\n\n            <button\n              data-video-v3-control=\"true\"\n              className=\"elice-video-v3__btn\"\n              type=\"button\"\n              onClick={() => {\n                void togglePiP();\n              }}\n              title={labels.pip}\n              aria-label={labels.pip}\n            >\n              <IconPiP />\n            </button>\n\n            <button\n              data-video-v3-control=\"true\"\n              className=\"elice-video-v3__btn\"\n              type=\"button\"\n              onClick={toggleFullscreen}\n              title={isFullscreen ? labels.exitFullscreen : labels.fullscreen}\n              aria-label={\n                isFullscreen ? labels.exitFullscreen : labels.fullscreen\n              }\n            >\n              {isFullscreen ? <IconFullscreenExit /> : <IconFullscreen />}\n            </button>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n","import React, { useState } from 'react';\nimport { EliceButton } from '@elicecontents/content-ui';\nimport {\n  EliceAudioPlayer,\n  ReadyRecord,\n  Recording,\n} from '@elicecontents/content-ui';\nimport { Button, Stack, styled, Typography } from '@mui/material';\n\nimport { SoundVisualizer } from '../sound-visualizer';\nimport {\n  useInitRecorder,\n  useRecorderAction,\n  useRecorderInnerState,\n  RecorderProvider,\n} from './recorderStore';\n\nimport type { SoundVisualizerVariant } from '@elicecontents/content-ui';\nimport type { SxProps } from '@mui/material';\nimport type { AudioStep } from './recorderStore';\n\nexport type RecorderStep = 'ready' | 'recording' | 'pause' | 'waiting';\nexport type RecorderType = 'pause' | 'waiting' | 'unsubmit' | null;\n\nexport interface EliceRecorderStepProps {\n  onAudioReady: (file: File) => void;\n  onTransform?: () => void;\n  type?: RecorderType[];\n  visualType?: SoundVisualizerVariant;\n  isReadyVisual?: boolean;\n  onRecord?: () => void;\n  onResume?: () => void;\n  onPause?: () => void;\n  defaultBarColor?: string;\n  closeRecorder?: () => void;\n  onTranscribingChange?: (value: boolean) => void;\n  isLoadingMessage?: boolean;\n  forcedStep?: RecorderStep;\n  sx?: SxProps;\n  onRecordStep?: (step: AudioStep) => void;\n  initFile?: File;\n  disabled?: boolean;\n}\n\nexport const EliceRecorderBlock = ({\n  onAudioReady,\n  onTransform,\n  visualType = 'bar',\n  onRecord,\n  type = [],\n  isReadyVisual = false,\n  onResume,\n  onPause,\n  onTranscribingChange,\n  forcedStep,\n  closeRecorder,\n  defaultBarColor,\n  sx,\n  onRecordStep,\n  initFile,\n  disabled = false,\n}: EliceRecorderStepProps) => {\n  useInitRecorder({\n    step: forcedStep ?? 'ready',\n    isRecording: false,\n    file: initFile ?? null,\n  });\n  const { startRecording, stopRecording, pauseRecording, resumeRecording } =\n    useRecorderAction();\n  const recorderState = useRecorderInnerState();\n  const [audioUrl, setAudioUrl] = useState<string>('');\n  const currentStep = recorderState.step;\n\n  const handleStart = async () => {\n    onTranscribingChange?.(true);\n    onRecord?.();\n\n    await startRecording(file => {\n      onAudioReady(file);\n      const url = URL.createObjectURL(file);\n      setAudioUrl(url);\n    });\n  };\n\n  const firstTimeInit = React.useRef(false);\n\n  React.useEffect(() => {\n    if (initFile) {\n      const url = URL.createObjectURL(initFile);\n      setAudioUrl(url);\n      firstTimeInit.current = true;\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [initFile]);\n\n  const handlePause = () => {\n    onPause?.();\n    pauseRecording();\n  };\n\n  const handleResume = () => {\n    onResume?.();\n    resumeRecording();\n  };\n\n  const handleStop = () => {\n    stopRecording(false);\n    onTranscribingChange?.(false);\n  };\n\n  const handleSubmit = () => {\n    onTransform?.();\n    closeRecorder?.();\n  };\n\n  const handleOnlySubmit = () => {\n    stopRecording(true);\n    onTranscribingChange?.(false);\n    onTransform?.();\n    closeRecorder?.();\n  };\n\n  React.useEffect(() => {\n    onRecordStep?.(currentStep);\n  }, [currentStep, onRecordStep]);\n\n  return (\n    <StyledVisualizerBox sx={sx}>\n      {currentStep === 'ready' && (\n        <>\n          {!isReadyVisual && (\n            <SoundVisualizer\n              analyser={recorderState.analyzer}\n              variant={visualType}\n              bgColor=\"transparent\"\n              defaultBarColor={defaultBarColor}\n            />\n          )}\n          <StyledRecorderButton onClick={handleStart} step={currentStep}>\n            <ReadyRecord />\n            <Typography variant=\"subtitle2\">녹음 시작</Typography>\n          </StyledRecorderButton>\n        </>\n      )}\n      {currentStep === 'recording' && (\n        <>\n          <SoundVisualizer\n            analyser={recorderState.analyzer}\n            variant={visualType}\n            defaultBarColor={defaultBarColor}\n            bgColor=\"transparent\"\n          />\n          <StyledVisualizerBoxButtonContainer>\n            {type.includes('pause') && (\n              <StyledPauseButton onClick={handlePause}>\n                <Recording color=\"#485EAD\" squareColor=\"#0A379B\" />\n                <Typography variant=\"subtitle2\">일시 정지</Typography>\n              </StyledPauseButton>\n            )}\n            <StyledRecorderButton\n              onClick={type.length !== 0 ? handleStop : handleOnlySubmit}\n              step={currentStep}\n            >\n              <Recording />\n              <Typography variant=\"subtitle2\">녹음 완료</Typography>\n            </StyledRecorderButton>\n          </StyledVisualizerBoxButtonContainer>\n        </>\n      )}\n      {currentStep === 'pause' && (\n        <>\n          <SoundVisualizer\n            analyser={null}\n            variant={visualType}\n            bgColor=\"transparent\"\n          />\n          <StyledVisualizerBoxButtonContainer>\n            {type.includes('pause') && (\n              <StyledPauseButton onClick={handleResume}>\n                <Recording color=\"#485EAD\" squareColor=\"#0A379B\" />\n                <Typography variant=\"subtitle2\">이어서 녹음</Typography>\n              </StyledPauseButton>\n            )}\n            <StyledRecorderButton onClick={handleStop} step={currentStep}>\n              <Recording />\n              <Typography variant=\"subtitle2\">녹음 완료</Typography>\n            </StyledRecorderButton>\n          </StyledVisualizerBoxButtonContainer>\n        </>\n      )}\n      {currentStep === 'waiting' && type.includes('waiting') && (\n        <>\n          {audioUrl && <EliceAudioPlayer src={audioUrl} />}\n          <StyledVisualizerBoxButtonContainer>\n            <StyledRecorderButton\n              disabled={disabled}\n              onClick={handleStart}\n              step={currentStep}\n            >\n              <ReadyRecord />\n              <Typography variant=\"subtitle2\">다시 녹음</Typography>\n            </StyledRecorderButton>\n            {!type.includes('unsubmit') && (\n              <EliceButton disabled={disabled} onClick={handleSubmit}>\n                <Typography variant=\"subtitle2\">완료</Typography>\n              </EliceButton>\n            )}\n          </StyledVisualizerBoxButtonContainer>\n        </>\n      )}\n    </StyledVisualizerBox>\n  );\n};\n\nconst StyledVisualizerBox = styled(Stack)`\n  width: 100%;\n  font-size: 20px;\n  height: 10.6em;\n  background-color: #fff;\n  border-radius: 1.2em;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  gap: 1.6em;\n`;\n\nconst StyledVisualizerBoxButtonContainer = styled(Stack)`\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  gap: 1.7em;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst StyledRecorderButtonDefault = styled(Button)`\n  display: flex;\n  width: 16em;\n  border: none;\n  height: 2.75em;\n  padding: 0.6em 1em 0.6em 0.85em;\n  justify-content: center;\n  align-items: center;\n  gap: 0.4em;\n  cursor: pointer;\n  flex-shrink: 0;\n  border-radius: 0.8em;\n`;\n\nconst StyledRecorderButton = styled(StyledRecorderButtonDefault) <{\n  step: RecorderStep;\n}>`\n  color: ${({ step }) =>\n    step === 'ready' || step === 'waiting' ? '#fff' : '#FF5D58'};\n  background: ${({ step }) =>\n    step === 'ready' || step === 'waiting' ? '#FF5D58' : '#FBE0E0'};\n\n  &:hover {\n    background: #FFB1AF !important;\n    color: #FF5D58 !important;\n  }\n`;\n\nconst StyledPauseButton = styled(StyledRecorderButtonDefault)`\n  color: #0a379b;\n  background: #bec4e1;\n  &:hover {\n    color: #bec4e1;\n    background-color: #0a379b;\n  }\n`;\n\n// EliceRecorder는 내부적으로 RecorderProvider를 제공\nexport const EliceRecorder = (props: EliceRecorderStepProps) => {\n  return (\n    <RecorderProvider>\n      <EliceRecorderBlock {...props} />\n    </RecorderProvider>\n  );\n};\n","import React, { createContext, useContext, useReducer, useCallback, ReactNode } from 'react';\n\nexport type AudioStep = 'ready' | 'recording' | 'pause' | 'waiting';\nexport type StepFlowType =\n  | 'basic'\n  | 'pauseable'\n  | 'oneClick'\n  | 'recordOnly'\n  | 'instantRecord';\n\ninterface RecorderState {\n  step: AudioStep;\n  recorder: MediaRecorder | null;\n  analyzer: AnalyserNode | null;\n  isRecording: boolean;\n  file: File | null;\n  audioUrl: string;\n}\n\nexport interface RecorderInitState {\n  step: AudioStep;\n  isRecording: boolean;\n  file: File | null;\n}\n\ntype RecorderAction =\n  | { type: 'SET_STEP'; payload: AudioStep }\n  | { type: 'SET_RECORDER'; payload: MediaRecorder | null }\n  | { type: 'SET_ANALYZER'; payload: AnalyserNode | null }\n  | { type: 'SET_IS_RECORDING'; payload: boolean }\n  | { type: 'SET_FILE'; payload: File | null }\n  | { type: 'SET_AUDIO_URL'; payload: string }\n  | { type: 'INIT_STATE'; payload: RecorderInitState };\n\nconst initialState: RecorderState = {\n  step: 'ready',\n  recorder: null,\n  analyzer: null,\n  isRecording: false,\n  file: null,\n  audioUrl: '',\n};\n\nfunction recorderReducer(state: RecorderState, action: RecorderAction): RecorderState {\n  switch (action.type) {\n    case 'SET_STEP':\n      return { ...state, step: action.payload };\n    case 'SET_RECORDER':\n      return { ...state, recorder: action.payload };\n    case 'SET_ANALYZER':\n      return { ...state, analyzer: action.payload };\n    case 'SET_IS_RECORDING':\n      return { ...state, isRecording: action.payload };\n    case 'SET_FILE':\n      return { ...state, file: action.payload };\n    case 'SET_AUDIO_URL':\n      return { ...state, audioUrl: action.payload };\n    case 'INIT_STATE':\n      return { ...state, ...action.payload };\n    default:\n      return state;\n  }\n}\n\ninterface RecorderContextType {\n  state: RecorderState;\n  startRecording: (onComplete?: (file: File) => void) => Promise<void>;\n  stopRecording: (isSubmit: boolean) => void;\n  pauseRecording: () => void;\n  resumeRecording: () => void;\n  initRecordingState: (state: RecorderInitState) => void;\n}\n\nconst RecorderContext = createContext<RecorderContextType | undefined>(undefined);\n\ninterface RecorderProviderProps {\n  children: ReactNode;\n}\n\nexport const RecorderProvider = ({ children }: RecorderProviderProps) => {\n  const [state, dispatch] = useReducer(recorderReducer, initialState);\n\n  const startRecording = useCallback(async (onComplete?: (file: File) => void) => {\n    try {\n      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n      const audioChunks: Blob[] = [];\n\n      const recorder = new MediaRecorder(stream);\n\n      recorder.addEventListener('dataavailable', event => {\n        if (event.data.size > 0) {\n          audioChunks.push(event.data);\n        }\n      });\n\n      recorder.addEventListener('stop', () => {\n        const blob = new Blob(audioChunks, { type: 'audio/wav' });\n        const file = new File([blob], `recording-${Date.now()}.wav`, {\n          type: 'audio/wav',\n        });\n        const url = URL.createObjectURL(file);\n        dispatch({ type: 'SET_FILE', payload: file });\n        dispatch({ type: 'SET_AUDIO_URL', payload: url });\n\n        onComplete?.(file);\n      });\n\n      // AudioContext 연결\n      const audioContext = new AudioContext();\n      const analyzer = audioContext.createAnalyser();\n      const source = audioContext.createMediaStreamSource(stream);\n      source.connect(analyzer);\n      analyzer.fftSize = 256;\n\n      dispatch({ type: 'SET_ANALYZER', payload: analyzer });\n      dispatch({ type: 'SET_RECORDER', payload: recorder });\n\n      recorder.addEventListener('start', () => {\n        dispatch({ type: 'SET_STEP', payload: 'recording' });\n      });\n\n      recorder.start();\n    } catch (error) {\n      console.error('🎤 마이크 권한 오류:', error);\n    }\n  }, []);\n\n  const stopRecording = useCallback((isSubmit: boolean) => {\n    const { recorder, analyzer } = state;\n    recorder?.stop();\n    recorder?.stream.getTracks().forEach(track => track.stop());\n    if (analyzer?.context.state !== 'closed') {\n      (analyzer?.context as AudioContext)\n        ?.close()\n        .catch(e => console.warn('AudioContext already closed', e));\n    }\n    if (isSubmit) {\n      dispatch({ type: 'SET_STEP', payload: 'ready' });\n    } else {\n      dispatch({ type: 'SET_STEP', payload: 'waiting' });\n    }\n  }, [state]);\n\n  const pauseRecording = useCallback(() => {\n    const { recorder } = state;\n    recorder?.pause();\n    dispatch({ type: 'SET_STEP', payload: 'pause' });\n  }, [state]);\n\n  const resumeRecording = useCallback(() => {\n    const { recorder } = state;\n    if (recorder?.state === 'paused') {\n      recorder?.resume();\n      dispatch({ type: 'SET_STEP', payload: 'recording' });\n    }\n  }, [state]);\n\n  const initRecordingState = useCallback((initState: RecorderInitState) => {\n    dispatch({ type: 'INIT_STATE', payload: initState });\n  }, []);\n\n  const value: RecorderContextType = {\n    state,\n    startRecording,\n    stopRecording,\n    pauseRecording,\n    resumeRecording,\n    initRecordingState,\n  };\n\n  return (\n    <RecorderContext.Provider value={value}>\n      {children}\n    </RecorderContext.Provider>\n  );\n};\n\nexport const useRecorderInnerState = () => {\n  const context = useContext(RecorderContext);\n  if (context === undefined) {\n    throw new Error('useRecorderInnerState must be used within a RecorderProvider');\n  }\n  return {\n    step: context.state.step,\n    isRecording: context.state.isRecording,\n    analyzer: context.state.analyzer,\n  };\n};\n\nexport const useRecorderAction = () => {\n  const context = useContext(RecorderContext);\n  if (context === undefined) {\n    throw new Error('useRecorderAction must be used within a RecorderProvider');\n  }\n  return {\n    startRecording: context.startRecording,\n    stopRecording: context.stopRecording,\n    pauseRecording: context.pauseRecording,\n    resumeRecording: context.resumeRecording,\n  };\n};\n\nexport const useInitRecorder = (props: RecorderInitState) => {\n  const context = useContext(RecorderContext);\n  if (context === undefined) {\n    throw new Error('useInitRecorder must be used within a RecorderProvider');\n  }\n\n  const firstRender = React.useRef(false);\n  if (!firstRender.current) {\n    firstRender.current = true;\n    context.initRecordingState(props);\n  }\n};\n","import React, { useRef, useState, useEffect } from 'react';\nimport { LinearProgress, Stack } from '@mui/material';\nimport styled from '@emotion/styled';\nimport PauseIcon from './Pause';\nimport PlayIcon from './Play';\n\nexport interface EliceAudioPlayerProps {\n  src: string;\n  mimeType?: string;\n  onFileLoaded?: (file: File) => void;\n}\n\nconst PlayerButton = styled.button`\n  display: flex;\n  background-color: transparent !important;\n  border: none;\n`;\n\nconst AudioProgress = styled(LinearProgress)({\n  width: '200px',\n});\n\nconst getAccurateDuration = async (src: string): Promise<number | null> => {\n  try {\n    const response = await fetch(src);\n    const arrayBuffer = await response.arrayBuffer();\n    const audioCtx = new AudioContext();\n    const audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);\n    return audioBuffer.duration;\n  } catch (err) {\n    console.error('🎧 decodeAudioData 실패:', err);\n    return null;\n  }\n};\n\nconst EliceAudioPlayer = ({\n  src,\n  mimeType = 'audio/mp3',\n  onFileLoaded,\n}: EliceAudioPlayerProps) => {\n  const audioRef = useRef<HTMLAudioElement>(null);\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [progress, setProgress] = useState(0);\n  const [isReady, setIsReady] = useState(false);\n  const [duration, setDuration] = useState(0);\n\n  useEffect(() => {\n    const fetchAndDecode = async () => {\n      try {\n        const response = await fetch(src);\n        const blob = await response.blob();\n        const filename = src.split('/').pop() || 'audio.mp3';\n        const file = new File([blob], filename, { type: blob.type || mimeType });\n\n        onFileLoaded?.(file);\n\n        const duration = await getAccurateDuration(src);\n        if (duration && isFinite(duration)) {\n          setDuration(duration)\n          setIsReady(true);\n        }\n      } catch (err) {\n        console.error('❌ Fetch or decode 실패:', err);\n      }\n    };\n\n    if (src) fetchAndDecode();\n  }, [src, mimeType, onFileLoaded]);\n\n  const togglePlay = () => {\n    const audio = audioRef.current;\n    if (!audio) return;\n    isPlaying ? audio.pause() : audio.play();\n  };\n\n  useEffect(() => {\n    const audio = audioRef.current;\n    if (!audio) return;\n\n    const updateProgress = () => {\n      if (duration > 0) {\n        const percent = (audio.currentTime / duration) * 100;\n        setProgress(percent);\n      }\n    };\n\n    const handlePlay = () => setIsPlaying(true);\n    const handlePause = () => setIsPlaying(false);\n    const handleEnded = () => {\n      setProgress(100);\n      setTimeout(() => {\n        setProgress(0);\n        setIsPlaying(false);\n      }, 300);\n    };\n\n    audio.addEventListener('timeupdate', updateProgress);\n    audio.addEventListener('play', handlePlay);\n    audio.addEventListener('pause', handlePause);\n    audio.addEventListener('ended', handleEnded);\n\n    return () => {\n      audio.removeEventListener('timeupdate', updateProgress);\n      audio.removeEventListener('play', handlePlay);\n      audio.removeEventListener('pause', handlePause);\n      audio.removeEventListener('ended', handleEnded);\n    };\n  }, [duration]);\n\n  return (\n    <Stack spacing={1} alignItems=\"center\" direction=\"row\">\n      <audio ref={audioRef} src={src} preload=\"metadata\" />\n      <PlayerButton onClick={togglePlay}>\n        {isPlaying ? <PauseIcon /> : <PlayIcon />}\n      </PlayerButton>\n      <AudioProgress\n        variant={isReady ? 'determinate' : 'indeterminate'}\n        value={progress}\n      />\n    </Stack>\n  );\n};\n\nexport default EliceAudioPlayer;\n","import { useTheme } from '@mui/material';\nimport styled from '@emotion/styled';\n\nconst IconWrapper = styled.button<{ pressColor: string; }>`\n  padding: 0;\n  border: none;\n  background: transparent;\n  cursor: pointer;\n\n  &:active svg rect {\n    fill: #7c85b8; // 눌렀을 때 바뀌는 배경색\n  }\n\n  &:active svg path {\n    fill: #f0f0f0; // 눌렀을 때 아이콘 색\n  }\n`;\n\nconst PauseIcon = ({ width = 40, height = 40 }: { width?: number; height?: number }) => {\n  const theme = useTheme();\n  return (\n    <IconWrapper pressColor={theme.palette.secondary.main}>\n      <svg\n        width={width}\n        height={height}\n        viewBox=\"0 0 54 54\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <g filter=\"url(#filter0_i_593_3904)\">\n          <rect width=\"54\" height=\"54\" rx=\"16\" fill={theme.palette.primary.main} />\n        </g>\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M20 17.75H22C23.2426 17.75 24.25 18.7574 24.25 20V34C24.25 35.2426 23.2426 36.25 22 36.25H20C18.7574 36.25 17.75 35.2426 17.75 34V20C17.75 18.7574 18.7574 17.75 20 17.75ZM16 20C16 17.7909 17.7909 16 20 16H22C24.2091 16 26 17.7909 26 20V34C26 36.2091 24.2091 38 22 38H20C17.7909 38 16 36.2091 16 34V20ZM32 17.75H34C35.2426 17.75 36.25 18.7574 36.25 20V34C36.25 35.2427 35.2426 36.25 34 36.25H32C30.7573 36.25 29.75 35.2427 29.75 34V20C29.75 18.7574 30.7573 17.75 32 17.75ZM28 20C28 17.7909 29.7908 16 32 16H34C36.2091 16 38 17.7909 38 20V34C38 36.2092 36.2091 38 34 38H32C29.7908 38 28 36.2092 28 34V20Z\"\n          fill=\"white\"\n        />\n        <defs>\n          <filter\n            id=\"filter0_i_593_3904\"\n            x=\"0\"\n            y=\"0\"\n            width=\"55\"\n            height=\"55\"\n            filterUnits=\"userSpaceOnUse\"\n            colorInterpolationFilters=\"sRGB\"\n          >\n            <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n            <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\" />\n            <feColorMatrix\n              in=\"SourceAlpha\"\n              type=\"matrix\"\n              values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n              result=\"hardAlpha\"\n            />\n            <feOffset dx=\"1\" dy=\"1\" />\n            <feGaussianBlur stdDeviation=\"3.3\" />\n            <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n            <feColorMatrix\n              type=\"matrix\"\n              values=\"0 0 0 0 0.912047 0 0 0 0 0.912047 0 0 0 0 0.940267 0 0 0 1 0\"\n            />\n            <feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_593_3904\" />\n          </filter>\n        </defs>\n      </svg>\n    </IconWrapper>\n  );\n};\n\nexport default PauseIcon;\n","import { useTheme } from '@mui/material';\nimport styled from '@emotion/styled';\n\nconst IconWrapper = styled.button<{ pressColor: string; }>`\n  padding: 0;\n  border: none;\n  background: transparent;\n  cursor: pointer;\n\n  &:active svg rect {\n    fill: #7c85b8; // 눌렀을 때 바뀌는 배경색\n  }\n\n  &:active svg path {\n    fill: #f0f0f0; // 눌렀을 때 아이콘 색\n  }\n`;\n\nconst PlayIcon = ({ width = 40, height = 40 }: { width?: number; height?: number }) => {\n  const theme = useTheme();\n  return (\n    <IconWrapper pressColor={theme.palette.secondary.main}>\n      <svg\n        width={width}\n        height={height}\n        viewBox=\"0 0 54 54\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <g filter=\"url(#filter0_i_274_7284)\">\n          <rect width=\"54\" height=\"54\" rx=\"16\" fill={theme.palette.primary.main} />\n        </g>\n        <path\n          d=\"M37.1161 29.0649C37.5038 28.8516 37.8228 28.5325 38.0361 28.1448C38.6571 27.0157 38.2452 25.5969 37.1161 24.9759L20.9578 16.0888C20.6133 15.8993 20.2265 15.8 19.8333 15.8C18.5447 15.8 17.5 16.8447 17.5 18.1333V35.9074C17.5 36.3006 17.5994 36.6874 17.7888 37.0319C18.4099 38.161 19.8287 38.5729 20.9578 37.9519L37.1161 29.0649ZM19.5417 17.6317L36.5963 27.0133L19.5417 36.3942V17.6317Z\"\n          fill=\"white\"\n        />\n        <defs>\n          <filter\n            id=\"filter0_i_274_7284\"\n            x=\"0\"\n            y=\"0\"\n            width=\"55\"\n            height=\"55\"\n            filterUnits=\"userSpaceOnUse\"\n            colorInterpolationFilters=\"sRGB\"\n          >\n            <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n            <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\" />\n            <feColorMatrix\n              in=\"SourceAlpha\"\n              type=\"matrix\"\n              values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n              result=\"hardAlpha\"\n            />\n            <feOffset dx=\"1\" dy=\"1\" />\n            <feGaussianBlur stdDeviation=\"3.3\" />\n            <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n            <feColorMatrix\n              type=\"matrix\"\n              values=\"0 0 0 0 0.912047 0 0 0 0 0.912047 0 0 0 0 0.940267 0 0 0 1 0\"\n            />\n            <feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_274_7284\" />\n          </filter>\n        </defs>\n      </svg>\n    </IconWrapper>\n  );\n};\n\nexport default PlayIcon;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Box } from '@mui/material';\nimport { HtmlViewerProvider, useHtmlViewer } from './HtmlViewerContext';\nimport { HtmlViewerToolbar } from './HtmlViewerToolbar';\nimport { HtmlViewerContent } from './HtmlViewerContent';\nimport { HtmlViewerHighlightLayer } from './HtmlViewerHighlightLayer';\nimport { HtmlViewerMemoMenu } from './HtmlViewerMemoMenu';\nimport { useGestureStateMachine } from './hooks/useGestureStateMachine';\nimport type { EliceHtmlViewerProps } from './HtmlViewerTypes';\n\n// ─── Inner component (inside Provider) ───────────────────────────────────────\n\ninterface HtmlViewerInnerProps {\n  content: string;\n  documentId: string;\n  colors?: string[];\n  sx?: EliceHtmlViewerProps['sx'];\n}\n\nconst HtmlViewerInner = ({\n  content,\n  documentId,\n  colors,\n  sx,\n}: HtmlViewerInnerProps) => {\n  const { state, dispatch } = useHtmlViewer();\n  const contentRef = useRef<HTMLDivElement>(null);\n  const surfaceRef = useRef<HTMLDivElement>(null);\n  const [scrollHeight, setScrollHeight] = useState(0);\n\n  const isHighlightMode = useCallback(\n    () => state.mode === 'highlight',\n    [state.mode]\n  );\n\n  const gestureHandlers = useGestureStateMachine({\n    dispatch,\n    isHighlightMode,\n    contentRef,\n    surfaceRef,\n  });\n\n  const handleContentMount = useCallback((node: HTMLDivElement | null) => {\n    (contentRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n  }, []);\n\n  useEffect(() => {\n    const surface = surfaceRef.current;\n    if (!surface) return;\n\n    const recompute = () => {\n      setScrollHeight(surface.scrollHeight);\n    };\n\n    const observer = new ResizeObserver(recompute);\n    observer.observe(surface);\n\n    if (contentRef.current) {\n      observer.observe(contentRef.current);\n    }\n\n    recompute();\n    return () => observer.disconnect();\n  }, [content]);\n\n  // Close menu on click outside highlights/menu\n  const handleViewerClick = useCallback(() => {\n    if (state.menuPosition && !state.pendingRange && !state.activeAnnotationId) {\n      dispatch({ type: 'SET_MENU_POSITION', payload: null });\n    }\n  }, [state.menuPosition, state.pendingRange, state.activeAnnotationId, dispatch]);\n\n  return (\n    <Box\n      sx={[\n        {\n          position: 'relative',\n          display: 'flex',\n          flexDirection: 'column',\n          overflowY: state.mode === 'highlight' ? 'hidden' : 'auto',\n          touchAction: state.mode === 'highlight' ? 'none' : 'pan-y',\n          border: '1px solid',\n          borderColor: 'divider',\n          borderRadius: 1,\n        },\n        ...(Array.isArray(sx) ? sx : [sx]),\n      ]}\n      onClick={handleViewerClick}\n    >\n      <HtmlViewerToolbar />\n\n      <Box\n        ref={surfaceRef}\n        sx={{\n          position: 'relative',\n          flex: 1,\n          p: 2,\n          ...(state.mode === 'highlight' && {\n            userSelect: 'none',\n            WebkitUserSelect: 'none',\n            WebkitTouchCallout: 'none',\n            WebkitTapHighlightColor: 'transparent',\n            touchAction: 'none',\n          }),\n        }}\n        {...(state.mode === 'highlight' ? gestureHandlers : {})}\n      >\n        <HtmlViewerContent\n          ref={node => {\n            handleContentMount(node);\n          }}\n          content={content}\n        />\n\n        <HtmlViewerHighlightLayer\n          contentRef={contentRef}\n          geometryRootRef={surfaceRef}\n          scrollHeight={scrollHeight}\n        />\n      </Box>\n\n      <HtmlViewerMemoMenu\n        contentRef={contentRef}\n        documentId={documentId}\n        colors={colors}\n      />\n    </Box>\n  );\n};\n\n// ─── Public component ─────────────────────────────────────────────────────────\n\n/**\n * Cross-platform HTML viewer with highlight & memo annotations.\n *\n * @security The `content` prop must be pre-sanitized by the caller before\n * passing to this component. No internal HTML sanitization is performed.\n */\nconst EliceHtmlViewer = ({\n  content,\n  documentId,\n  defaultMode,\n  annotations,\n  onAnnotationCreate,\n  onAnnotationUpdate,\n  onAnnotationDelete,\n  colors,\n  sx,\n}: EliceHtmlViewerProps) => {\n  return (\n    <HtmlViewerProvider\n      defaultMode={defaultMode}\n      annotations={annotations}\n      onAnnotationCreate={onAnnotationCreate}\n      onAnnotationUpdate={onAnnotationUpdate}\n      onAnnotationDelete={onAnnotationDelete}\n    >\n      <HtmlViewerInner\n        content={content}\n        documentId={documentId}\n        colors={colors}\n        sx={sx}\n      />\n    </HtmlViewerProvider>\n  );\n};\n\nexport default EliceHtmlViewer;\n","import React, {\n  createContext,\n  useContext,\n  useEffect,\n  useReducer,\n  useRef,\n} from 'react';\n\nimport type { Dispatch } from 'react';\nimport type {\n  Annotation,\n  EliceHtmlViewerProps,\n  HtmlViewerAction,\n  HtmlViewerState,\n  ViewerMode,\n} from './HtmlViewerTypes';\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\ninterface HtmlViewerContextType {\n  state: HtmlViewerState;\n  dispatch: Dispatch<HtmlViewerAction>;\n}\n\nconst HtmlViewerContext = createContext<HtmlViewerContextType | null>(null);\n\n// ─── Reducer ─────────────────────────────────────────────────────────────────\n\nconst initialState: HtmlViewerState = {\n  mode: 'read',\n  annotations: [],\n  activeAnnotationId: null,\n  pendingRange: null,\n  menuPosition: null,\n};\n\nfunction htmlViewerReducer(\n  state: HtmlViewerState,\n  action: HtmlViewerAction\n): HtmlViewerState {\n  switch (action.type) {\n    case 'SET_MODE':\n      return { ...state, mode: action.payload };\n\n    case 'ADD_ANNOTATION':\n      return { ...state, annotations: [...state.annotations, action.payload] };\n\n    case 'UPDATE_ANNOTATION':\n      return {\n        ...state,\n        annotations: state.annotations.map(a =>\n          a.id === action.payload.id ? action.payload : a\n        ),\n      };\n\n    case 'DELETE_ANNOTATION':\n      return {\n        ...state,\n        annotations: state.annotations.filter(a => a.id !== action.payload),\n        activeAnnotationId:\n          state.activeAnnotationId === action.payload\n            ? null\n            : state.activeAnnotationId,\n        menuPosition:\n          state.activeAnnotationId === action.payload\n            ? null\n            : state.menuPosition,\n      };\n\n    case 'SET_ACTIVE_ANNOTATION':\n      return { ...state, activeAnnotationId: action.payload };\n\n    case 'SET_PENDING_RANGE':\n      return { ...state, pendingRange: action.payload };\n\n    case 'SET_MENU_POSITION':\n      return { ...state, menuPosition: action.payload };\n\n    case 'SYNC_ANNOTATIONS':\n      return { ...state, annotations: action.payload };\n\n    default:\n      return state;\n  }\n}\n\n// ─── Provider ─────────────────────────────────────────────────────────────────\n\ntype ProviderProps = Pick<\n  EliceHtmlViewerProps,\n  | 'defaultMode'\n  | 'annotations'\n  | 'onAnnotationCreate'\n  | 'onAnnotationUpdate'\n  | 'onAnnotationDelete'\n> & {\n  children: React.ReactNode;\n};\n\nexport const HtmlViewerProvider = ({\n  children,\n  defaultMode = 'read',\n  annotations: controlledAnnotations,\n  onAnnotationCreate,\n  onAnnotationUpdate,\n  onAnnotationDelete,\n}: ProviderProps) => {\n  const [state, dispatch] = useReducer(htmlViewerReducer, {\n    ...initialState,\n    mode: defaultMode as ViewerMode,\n  });\n\n  // Keep latest callbacks in refs to prevent stale closures\n  const onCreateRef = useRef(onAnnotationCreate);\n  const onUpdateRef = useRef(onAnnotationUpdate);\n  const onDeleteRef = useRef(onAnnotationDelete);\n\n  useEffect(() => {\n    onCreateRef.current = onAnnotationCreate;\n  }, [onAnnotationCreate]);\n  useEffect(() => {\n    onUpdateRef.current = onAnnotationUpdate;\n  }, [onAnnotationUpdate]);\n  useEffect(() => {\n    onDeleteRef.current = onAnnotationDelete;\n  }, [onAnnotationDelete]);\n\n  // Sync controlled annotations\n  useEffect(() => {\n    if (controlledAnnotations !== undefined) {\n      dispatch({ type: 'SYNC_ANNOTATIONS', payload: controlledAnnotations });\n    }\n  }, [controlledAnnotations]);\n\n  // Fire external callbacks when internal state changes\n  const prevAnnotationsRef = useRef<Annotation[]>(state.annotations);\n  useEffect(() => {\n    const prev = prevAnnotationsRef.current;\n    const curr = state.annotations;\n\n    if (prev === curr) return;\n\n    // Detect added annotation\n    if (curr.length > prev.length) {\n      const added = curr.find(a => !prev.some(p => p.id === a.id));\n      if (added) onCreateRef.current?.(added);\n    }\n    // Detect updated annotation\n    else if (curr.length === prev.length) {\n      const updated = curr.find(a => {\n        const prevA = prev.find(p => p.id === a.id);\n        return prevA && (prevA.memo !== a.memo || prevA.color !== a.color);\n      });\n      if (updated) onUpdateRef.current?.(updated);\n    }\n    // Detect deleted annotation\n    else {\n      const deleted = prev.find(p => !curr.some(a => a.id === p.id));\n      if (deleted) onDeleteRef.current?.(deleted.id);\n    }\n\n    prevAnnotationsRef.current = curr;\n  }, [state.annotations]);\n\n  return (\n    <HtmlViewerContext.Provider value={{ state, dispatch }}>\n      {children}\n    </HtmlViewerContext.Provider>\n  );\n};\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\nexport const useHtmlViewer = (): HtmlViewerContextType => {\n  const context = useContext(HtmlViewerContext);\n  if (!context) {\n    throw new Error('useHtmlViewer must be used within HtmlViewerProvider');\n  }\n  return context;\n};\n","import React from 'react';\nimport { Stack, ToggleButton, ToggleButtonGroup, Typography } from '@mui/material';\nimport { useHtmlViewer } from './HtmlViewerContext';\nimport type { ViewerMode } from './HtmlViewerTypes';\n\nexport const HtmlViewerToolbar = () => {\n  const { state, dispatch } = useHtmlViewer();\n\n  const handleModeChange = (\n    _event: React.MouseEvent<HTMLElement>,\n    newMode: ViewerMode | null\n  ) => {\n    if (newMode !== null) {\n      dispatch({ type: 'SET_MODE', payload: newMode });\n    }\n  };\n\n  return (\n    <Stack\n      direction=\"row\"\n      alignItems=\"center\"\n      justifyContent=\"flex-end\"\n      sx={{\n        position: 'sticky',\n        top: 0,\n        zIndex: 10,\n        px: 1,\n        py: 0.5,\n        bgcolor: 'background.paper',\n        borderBottom: '1px solid',\n        borderColor: 'divider',\n      }}\n    >\n      <ToggleButtonGroup\n        value={state.mode}\n        exclusive\n        onChange={handleModeChange}\n        size=\"small\"\n        aria-label=\"viewer mode\"\n      >\n        <ToggleButton value=\"read\" aria-label=\"read mode\">\n          <Typography variant=\"caption\" sx={{ mr: 0.5 }}>\n            📖\n          </Typography>\n          <Typography variant=\"caption\">읽기</Typography>\n        </ToggleButton>\n        <ToggleButton value=\"highlight\" aria-label=\"highlight mode\">\n          <Typography variant=\"caption\" sx={{ mr: 0.5 }}>\n            🖊\n          </Typography>\n          <Typography variant=\"caption\">하이라이트</Typography>\n        </ToggleButton>\n      </ToggleButtonGroup>\n    </Stack>\n  );\n};\n","import React, { forwardRef, useCallback, useEffect, useRef } from 'react';\nimport { Box, Typography } from '@mui/material';\n\ninterface HtmlViewerContentProps {\n  content: string;\n}\n\nexport const HtmlViewerContent = forwardRef<\n  HTMLDivElement,\n  HtmlViewerContentProps\n>(({ content }, ref) => {\n  const innerRef = useRef<HTMLDivElement | null>(null);\n\n  const setRefs = useCallback(\n    (node: HTMLDivElement | null) => {\n      innerRef.current = node;\n      if (typeof ref === 'function') {\n        ref(node);\n      } else if (ref) {\n        ref.current = node;\n      }\n    },\n    [ref]\n  );\n\n  useEffect(() => {\n    const root = innerRef.current;\n    if (!root) return;\n\n    const disableNativeDrag = () => {\n      root.querySelectorAll('img, a').forEach(el => {\n        el.setAttribute('draggable', 'false');\n      });\n    };\n\n    disableNativeDrag();\n  }, [content]);\n\n  if (!content) {\n    return (\n      <Box\n        sx={{\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          p: 4,\n          color: 'text.disabled',\n        }}\n      >\n        <Typography variant=\"body2\">표시할 콘텐츠가 없습니다.</Typography>\n      </Box>\n    );\n  }\n\n  return (\n    <Box\n      ref={setRefs}\n      sx={{\n        position: 'relative',\n        wordBreak: 'break-word',\n        lineHeight: 1.75,\n        '& img': { maxWidth: '100%', WebkitUserDrag: 'none' },\n        '& a': { color: 'primary.main' },\n      }}\n      // eslint-disable-next-line react/no-danger\n      dangerouslySetInnerHTML={{ __html: content }}\n    />\n  );\n});\n\nHtmlViewerContent.displayName = 'HtmlViewerContent';\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { restoreRange } from './useAnchorResolver';\nimport type { Annotation, HighlightRect } from '../HtmlViewerTypes';\n\nfunction computeRects(\n  annotations: Annotation[],\n  contentRef: React.RefObject<HTMLDivElement>,\n  geometryRootRef: React.RefObject<HTMLDivElement>\n): HighlightRect[] {\n  const contentRoot = contentRef.current;\n  const geometryRoot = geometryRootRef.current;\n  if (!contentRoot || !geometryRoot) return [];\n\n  const geometryRect = geometryRoot.getBoundingClientRect();\n\n  const rects: HighlightRect[] = [];\n\n  for (const annotation of annotations) {\n    const range = restoreRange(annotation.anchor, contentRoot);\n\n    if (!range) {\n      // Annotation is detached — skip rendering\n      continue;\n    }\n\n    const clientRects = range.getClientRects();\n\n    for (let i = 0; i < clientRects.length; i++) {\n      const r = clientRects[i];\n      if (r.width < 1 || r.height < 1) continue;\n\n      rects.push({\n        x: r.left - geometryRect.left,\n        y: r.top - geometryRect.top,\n        width: r.width,\n        height: r.height,\n        annotationId: annotation.id,\n        color: annotation.color,\n      });\n    }\n  }\n\n  return rects;\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\nexport function useHighlightRects(\n  annotations: Annotation[],\n  contentRef: React.RefObject<HTMLDivElement>,\n  geometryRootRef: React.RefObject<HTMLDivElement>\n): HighlightRect[] {\n  const [rects, setRects] = useState<HighlightRect[]>([]);\n  const rafRef = useRef<number | null>(null);\n\n  const scheduleRecompute = useCallback(() => {\n    if (rafRef.current !== null) {\n      cancelAnimationFrame(rafRef.current);\n    }\n    rafRef.current = requestAnimationFrame(() => {\n      setRects(computeRects(annotations, contentRef, geometryRootRef));\n      rafRef.current = null;\n    });\n  }, [annotations, contentRef, geometryRootRef]);\n\n  // Recompute when annotations change\n  useEffect(() => {\n    scheduleRecompute();\n    return () => {\n      if (rafRef.current !== null) {\n        cancelAnimationFrame(rafRef.current);\n      }\n    };\n  }, [scheduleRecompute]);\n\n  // Recompute on resize\n  useEffect(() => {\n    const contentRoot = contentRef.current;\n    if (!contentRoot) return;\n\n    const observer = new ResizeObserver(() => {\n      scheduleRecompute();\n    });\n    observer.observe(contentRoot);\n\n    const geometryRoot = geometryRootRef.current;\n    if (geometryRoot && geometryRoot !== contentRoot) {\n      observer.observe(geometryRoot);\n    }\n\n    return () => observer.disconnect();\n  }, [contentRef, geometryRootRef, scheduleRecompute]);\n\n  useEffect(() => {\n    if (typeof window === 'undefined') return undefined;\n    const handleResize = () => scheduleRecompute();\n    window.addEventListener('resize', handleResize, { passive: true });\n    return () => window.removeEventListener('resize', handleResize);\n  }, [scheduleRecompute]);\n\n  return rects;\n}\n","import type { TextAnchor } from '../HtmlViewerTypes';\n\nconst CONTEXT_LENGTH = 32;\n\n// ─── domPath helpers ──────────────────────────────────────────────────────────\n\nfunction buildDomPath(node: Node, root: HTMLElement): string {\n  const parts: string[] = [];\n  let current: Node | null = node;\n\n  while (current && current !== root) {\n    const parent: Element | null = current.parentElement;\n    if (!parent) break;\n\n    const tag = (current as Element).tagName?.toLowerCase() ?? 'text';\n    const siblings = Array.from(parent.childNodes).filter(\n      (n: ChildNode) => n.nodeType === Node.TEXT_NODE\n        ? n.nodeType === current!.nodeType\n        : (n as Element).tagName === (current as Element).tagName\n    );\n    const index = siblings.indexOf(current as ChildNode);\n    parts.unshift(`${tag}:nth(${index})`);\n    current = parent;\n  }\n\n  return parts.join(' > ');\n}\n\nfunction resolveByDomPath(\n  domPath: string,\n  root: HTMLElement\n): Node | null {\n  // Walk the path step by step\n  const steps = domPath.split(' > ');\n  let current: Node = root;\n\n  for (const step of steps) {\n    const match = step.match(/^(.+):nth\\((\\d+)\\)$/);\n    if (!match) return null;\n\n    const [, tag, idxStr] = match;\n    const idx = parseInt(idxStr, 10);\n\n    const children = Array.from(current.childNodes).filter(n =>\n      tag === 'text'\n        ? n.nodeType === Node.TEXT_NODE\n        : (n as Element).tagName?.toLowerCase() === tag\n    );\n\n    if (idx >= children.length) return null;\n    current = children[idx];\n  }\n\n  return current;\n}\n\ninterface TextSegment {\n  node: Text;\n  start: number;\n  end: number;\n}\n\ninterface BoundaryPoint {\n  node: Node;\n  offset: number;\n}\n\nfunction getBoundaryOffsets(\n  range: Range,\n  contentRoot: HTMLElement\n): { start: number; end: number } {\n  const startProbe = document.createRange();\n  startProbe.selectNodeContents(contentRoot);\n  startProbe.setEnd(range.startContainer, range.startOffset);\n\n  const endProbe = document.createRange();\n  endProbe.selectNodeContents(contentRoot);\n  endProbe.setEnd(range.endContainer, range.endOffset);\n\n  return {\n    start: startProbe.toString().length,\n    end: endProbe.toString().length,\n  };\n}\n\nfunction collectTextSegments(contentRoot: HTMLElement): TextSegment[] {\n  const walker = document.createTreeWalker(\n    contentRoot,\n    NodeFilter.SHOW_TEXT,\n    null\n  );\n\n  const segments: TextSegment[] = [];\n  let offset = 0;\n  let node: Text | null;\n\n  while ((node = walker.nextNode() as Text | null)) {\n    const text = node.textContent ?? '';\n    const len = text.length;\n    if (len === 0) continue;\n\n    segments.push({\n      node,\n      start: offset,\n      end: offset + len,\n    });\n    offset += len;\n  }\n\n  return segments;\n}\n\nfunction resolvePointFromGlobalOffset(\n  segments: TextSegment[],\n  globalOffset: number,\n  preferEnd: boolean\n): BoundaryPoint | null {\n  if (segments.length === 0) return null;\n\n  if (globalOffset <= 0) {\n    return { node: segments[0].node, offset: 0 };\n  }\n\n  const totalLength = segments[segments.length - 1].end;\n  if (globalOffset >= totalLength) {\n    const last = segments[segments.length - 1];\n    return { node: last.node, offset: last.end - last.start };\n  }\n\n  for (let i = 0; i < segments.length; i += 1) {\n    const seg = segments[i];\n    if (globalOffset < seg.end) {\n      return { node: seg.node, offset: globalOffset - seg.start };\n    }\n    if (globalOffset === seg.end) {\n      if (!preferEnd && i + 1 < segments.length) {\n        return { node: segments[i + 1].node, offset: 0 };\n      }\n      return { node: seg.node, offset: seg.end - seg.start };\n    }\n  }\n\n  return null;\n}\n\nfunction isValidOffset(node: Node, offset: number): boolean {\n  if (offset < 0) return false;\n  if (node.nodeType === Node.TEXT_NODE) {\n    return offset <= (node.textContent?.length ?? 0);\n  }\n  return offset <= node.childNodes.length;\n}\n\nfunction extractContext(\n  range: Range,\n  contentRoot: HTMLElement\n): { prefix: string; suffix: string } {\n  const fullText = contentRoot.textContent ?? '';\n  const { start, end } = getBoundaryOffsets(range, contentRoot);\n  return {\n    prefix: fullText.slice(Math.max(0, start - CONTEXT_LENGTH), start),\n    suffix: fullText.slice(end, end + CONTEXT_LENGTH),\n  };\n}\n\nfunction scoreCandidate(\n  fullText: string,\n  index: number,\n  exactLength: number,\n  anchor: TextAnchor\n): number {\n  let score = 0;\n\n  if (anchor.prefix) {\n    const actualPrefix = fullText.slice(\n      Math.max(0, index - anchor.prefix.length),\n      index\n    );\n    if (actualPrefix === anchor.prefix) score += 2;\n  }\n\n  if (anchor.suffix) {\n    const actualSuffix = fullText.slice(\n      index + exactLength,\n      index + exactLength + anchor.suffix.length\n    );\n    if (actualSuffix === anchor.suffix) score += 2;\n  }\n\n  return score;\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Creates a TextAnchor from a DOM Range for later restoration.\n */\nexport function saveAnchor(range: Range, contentRoot: HTMLElement): TextAnchor {\n  const exact = range.toString();\n  const { prefix, suffix } = extractContext(range, contentRoot);\n  const startPath = buildDomPath(range.startContainer, contentRoot);\n  const endPath = buildDomPath(range.endContainer, contentRoot);\n\n  return {\n    exact,\n    prefix,\n    suffix,\n    startPath,\n    endPath,\n    // Keep legacy field for backward compatibility with stored anchors.\n    domPath: startPath,\n    startOffset: range.startOffset,\n    endOffset: range.endOffset,\n  };\n}\n\n/**\n * Restores a DOM Range from a TextAnchor.\n * Returns null if the anchor cannot be resolved (annotation becomes 'detached').\n *\n * Strategy A: domPath + offset\n * Strategy B (fallback): full-text fuzzy match using exact + prefix + suffix\n */\nexport function restoreRange(\n  anchor: TextAnchor,\n  contentRoot: HTMLElement\n): Range | null {\n  // Strategy A\n  if (\n    anchor.startPath &&\n    anchor.endPath &&\n    anchor.startOffset !== undefined &&\n    anchor.endOffset !== undefined\n  ) {\n    try {\n      const startNode = resolveByDomPath(anchor.startPath, contentRoot);\n      const endNode = resolveByDomPath(anchor.endPath, contentRoot);\n\n      if (\n        startNode &&\n        endNode &&\n        isValidOffset(startNode, anchor.startOffset) &&\n        isValidOffset(endNode, anchor.endOffset)\n      ) {\n        const range = document.createRange();\n        range.setStart(startNode, anchor.startOffset);\n        range.setEnd(endNode, anchor.endOffset);\n\n        const text = range.toString();\n        if (text === anchor.exact || text.includes(anchor.exact)) {\n          return range;\n        }\n      }\n    } catch {\n      // Fall through to Strategy B\n    }\n  }\n\n  // Strategy A (legacy anchors): single domPath\n  if (anchor.domPath && anchor.startOffset !== undefined) {\n    try {\n      const node = resolveByDomPath(anchor.domPath, contentRoot);\n      if (node && isValidOffset(node, anchor.startOffset)) {\n        const endOffset =\n          anchor.endOffset ?? Math.min(anchor.startOffset + anchor.exact.length, node.textContent?.length ?? 0);\n        if (isValidOffset(node, endOffset)) {\n          const range = document.createRange();\n          range.setStart(node, anchor.startOffset);\n          range.setEnd(node, endOffset);\n          if (range.toString().includes(anchor.exact)) {\n            return range;\n          }\n        }\n      }\n    } catch {\n      // Fall through to Strategy B\n    }\n  }\n\n  // Strategy B: walk all text nodes, fuzzy-match with prefix + exact + suffix\n  return fuzzyRestoreRange(anchor, contentRoot);\n}\n\nfunction fuzzyRestoreRange(\n  anchor: TextAnchor,\n  contentRoot: HTMLElement\n): Range | null {\n  const exact = anchor.exact;\n  if (!exact) return null;\n\n  const fullText = contentRoot.textContent ?? '';\n  if (!fullText) return null;\n\n  const segments = collectTextSegments(contentRoot);\n  if (segments.length === 0) return null;\n\n  let bestIndex = -1;\n  let bestScore = -1;\n\n  let from = 0;\n  while (from <= fullText.length - exact.length) {\n    const idx = fullText.indexOf(exact, from);\n    if (idx === -1) break;\n\n    const score = scoreCandidate(fullText, idx, exact.length, anchor);\n    if (score > bestScore) {\n      bestScore = score;\n      bestIndex = idx;\n    }\n\n    from = idx + 1;\n  }\n\n  if (bestIndex === -1) return null;\n\n  const startPoint = resolvePointFromGlobalOffset(segments, bestIndex, false);\n  const endPoint = resolvePointFromGlobalOffset(\n    segments,\n    bestIndex + exact.length,\n    true\n  );\n\n  if (!startPoint || !endPoint) return null;\n\n  try {\n    const range = document.createRange();\n    range.setStart(startPoint.node, startPoint.offset);\n    range.setEnd(endPoint.node, endPoint.offset);\n    if (!range.toString()) return null;\n    return range;\n  } catch {\n    return null;\n  }\n}\n","import { useEffect, useState } from 'react';\nimport type { HighlightRect } from '../HtmlViewerTypes';\n\ninterface VisibleRange {\n  top: number;\n  bottom: number;\n}\n\nconst FULL_RANGE: VisibleRange = { top: -Infinity, bottom: Infinity };\n\nfunction findScrollParent(node: HTMLElement | null): HTMLElement | null {\n  let current = node?.parentElement ?? null;\n  while (current) {\n    const style = window.getComputedStyle(current);\n    const overflowY = style.overflowY;\n    const canScroll =\n      (overflowY === 'auto' || overflowY === 'scroll') &&\n      current.scrollHeight > current.clientHeight;\n    if (canScroll) return current;\n    current = current.parentElement;\n  }\n  return null;\n}\n\n/**\n * Tracks the visible Y range of a container and returns only the\n * HighlightRects that overlap with the visible area.\n *\n * Falls back to returning all rects when viewport data is unavailable.\n */\nexport function useIntersectionVisibility(\n  rects: HighlightRect[],\n  geometryRootRef: React.RefObject<HTMLDivElement>\n): HighlightRect[] {\n  const [visibleRange, setVisibleRange] = useState<VisibleRange>(FULL_RANGE);\n\n  useEffect(() => {\n    if (typeof window === 'undefined') return undefined;\n\n    const geometryRoot = geometryRootRef.current;\n    if (!geometryRoot) return undefined;\n\n    const updateVisibleRange = () => {\n      const rootBounds = geometryRoot.getBoundingClientRect();\n      const viewportTop = 0;\n      const viewportBottom = window.innerHeight;\n\n      const top = Math.max(viewportTop, rootBounds.top) - rootBounds.top;\n      const bottom =\n        Math.min(viewportBottom, rootBounds.bottom) - rootBounds.top;\n\n      setVisibleRange({ top, bottom });\n    };\n\n    updateVisibleRange();\n\n    const scrollParent = findScrollParent(geometryRoot);\n    const scrollTarget: EventTarget = scrollParent ?? window;\n\n    scrollTarget.addEventListener('scroll', updateVisibleRange, {\n      passive: true,\n    });\n    window.addEventListener('resize', updateVisibleRange, { passive: true });\n\n    return () => {\n      scrollTarget.removeEventListener('scroll', updateVisibleRange);\n      window.removeEventListener('resize', updateVisibleRange);\n    };\n  }, [geometryRootRef]);\n\n  if (visibleRange === FULL_RANGE) return rects;\n\n  return rects.filter(\n    rect =>\n      rect.y + rect.height >= visibleRange.top &&\n      rect.y <= visibleRange.bottom\n  );\n}\n","import React from 'react';\nimport { useHtmlViewer } from './HtmlViewerContext';\nimport { useHighlightRects } from './hooks/useHighlightRects';\nimport { useIntersectionVisibility } from './hooks/useIntersectionVisibility';\nimport type { HighlightRect } from './HtmlViewerTypes';\n\ninterface HtmlViewerHighlightLayerProps {\n  contentRef: React.RefObject<HTMLDivElement>;\n  geometryRootRef: React.RefObject<HTMLDivElement>;\n  scrollHeight: number;\n}\n\nexport const HtmlViewerHighlightLayer = ({\n  contentRef,\n  geometryRootRef,\n  scrollHeight,\n}: HtmlViewerHighlightLayerProps) => {\n  const { state, dispatch } = useHtmlViewer();\n  const { annotations, activeAnnotationId } = state;\n\n  const allRects = useHighlightRects(annotations, contentRef, geometryRootRef);\n  const visibleRects = useIntersectionVisibility(allRects, geometryRootRef);\n\n  const handleRectClick = (\n    rect: HighlightRect,\n    event: React.MouseEvent<SVGRectElement>\n  ) => {\n    event.stopPropagation();\n    dispatch({ type: 'SET_ACTIVE_ANNOTATION', payload: rect.annotationId });\n    dispatch({\n      type: 'SET_MENU_POSITION',\n      payload: { x: event.clientX, y: event.clientY },\n    });\n    dispatch({ type: 'SET_PENDING_RANGE', payload: null });\n  };\n\n  if (visibleRects.length === 0) return null;\n\n  return (\n    <svg\n      aria-hidden=\"true\"\n      style={{\n        position: 'absolute',\n        top: 0,\n        left: 0,\n        width: '100%',\n        height: scrollHeight,\n        pointerEvents: 'none',\n        overflow: 'visible',\n        zIndex: 1,\n      }}\n    >\n      {visibleRects.map((rect, idx) => {\n        const isActive = rect.annotationId === activeAnnotationId;\n        const key = `${rect.annotationId}-${idx}`;\n\n        return (\n          <rect\n            key={key}\n            x={rect.x}\n            y={rect.y}\n            width={rect.width}\n            height={rect.height}\n            fill={rect.color}\n            fillOpacity={isActive ? 0.55 : 0.3}\n            style={{ pointerEvents: 'auto', cursor: 'pointer' }}\n            onClick={e => handleRectClick(rect, e)}\n          />\n        );\n      })}\n    </svg>\n  );\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n  Box,\n  ClickAwayListener,\n  IconButton,\n  Paper,\n  Stack,\n  TextField,\n  Tooltip,\n  Typography,\n} from '@mui/material';\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\nimport { useHtmlViewer } from './HtmlViewerContext';\nimport { saveAnchor } from './hooks/useAnchorResolver';\nimport type { Annotation } from './HtmlViewerTypes';\n\nconst DEFAULT_COLORS = ['#FFD700', '#90EE90', '#87CEEB', '#FFB6C1', '#DDA0DD'];\n\ninterface HtmlViewerMemoMenuProps {\n  contentRef: React.RefObject<HTMLDivElement>;\n  documentId: string;\n  colors?: string[];\n}\n\nexport const HtmlViewerMemoMenu = ({\n  contentRef,\n  documentId,\n  colors = DEFAULT_COLORS,\n}: HtmlViewerMemoMenuProps) => {\n  const { state, dispatch } = useHtmlViewer();\n  const { pendingRange, menuPosition, activeAnnotationId, annotations } = state;\n\n  const [memoText, setMemoText] = useState('');\n  const memoInputRef = useRef<HTMLInputElement>(null);\n\n  const activeAnnotation = activeAnnotationId\n    ? annotations.find(a => a.id === activeAnnotationId) ?? null\n    : null;\n\n  const isVisible = Boolean(\n    menuPosition && (pendingRange || activeAnnotation)\n  );\n\n  // Sync memo text when active annotation changes\n  useEffect(() => {\n    setMemoText(activeAnnotation?.memo ?? '');\n  }, [activeAnnotation]);\n\n  const close = useCallback(() => {\n    dispatch({ type: 'SET_MENU_POSITION', payload: null });\n    dispatch({ type: 'SET_PENDING_RANGE', payload: null });\n    dispatch({ type: 'SET_ACTIVE_ANNOTATION', payload: null });\n    setMemoText('');\n  }, [dispatch]);\n\n  const handleColorSelect = useCallback(\n    (color: string) => {\n      if (!pendingRange || !contentRef.current) return;\n\n      const anchor = saveAnchor(pendingRange, contentRef.current);\n\n      const generateId = () => {\n        if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n          return crypto.randomUUID();\n        }\n        return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n      };\n\n      const annotation: Annotation = {\n        id: generateId(),\n        documentId,\n        anchor,\n        color,\n        createdAt: new Date().toISOString(),\n        status: 'active',\n      };\n\n      dispatch({ type: 'ADD_ANNOTATION', payload: annotation });\n\n      // Switch to edit mode for this new annotation\n      dispatch({ type: 'SET_ACTIVE_ANNOTATION', payload: annotation.id });\n      dispatch({ type: 'SET_PENDING_RANGE', payload: null });\n\n      // Focus memo input after state updates\n      requestAnimationFrame(() => memoInputRef.current?.focus());\n    },\n    [pendingRange, contentRef, documentId, dispatch]\n  );\n\n  const handleMemoSave = useCallback(() => {\n    if (!activeAnnotation) return;\n\n    const updated: Annotation = { ...activeAnnotation, memo: memoText };\n    dispatch({ type: 'UPDATE_ANNOTATION', payload: updated });\n    close();\n  }, [activeAnnotation, memoText, dispatch, close]);\n\n  const handleDelete = useCallback(() => {\n    if (!activeAnnotation) return;\n\n    dispatch({ type: 'DELETE_ANNOTATION', payload: activeAnnotation.id });\n    close();\n  }, [activeAnnotation, dispatch, close]);\n\n  if (!isVisible || !menuPosition) return null;\n\n  return (\n    <ClickAwayListener onClickAway={close}>\n      <Paper\n        elevation={4}\n        sx={{\n          position: 'fixed',\n          left: menuPosition.x,\n          top: menuPosition.y,\n          zIndex: 1400,\n          minWidth: 220,\n          maxWidth: 300,\n          p: 1.5,\n          borderRadius: 2,\n        }}\n      >\n        {/* New selection: show color picker */}\n        {pendingRange && !activeAnnotation && (\n          <Stack spacing={1}>\n            <Typography variant=\"caption\" color=\"text.secondary\">\n              색상 선택\n            </Typography>\n            <Stack direction=\"row\" spacing={0.5}>\n              {colors.map(color => (\n                <Tooltip key={color} title={color}>\n                  <Box\n                    component=\"button\"\n                    onClick={() => handleColorSelect(color)}\n                    aria-label={`highlight color ${color}`}\n                    sx={{\n                      width: 28,\n                      height: 28,\n                      borderRadius: '50%',\n                      background: color,\n                      border: '2px solid transparent',\n                      cursor: 'pointer',\n                      '&:hover': {\n                        border: '2px solid',\n                        borderColor: 'text.primary',\n                      },\n                    }}\n                  />\n                </Tooltip>\n              ))}\n            </Stack>\n          </Stack>\n        )}\n\n        {/* Existing annotation: show memo editor */}\n        {activeAnnotation && (\n          <Stack spacing={1}>\n            <Stack\n              direction=\"row\"\n              alignItems=\"center\"\n              justifyContent=\"space-between\"\n            >\n              <Box\n                sx={{\n                  width: 16,\n                  height: 16,\n                  borderRadius: '50%',\n                  background: activeAnnotation.color,\n                  flexShrink: 0,\n                }}\n              />\n              <IconButton\n                size=\"small\"\n                onClick={handleDelete}\n                aria-label=\"delete annotation\"\n                color=\"error\"\n              >\n                <DeleteOutlineIcon fontSize=\"small\" />\n              </IconButton>\n            </Stack>\n\n            <Typography variant=\"caption\" color=\"text.secondary\" noWrap>\n              &ldquo;{activeAnnotation.anchor.exact.slice(0, 40)}\n              {activeAnnotation.anchor.exact.length > 40 ? '…' : ''}&rdquo;\n            </Typography>\n\n            <TextField\n              inputRef={memoInputRef}\n              value={memoText}\n              onChange={e => setMemoText(e.target.value)}\n              placeholder=\"메모를 입력하세요...\"\n              multiline\n              minRows={2}\n              maxRows={5}\n              size=\"small\"\n              fullWidth\n              onKeyDown={e => {\n                if (e.key === 'Enter' && e.ctrlKey) {\n                  e.preventDefault();\n                  handleMemoSave();\n                }\n                if (e.key === 'Escape') {\n                  close();\n                }\n              }}\n            />\n\n            <Stack direction=\"row\" justifyContent=\"flex-end\" spacing={1}>\n              <Box\n                component=\"button\"\n                onClick={close}\n                sx={{\n                  px: 1.5,\n                  py: 0.5,\n                  border: '1px solid',\n                  borderColor: 'divider',\n                  borderRadius: 1,\n                  bgcolor: 'transparent',\n                  cursor: 'pointer',\n                  fontSize: '0.75rem',\n                  color: 'text.secondary',\n                }}\n              >\n                취소\n              </Box>\n              <Box\n                component=\"button\"\n                onClick={handleMemoSave}\n                sx={{\n                  px: 1.5,\n                  py: 0.5,\n                  border: 'none',\n                  borderRadius: 1,\n                  bgcolor: 'primary.main',\n                  color: 'primary.contrastText',\n                  cursor: 'pointer',\n                  fontSize: '0.75rem',\n                }}\n              >\n                저장\n              </Box>\n            </Stack>\n          </Stack>\n        )}\n      </Paper>\n    </ClickAwayListener>\n  );\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport type { Dispatch } from 'react';\nimport type { GestureState, HtmlViewerAction } from '../HtmlViewerTypes';\n\nconst LONG_PRESS_MS = 350;\nconst TOUCH_MOVE_THRESHOLD_PX = 8;\n\n// ─── Cross-browser caret API ──────────────────────────────────────────────────\n\nfunction caretRangeFromPoint(x: number, y: number): Range | null {\n  if (typeof document === 'undefined') return null;\n\n  if (document.caretRangeFromPoint) {\n    return document.caretRangeFromPoint(x, y); // Chrome, Safari\n  }\n\n  // Firefox\n  const pos = (document as Document & {\n    caretPositionFromPoint?: (x: number, y: number) => { offsetNode: Node; offset: number } | null;\n  }).caretPositionFromPoint?.(x, y);\n\n  if (!pos) return null;\n\n  const range = document.createRange();\n  range.setStart(pos.offsetNode, pos.offset);\n  range.collapse(true);\n  return range;\n}\n\nfunction isNodeInsideContent(node: Node, contentRoot: HTMLElement | null): boolean {\n  return Boolean(contentRoot && contentRoot.contains(node));\n}\n\ninterface UseGestureStateMachineOptions {\n  dispatch: Dispatch<HtmlViewerAction>;\n  isHighlightMode: () => boolean;\n  contentRef: React.RefObject<HTMLElement>;\n  surfaceRef: React.RefObject<HTMLElement>;\n}\n\ninterface GestureHandlers {\n  onPointerDown: (e: React.PointerEvent) => void;\n  onPointerMove: (e: React.PointerEvent) => void;\n  onPointerUp: (e: React.PointerEvent) => void;\n  onPointerCancel: (e: React.PointerEvent) => void;\n}\n\nexport function useGestureStateMachine({\n  dispatch,\n  isHighlightMode,\n  contentRef,\n  surfaceRef,\n}: UseGestureStateMachineOptions): GestureHandlers {\n  const gestureRef = useRef<GestureState>({ kind: 'idle' });\n  const longPressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const clearLongPressTimer = useCallback(() => {\n    if (longPressTimerRef.current !== null) {\n      clearTimeout(longPressTimerRef.current);\n      longPressTimerRef.current = null;\n    }\n  }, []);\n\n  const clearNativeSelection = useCallback(() => {\n    window.getSelection()?.removeAllRanges();\n  }, []);\n\n  const finishGesture = useCallback(() => {\n    clearLongPressTimer();\n    clearNativeSelection();\n    gestureRef.current = { kind: 'idle' };\n  }, [clearLongPressTimer, clearNativeSelection]);\n\n  const startGesture = useCallback(\n    (clientX: number, clientY: number, pointerType: string) => {\n      if (!isHighlightMode()) return;\n\n      gestureRef.current = {\n        kind: 'pressing',\n        startX: clientX,\n        startY: clientY,\n        startTime: Date.now(),\n        pointerType,\n      };\n\n      if (pointerType !== 'mouse') {\n        longPressTimerRef.current = setTimeout(() => {\n          if (gestureRef.current.kind !== 'pressing') return;\n          const { startX, startY } = gestureRef.current;\n          gestureRef.current = { kind: 'longPressArmed', startX, startY };\n          clearNativeSelection();\n        }, LONG_PRESS_MS);\n      }\n    },\n    [clearNativeSelection, isHighlightMode]\n  );\n\n  const updateSelection = useCallback(\n    (anchorRange: Range, clientX: number, clientY: number) => {\n      const endRange = caretRangeFromPoint(clientX, clientY);\n      if (!endRange) return;\n      const contentRoot = contentRef.current;\n      if (!contentRoot) return;\n      if (\n        !isNodeInsideContent(anchorRange.startContainer, contentRoot) ||\n        !isNodeInsideContent(endRange.startContainer, contentRoot)\n      ) {\n        return;\n      }\n\n      const sel = window.getSelection();\n      if (!sel) return;\n\n      try {\n        const liveRange = document.createRange();\n        const cmp = anchorRange.compareBoundaryPoints(\n          Range.START_TO_START,\n          endRange\n        );\n\n        if (cmp <= 0) {\n          liveRange.setStart(anchorRange.startContainer, anchorRange.startOffset);\n          liveRange.setEnd(endRange.startContainer, endRange.startOffset);\n        } else {\n          liveRange.setStart(endRange.startContainer, endRange.startOffset);\n          liveRange.setEnd(anchorRange.startContainer, anchorRange.startOffset);\n        }\n\n        sel.removeAllRanges();\n        sel.addRange(liveRange);\n      } catch {\n        // Ignore invalid boundary transitions.\n      }\n    },\n    [contentRef]\n  );\n\n  const moveGesture = useCallback(\n    (clientX: number, clientY: number) => {\n      const gs = gestureRef.current;\n\n      if (gs.kind === 'pressing') {\n        const dx = Math.abs(clientX - gs.startX);\n        const dy = Math.abs(clientY - gs.startY);\n\n        if (gs.pointerType === 'mouse') {\n          if (dx > 2 || dy > 2) {\n            clearLongPressTimer();\n            const anchorRange = caretRangeFromPoint(gs.startX, gs.startY);\n            if (!anchorRange) return;\n            gestureRef.current = { kind: 'selecting', anchorRange };\n            updateSelection(anchorRange, clientX, clientY);\n          }\n        } else if (dx > TOUCH_MOVE_THRESHOLD_PX || dy > TOUCH_MOVE_THRESHOLD_PX) {\n          clearLongPressTimer();\n          // strict 정책: 터치 스크롤 대신 선택 모드 유지(gesture 취소)\n          gestureRef.current = { kind: 'scrolling' };\n        }\n        return;\n      }\n\n      if (gs.kind === 'longPressArmed') {\n        const anchorRange = caretRangeFromPoint(clientX, clientY);\n        if (!anchorRange) return;\n        gestureRef.current = { kind: 'selecting', anchorRange };\n        updateSelection(anchorRange, clientX, clientY);\n        return;\n      }\n\n      if (gs.kind === 'selecting') {\n        updateSelection(gs.anchorRange, clientX, clientY);\n      }\n    },\n    [clearLongPressTimer, updateSelection]\n  );\n\n  const commitGesture = useCallback(\n    (clientX: number, clientY: number) => {\n      const gs = gestureRef.current;\n\n      if (gs.kind === 'selecting') {\n        const sel = window.getSelection();\n        if (sel && !sel.isCollapsed && sel.rangeCount > 0) {\n          const range = sel.getRangeAt(0);\n          if (!range.collapsed) {\n            dispatch({ type: 'SET_PENDING_RANGE', payload: range.cloneRange() });\n            dispatch({\n              type: 'SET_MENU_POSITION',\n              payload: { x: clientX, y: clientY },\n            });\n            dispatch({ type: 'SET_ACTIVE_ANNOTATION', payload: null });\n          }\n        }\n      }\n\n      finishGesture();\n    },\n    [dispatch, finishGesture]\n  );\n\n  const onPointerDown = useCallback(\n    (e: React.PointerEvent) => {\n      if (!isHighlightMode()) return;\n      e.preventDefault();\n      if (e.currentTarget.setPointerCapture) {\n        e.currentTarget.setPointerCapture(e.pointerId);\n      }\n      startGesture(e.clientX, e.clientY, e.pointerType);\n    },\n    [isHighlightMode, startGesture]\n  );\n\n  const onPointerMove = useCallback(\n    (e: React.PointerEvent) => {\n      if (!isHighlightMode()) return;\n      e.preventDefault();\n      moveGesture(e.clientX, e.clientY);\n    },\n    [isHighlightMode, moveGesture]\n  );\n\n  const onPointerUp = useCallback(\n    (e: React.PointerEvent) => {\n      if (!isHighlightMode()) return;\n      e.preventDefault();\n      if (e.currentTarget.releasePointerCapture) {\n        e.currentTarget.releasePointerCapture(e.pointerId);\n      }\n      commitGesture(e.clientX, e.clientY);\n    },\n    [commitGesture, isHighlightMode]\n  );\n\n  const onPointerCancel = useCallback(() => {\n    if (!isHighlightMode()) return;\n    finishGesture();\n  }, [finishGesture, isHighlightMode]);\n\n  useEffect(() => {\n    if (isHighlightMode()) return;\n    finishGesture();\n  }, [finishGesture, isHighlightMode]);\n\n  useEffect(() => {\n    return () => {\n      clearLongPressTimer();\n    };\n  }, [clearLongPressTimer]);\n\n  // Suppress native selection UI while highlight mode is active.\n  useEffect(() => {\n    if (typeof document === 'undefined') return undefined;\n\n    const handleSelectionChange = () => {\n      if (!isHighlightMode()) return;\n      if (gestureRef.current.kind === 'selecting') return;\n      const sel = window.getSelection();\n      if (sel && !sel.isCollapsed) {\n        sel.removeAllRanges();\n      }\n    };\n\n    document.addEventListener('selectionchange', handleSelectionChange);\n    return () => {\n      document.removeEventListener('selectionchange', handleSelectionChange);\n    };\n  }, [isHighlightMode]);\n\n  // Touch fallback for environments without Pointer Events.\n  useEffect(() => {\n    if (typeof window === 'undefined') return undefined;\n    if ('PointerEvent' in window) return undefined;\n\n    const surface = surfaceRef.current;\n    if (!surface) return undefined;\n\n    const firstTouch = (event: TouchEvent): Touch | null => {\n      if (event.touches.length > 0) return event.touches[0];\n      if (event.changedTouches.length > 0) return event.changedTouches[0];\n      return null;\n    };\n\n    const onTouchStart = (event: TouchEvent) => {\n      if (!isHighlightMode() || event.touches.length !== 1) return;\n      const touch = firstTouch(event);\n      if (!touch) return;\n      event.preventDefault();\n      startGesture(touch.clientX, touch.clientY, 'touch');\n    };\n\n    const onTouchMove = (event: TouchEvent) => {\n      if (!isHighlightMode()) return;\n      const touch = firstTouch(event);\n      if (!touch) return;\n      event.preventDefault();\n      moveGesture(touch.clientX, touch.clientY);\n    };\n\n    const onTouchEnd = (event: TouchEvent) => {\n      if (!isHighlightMode()) return;\n      const touch = firstTouch(event);\n      if (!touch) {\n        finishGesture();\n        return;\n      }\n      event.preventDefault();\n      commitGesture(touch.clientX, touch.clientY);\n    };\n\n    const onTouchCancel = () => {\n      if (!isHighlightMode()) return;\n      finishGesture();\n    };\n\n    surface.addEventListener('touchstart', onTouchStart, { passive: false });\n    surface.addEventListener('touchmove', onTouchMove, { passive: false });\n    surface.addEventListener('touchend', onTouchEnd, { passive: false });\n    surface.addEventListener('touchcancel', onTouchCancel, { passive: false });\n\n    return () => {\n      surface.removeEventListener('touchstart', onTouchStart);\n      surface.removeEventListener('touchmove', onTouchMove);\n      surface.removeEventListener('touchend', onTouchEnd);\n      surface.removeEventListener('touchcancel', onTouchCancel);\n    };\n  }, [\n    commitGesture,\n    finishGesture,\n    isHighlightMode,\n    moveGesture,\n    startGesture,\n    surfaceRef,\n  ]);\n\n  return { onPointerDown, onPointerMove, onPointerUp, onPointerCancel };\n}\n","import { createTheme } from '@mui/material';\nimport { createEliceTheme } from '@elice/mui-system';\nimport { AIDTBreakpoints } from '../breakpoints';\nimport { common } from '../tokens';\nimport { createAIDTTypography } from '../typography/typography';\nimport { basePalette } from './_base';\nimport { getThemeColors } from './AIDTTheme';\nimport { gray } from '../tokens';\n\nimport type { CreateAIDTThemeProps } from '../types/theme.types';\n\nconst createAIDTTheme = ({\n  paletteMode = 'light',\n  palettePublisher = 'elice',\n  paletteSubject = 'korean',\n  paletteLevel = 'elementary',\n  typographyType = 'Default',\n  typographyFontFamily = 'pretendard',\n}: CreateAIDTThemeProps) => {\n  const themeColors = getThemeColors(\n    palettePublisher,\n    paletteSubject,\n    paletteLevel\n  );\n  return createTheme({\n    ...basePalette,\n    palette: {\n      mode: paletteMode,\n      primary: {\n        main: themeColors.primary,\n        dark: themeColors.black,\n        light: themeColors.light,\n      },\n      secondary: { main: themeColors.secondary },\n      background: { default: themeColors.background },\n      common: common,\n      grey: gray,\n    },\n    breakpoints: AIDTBreakpoints,\n    typography: createAIDTTypography(typographyFontFamily, typographyType),\n    components: {\n      MuiCssBaseline: {\n        styleOverrides: {\n          ':root': {\n            '--step--1': 'clamp(18px, 15.508px + 0.2595vw + 0.0865vh, 28.8px)',\n            '--step-0': 'clamp(16.4px, 11.877px + 0.471vw + 0.157vh, 36px)',\n            '--step-1': 'clamp(14.5px, 7.462px + 0.7335vw + 0.2445vh, 45px)',\n            '--step-2': 'clamp(12.1px, 1.969px + 1.05525vw + 0.35175vh, 56px)',\n            '--step-3': 'clamp(9px, -5.077px + 1.46625vw + 0.48875vh, 70px)',\n            '--step-4': 'clamp(5px, -14.385px + 2.019vw + 0.673vh, 89px)',\n          },\n        },\n      },\n    },\n  });\n};\n\nexport { createAIDTTheme };\n","import { breakpoints } from '../tokens';\n\nimport type { BreakpointsOptions } from '@mui/system';\n\n/**\n * Customized breakpoints for Material-UI Design System.\n * (https://mui.com/material-ui/customization/breakpoints)\n *\n * - `xs`: extra-small, mobile device\n * - `sm`: small, small tablet device\n * - `md`: medium, tablet device\n * - `lg`: large, laptop device\n * - `xl`: extra-large, desktop device\n */\ntype HeightBreakPointOptions = {\n  height: {\n    tablet: number;\n    notebook: number;\n    desktop: number;\n  };\n};\ntype AIDTBreakpointsOptions = BreakpointsOptions & HeightBreakPointOptions;\n\nexport const AIDTBreakpoints: AIDTBreakpointsOptions = Object.freeze({\n  values: {\n    xs: breakpoints.xs,\n    sm: breakpoints.sm,\n    md: breakpoints.md,\n    lg: breakpoints.lg,\n    xl: breakpoints.xl,\n  },\n  height: {\n    tablet: breakpoints.tablet,\n    notebook: breakpoints.notebook,\n    desktop: breakpoints.desktop,\n  },\n});\n","import { gray } from '../tokens';\n\nimport type { PaletteOptions } from '@mui/material';\n\nexport const basePalette: PaletteOptions = {\n  grey: {\n    50: gray[50],\n    100: gray[100],\n    200: gray[200],\n    300: gray[300],\n    400: gray[400],\n    500: gray[500],\n    600: gray[600],\n    700: gray[700],\n    800: gray[800],\n    900: gray[900],\n  },\n};\n","import {\n  bluepurple,\n  bluesky,\n  gray,\n  green,\n  mint,\n  orange,\n  pink,\n  purple,\n  yellow,\n} from '../tokens/colors';\n\nimport type { PublisherSubjects } from './types';\n\nexport const elicePalettes: PublisherSubjects = {\n  korean: {\n    elementary: {\n      primary: bluepurple[300],\n      background: bluesky[500],\n      secondary: bluepurple[900],\n      black: bluepurple[0],\n      light: bluepurple[50],\n    },\n    middle: {\n      primary: bluepurple[500],\n      background: gray[400],\n      secondary: bluepurple[900],\n      black: bluepurple[0],\n      light: bluepurple[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: bluepurple[900],\n      secondary: bluepurple[900],\n      black: bluepurple[0],\n      light: bluepurple[50],\n    },\n  },\n  computerScience: {\n    elementary: {\n      primary: purple[300],\n      background: bluesky[500],\n      secondary: purple[900],\n      black: purple[0],\n      light: purple[50],\n    },\n    middle: {\n      primary: purple[500],\n      background: gray[400],\n      secondary: purple[900],\n      black: purple[0],\n      light: purple[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: purple[900],\n      secondary: purple[900],\n      black: purple[0],\n      light: purple[50],\n    },\n  },\n  english: {\n    elementary: {\n      primary: green[300],\n      background: yellow[500],\n      secondary: green[900],\n      black: green[0],\n      light: green[50],\n    },\n    middle: {\n      primary: green[500],\n      background: gray[400],\n      secondary: green[900],\n      black: green[0],\n      light: green[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: green[900],\n      secondary: green[900],\n      black: green[0],\n      light: green[50],\n    },\n  },\n  socialStudy: {\n    elementary: {\n      primary: orange[300],\n      background: yellow[500],\n      secondary: orange[900],\n      black: orange[0],\n      light: orange[50],\n    },\n    middle: {\n      primary: orange[500],\n      background: gray[400],\n      secondary: orange[900],\n      black: orange[0],\n      light: orange[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: orange[900],\n      secondary: orange[900],\n      black: orange[0],\n      light: orange[50],\n    },\n  },\n  math: {\n    elementary: {\n      primary: pink[300],\n      background: yellow[500],\n      secondary: pink[900],\n      black: pink[0],\n      light: pink[50],\n    },\n    middle: {\n      primary: pink[500],\n      background: gray[400],\n      secondary: pink[900],\n      black: pink[0],\n      light: pink[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: pink[900],\n      secondary: pink[900],\n      black: pink[0],\n      light: pink[50],\n    },\n  },\n  science: {\n    elementary: {\n      primary: mint[300],\n      background: yellow[500],\n      secondary: mint[900],\n      black: mint[0],\n      light: mint[50],\n    },\n    middle: {\n      primary: mint[500],\n      background: gray[400],\n      secondary: mint[900],\n      black: mint[0],\n      light: mint[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: mint[900],\n      secondary: mint[900],\n      black: mint[0],\n      light: mint[50],\n    },\n  },\n};\n","import {\n  bluepurple,\n  bluesky,\n  gray,\n  green,\n  mint,\n  orange,\n  pink,\n  purple,\n  yellow,\n} from '../tokens/colors';\n\nimport type { PublisherSubjects } from './types';\n\nexport const type1Palettes: PublisherSubjects = {\n  korean: {\n    elementary: {\n      primary: bluepurple[300],\n      background: bluesky[500],\n      secondary: bluepurple[900],\n      black: bluepurple[0],\n      light: bluepurple[50],\n    },\n    middle: {\n      primary: bluepurple[500],\n      background: gray[400],\n      secondary: bluepurple[900],\n      black: bluepurple[0],\n      light: bluepurple[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: bluepurple[900],\n      secondary: bluepurple[900],\n      black: bluepurple[0],\n      light: bluepurple[50],\n    },\n  },\n  computerScience: {\n    elementary: {\n      primary: purple[300],\n      background: bluesky[500],\n      secondary: purple[900],\n      black: purple[0],\n      light: purple[50],\n    },\n    middle: {\n      primary: purple[500],\n      background: gray[400],\n      secondary: purple[900],\n      black: purple[0],\n      light: purple[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: purple[900],\n      secondary: purple[900],\n      black: purple[0],\n      light: purple[50],\n    },\n  },\n  english: {\n    elementary: {\n      primary: green[300],\n      background: yellow[500],\n      secondary: green[900],\n      black: green[0],\n      light: green[50],\n    },\n    middle: {\n      primary: green[500],\n      background: gray[400],\n      secondary: green[900],\n      black: green[0],\n      light: green[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: green[900],\n      secondary: green[900],\n      black: green[0],\n      light: green[50],\n    },\n  },\n  socialStudy: {\n    elementary: {\n      primary: orange[300],\n      background: yellow[500],\n      secondary: orange[900],\n      black: orange[0],\n      light: orange[50],\n    },\n    middle: {\n      primary: orange[500],\n      background: gray[400],\n      secondary: orange[900],\n      black: orange[0],\n      light: orange[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: orange[900],\n      secondary: orange[900],\n      black: orange[0],\n      light: orange[50],\n    },\n  },\n  math: {\n    elementary: {\n      primary: pink[300],\n      background: yellow[500],\n      secondary: pink[900],\n      black: pink[0],\n      light: pink[50],\n    },\n    middle: {\n      primary: pink[500],\n      background: gray[400],\n      secondary: pink[900],\n      black: pink[0],\n      light: pink[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: pink[900],\n      secondary: pink[900],\n      black: pink[0],\n      light: pink[50],\n    },\n  },\n  science: {\n    elementary: {\n      primary: mint[300],\n      background: yellow[500],\n      secondary: mint[900],\n      black: mint[0],\n      light: mint[50],\n    },\n    middle: {\n      primary: mint[500],\n      background: gray[400],\n      secondary: mint[900],\n      black: mint[0],\n      light: mint[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: mint[900],\n      secondary: mint[900],\n      black: mint[0],\n      light: mint[50],\n    },\n  },\n};\n","import {\n  bluepurple,\n  bluesky,\n  gray,\n  green,\n  mint,\n  orange,\n  pink,\n  purple,\n  yellow,\n} from '../tokens/colors';\n\nimport type { PublisherSubjects } from './types';\n\nexport const type2Palettes: PublisherSubjects = {\n  korean: {\n    elementary: {\n      primary: bluepurple[300],\n      background: bluesky[500],\n      secondary: bluepurple[900],\n      black: bluepurple[0],\n      light: bluepurple[50],\n    },\n    middle: {\n      primary: bluepurple[500],\n      background: gray[400],\n      secondary: bluepurple[900],\n      black: bluepurple[0],\n      light: bluepurple[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: bluepurple[900],\n      secondary: bluepurple[900],\n      black: bluepurple[0],\n      light: bluepurple[50],\n    },\n  },\n  computerScience: {\n    elementary: {\n      primary: purple[300],\n      background: bluesky[500],\n      secondary: purple[900],\n      black: purple[0],\n      light: purple[50],\n    },\n    middle: {\n      primary: purple[500],\n      background: gray[400],\n      secondary: purple[900],\n      black: purple[0],\n      light: purple[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: purple[900],\n      secondary: purple[900],\n      black: purple[0],\n      light: purple[50],\n    },\n  },\n  english: {\n    elementary: {\n      primary: green[300],\n      background: yellow[500],\n      secondary: green[900],\n      black: green[0],\n      light: green[50],\n    },\n    middle: {\n      primary: green[500],\n      background: gray[400],\n      secondary: green[900],\n      black: green[0],\n      light: green[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: green[900],\n      secondary: green[900],\n      black: green[0],\n      light: green[50],\n    },\n  },\n  socialStudy: {\n    elementary: {\n      primary: orange[300],\n      background: yellow[500],\n      secondary: orange[900],\n      black: orange[0],\n      light: orange[50],\n    },\n    middle: {\n      primary: orange[500],\n      background: gray[400],\n      secondary: orange[900],\n      black: orange[0],\n      light: orange[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: orange[900],\n      secondary: orange[900],\n      black: orange[0],\n      light: orange[50],\n    },\n  },\n  math: {\n    elementary: {\n      primary: pink[300],\n      background: yellow[500],\n      secondary: pink[900],\n      black: pink[0],\n      light: pink[50],\n    },\n    middle: {\n      primary: pink[500],\n      background: gray[400],\n      secondary: pink[900],\n      black: pink[0],\n      light: pink[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: pink[900],\n      secondary: pink[900],\n      black: pink[0],\n      light: pink[50],\n    },\n  },\n  science: {\n    elementary: {\n      primary: mint[300],\n      background: yellow[500],\n      secondary: mint[900],\n      black: mint[0],\n      light: mint[50],\n    },\n    middle: {\n      primary: mint[500],\n      background: gray[400],\n      secondary: mint[900],\n      black: mint[0],\n      light: mint[50],\n    },\n    high: {\n      primary: bluepurple[0],\n      background: mint[900],\n      secondary: mint[900],\n      black: mint[0],\n      light: mint[50],\n    },\n  },\n};\n","import { elicePalettes, type2Palettes, type1Palettes } from '../palettes';\n\nimport type {\n  Publisher,\n  PublisherSubjects,\n  SubjectLevels,\n  ThemeColor,\n} from '../palettes/types';\n\nconst getThemeColors = (\n  publisher: Publisher,\n  subject: keyof PublisherSubjects,\n  level: keyof SubjectLevels\n): ThemeColor => {\n  let AIDTThemeColors;\n\n  switch (publisher) {\n    case 'type1':\n      AIDTThemeColors = type1Palettes;\n      break;\n\n    case 'type2':\n      AIDTThemeColors = type2Palettes;\n      break;\n\n    default:\n      AIDTThemeColors = elicePalettes;\n  }\n\n  return (\n    AIDTThemeColors[subject]?.[level] || {\n      primary: '#000000',\n      background: '#FFFFFF',\n      secondary: '#555555',\n      black: '#132234',\n      light: '#E2E2E2',\n    }\n  );\n};\n\nexport { getThemeColors };\n","import { createAIDTTheme } from './createAIDTTheme';\n\nimport type { PaletteMode, Theme } from '@mui/material';\nimport type { ElicePaletteName } from '@elice/mui-system';\nimport { AIDTPaletteLevel, AIDTPalettePublisher, AIDTPaletteSubject } from '../types/theme.types';\nimport { TypographyFontFamilyType } from '../typography';\nimport { TYPOGRAPHY_STYLES_MAP } from '../typography/TypographyType';\n\nexport interface CreateEliceThemeProps {\n  paletteMode?: PaletteMode;\n  paletteName?: ElicePaletteName;\n  palettePublisher?: AIDTPalettePublisher;\n  paletteSubject?: AIDTPaletteSubject;\n  paletteLevel?: AIDTPaletteLevel;\n  typographyFontFamily?: TypographyFontFamilyType;\n  typographyType?: keyof typeof TYPOGRAPHY_STYLES_MAP;\n}\n\n/**\n * Override createEliceTheme to use createAIDTTheme instead\n * This ensures the override works in both development and production builds\n */\nexport const createEliceTheme = ({\n  paletteMode = 'light',\n  palettePublisher = 'elice',\n  paletteSubject = 'korean',\n  paletteLevel = 'elementary',\n  typographyFontFamily = 'pretendard',\n  typographyType = 'Default',\n}: CreateEliceThemeProps = {}): Theme => {\n  return createAIDTTheme({\n    paletteMode,\n    palettePublisher,\n    paletteSubject,\n    paletteLevel,\n    typographyFontFamily,\n    typographyType,\n  });\n};\n\n// Re-export the original function as well, in case it's needed\nexport { createEliceTheme as originalCreateEliceTheme } from '@elice/mui-system';\n"],"mappings":"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UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,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AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,MAAK;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,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","names":["Box","FooterContainer","Stack","Typography","createEliceTheme","import_material","import_material","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_material","breakpoints","import_jsx_runtime","styled","React","import_jsx_runtime","import_material","import_jsx_runtime","import_react","import_material","import_jsx_runtime","import_react","import_styled","import_material","import_material","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_material","import_jsx_runtime","CircleIcon","import_react","import_material","import_react","import_material","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","styled","import_react","import_material","import_styled","import_jsx_runtime","styled","React","import_material","import_jsx_runtime","import_material","import_react","import_styled","import_material","import_jsx_runtime","import_styled","import_styled","import_jsx_runtime","Button","styled","import_jsx_runtime","styled","import_styled","import_material","import_jsx_runtime","styled","import_material","import_jsx_runtime","import_react","import_material","import_jsx_runtime","React","import_styled","import_material","import_jsx_runtime","styled","import_jsx_runtime","React","Box","MuiBox","Stack","MuiStack","Typography","MuiTypography","styled","FooterContainer","FooterContainer","import_jsx_runtime","HeaderTitle","BookIcon","import_material","import_jsx_runtime","HelpOutlineIcon","import_styled","import_material","import_jsx_runtime","styled","value","import_material","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_jsx_runtime","import_styled","import_material","import_jsx_runtime","StyledScrollBarStack","styled","index","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","defaultDisabledBackgroundColor","baseSx","mergedSx","import_material","import_jsx_runtime","import_react","import_material","import_styled","import_jsx_runtime","styled","ZoomInIcon","import_react","import_material","import_jsx_runtime","import_material","import_styled","import_jsx_runtime","styled","import_material","import_jsx_runtime","HighlightOffIcon","import_react","import_styled","import_material","import_jsx_runtime","AssistantAvatar","AssistantAvatar_default","import_jsx_runtime","UserAvatar","UserAvatar_default","import_Circle","import_material","import_jsx_runtime","TypingIndicator","CircleIcon","TypingIndicator_default","import_jsx_runtime","EliceChat","StyledChatContainer","StyledScrollBarStack","AssistantAvatar_default","UserAvatar_default","StyledMessage","TypingIndicator_default","StyledInput","WaveBar","styled","import_react","import_material","import_jsx_runtime","React","volume","speed","Stack","Box","PauseIcon","PlayArrowIcon","Typography","VolumeOffIcon","VolumeUpIcon","SubtitlesIcon","FullscreenExitIcon","FullscreenIcon","percentage","import_react","import_material","import_jsx_runtime","React","videojs","import_react","import_jsx_runtime","DOUBLE_TAP_INTERVAL_MS","React","import_react","import_material","import_react","import_jsx_runtime","initialState","recorderReducer","RecorderContext","RecorderProvider","React","import_jsx_runtime","React","StyledVisualizerBox","StyledRecorderButton","StyledVisualizerBoxButtonContainer","StyledPauseButton","StyledRecorderButtonDefault","RecorderProvider","import_react","import_material","import_styled","import_material","import_styled","import_jsx_runtime","styled","PauseIcon","import_material","import_styled","import_jsx_runtime","IconWrapper","styled","import_jsx_runtime","styled","duration","import_react","import_material","import_react","import_jsx_runtime","initialState","import_material","import_jsx_runtime","import_react","import_material","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_material","import_jsx_runtime","DeleteOutlineIcon","import_react","import_jsx_runtime","import_material","createEliceTheme"]}