/* =====================================================================
   家庭应用 - 全局与登录页
   ===================================================================== */

/* ---------- 基础（移动端优先） ---------- */
:root {
  /* 家庭场景暖橙主色 */
  --brand: #f5a623;
  --brand-dark: #e08c05;
  --brand-deep: #c77800;
  --brand-soft: #fff4e0;
  --bg-app: #f7f3ea;      /* 页面米白 */
  --bg-page: #efe9db;     /* 桌面外圈更深米色 */
  --card: #ffffff;
  --ink: #3f3a31;
  --ink-soft: #6f6759;
  --muted: #a49a89;
  --line: #eee6d6;
}

*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  overflow-wrap: break-word;
  -webkit-text-size-adjust: 100%;
}

body {
  min-height: 100vh;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
    "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
  font-size: 16px;
  line-height: 1.6;
  color: var(--ink);
  -webkit-font-smoothing: antialiased;
}

button {
  font: inherit;
  color: inherit;
  -webkit-tap-highlight-color: transparent;
}

input {
  font: inherit;
  border-radius: 0;
}

svg {
  display: block;
}

/* ---------- 登录页 ---------- */
.page-auth {
  background: linear-gradient(160deg, #2b3a67 0%, #5a3f8a 55%, #764ba2 100%);
  background-attachment: fixed;
}

.auth-wrap {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding:
    calc(24px + env(safe-area-inset-top, 0px))
    calc(16px + env(safe-area-inset-right, 0px))
    calc(24px + env(safe-area-inset-bottom, 0px))
    calc(16px + env(safe-area-inset-left, 0px));
}

.auth-card {
  width: 100%;
  max-width: 400px;
  background: #fff;
  border-radius: 16px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.22);
  padding: 32px 24px 28px;
}

.auth-brand {
  text-align: center;
  margin-bottom: 22px;
}

.auth-logo {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  border-radius: 14px;
  color: #fff;
  background: linear-gradient(135deg, #2b3a67, #764ba2);
  box-shadow: 0 6px 16px rgba(102, 126, 234, 0.35);
  margin-bottom: 10px;
}

.auth-title {
  font-size: 20px;
  font-weight: 600;
  letter-spacing: 2px;
}

.form-error {
  margin-bottom: 14px;
  padding: 10px 12px;
  border-radius: 8px;
  background: rgba(211, 47, 47, 0.08);
  border: 1px solid rgba(211, 47, 47, 0.25);
  color: #c62828;
  font-size: 14px;
}

.form-error[hidden] {
  display: none;
}

.field {
  margin-bottom: 16px;
}

.field-label {
  display: block;
  margin-bottom: 6px;
  font-size: 14px;
  font-weight: 500;
  color: #34495e;
}

.field-control {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0 12px;
  border: 1px solid #d5dbe5;
  border-radius: 10px;
  background: #fafbfc;
  color: #97a2b2;
  transition: border-color 0.2s, box-shadow 0.2s, background-color 0.2s;
}

.field-control:focus-within {
  border-color: #5a3f8a;
  background: #fff;
  box-shadow: 0 0 0 3px rgba(90, 63, 138, 0.12);
}

.field-control input {
  flex: 1;
  min-width: 0;
  height: 46px;
  border: 0;
  outline: none;
  background: transparent;
  color: #1f2d3d;
  font-size: 16px;
}

.field-control input::placeholder {
  color: #b0b8c4;
}

.field-action {
  border: 0;
  background: transparent;
  color: #5a3f8a;
  font-size: 14px;
  cursor: pointer;
  padding: 4px 2px;
  white-space: nowrap;
}

.field-action:active {
  opacity: 0.6;
}

.field-code {
  display: flex;
  gap: 10px;
  align-items: stretch;
}

.field-code .field-control {
  flex: 1;
  min-width: 0;
}

.captcha-btn {
  flex: none;
  width: 112px;
  height: 48px;
  padding: 0;
  border: 1px solid #d5dbe5;
  border-radius: 10px;
  overflow: hidden;
  background: #fff;
  cursor: pointer;
  line-height: 0;
}

.captcha-btn:active {
  opacity: 0.75;
}

.captcha-btn img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: fill;
}

.btn-primary {
  width: 100%;
  height: 48px;
  margin-top: 6px;
  border: 0;
  border-radius: 10px;
  background: linear-gradient(135deg, #2b3a67, #5a3f8a);
  color: #fff;
  font-size: 16px;
  font-weight: 500;
  letter-spacing: 6px;
  text-indent: 6px;
  cursor: pointer;
  transition: opacity 0.2s, transform 0.1s;
}

.btn-primary:hover {
  opacity: 0.92;
}

.btn-primary:active {
  transform: scale(0.99);
}

.btn-primary:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

@media (max-width: 400px) {
  .auth-card {
    padding: 26px 18px 22px;
  }

  .captcha-btn {
    width: 96px;
    height: 48px;
  }
}

@media (max-height: 640px) and (orientation: portrait) {
  .auth-wrap {
    align-items: flex-start;
    padding-top: calc(32px + env(safe-area-inset-top, 0px));
  }

  .auth-brand {
    margin-bottom: 14px;
  }

  .auth-logo {
    width: 44px;
    height: 44px;
  }
}

/* =====================================================================
   家庭应用首页（移动端优先，桌面端最大 480px 居中）
   ===================================================================== */
.page-app {
  background: var(--bg-page);
}

/* 应用壳：整页固定为一屏高度，移动端全宽、桌面端 480px 居中 */
.app-shell {
  position: relative;
  height: 100vh;
  height: 100dvh;
  max-width: 480px;
  margin: 0 auto;
  background: var(--bg-app);
  /* 一屏布局：禁止页面自身滚动，底部导航为固定定位，故预留其高度 */
  overflow: hidden;
  padding-bottom: calc(62px + env(safe-area-inset-bottom, 0px));
}

/* ---------- 底部导航（固定） ---------- */
.tabbar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 50;
  background: rgba(255, 255, 255, 0.96);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-top: 1px solid var(--line);
  padding-bottom: env(safe-area-inset-bottom, 0px);
}

