:root { --fami-primary: #0fe3d4; --fami-primary-strong: #0ccfc2; --fami-bg: #f5f5f5; --fami-surface: #ffffff; --fami-text: #333333; --fami-copy: #5c5a4b; --fami-muted: #878787; --fami-disabled: #e4e4e4; --fami-disabled-text: #b1b1b1; } * { box-sizing: border-box; } html, body { width: 100%; min-height: 100%; margin: 0; -webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; -webkit-text-size-adjust: 100%; } body { display: flex; justify-content: center; overflow-x: hidden; background: #111111; color: var(--fami-text); font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'SF Pro Display', 'Segoe UI', Helvetica, Arial, sans-serif; } button, input { font: inherit; } button { margin: 0; border: 0; padding: 0; background: transparent; color: inherit; } button, [role='button'] { cursor: pointer; } button:focus, input:focus { outline: none; } button:focus-visible, input:focus-visible { outline: 2px solid rgba(15, 227, 212, 0.55); outline-offset: 2px; } [hidden] { display: none !important; } img.is-empty { background: var(--fami-disabled); } body.modal-open { overflow: hidden; } .fami-page { position: relative; width: 100%; max-width: 375px; min-height: max(812px, 100dvh); overflow-x: hidden; background: var(--fami-bg); } .fami-status-bar { position: absolute; z-index: 10; top: 0; left: 0; width: 100%; height: 44px; background: #ffffff; direction: ltr; } .fami-status-time { position: absolute; top: 13px; left: 33.867px; width: 54px; height: 15px; color: #000000; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: 400; line-height: 15px; text-align: center; } .fami-status-icon { position: absolute; display: block; } .fami-status-icon--cellular { top: 15px; right: 63.66px; width: 17px; height: 11.332px; } .fami-status-icon--wifi { top: 16.327px; right: 43.33px; width: 15.333px; height: 11.007px; } .fami-status-icon--battery { top: 16.335px; right: 14px; width: 24.331px; height: 11.333px; } .fami-nav { position: absolute; z-index: 9; top: 44px; left: 0; width: 100%; height: 44px; background: #ffffff; direction: ltr; } .fami-nav__back, .fami-nav__language { position: absolute; top: 10px; display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; } .fami-nav__back { left: 12px; } .fami-nav__language { right: 12px; } .fami-nav__back img, .fami-nav__language img { display: block; width: 24px; height: 24px; } .fami-nav__title { position: absolute; top: 11px; left: 50%; margin: 0; color: var(--fami-text); font-size: 18px; font-weight: 600; line-height: 18px; text-align: center; text-transform: capitalize; white-space: nowrap; transform: translateX(-50%); } .language-switcher { position: absolute; top: 0; right: 0; width: 48px; height: 44px; } .language-menu { position: absolute; z-index: 40; top: 42px; right: 8px; display: grid; gap: 2px; width: 70px; padding: 5px; border: 1px solid rgba(51, 51, 51, 0.08); border-radius: 8px; background: #ffffff; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.14); } .language-menu button { min-height: 32px; border-radius: 6px; font-size: 12px; font-weight: 600; } .language-menu button.is-active { background: rgba(15, 227, 212, 0.14); color: #087d75; } .fami-card { border-radius: 8px; background: var(--fami-surface); } .fami-profile { position: absolute; top: 100px; right: 12px; left: 12px; display: flex; align-items: center; gap: 12px; height: 96px; padding: 12px; } .fami-profile__avatar { display: block; flex: 0 0 auto; width: 72px; height: 72px; border-radius: 8px; object-fit: cover; object-position: center 26%; } .fami-profile__avatar.is-round { border-radius: 999px; } .fami-profile__copy, .fami-contact__copy { display: flex; min-width: 0; flex-direction: column; align-items: flex-start; color: var(--fami-text); text-transform: capitalize; } .fami-profile__copy { gap: 8px; } .fami-profile__name, .fami-contact__name { overflow: hidden; width: 100%; font-size: 16px; font-weight: 600; line-height: 19px; text-overflow: ellipsis; white-space: nowrap; } .fami-profile__meta, .fami-contact__meta { overflow: hidden; width: 100%; font-size: 12px; font-weight: 500; line-height: 14px; text-overflow: ellipsis; white-space: nowrap; } .fami-profile__note { overflow: hidden; width: 100%; color: #b1b1b1; font-size: 10px; font-weight: 600; line-height: 12px; text-overflow: ellipsis; white-space: nowrap; } .fami-contact { position: absolute; top: 208px; right: 12px; left: 12px; display: flex; align-items: center; gap: 12px; height: 65px; padding: 12px; text-align: left; } .fami-contact__icon { display: block; flex: 0 0 auto; width: 41px; height: 41px; } .fami-contact__copy { gap: 8px; flex: 1 1 auto; } .fami-contact__edit { display: block; flex: 0 0 auto; width: 20px; height: 20px; } .fami-balance-card { position: absolute; top: 284px; right: 16px; left: 12px; height: 99px; overflow: hidden; border-radius: 12px; background: url('./assets/fami/balance-bg.svg') center / 100% 100% no-repeat; } .fami-balance-card__label { position: absolute; top: 12px; left: 12px; color: var(--fami-copy); font-size: 14px; font-weight: 500; line-height: 20px; letter-spacing: -0.56px; text-transform: capitalize; } .fami-balance-card__value { position: absolute; top: 45px; left: 12px; display: flex; align-items: center; gap: 9px; min-width: 180px; height: 41px; } .fami-balance-card__value img { display: block; width: 41px; height: 41px; object-fit: contain; } .fami-balance-card__value strong { color: var(--fami-text); font-size: 18px; font-weight: 500; line-height: 18px; white-space: nowrap; } .fami-balance-card__withdraw { position: absolute; top: 62px; right: 12px; display: flex; align-items: center; justify-content: center; min-width: 89px; height: 25px; border-radius: 25px; padding: 4px 12px; background: var(--fami-primary); color: #ffffff; font-size: 12px; font-weight: 700; line-height: 17px; letter-spacing: -0.5px; text-align: center; white-space: nowrap; } .fami-date-strip { position: absolute; right: 12px; left: 12px; display: flex; align-items: center; height: 24px; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; scroll-snap-type: x proximity; } .fami-date-strip::-webkit-scrollbar { display: none; } .fami-date-strip__item { position: relative; flex: 0 0 49px; height: 24px; color: rgba(51, 51, 51, 0.4); font-size: 14px; font-weight: 600; line-height: 20px; text-align: center; white-space: nowrap; scroll-snap-align: center; } .fami-date-strip__item.is-active { color: var(--fami-text); } .fami-date-strip__item:first-child { flex-basis: 42px; text-align: left; } .fami-date-strip__item + .fami-date-strip__item { margin-left: 6px; } .fami-date-strip__item.is-active::after { position: absolute; right: 50%; bottom: 0; width: 14px; height: 4px; background: url('./assets/fami/underline.svg') center / 14px 4px no-repeat; content: ''; transform: translateX(50%); } .fami-primary-button { display: flex; align-items: center; justify-content: center; width: 295px; height: 56px; border-radius: 37px; background: var(--fami-primary); color: #ffffff; font-size: 18px; font-weight: 700; line-height: 22px; text-align: center; } .fami-primary-button:active { background: var(--fami-primary-strong); } .fami-primary-button:disabled, .fami-primary-button.is-disabled { background: var(--fami-disabled); color: var(--fami-disabled-text); } .fami-primary-button__icon { width: 32px; height: 32px; margin-right: 11px; } .fami-home-indicator { position: fixed; z-index: 8; bottom: 0; left: 50%; width: min(100%, 375px); height: 24px; background: var(--fami-bg) url('./assets/fami/home-indicator.svg') center / 375px 24px no-repeat; pointer-events: none; transform: translateX(-50%); } .fami-empty { color: var(--fami-muted); font-size: 12px; line-height: 18px; text-align: center; } .fami-skeleton { position: relative; overflow: hidden; color: transparent !important; border-radius: 4px; background: #ececec; } .fami-skeleton::after { position: absolute; inset: 0; background: linear-gradient( 90deg, transparent, rgba(255, 255, 255, 0.76), transparent ); content: ''; transform: translateX(-100%); animation: fami-skeleton 1.2s infinite; } @keyframes fami-skeleton { to { transform: translateX(100%); } } .fami-modal { position: fixed; z-index: 60; inset: 0; display: flex; align-items: flex-end; justify-content: center; } .fami-modal__backdrop { position: absolute; inset: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.42); } .fami-sheet { position: relative; z-index: 1; width: min(100%, 375px); max-height: 78dvh; overflow-y: auto; border-radius: 20px 20px 0 0; padding: 20px 20px calc(24px + env(safe-area-inset-bottom)); background: #ffffff; } .fami-sheet__head { display: flex; align-items: center; justify-content: space-between; min-height: 32px; margin-bottom: 18px; } .fami-sheet__head h2 { margin: 0; color: var(--fami-text); font-size: 18px; font-weight: 700; line-height: 24px; } .fami-sheet__close { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 50%; background: #f1f1f1; color: var(--fami-text); font-size: 22px; line-height: 1; } .fami-field { display: grid; gap: 8px; } .fami-field > span { color: var(--fami-copy); font-size: 13px; font-weight: 600; } .fami-field input, .fami-search-control input { width: 100%; height: 48px; border: 1px solid #e8e8e8; border-radius: 12px; padding: 0 14px; background: #f8f8f8; color: var(--fami-text); font-size: 15px; } .fami-search-control { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; } .fami-search-control button { min-width: 78px; height: 48px; border-radius: 12px; padding: 0 14px; background: var(--fami-primary); color: #ffffff; font-size: 14px; font-weight: 700; } .fami-sheet__action { width: 100%; height: 50px; margin-top: 16px; border-radius: 25px; background: var(--fami-primary); color: #ffffff; font-size: 16px; font-weight: 700; } .fami-sheet__action:disabled { background: var(--fami-disabled); color: var(--fami-disabled-text); } .fami-sheet__status { margin-top: 10px; color: #c73a4c; font-size: 12px; line-height: 18px; } .fami-sheet__status.is-success { color: #09958b; } .fami-search-result { display: flex; align-items: center; gap: 12px; min-height: 76px; margin-top: 14px; border-radius: 8px; padding: 12px; background: var(--fami-bg); } .fami-search-result img { width: 52px; height: 52px; border-radius: 50%; object-fit: cover; } .fami-search-result__copy { display: grid; min-width: 0; flex: 1; gap: 6px; } .fami-search-result__copy strong { overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; } .fami-search-result__copy span { color: var(--fami-copy); font-size: 12px; } .fami-search-result__action { min-width: 66px; height: 34px; border-radius: 18px; padding: 0 12px; background: var(--fami-primary); color: #ffffff; font-size: 12px; font-weight: 700; } [dir='rtl'] .fami-contact { text-align: right; } [dir='rtl'] .fami-profile__copy, [dir='rtl'] .fami-contact__copy { align-items: flex-end; } [dir='rtl'] .fami-primary-button__icon { margin-right: 0; margin-left: 11px; } @media (max-width: 374px) { .fami-page { min-height: 100dvh; } } @media (prefers-reduced-motion: reduce) { .fami-skeleton::after { animation: none; } }