.tabbar-inner {
  max-width: 480px;
  margin: 0 auto;
  display: flex;
  align-items: stretch;
  height: 62px;
}

.tab {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  border: 0;
  background: transparent;
  color: var(--muted);
  cursor: pointer;
  transition: color 0.2s;
}

.tab.is-active {
  color: var(--brand-deep);
}

.tab-label {
  font-size: 11px;
  line-height: 1.2;
}

.tab-icon {
  position: relative;
  display: block;
  line-height: 0;
}

/* 消息未读小红点 */
.tab-badge {
  position: absolute;
  top: -5px;
  right: -10px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  border-radius: 8px;
  background: #f4342e;
  color: #fff;
  font-size: 11px;
  line-height: 16px;
  text-align: center;
  box-shadow: 0 0 0 2px #fff;
}

/* 各 Tab 内容视图：默认隐藏，仅激活显示 */
.view {
  display: none;
}

.view.is-active {
  display: block;
  height: 100%;
  overflow-y: auto;
}

/* 首页 Tab：一屏内分区布局（顶部固定三块 + 应用区占剩余），自身不滚动 */
.view-home.is-active {
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.view-home > .welcome-bar,
.view-home > .carousel,
.view-home > .notice-card {
  flex: none;
}

.view-home > .app-section {
  flex: 1;
  min-height: 0;
}

/* ---------- 顶部欢迎栏 ---------- */
.welcome-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding:
    calc(20px + env(safe-area-inset-top, 0px))
    18px
    14px;
}

.welcome-text {
  min-width: 0;
}

.welcome-text h1 {
  font-size: 25px;
  font-weight: 700;
  color: var(--ink);
  letter-spacing: 0.5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.welcome-text p {
  margin-top: 4px;
  font-size: 13px;
  color: var(--muted);
}

.icon-btn {
  flex: none;
  width: 42px;
  height: 42px;
  border: 0;
  border-radius: 50%;
  background: var(--card);
  color: var(--ink-soft);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 14px rgba(120, 90, 40, 0.12);
  cursor: pointer;
}

.icon-btn:active {
  transform: scale(0.94);
}

/* ---------- 照片轮播（固定高度占位） ---------- */
.carousel {
  position: relative;
  height: 200px;
  margin: 4px 16px 14px;
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 0 10px 26px rgba(140, 100, 40, 0.18);
  touch-action: pan-y;
  user-select: none;
  -webkit-user-select: none;
}

.carousel-track {
  display: flex;
  height: 100%;
  transition: transform 0.45s cubic-bezier(0.25, 0.8, 0.3, 1);
}

.slide {
  position: relative;
  flex: 0 0 100%;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.slide-art {
  opacity: 0.95;
  filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.08));
}

/* 后端配置了真实图片时的展示模式 */
.slide.has-img {
  background-size: cover;
  background-position: center;
}

.slide-caption {
  position: absolute;
  left: 14px;
  bottom: 22px;
  display: flex;
  flex-direction: column;
  color: #fff;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.25);
  line-height: 1.35;
}

.slide-caption b {
  font-size: 16px;
  font-weight: 700;
}

.slide-caption span {
  font-size: 12px;
  opacity: 0.92;
}

/* 左右切换箭头（桌面预览/可点设备） */
.carousel-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 30px;
  height: 30px;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.42);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  opacity: 0;
  transition: opacity 0.25s, background-color 0.2s;
}

.carousel:hover .carousel-arrow {
  opacity: 1;
}

.carousel-arrow.prev {
  left: 8px;
}

.carousel-arrow.next {
  right: 8px;
}

.carousel-arrow:active {
  background: rgba(255, 255, 255, 0.7);
}

/* 指示点 */
.carousel-dots {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 8px;
  display: flex;
  justify-content: center;
  gap: 6px;
}

.carousel-dot {
  width: 7px;
  height: 7px;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.55);
  padding: 0;
  cursor: pointer;
  transition: width 0.25s, background-color 0.25s;
}

.carousel-dot.is-active {
  width: 18px;
  border-radius: 4px;
  background: #fff;
}

/* ---------- 家族动态（公告栏）：固定高度，无内容也占位 ---------- */
.notice-card {
  margin: 0 16px 14px;
  padding: 12px 15px 10px;
  border-radius: 18px;
  background: linear-gradient(135deg, #fff6e2, #ffedd0);
  border: 1px solid #f7dfae;
}

.notice-head {
  display: flex;
  align-items: center;
  gap: 9px;
}

.notice-icon {
  flex: none;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--brand), var(--brand-dark));
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 10px rgba(245, 166, 35, 0.35);
}

.notice-head h3 {
  font-size: 15px;
  font-weight: 700;
  color: #8a5a00;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.notice-text {
  margin: 9px 0 0;
  font-size: 13px;
  line-height: 1.7;
  color: #7c6a46;
  word-break: break-word;
  overflow-wrap: break-word;
  /* 双重兜底：支持 -webkit-line-clamp 的浏览器显示省略号；
     不支持时 max-height + overflow:hidden 仍硬性截断为 3 行 */
  max-height: 5.1em;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}

.notice-toggle {
  margin: 7px auto -2px 0;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  border: 0;
  background: none;
  padding: 3px 4px 3px 10px;
  color: #d98b2b;
  font-size: 12.5px;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.notice-toggle:active { opacity: 0.7; }

/* ---------- 功能应用网格（独立块，占首页剩余高度） ---------- */
.app-section {
  display: flex;
  /* 应用内容从模块顶部开始排：普通用户（较少应用）顶格排列，避免垂直居中+下方留白 */
  align-items: flex-start;
  padding: 0 16px 12px;
}

.app-grid {
  width: 100%;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
}

/* 应用超过一行（9 个管理类等）时：拉伸铺满应用区，保证同屏全部可见 */
.app-grid.is-many {
  align-self: stretch;
  align-content: stretch;
  grid-auto-rows: minmax(88px, 1fr);
  /* 极端小视口兜底：仅应用块内部滚动，页面本身无滚动条 */
  overflow-y: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}

.app-grid.is-many::-webkit-scrollbar {
  display: none;
}

.app-grid.is-many .app-card {
  aspect-ratio: auto;
  min-height: 88px;
  padding: 8px 2px 6px;
  gap: 5px;
}

.app-grid.is-many .app-icon {
  width: 44px;
  height: 44px;
  border-radius: 14px;
}

.app-grid.is-many .app-icon svg {
  width: 26px;
  height: 26px;
}

.app-card {
  position: relative;
  border: 0;
  /* 允许 1fr 网格列收缩，防止内容最小宽度把卡片挤出屏幕（第 4 列溢出） */
  min-width: 0;
  background: var(--card);
  border-radius: 16px;
  box-shadow: 0 4px 14px rgba(130, 100, 50, 0.07);
  padding: 12px 4px 10px;
  aspect-ratio: 1 / 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  cursor: pointer;
  transition: transform 0.12s ease, box-shadow 0.2s ease;
}

.app-card:active {
  transform: scale(0.96);
  box-shadow: 0 2px 8px rgba(130, 100, 50, 0.12);
}

/* 仅管理员应用的「管理」小角标 */
.app-badge {
  position: absolute;
  top: 5px;
  right: 5px;
  font-size: 10px;
  line-height: 1;
  color: #b32020;
  background: #ffe4e3;
  padding: 3px 5px;
  border-radius: 9px;
  font-weight: 600;
}

.app-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  border-radius: 16px;
}

.ic-orange {
  color: #ef8f00;
  background: #fff2da;
}

.ic-blue {
  color: #3a8fe0;
  background: #e7f1fc;
}

.ic-purple {
  color: #a05cc8;
  background: #f4e9fb;
}

.ic-green {
  color: #33a873;
  background: #e4f6ec;
}

.ic-red {
  color: #d64545;
  background: #fdeceb;
}

.ic-teal {
  color: #1fa3a3;
  background: #e1f6f6;
}

.app-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--ink);
}

/* ---------- 消息 / 我的 占位页 ---------- */
.placeholder {
  min-height: calc(100vh - 62px - env(safe-area-inset-bottom, 0px));
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  text-align: center;
  padding: 40px 24px;
}

.placeholder-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--brand);
  opacity: 0.75;
}

.placeholder h2 {
  font-size: 21px;
  font-weight: 700;
  color: var(--ink);
}

.placeholder p {
  font-size: 14px;
  color: var(--muted);
}

/* ---------- Toast 轻提示 ---------- */
.toast {
  position: fixed;
  left: 50%;
  bottom: calc(84px + env(safe-area-inset-bottom, 0px));
  transform: translateX(-50%) translateY(16px);
  z-index: 100;
  max-width: 340px;
  width: max-content;
  padding: 11px 20px;
  border-radius: 999px;
  background: rgba(52, 46, 36, 0.92);
  color: #fff;
  font-size: 14px;
  line-height: 1.5;
  text-align: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s ease, transform 0.25s ease;
}

.toast.show {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

/* ---------- 我的（个人中心） ---------- */
.me-title {
  padding:
    calc(20px + env(safe-area-inset-top, 0px))
    18px
    6px;
}

.me-title h1 {
  font-size: 24px;
  font-weight: 700;
  letter-spacing: 0.5px;
  color: var(--ink);
}

/* 个人资料卡 */
.me-profile {
  display: flex;
  align-items: center;
  gap: 14px;
  margin: 8px 16px 16px;
  padding: 18px 16px;
  border-radius: 20px;
  background: var(--card);
  box-shadow: 0 4px 14px rgba(130, 100, 50, 0.07);
}

.me-avatar {
  flex: none;
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--brand), var(--brand-dark));
  color: #fff;
  font-size: 25px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 6px 16px rgba(245, 166, 35, 0.35);
}

.me-meta {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.me-name-row {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}

.me-name-row b {
  font-size: 19px;
  font-weight: 700;
  color: var(--ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.me-badge {
  flex: none;
  padding: 2px 9px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  line-height: 1.5;
}

.me-badge.is-member {
  color: #8a5a00;
  background: var(--brand-soft);
}

.me-badge.is-admin {
  color: #fff;
  background: linear-gradient(135deg, var(--brand), var(--brand-dark));
}

.me-meta p {
  font-size: 13px;
  color: var(--muted);
}

/* 功能菜单 */
.me-menu {
  margin: 0 16px 16px;
  border-radius: 20px;
  overflow: hidden;
  background: var(--card);
  box-shadow: 0 4px 14px rgba(130, 100, 50, 0.07);
}

.me-row {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 13px 16px;
  border: 0;
  border-bottom: 1px solid var(--line);
  background: transparent;
  color: var(--ink);
  text-align: left;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: background-color 0.15s;
}

.me-row:last-child {
  border-bottom: 0;
}

.me-row:active {
  background: #faf5ea;
}

.me-row-icon {
  flex: none;
  width: 36px;
  height: 36px;
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.me-row-icon.ic-tree {
  color: #ef8f00;
  background: #fff2da;
}

.me-row-icon.ic-album {
  color: #a05cc8;
  background: #f4e9fb;
}

.me-row-icon.ic-note {
  color: #3a8fe0;
  background: #e7f1fc;
}

.me-row-icon.ic-safe {
  color: #33a873;
  background: #e4f6ec;
}

.me-row-text {
  flex: 1;
  font-size: 15px;
  font-weight: 500;
}

.me-row-arrow {
  flex: none;
  color: var(--muted);
}

/* 退出登录按钮 */
.me-logout {
  display: block;
  width: calc(100% - 32px);
  margin: 6px 16px 12px;
  padding: 14px;
  border: 0;
  border-radius: 16px;
  background: var(--card);
  color: #d64545;
  font-size: 16px;
  font-weight: 600;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(130, 100, 50, 0.07);
  transition: transform 0.12s, background-color 0.15s;
}

.me-logout:active {
  transform: scale(0.98);
  background: #fdf3f1;
}

/* ---------- 通用弹层（确认框） ---------- */
.dialog-mask {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 40px;
  background: rgba(40, 30, 15, 0.45);
}

/* hidden 属性需显式覆盖上面的 display:flex */
.dialog-mask[hidden] {
  display: none;
}

.dialog {
  width: 100%;
  max-width: 320px;
  background: var(--card);
  border-radius: 18px;
  padding: 24px 20px 18px;
  text-align: center;
  animation: dialog-pop 0.18s ease;
}

.dialog h3 {
  font-size: 17px;
  font-weight: 700;
  color: var(--ink);
}

.dialog p {
  margin-top: 8px;
  font-size: 14px;
  color: var(--muted);
}

.dialog-actions {
  margin-top: 20px;
  display: flex;
  gap: 10px;
}

.dialog-btn {
  flex: 1;
  padding: 11px 0;
  border: 0;
  border-radius: 12px;
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  background: #f1ecdf;
  color: var(--ink-soft);
  transition: transform 0.12s;
}

.dialog-btn.is-danger {
  background: linear-gradient(135deg, #ef7a5f, #e2523c);
  color: #fff;
}

.dialog-btn:active {
  transform: scale(0.97);
}

@keyframes dialog-pop {
  from {
    transform: scale(0.9);
    opacity: 0;
  }
  to {
    transform: scale(1);
    opacity: 1;
  }
}

/* ---------- 公告全文浮窗（背景暗化，点击“展开全文”弹出） ---------- */
.notice-mask {
  position: fixed;
  inset: 0;
  z-index: 210;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 22px;
  background: rgba(25, 18, 8, 0.58);
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
}

.notice-mask[hidden] {
  display: none;
}

.notice-modal {
  width: 100%;
  max-width: 440px;
  max-height: 76vh;
  display: flex;
  flex-direction: column;
  background: #fffdf7;
  border-radius: 20px;
  box-shadow: 0 24px 60px rgba(30, 20, 5, 0.3);
  overflow: hidden;
  animation: dialog-pop 0.2s ease;
}

.notice-modal-head {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 15px 18px 8px;
}

.notice-modal-icon {
  flex: none;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--brand), var(--brand-dark));
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 10px rgba(245, 166, 35, 0.3);
}

.notice-modal-head h3 {
  flex: 1;
  min-width: 0;
  font-size: 16px;
  font-weight: 800;
  color: #8a5a00;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.notice-modal-close {
  flex: none;
  width: 32px;
  height: 32px;
  border: 0;
  border-radius: 50%;
  background: #f5efe1;
  color: #8a7a55;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.notice-modal-close:active {
  background: #ece3cf;
}

.notice-modal-body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 6px 18px calc(18px + env(safe-area-inset-bottom, 0px));
  font-size: 14px;
  line-height: 1.8;
  color: #5f4a2b;
  word-break: break-word;
  overflow-wrap: break-word;
  white-space: pre-wrap;
}

/* ---------- 桌面端补充 ---------- */
@media (min-width: 520px) {
  .app-shell {
    box-shadow: 0 0 40px rgba(90, 60, 20, 0.08);
  }
}

/* 触屏设备隐藏箭头（依靠滑动与指示点） */
@media (hover: none) and (pointer: coarse) {
  .carousel-arrow {
    display: none;
  }
}

/* ================================================================
   家庭日历页
   ================================================================ */

.cal-shell {
  display: flex;
  flex-direction: column;
  padding-bottom: 0;
  overflow: hidden;
}

.cal-top {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: calc(12px + env(safe-area-inset-top, 0px)) 16px 10px;
}

.cal-back {
  flex: none;
  width: 38px;
  height: 38px;
  border: 0;
  border-radius: 50%;
  background: #fff;
  color: #5b4a2f;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 3px 10px rgba(90, 60, 20, 0.1);
  cursor: pointer;
}

.cal-back:active {
  transform: scale(0.95);
}

.cal-top h1 {
  flex: 1;
  min-width: 0;
  font-size: 19px;
  font-weight: 800;
  color: #3d2f14;
  text-align: center;
}

.cal-today {
  flex: none;
  padding: 6px 12px;
  border: 0;
  border-radius: 999px;
  background: linear-gradient(135deg, var(--brand), var(--brand-dark));
  color: #fff;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}

.cal-today:active {
  opacity: 0.92;
}

.cal-main {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 0 16px calc(16px + env(safe-area-inset-bottom, 0px));
}

.cal-card {
  background: var(--card);
  border-radius: 20px;
  padding: 14px 14px 18px;
  box-shadow: 0 4px 14px rgba(130, 100, 50, 0.07);
}

.cal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 12px;
}

.cal-arrow {
  flex: none;
  width: 30px;
  height: 30px;
  border: 0;
  border-radius: 50%;
  background: #f5efe1;
  color: #8a7a55;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.cal-arrow:active {
  background: #ece3cf;
}

.cal-selects {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 14px;
  color: #5f4a2b;
  font-weight: 600;
}

.cal-selects select {
  border: 0;
  background: #f5efe1;
  color: #5f4a2b;
  border-radius: 10px;
  padding: 6px 10px;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  font-family: inherit;
}

.cal-weekdays {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
  text-align: center;
  margin-bottom: 6px;
}

.cal-weekdays span {
  font-size: 12px;
  color: #a49a89;
  font-weight: 600;
}

.cal-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
}

.cal-cell {
  aspect-ratio: 1 / 1;
  border: 0;
  border-radius: 12px;
  background: transparent;
  font-size: 14px;
  font-weight: 500;
  color: #3f3a31;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  cursor: pointer;
}

.cal-cell:active {
  background: #f5efe1;
}

.cal-cell.is-today {
  box-shadow: inset 0 0 0 2px var(--brand);
  color: var(--brand-deep);
  font-weight: 700;
}

.cal-cell.is-selected {
  background: var(--brand);
  color: #fff;
  font-weight: 700;
}

.cal-cell.is-selected.is-today {
  box-shadow: none;
}

.cal-cell.has-event::after {
  content: '';
  position: absolute;
  bottom: 5px;
  left: 50%;
  transform: translateX(-50%);
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--brand);
}

.cal-cell.is-selected.has-event::after {
  background: #fff;
}

.cal-cell-blank {
  pointer-events: none;
}

.cal-detail {
  margin-top: 14px;
  background: var(--card);
  border-radius: 20px;
  box-shadow: 0 4px 14px rgba(130, 100, 50, 0.07);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-height: 180px;
}

.cal-detail-head {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 16px 10px;
  border-bottom: 1px solid var(--line);
}

.cal-detail-head b {
  font-size: 16px;
  font-weight: 700;
  color: #3d2f14;
}

.cal-detail-head span {
  font-size: 12px;
  color: #a49a89;
}

.cal-detail-body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 10px 16px 14px;
}

.cal-empty {
  min-height: 120px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  color: #a49a89;
  font-size: 14px;
}

.cal-empty svg {
  opacity: 0.6;
}

.cal-event {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px solid var(--line);
}

.cal-event:last-child {
  border-bottom: 0;
}

.cal-event-time {
  flex: none;
  min-width: 44px;
  font-size: 13px;
  font-weight: 700;
  color: var(--brand-deep);
}

.cal-event-title {
  flex: 1;
  font-size: 14px;
  color: #5f4a2b;
  line-height: 1.5;
}

.cal-form {
  flex: none;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 16px;
  border-top: 1px solid var(--line);
  background: #fffdf8;
}

.cal-form input[type='text'] {
  flex: 1;
  min-width: 0;
  height: 40px;
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 0 12px;
  font-size: 14px;
  color: #3f3a31;
  background: #fff;
}

.cal-form input[type='time'] {
  flex: none;
  width: 92px;
  height: 40px;
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 0 8px;
  font-size: 14px;
  color: #3f3a31;
  background: #fff;
}

.cal-form button {
  flex: none;
  height: 40px;
  padding: 0 14px;
  border: 0;
  border-radius: 10px;
  background: linear-gradient(135deg, var(--brand), var(--brand-dark));
  color: #fff;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}

.cal-form button:active {
  opacity: 0.92;
}

.cal-toast {
  position: fixed;
  left: 50%;
  bottom: 90px;
  transform: translateX(-50%) translateY(16px);
  z-index: 300;
  max-width: 340px;
  padding: 10px 18px;
  border-radius: 999px;
  background: rgba(52, 46, 36, 0.92);
  color: #fff;
  font-size: 14px;
  text-align: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s ease, transform 0.25s ease;
}

.cal-toast.show {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

/* ================================================================
   管理后台页（admin/*）：用户管理
   ================================================================ */

/* Toast 需悬浮在所有管理页弹层（sheet/dialog）之上 */
#toast {
  z-index: 300;
}

.um-shell {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  padding-bottom: 0;
}

/* ---- 顶栏 ---- */
.um-top {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: calc(10px + env(safe-area-inset-top, 0px)) 16px 6px;
}

.um-back {
  flex: none;
  width: 38px;
  height: 38px;
  border: 0;
  border-radius: 50%;
  background: #fff;
  color: #5b4a2f;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 3px 10px rgba(90, 60, 20, 0.1);
  cursor: pointer;
}

.um-back:active {
  transform: scale(0.95);
}

.um-top h1 {
  flex: 1;
  min-width: 0;
  font-size: 19px;
  font-weight: 800;
  color: #3d2f14;
  letter-spacing: 0.5px;
  white-space: nowrap;
}

/* ---- 统计卡片 ---- */
.um-stats {
  flex: none;
  display: flex;
  gap: 8px;
  margin: 6px 16px 10px;
}

.um-stat {
  flex: 1;
  min-width: 0;
  background: #fff;
  border-radius: 14px;
  padding: 9px 6px 8px;
  text-align: center;
  box-shadow: 0 2px 8px rgba(90, 60, 20, 0.05);
}

.um-stat b {
  display: block;
  font-size: 19px;
  color: #5a4420;
  line-height: 1.2;
}

.um-stat span {
  display: block;
  font-size: 11px;
  color: #a08a5e;
  margin-top: 2px;
  white-space: nowrap;
}

.um-stat.is-admin b {
  color: #d97b12;
}

.um-stat.is-off b {
  color: #d8503a;
}

/* ---- 搜索框 ---- */
.um-search {
  flex: none;
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 16px 10px;
}

.um-searchbox {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 8px;
  background: #fff;
  border: 1px solid #eadfc9;
  border-radius: 13px;
  padding: 0 12px;
  height: 42px;
  color: #b3a17d;
}

.um-searchbox input {
  flex: 1;
  min-width: 0;
  border: 0;
  outline: 0;
  background: transparent;
  font-size: 14px;
  color: #3d2f14;
}

.um-searchbox input::placeholder {
  color: #c4b190;
}

.um-clear {
  border: 0;
  background: none;
  color: #c4b190;
  cursor: pointer;
  padding: 2px;
  display: none;
}

.um-searchbox.has-keyword .um-clear {
  display: block;
}

/* ---- 用户列表 ---- */
.um-list {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 2px 16px 10px;
}

.um-loading,
.um-empty {
  padding: 40px 0;
  text-align: center;
  color: #a08a5e;
  font-size: 13px;
  line-height: 1.8;
}

.um-empty svg {
  opacity: 0.5;
  margin-bottom: 6px;
}

.um-user {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 12px;
  background: #fff;
  border: 1px solid #f0e6d2;
  border-radius: 16px;
  padding: 12px 14px;
  margin-bottom: 10px;
  text-align: left;
  cursor: pointer;
  box-shadow: 0 2px 6px rgba(90, 60, 20, 0.04);
  transition: transform 0.12s;
}

.um-user:active {
  transform: scale(0.985);
}

.um-avatar {
  flex: none;
  width: 46px;
  height: 46px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  font-weight: 700;
  color: #fff;
  background: linear-gradient(135deg, #b9c6d8, #7d93b2);
}

.um-user.is-admin-user .um-avatar {
  background: linear-gradient(135deg, #ffb34d, #e8732f);
}

.um-user.is-off-user .um-avatar {
  background: linear-gradient(135deg, #d8d0bc, #b3a98f);
}

.um-main {
  flex: 1;
  min-width: 0;
}

.um-name-row {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
}

.um-name-row b {
  font-size: 15px;
  color: #3d2f14;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 150px;
}

.um-user.is-off-user .um-name-row b {
  color: #9a907c;
}

.um-phone {
  font-size: 12px;
  color: #a08a5e;
  margin-top: 3px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.um-tag {
  flex: none;
  font-size: 11px;
  padding: 2px 8px;
  border-radius: 999px;
  font-weight: 600;
  line-height: 1.5;
}

.um-tag.is-admin {
  background: #fff1dd;
  color: #c4640a;
}

.um-tag.is-member {
  background: #f1ecdf;
  color: #8a7a55;
}

.um-tag.is-off {
  background: #fdece9;
  color: #d8503a;
}

.um-tag.is-me {
  background: #e9f3ea;
  color: #2e7d46;
}

.um-arrow {
  flex: none;
  color: #cbbfa4;
}

/* ---- 加载更多 / 兜底状态 ---- */
.um-more {
  display: block;
  width: 100%;
  height: 44px;
  border: 0;
  background: transparent;
  color: #b3a17d;
  font-size: 13px;
  cursor: pointer;
}

.um-more:disabled {
  opacity: 0.6;
}

/* ---- 底部新增 ---- */
.um-foot {
  flex: none;
  padding: 8px 16px calc(12px + env(safe-area-inset-bottom, 0px));
}

.um-add {
  width: 100%;
  height: 50px;
  border: 0;
  border-radius: 16px;
  background: linear-gradient(135deg, #ffab4a, #f0761f);
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  letter-spacing: 1px;
  cursor: pointer;
  box-shadow: 0 8px 20px rgba(224, 115, 47, 0.32);
  /* 加号 + 文字整体水平居中，加号位于文字左侧 */
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
}

.um-add:active {
  transform: scale(0.99);
}

/* ---- 底部弹层（新增 / 编辑） ---- */
.sheet-mask {
  position: fixed;
  inset: 0;
  z-index: 220;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  background: rgba(40, 30, 15, 0.45);
}

.sheet-mask[hidden] {
  display: none;
}

.sheet {
  width: 100%;
  max-width: 480px;
  max-height: 88vh;
  display: flex;
  flex-direction: column;
  background: #fff;
  border-radius: 22px 22px 0 0;
  animation: sheet-up 0.22s ease;
  padding-bottom: env(safe-area-inset-bottom, 0px);
}

@keyframes sheet-up {
  from {
    transform: translateY(28%);
    opacity: 0.5;
  }
  to {
    transform: translateY(0);
    opacity: 1;
  }
}

.sheet-head {
  flex: none;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 16px 18px 6px;
}

.sheet-head h2 {
  flex: 1;
  font-size: 17px;
  font-weight: 800;
  color: #3d2f14;
}

.sheet-close {
  flex: none;
  width: 32px;
  height: 32px;
  border: 0;
  border-radius: 50%;
  background: #f4efe4;
  color: #8a7a55;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.sheet-body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 6px 18px 10px;
}

.um-field {
  display: block;
  margin-bottom: 14px;
}

.um-field-label {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 13px;
  font-weight: 600;
  color: #8a7a55;
  margin-bottom: 6px;
}

.um-field-label i.need {
  font-style: normal;
  color: #e2523c;
}

.um-field input[type='text'],
.um-field input[type='password'],
.um-field input[type='tel'],
.um-field input[type='number'] {
  width: 100%;
  height: 46px;
  border: 1px solid #e8dcc2;
  border-radius: 12px;
  padding: 0 14px;
  font-size: 15px;
  color: #3d2f14;
  background: #fffdf8;
  outline: none;
  box-sizing: border-box;
}

.um-field input:focus {
  border-color: #f0a35c;
  box-shadow: 0 0 0 3px rgba(240, 130, 60, 0.12);
}

.um-field input:disabled {
  background: #f5f0e4;
  color: #a08a5e;
}

.um-hint {
  font-size: 12px;
  color: #b3a17d;
  margin-top: 5px;
  line-height: 1.5;
}

.um-err {
  margin: 2px 0 6px;
  padding: 9px 12px;
  background: #fdece9;
  color: #c83a26;
  font-size: 13px;
  border-radius: 10px;
  display: none;
}

.um-err.show {
  display: block;
}

/* 角色分段选择 */
.um-seg {
  display: flex;
  gap: 4px;
  background: #f3eddf;
  border-radius: 12px;
  padding: 4px;
}

.um-seg button {
  flex: 1;
  height: 38px;
  border: 0;
  border-radius: 9px;
  background: transparent;
  color: #8a7a55;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
}

.um-seg button.is-on {
  background: #fff;
  color: #d97b12;
  box-shadow: 0 2px 8px rgba(120, 80, 20, 0.12);
}

.um-seg button:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

/* 启停开关 */
.um-toggle-row {
  display: flex;
  align-items: center;
  gap: 12px;
}

.um-toggle-row .um-field-label {
  margin-bottom: 0;
}

.um-switch {
  flex: none;
  width: 52px;
  height: 30px;
  border: 0;
  border-radius: 999px;
  background: #d8d0bc;
  position: relative;
  cursor: pointer;
  transition: background 0.2s;
  padding: 0;
  margin-left: auto;
}

.um-switch span {
  position: absolute;
  top: 3px;
  left: 3px;
  width: 24px;
  height: 24px;
  background: #fff;
  border-radius: 50%;
  transition: transform 0.2s;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
}

.um-switch.is-on {
  background: linear-gradient(135deg, #ffab4a, #f0761f);
}

.um-switch.is-on span {
  transform: translateX(22px);
}

.um-switch:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* 底部操作按钮 */
.sheet-actions {
  flex: none;
  display: flex;
  gap: 10px;
  padding: 10px 18px 12px;
  border-top: 1px solid #f3ecdd;
}

.um-delbtn {
  flex: 1;
  height: 48px;
  border: 1px solid #f3c9c0;
  border-radius: 15px;
  background: #fff8f6;
  color: #d8503a;
  font-size: 15px;
  font-weight: 700;
  cursor: pointer;
}

.um-savebtn {
  flex: 2;
  height: 48px;
  border: 0;
  border-radius: 15px;
  background: linear-gradient(135deg, #ffab4a, #f0761f);
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  box-shadow: 0 8px 18px rgba(224, 115, 47, 0.25);
}

.um-savebtn:disabled {
  opacity: 0.6;
}

.um-savebtn:active,
.um-delbtn:active {
  transform: scale(0.98);
}

/* =========================================================
   灞曠ず绠＄悊锛堣疆鎾浘绠＄悊锛夛細澶嶇敤 um-*/sheet-* 鍩虹椋庢牸锛?   浠呰ˉ鍏呭垪琛ㄧ缉鐣ュ浘涓庡浘鐗囦笂浼犻€夋嫨鍣ㄧ瓑涓撳睘鏍峰紡
   ========================================================= */
.sm-list-item { display: flex; align-items: center; gap: 12px; }
.sm-thumb {
  flex: none;
  width: 92px;
  height: 58px;
  border-radius: 11px;
  overflow: hidden;
  position: relative;
  background-color: #f3eddf;
  background-size: cover;
  background-position: center;
  box-shadow: inset 0 0 0 1px rgba(120, 90, 30, 0.08);
}
.sm-thumb.sm-thumb-none {
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #f7ecd4, #eadbb8);
  color: #c9b587;
}
.sm-thumb-none svg { opacity: 0.85; }
.sm-main { flex: 1; min-width: 0; }
.sm-title-row { display: flex; align-items: center; gap: 6px; min-width: 0; }
.sm-title-row b {
  font-size: 15px;
  color: #3d2f14;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 132px;
}
.sm-sub {
  font-size: 12px;
  color: #a08a5e;
  margin-top: 3px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.sm-sub.is-empty { color: #c9b587; }
.sm-row-tags { display: flex; align-items: center; gap: 6px; margin-top: 5px; }
.sm-sort-chip {
  font-size: 11px;
  padding: 1px 7px;
  border-radius: 999px;
  background: #f1ecdf;
  color: #8a7a55;
  font-weight: 600;
  line-height: 1.6;
}
.um-user.is-off-user .sm-title-row b,
.um-user.is-off-user .sm-sub { color: #9a907c; }

/* ---- 寮瑰眰锛氬浘鐗囦笂浼犻€夋嫨鍣?---- */
.sm-picker {
  position: relative;
  height: 158px;
  border-radius: 14px;
  overflow: hidden;
  background-color: #fdf9f0;
  border: 1.5px dashed #dccfae;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  user-select: none;
  -webkit-user-select: none;
  margin-bottom: 14px;
}
.sm-picker:active { opacity: 0.92; }
.sm-picker-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: none;
}
.sm-picker.has-img .sm-picker-img { display: block; }
.sm-picker-hint {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  color: #b3a17d;
  font-size: 12px;
  line-height: 1.5;
  text-align: center;
  padding: 0 24px;
  pointer-events: none;
}
.sm-picker-hint b { font-size: 14px; color: #a08a5e; font-weight: 700; }
.sm-picker.has-img .sm-picker-hint { display: none; }
.sm-picker-bar {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 34px;
  display: none;
  align-items: stretch;
  background: linear-gradient(transparent, rgba(30, 20, 5, 0.55));
  padding: 0;
}
.sm-picker.has-img .sm-picker-bar { display: flex; }
.sm-picker-bar button {
  flex: 1;
  border: 0;
  background: transparent;
  color: #fff;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}
.sm-picker-bar button:active { background: rgba(255, 255, 255, 0.16); }
.sm-picker-loading {
  position: absolute;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: center;
  background: rgba(253, 249, 240, 0.85);
  color: #a08a5e;
  font-size: 13px;
  z-index: 3;
}
.sm-picker-loading.show { display: flex; }
.sm-picker-tip { font-size: 12px; color: #b3a17d; margin: -8px 0 14px; line-height: 1.6; }

/* ---- 寮瑰眰锛氬琛屼粙缁嶈緭鍏?---- */
.um-field textarea.sm-textarea {
  width: 100%;
  border: 1px solid #e8dcc2;
  border-radius: 12px;
  padding: 10px 14px;
  font-size: 15px;
  color: #3d2f14;
  background: #fffdf8;
  outline: none;
  box-sizing: border-box;
  resize: vertical;
  min-height: 66px;
  line-height: 1.5;
  font-family: inherit;
}
.um-field textarea.sm-textarea:focus {
  border-color: #f0a35c;
  box-shadow: 0 0 0 3px rgba(240, 130, 60, 0.12);
}

 
 / *   - - - -   T�&1� zOx���U}�h-h	0O� �a�Y0}t}\4U͓�V}�  +   �m�0�P�mT���h�RM�  - - - -   * / 
 
 . n m - t i t l e - l i n e   {   d i s p l a y :   f l e x ;   a l i g n - i t e m s :   c e n t e r ;   g a p :   6 p x ;   m i n - w i d t h :   0 ;   } 
 
 . n m - t i t l e   { 
 
     f l e x :   1 ; 
 
     m i n - w i d t h :   0 ; 
 
     f o n t - s i z e :   1 5 p x ; 
 
     c o l o r :   # 3 d 2 f 1 4 ; 
 
     o v e r f l o w :   h i d d e n ; 
 
     t e x t - o v e r f l o w :   e l l i p s i s ; 
 
     w h i t e - s p a c e :   n o w r a p ; 
 
     m a x - w i d t h :   1 9 0 p x ; 
 
     f o n t - w e i g h t :   6 0 0 ; 
 
 } 
 
 . n m - p r e v i e w   { 
 
     f o n t - s i z e :   1 2 . 5 p x ; 
 
     l i n e - h e i g h t :   1 . 6 ; 
 
     c o l o r :   # 9 a 8 a 6 3 ; 
 
     m a r g i n - t o p :   5 p x ; 
 
     w o r d - b r e a k :   b r e a k - w o r d ; 
 
     o v e r f l o w - w r a p :   b r e a k - w o r d ; 
 
     d i s p l a y :   - w e b k i t - b o x ; 
 
     - w e b k i t - l i n e - c l a m p :   2 ; 
 
     - w e b k i t - b o x - o r i e n t :   v e r t i c a l ; 
 
     o v e r f l o w :   h i d d e n ; 
 
 } 
 
 . n m - p r e v i e w . i s - e m p t y   {   c o l o r :   # c 9 b 5 8 7 ;   } 
 
 . u m - u s e r . i s - o f f - u s e r   . n m - t i t l e , 
 
 . u m - u s e r . i s - o f f - u s e r   . n m - p r e v i e w   {   c o l o r :   # 9 a 9 0 7 c ;   } 
 
 
 
 / *   O� �a�YF��gHg�d�S�Y�U}Ǔ�d�s�m� \m�m}  * / 
 
 . u m - f i e l d   t e x t a r e a . s m - t e x t a r e a . n m - c o n t e n t   {   m i n - h e i g h t :   1 5 0 p x ;   } 
 
 