:root { color-scheme: light dark; /* Size of text in message bubbles */ --message-text-size: 10pt; /* Height of caption panel */ --caption-panel-height: 4rem; /* Wallpaper */ --wallpaper-url: url('../img/bkg/a00.png'); /* path relative to CSS file */ --wallpaper-repeat: repeat; --wallpaper-blur: 0px; --wallpaper-invert: 0; --wallpaper-brightness: 1; --wallpaper-size: contain; --wallpaper-position: center; /* Core Palette */ --clr-bright: light-dark(#fff, #181818); --clr-dark: light-dark(#000, #fff); --clr-transparent: transparent; --clr-std-gray: #808080; /* Standard gray color */ --clr-std-ltgray: light-dark(#c0c0c0, #3f3f3f); /* Standard silver color */ --clr-std-teal: teal; /* Standard teal color */ --clr-std-grey: grey; /* Standard grey color */ --clr-std-orange: #ffa500; /* Standard orange color */ /* Primary Accent Colors */ --clr-primary-accent: light-dark(#2094f3, #0e6dba); /* blue 500, links, borders */ --clr-primary-accent-hover: light-dark(#0a6ebd, #116ab4); /* hover for primary accent */ --clr-primary-accent-focus-shadow: light-dark(rgba(33, 150, 243, 0.25), rgba(3, 7, 12, 0.25)); /* focus shadow for inputs with primary accent */ --clr-primary-accent-transparent-medium: light-dark(rgba(33, 150, 243, 0.3), rgba(20, 70, 120, 0.3)); /* for active call shadow */ --clr-primary-action: light-dark(#1e89e6, #1571c1); /* blue 600, primary buttons */ --clr-primary-action-hover: light-dark(#2962ff, #0037b8); /* hover for primary action */ --clr-secondary-accent: light-dark(#0097a8, #006570); /* Checkmark icon, unread badge bg */ --clr-primary-light-blue: light-dark(#bcdefb, #78a0be); /* light-blue 100, side caption panel text/link */ --clr-light-blue-accent: light-dark(#0398e2, #0379b5); /* light-blue accent, reply quote border, pinned active dot */ /* Secondary/Neutral Grays & Backgrounds */ --clr-body-background: var(--clr-std-ltgray); /* Main page background */ --clr-text-primary: light-dark(#666, #999); /* Default text color */ --clr-text-secondary: light-dark(#757575, #8a8a8a); /* Muted text, icons e.g. menu trigger */ --clr-text-tertiary: light-dark(#999, #787878); /* Even more muted text, borders, some icons */ --clr-text-tertiary-activated: #888; /* Activated (hover, focus) tertiary text */ --clr-text-placeholder: light-dark(#bbb, #555); /* Placeholder text */ --clr-text-disabled: light-dark(#888, #777); /* Disabled text e.g. in-place-edit */ --clr-border-light: light-dark(#ccc, #555); /* Common light border, separator */ --clr-border-muted: light-dark(#ddd, #444); /* Softer border, e.g. in-place-edit dashed */ --clr-background-off-white: light-dark(#fafafa, #222); /* Common very light background */ --clr-background-light-gray: light-dark(#f0f0f0, #0f0f0f); /* HR background, action button hover */ --clr-background-extra-light-gray: light-dark(#eee, #222); /* Flat button faux bg, tabbar bg, chip bg */ --clr-background-blue-gray-50: light-dark(#edf0f2, #202c33); /* Contact hover, messages panel, send message panel */ --clr-background-blue-gray-75: light-dark(#e1e8eb, #182124); /* Contact pinned */ --clr-background-blue-gray-100: light-dark(#cfd8dc, #20272a); /* Contact selected, uploader bar */ --clr-background-blue-gray-300: light-dark(#b0bec5, #354146); /* Topic/Info caption panel bg, some lettertiles */ --clr-blue-wash-light: light-dark(#f0f0ff, #22222d); /* bot form button bg */ --clr-blue-wash-medium: light-dark(#d8e8ff, #123550); /* Pinned active bg */ --clr-primary-wash: light-dark(#e3f2fd, #072f45); /* Secondary button hover, avatar upload hover, bubble meta deleted bg */ --clr-indigo-50: light-dark(#e8eaf6, #1a2c44); /* Outline button hover */ /* Semantic Colors: Danger, Warning, Success, Info */ --clr-danger-text: light-dark(#d33131, #931f1f); /* Danger text, invalid label */ --clr-danger-text-hover: light-dark(#f44034, #cc1100); /* Hover for danger text */ --clr-error-text-muted: light-dark(#cc6666, #993333); /* For less critical errors like invalid in-place edit icon/text */ --clr-error-bg-light: light-dark(#ffccd1, #ff6675); /* Info box error bg */ --clr-error-border-light: light-dark(#ffbdc6, #ff334e); /* Info box error border */ --clr-error-text-dark: light-dark(#b51c1c, #de2323); /* Info box error text, icon */ --clr-error-icon: light-dark(#ef5552, #d81b0e); /* Info box error icon specific */ --clr-warning-accent: light-dark(#FFC107, #808020); /* Amber, danger-color */ --clr-warning-bg-light: light-dark(#fff9c4, #00060c); /* Info box warning bg */ --clr-warning-border-light: light-dark(#fff59d, #000a2b); /* Info box warning border */ --clr-warning-text-dark: light-dark(#6d4c41, #a08356); /* Info box warning text */ --clr-warning-icon: light-dark(#fbc02d, #b48204); /* Info box warning icon specific */ --clr-info-bg-light: light-dark(#e1f5fe, #010a0e); /* Info box info bg */ --clr-info-border-light: light-dark(#b3e5fc, #001824); /* Info box info border */ --clr-info-text-dark: light-dark(#0288d1, #00151f); /* Info box info text, icon */ /* Special UI Elements Colors */ --clr-header-stripe-bg: light-dark(#3949AB, #12152f); /* Deep-blue stripe at top */ --clr-scrollbar-thumb: light-dark(rgba(0,0,0,0.3), rgba(255,255,255,0.3)); --clr-scrollbar-track: light-dark(rgba(255,255,255,0.1), rgba(0,0,0,0.1)); --clr-menu-item-hover-bg: light-dark(#f5f5f5, #0a0a0a); --clr-alert-overlay-bg: light-dark(rgba(240,240,240,0.85), rgba(15,15,15,0.85)); --clr-verified-accent: light-dark(#02a6f2, #027db6); /* Verified color */ --clr-staff-accent: light-dark(#689f38, #598830); /* Staff color */ --clr-badge-inv: light-dark(#fffd, #cccd); /* Badge inverted text */ --clr-cyan-50: light-dark(#e0f7fa, #2f3e43); /* Dummy view bg */ --clr-overlay-white-strong: light-dark(rgba(255, 255, 255, 0.9), rgba(0,0,0,0.90)); /* Image preview bg, video container bg */ --clr-gray-medium-bg: light-dark(#777, #444); /* Image preview container bg (darker gray) */ --clr-toast-bg: #333; --clr-toast-text: light-dark(#eee, #aaa); --clr-online: #4caf50; --clr-offline: light-dark(#ccc, #999); /* Shadow Colors & Values */ --clr-shadow-input-underline: rgba(0,0,0, 0.1); --clr-shadow-hr-inset: rgba(0,0,0,0.15); --clr-shadow-scrollbar-track-webkit: rgba(0,0,0,0.2); --clr-shadow-button: rgba(0,0,0, 0.25); /* General purpose shadow for buttons, spinners etc. */ --clr-shadow-button-inset-active: rgba(0,0,0, 0.125); --clr-shadow-dialog: rgba(0,0,0, 0.45); /* For menus, alerts, dialogs */ --clr-shadow-panel-divider: rgba(0,0,0,0.1); /* For subtle shadows under/above panels */ --clr-shadow-gray-strong: light-dark(var(--clr-std-gray), #333); /* For panel box-shadows using 'gray' keyword */ --clr-shadow-silver-subtle: light-dark(var(--clr-std-ltgray), #333); /* For panel box-shadows using 'silver' keyword */ --clr-shadow-bubble-drop: rgba(0,0,0,0.3); /* Buttons */ --clr-button-primary-bg: var(--clr-primary-action); --clr-button-primary-text: var(--clr-bright); --clr-button-primary-hover-bg: var(--clr-primary-action-hover); --clr-button-secondary-bg: var(--clr-bright); --clr-button-secondary-text: var(--clr-primary-accent); --clr-button-secondary-hover-bg: var(--clr-primary-wash); --clr-button-outline-text: var(--clr-primary-accent); --clr-button-outline-border: var(--clr-std-ltgray); --clr-button-outline-hover-bg: var(--clr-indigo-50); --clr-button-danger-bg: light-dark(#ec645f, #d74742); --clr-button-danger-text: var(--clr-bright); --clr-button-danger-hover-bg: light-dark(#f77, #a55); --clr-button-positive-bg: light-dark(#71c46f, #3f983e); --clr-button-positive-text: var(--clr-bright); --clr-button-positive-hover-bg: light-dark(#7fed7f, #6ec26e); /* Inputs */ --clr-input-text: var(--clr-text-primary); --clr-input-border: var(--clr-border-light); --clr-input-border-focus: var(--clr-primary-accent); --clr-input-shadow: var(--clr-shadow-input-underline); --clr-input-shadow-focus: var(--clr-primary-accent-focus-shadow); --clr-input-invalid-border: light-dark(#e57171, #561010); --clr-input-invalid-shadow: light-dark(#e5737340, #1a0c0c40); --clr-input-placeholder-text: var(--clr-text-placeholder); /* Chat Bubbles -- docs/images/个人对话框(我的状态).png 与 ...(对方的状态).png:发出=蓝色实心+白字, 收到=浅灰+深字,这两份参考图和之前所有相关截图口径一致;旧值(收到浅绿#c4e0a3、发出用页面同款 off-white)不匹配任何一张参考图,是尚未跟设计稿核对过的原始默认值,这次改成实际设计要求的配色。 */ --clr-bubble-left-bg: light-dark(#f0f0f0, #2c2c2e); --clr-bubble-left-bg-flash: light-dark(#d8d8d8, #3a3a3c); --clr-bubble-right-bg: var(--clr-primary-accent); --clr-bubble-right-bg-flash: var(--clr-primary-accent-hover); --clr-bubble-text: light-dark(#212121, #bbc); --clr-bubble-right-text: #fff; --clr-bubble-meta-text: var(--clr-text-primary); --clr-bubble-meta-deleted-bg: var(--clr-primary-wash); --clr-bubble-meta-date-bg: transparent; --clr-bubble-timestamp-text: light-dark(#777, #888); --clr-bubble-author-text: light-dark(#777, #666); /* Reply Quotes */ --clr-reply-quote-border: var(--clr-light-blue-accent); --clr-reply-quote-text: var(--clr-text-primary); --clr-reply-quote-left-bg: light-dark(rgba(255, 255, 255, 0.4), rgba(0, 0, 0, 0.4)); --clr-reply-quote-right-bg: light-dark(#8080801f, #c4c4c42e); --clr-reply-quote-preview-bg: var(--clr-background-off-white); /* Badges (small inline labels) */ --clr-badge-default-bg: light-dark(#e8e8e8, #171717); --clr-badge-default-text: var(--clr-text-primary); --clr-badge-default-border: var(--clr-std-ltgray); --clr-badge-green-bg: light-dark(#efe, #131); --clr-badge-green-text: light-dark(#383, #363); --clr-badge-green-border: light-dark(#aca, #242); --clr-badge-yellow-bg: light-dark(#ffe, #331); /* Note: #ffe is close to white, dark will be black */ --clr-badge-yellow-text: light-dark(#660, #660); --clr-badge-yellow-border: light-dark(#cc9, #552); --clr-badge-blue-bg: light-dark(#f0f0ff, #224); --clr-badge-blue-text: light-dark(#339, #447); --clr-badge-blue-border: light-dark(#aad, #336); --clr-badge-red-bg: light-dark(#fee, #522); --clr-badge-red-text: light-dark(#933, #744); --clr-badge-red-border: light-dark(#c99, #633); --clr-badge-magenta-bg: light-dark(#fef, #535); --clr-badge-magenta-text: light-dark(#939, #747); --clr-badge-magenta-border: light-dark(#c9c, #636); /* Chips */ --clr-chip-bg: var(--clr-background-extra-light-gray); --clr-chip-invalid-text: var(--clr-error-text-muted); --clr-chip-invalid-bg: var(--clr-badge-red-bg); --clr-chip-remove-icon-bg: light-dark(#aaa, #555); --clr-chip-remove-icon-text: var(--clr-background-extra-light-gray); --clr-chip-remove-icon-hover-bg: var(--clr-text-placeholder); --clr-chip-remove-icon-hover-text: var(--clr-bright); /* Tabbar */ --clr-tabbar-bg: var(--clr-background-extra-light-gray); --clr-tabbar-inactive-text: light-dark(rgba(33,150,243,0.6), rgba(22,90,160,1)); --clr-tabbar-active-text: var(--clr-primary-accent); --clr-tabbar-inactive-border: var(--clr-border-light); --clr-tabbar-active-border: var(--clr-primary-accent); /* Miscellaneous UI */ --clr-highlight-text: var(--clr-std-teal); --clr-highlight-preview-text: light-dark(#5f9ea0, #205e60); --clr-spinner-track: light-dark(#f3f3f3, #0c0c0c); --clr-spinner-active: var(--clr-primary-action); --clr-cropper-bounding-box-border: var(--clr-primary-action); --clr-cropper-bounding-box-bg: var(--clr-text-tertiary); --clr-cropper-cutout-border: var(--clr-text-tertiary); --clr-cropper-cutout-shadow: light-dark(rgb(230 246 255 / 66%), rgb(25 10 0 / 66%)); --clr-audio-bg: var(--clr-background-extra-light-gray); --clr-audio-icon: light-dark(rgba(102, 117, 117, 0.8), rgba(153, 138, 138, 0.8)); --clr-audio-icon-disabled: light-dark(rgba(153 153 153 / 75%), rgba(102 102 102 / 75%)); --clr-audio-timer-text: light-dark(rgba(102, 102, 102, 0.75), rgba(153, 153, 153, 0.75)); --clr-pinned-menu-bg: light-dark(#f8f8f8, #1a1a1a); --clr-drag-n-drop-border: var(--clr-std-grey); --clr-drag-n-drop-text: var(--clr-std-grey); --clr-drag-n-drop-bg: light-dark(rgba(255,255,255,.95), rgba(0,0,0,.95)); --clr-drag-n-drop-outline: light-dark(rgba(255,255,255,.95), rgba(0,0,0,.95)); /* Letter Tiles Base */ --clr-lettertile-default-text: light-dark(#fafafacc, #dcdcdccc); --clr-lettertile-hover-text: var(--clr-bright); /* Letter Tile Backgrounds (lt-bg) */ --clr-lt-bg-0: #ef9a9a; --clr-lt-bg-1: #90caf9; --clr-lt-bg-2: #b0bec4; --clr-lt-bg-3: #b49edb; --clr-lt-bg-4: #ffa98f; --clr-lt-bg-5: #a4d5a6; --clr-lt-bg-6: #ededed; --clr-lt-bg-7: #e6ee9b; --clr-lt-bg-8: #c4e0a3; --clr-lt-bg-9: #f0e57f; --clr-lt-bg-10: #f490b1; --clr-lt-bg-11: #a0a8da; --clr-lt-bg-12: #ffdf80; --clr-lt-bg-13: #bcaaa4; --clr-lt-bg-14: #80deea; --clr-lt-bg-15: #cd92d8; /* Letter Tile Dark Backgrounds (dk-bg) */ --clr-dk-bg-0: #c72929; --clr-dk-bg-1: #ad1457; --clr-dk-bg-2: #681b98; --clr-dk-bg-3: #4527a0; --clr-dk-bg-4: #293594; --clr-dk-bg-5: #1565c1; --clr-dk-bg-6: #0277bb; --clr-dk-bg-7: #00838f; --clr-dk-bg-8: #006b5f; --clr-dk-bg-9: #2f7f33; --clr-dk-bg-10: #54892f; --clr-dk-bg-11: #9e9e24; --clr-dk-bg-12: #f9a824; --clr-dk-bg-13: #ff9100; --clr-dk-bg-14: #f06c00; --clr-dk-bg-15: #d54215; /* Letter Tile Foreground Colors (lt-fg) */ --clr-lt-fg-0: var(--clr-lt-bg-0); /* Use same as bg, as these are for text, will follow light-dark */ --clr-lt-fg-1: var(--clr-lt-bg-1); --clr-lt-fg-2: var(--clr-lt-bg-2); --clr-lt-fg-3: var(--clr-lt-bg-3); --clr-lt-fg-4: var(--clr-lt-bg-4); --clr-lt-fg-5: var(--clr-lt-bg-5); --clr-lt-fg-6: var(--clr-lt-bg-6); --clr-lt-fg-7: var(--clr-lt-bg-7); --clr-lt-fg-8: var(--clr-lt-bg-8); --clr-lt-fg-9: var(--clr-lt-bg-9); --clr-lt-fg-10: var(--clr-lt-bg-10); --clr-lt-fg-11: var(--clr-lt-bg-11); --clr-lt-fg-12: var(--clr-lt-bg-12); --clr-lt-fg-13: var(--clr-lt-bg-13); --clr-lt-fg-14: var(--clr-lt-bg-14); --clr-lt-fg-15: var(--clr-lt-bg-15); /* Letter Tile Dark Foreground Colors (dk-fg) */ --clr-dk-fg-0: var(--clr-dk-bg-0); /* Use same as bg, as these are for text, will follow light-dark */ --clr-dk-fg-1: var(--clr-dk-bg-1); --clr-dk-fg-2: var(--clr-dk-bg-2); --clr-dk-fg-3: var(--clr-dk-bg-3); --clr-dk-fg-4: var(--clr-dk-bg-4); --clr-dk-fg-5: var(--clr-dk-bg-5); --clr-dk-fg-6: var(--clr-dk-bg-6); --clr-dk-fg-7: var(--clr-dk-bg-7); --clr-dk-fg-8: var(--clr-dk-bg-8); --clr-dk-fg-9: var(--clr-dk-bg-9); --clr-dk-fg-10: var(--clr-dk-bg-10); --clr-dk-fg-11: var(--clr-dk-bg-11); --clr-dk-fg-12: var(--clr-dk-bg-12); --clr-dk-fg-13: var(--clr-dk-bg-13); --clr-dk-fg-14: var(--clr-dk-bg-14); --clr-dk-fg-15: var(--clr-dk-bg-15); } /* Android workplace and office collaboration. */ #sidepanel.workplace-collaboration-panel { width: 100%; min-width: 0; flex: 1 1 auto; color-scheme: light; background: #f4f5f7; } .workplace-collaboration-panel * { box-sizing: border-box; letter-spacing: 0; } .workplace-page { display: flex; position: relative; width: 100%; min-height: 100%; overflow: hidden; color: #242930; background: #f4f5f7; flex-direction: column; } .workplace-page button, .workplace-page input, .workplace-page textarea { font: inherit; letter-spacing: 0; } .workplace-page button { text-transform: none; } .workplace-page > main { min-height: 0; overflow-y: auto; flex: 1 1 auto; } .workplace-header { display: grid; grid-template-columns: 3.6rem minmax(0, 1fr) 3.6rem; align-items: center; min-height: 4.4rem; padding-top: env(safe-area-inset-top); border-bottom: 1px solid #e6e8eb; background: #fff; flex: none; } .workplace-header h1 { min-width: 0; margin: 0; overflow: hidden; font-size: 1.15rem; font-weight: 650; text-align: center; text-overflow: ellipsis; white-space: nowrap; } .workplace-header button { display: grid; place-items: center; width: 3.6rem; min-width: 3.6rem; height: 3.6rem; min-height: 3.6rem; margin: 0; padding: 0; border: 0; box-shadow: none; color: #242930; background: transparent; } .workplace-header button:last-child { color: #246fce; } .workplace-header .material-icons { font-size: 1.6rem; } .workplace-toast { position: fixed; z-index: 80; bottom: max(1.5rem, env(safe-area-inset-bottom)); left: 50%; max-width: calc(100% - 2rem); padding: 0.7rem 1rem; border-radius: 0.3rem; color: #fff; background: rgba(29,33,39,0.94); text-align: center; transform: translateX(-50%); } .workbench-page { background: #fff; } .workbench-page > main { padding: max(1.4rem, env(safe-area-inset-top)) 1.1rem 1.5rem; } .workbench-profile { display: grid; grid-template-columns: 3.4rem minmax(0, 1fr) 3rem; align-items: center; gap: 0.75rem; min-height: 4.8rem; } .workbench-profile img { width: 3.4rem; height: 3.4rem; border-radius: 0.45rem; object-fit: cover; } .workbench-profile span, .workbench-profile strong, .workbench-profile small { display: block; min-width: 0; } .workbench-profile strong { overflow: hidden; font-size: 1.25rem; text-overflow: ellipsis; white-space: nowrap; } .workbench-profile small { margin-top: 0.25rem; color: #767e88; } .workbench-profile button { display: grid; place-items: center; width: 3rem; min-width: 3rem; height: 3rem; min-height: 3rem; margin: 0; padding: 0; border: 0; box-shadow: none; color: #6c737c; background: transparent; } .workbench-banner { display: grid; grid-template-columns: minmax(0, 1fr) 5.5rem; align-items: center; min-height: 9.5rem; margin: 1.25rem 0 1.6rem; padding: 1.35rem; overflow: hidden; border-radius: 0.5rem; color: #fff; background: #3d7ce5; } .workbench-banner strong, .workbench-banner small { display: block; } .workbench-banner strong { max-width: 13rem; font-size: 1.35rem; line-height: 1.45; } .workbench-banner small { margin-top: 0.8rem; color: rgba(255,255,255,0.85); } .workbench-banner > .material-icons { color: #d9e7ff; font-size: 5rem; } .workbench-apps { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1.4rem 0.7rem; } .workbench-apps button { display: flex; align-items: center; width: 100%; min-width: 0; min-height: 5.8rem; margin: 0; padding: 0; border: 0; box-shadow: none; color: #30353c; background: transparent; flex-direction: column; } .workbench-apps button > span { display: grid; position: relative; place-items: center; width: 3.7rem; height: 3.7rem; border-radius: 0.7rem; color: #fff; } .workbench-apps span.tone-violet { background: #7659d6; } .workbench-apps span.tone-orange { background: #f07835; } .workbench-apps span.tone-red { background: #df4e46; } .workbench-apps span.tone-blue { background: #3e78d6; } .workbench-apps span.tone-green { background: #35a96b; } .workbench-apps .material-icons { font-size: 2rem; } .workbench-apps em { position: absolute; top: -0.35rem; right: -0.35rem; display: grid; place-items: center; min-width: 1.25rem; height: 1.25rem; padding: 0 0.25rem; border: 2px solid #fff; border-radius: 0.7rem; color: #fff; background: #e33f4b; font-size: 0.68rem; font-style: normal; } .workbench-apps strong { width: 100%; margin-top: 0.55rem; overflow-wrap: anywhere; font-size: 0.85rem; font-weight: 500; line-height: 1.25; text-align: center; } .workplace-bottom-nav { display: grid; grid-template-columns: repeat(2, 1fr); min-height: calc(4.4rem + env(safe-area-inset-bottom)); padding-bottom: env(safe-area-inset-bottom); border-top: 1px solid #e5e7ea; background: #fff; flex: none; } .workplace-bottom-nav button { display: flex; align-items: center; justify-content: center; min-width: 0; min-height: 4.4rem; margin: 0; padding: 0; border: 0; box-shadow: none; color: #9aa1aa; background: transparent; flex-direction: column; } .workplace-bottom-nav button.active { color: #2d73d2; } .workplace-bottom-nav .material-icons { font-size: 1.65rem; } .workplace-bottom-nav span { margin-top: 0.15rem; font-size: 0.72rem; } .workplace-search { display: grid; grid-template-columns: 2.4rem minmax(0, 1fr); align-items: center; min-height: 3rem; margin: 0.8rem; padding: 0 0.65rem; border: 1px solid #e4e7ea; border-radius: 0.35rem; background: #fff; } .workplace-search .material-icons { color: #9ba2aa; } .workplace-search input { width: 100%; height: 2.8rem; margin: 0; padding: 0; border: 0; box-shadow: none; background: transparent; } .organization-content { background: #f4f5f7; } .organization-tree { margin-top: 0.7rem; background: #fff; } .organization-tree button { display: grid; grid-template-columns: 2.5rem minmax(0, 1fr) 2rem; align-items: center; gap: 0.4rem; width: 100%; min-height: 4rem; margin: 0; padding: 0.55rem 1rem; border: 0; border-bottom: 1px solid #eceef0; border-radius: 0; box-shadow: none; color: #30353c; background: #fff; text-align: left; } .organization-tree button > span, .organization-tree button strong, .organization-tree button small { display: block; min-width: 0; } .organization-tree button strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .organization-tree button small { margin-top: 0.2rem; color: #8b929b; } /* 旧版组织架构的 .organization-root / .organization-department / .organization-members 三条规则 已删除:前两个类名 JSX 里早就没人用了,而 .organization-department 那条 `padding-left: 1.75rem !important` 会压过新版按层级算出来的内联 paddingLeft, 导致一级/二级/三级部门行左边距完全一样、树形层级看不出来(人员行没有 !important,缩进正常, 结果是"部门全平、人员缩进",比不缩进更乱)。新版完整规则在下面 .organization-department 那一块。 */ .organization-members img { width: 2.5rem; height: 2.5rem; border-radius: 50%; object-fit: cover; } .meeting-list { padding-bottom: 1rem; } .workplace-tabs { display: grid; grid-template-columns: repeat(3, 1fr); min-height: 3.2rem; border-bottom: 1px solid #e7e9ec; background: #fff; } .workplace-tabs button { position: relative; min-width: 0; min-height: 3.2rem; margin: 0; padding: 0; border: 0; box-shadow: none; color: #7b838d; background: transparent; } .workplace-tabs button.active { color: #286fcf; font-weight: 600; } .workplace-tabs button.active::after { position: absolute; bottom: 0; left: 30%; width: 40%; height: 0.18rem; border-radius: 0.1rem; background: #347bd7; content: ''; } .meeting-card, .meeting-draft, .meeting-status { margin: 0.8rem; border: 1px solid #e7e9ec; border-radius: 0.45rem; background: #fff; } .meeting-card { padding: 1rem; } .meeting-card > header { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.8rem; padding-bottom: 0.85rem; border-bottom: 1px solid #eceef1; } .meeting-card > header span, .meeting-card > header strong, .meeting-card > header small { display: block; } .meeting-card > header small { margin-bottom: 0.25rem; color: #3575cf; } .meeting-card > header strong { font-size: 1.08rem; } .meeting-card > header em { flex: none; padding: 0.3rem 0.5rem; border-radius: 0.25rem; color: #b26e10; background: #fff3df; font-size: 0.75rem; font-style: normal; } .meeting-card > header em.accepted { color: #28784f; background: #e5f5ec; } .meeting-card > header em.declined { color: #ad3d45; background: #fbe9eb; } .meeting-card dl { margin: 0.8rem 0 0; } .meeting-card dl > div { display: grid; grid-template-columns: 6.5rem minmax(0, 1fr); align-items: start; min-height: 2.1rem; } .meeting-card dt, .meeting-card dd { margin: 0; } .meeting-card dt { display: flex; align-items: center; color: #757d87; } .meeting-card dt .material-icons { margin-right: 0.35rem; font-size: 1.15rem; } .meeting-card dd { overflow-wrap: anywhere; } .meeting-card > footer { display: flex; justify-content: flex-end; gap: 0.55rem; margin-top: 0.8rem; } .meeting-card > footer button { min-width: 5.4rem; min-height: 2.5rem; margin: 0; padding: 0 0.8rem; border: 1px solid #d8dce1; border-radius: 0.3rem; box-shadow: none; color: #3073ce; background: #fff; } .meeting-card > footer button.primary, .meeting-card > footer button:last-child { border-color: #347bd7; color: #fff; background: #347bd7; } .meeting-card > footer button .material-icons { margin-right: 0.3rem; font-size: 1.1rem; vertical-align: middle; } .meeting-response { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); } .meeting-response button { min-width: 0 !important; padding: 0 0.3rem !important; } .meeting-draft { display: grid; grid-template-columns: 2.8rem minmax(0, 1fr) auto; align-items: center; gap: 0.6rem; padding: 0.8rem; } .meeting-draft > .material-icons { color: #347bd7; font-size: 2rem; } .meeting-draft span, .meeting-draft strong, .meeting-draft small { display: block; min-width: 0; } .meeting-draft small { margin-top: 0.2rem; color: #838b95; } .meeting-draft button { min-height: 2.4rem; margin: 0; padding: 0 0.6rem; border: 0; box-shadow: none; color: #347bd7; background: transparent; } .meeting-status { padding: 1rem; } .meeting-status h2 { margin: 0 0 0.8rem; font-size: 1rem; } .meeting-status > div, .report-statistics > div { display: grid; grid-template-columns: repeat(3, 1fr); } /* 参会确认 now shows 4 stats (已接受/待响应/已拒绝/待定, see workplace-collaboration-view.jsx's MeetingDetail) -- .report-statistics (日报/月报团队统计的应提交/已提交/未提交) stays at 3, only this selector needs the extra column. */ .meeting-status > div { grid-template-columns: repeat(4, 1fr); } .meeting-status span, .report-statistics > div span { display: flex; align-items: center; min-width: 0; flex-direction: column; } .meeting-status b, .report-statistics > div b { font-size: 1.35rem; } .meeting-status small, .report-statistics > div small { margin-top: 0.25rem; color: #7c848e; } .report-editor-page > main { padding-bottom: 1rem; } .report-period { display: flex; align-items: center; gap: 0.7rem; padding: 0.9rem 1rem; border-bottom: 1px solid #e8eaed; background: #fff; } .report-period > .material-icons { color: #347bd7; } .report-period span, .report-period strong, .report-period small { display: block; } .report-period small { margin-top: 0.2rem; color: #6b927d; } .report-field { display: block; position: relative; margin-top: 0.7rem; padding: 1rem; background: #fff; } .report-field > span { display: block; margin-bottom: 0.65rem; font-weight: 600; } .report-field > span b { margin-right: 0.2rem; color: #d8414c; } .report-field textarea { display: block; width: 100%; height: 11rem; margin: 0; padding: 0.75rem 0.8rem 2rem; resize: vertical; border: 1px solid #dfe3e7; border-radius: 0.3rem; box-shadow: none; background: #fff; line-height: 1.5; } .report-field > small { position: absolute; right: 1.8rem; bottom: 1.6rem; color: #9ba2ac; } .report-attachment { display: grid; grid-template-columns: 2.5rem minmax(0, 1fr) 2rem; align-items: center; gap: 0.5rem; width: calc(100% - 2rem); min-height: 4.2rem; margin: 0.8rem 1rem; padding: 0.6rem 0.8rem; border: 1px dashed #cad0d7; border-radius: 0.35rem; box-shadow: none; color: #343a42; background: #fff; text-align: left; } .report-attachment > .material-icons:first-child { color: #347bd7; } .report-attachment span, .report-attachment strong, .report-attachment small { display: block; min-width: 0; } .report-attachment small { margin-top: 0.2rem; color: #888f98; } .workplace-submit-bar { padding: 0.75rem 1rem max(0.75rem, env(safe-area-inset-bottom)); border-top: 1px solid #e4e7ea; background: #fff; flex: none; } .workplace-submit-bar button, .workplace-primary { width: 100%; min-height: 3rem; margin: 0; padding: 0 1rem; border: 0; border-radius: 0.35rem; box-shadow: none; color: #fff; background: #347bd7; font-weight: 600; } .report-list-page > main { padding-bottom: 1rem; } .report-role-switch { display: grid; grid-template-columns: repeat(2, 1fr); margin: 0 0.8rem 0.8rem; border: 1px solid #dce0e5; border-radius: 0.3rem; background: #fff; } .report-role-switch button { min-height: 2.6rem; margin: 0; padding: 0; border: 0; box-shadow: none; color: #737b85; background: transparent; } .report-role-switch button.active { color: #fff; background: #347bd7; } .report-cards { margin: 0 0.8rem; } .report-cards article { margin-bottom: 0.7rem; padding: 0.9rem; border: 1px solid #e6e9ec; border-radius: 0.4rem; background: #fff; } .report-cards article > header { display: grid; /* DailyReportCard (the only thing rendered into .report-cards) never renders an avatar -- confirmed no JSX inserts an here -- so the leading 2.6rem avatar column was dead weight that stole space from the name column with only 2 real children (name+badge span, status ), squeezing the badge into wrapping onto its own line for any name long enough to fill it. */ grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 0.6rem; } .report-cards article > header img { width: 2.6rem; height: 2.6rem; border-radius: 50%; object-fit: cover; } .report-cards article > header span, .report-cards article > header strong, .report-cards article > header small { display: block; min-width: 0; } .report-cards article > header small { margin-top: 0.15rem; color: #8b929c; } .report-cards article > header em { padding: 0.3rem 0.45rem; border-radius: 0.25rem; color: #b76811; background: #fff2df; font-size: 0.72rem; font-style: normal; } /* DailyReportCard renders
, not the ` -- two children, no leading icon -- but the grid reserved a 2.7rem first column for one anyway (matching the now-unused `.material-icons` rule below, presumably meant for some future/removed icon). With no icon present, the label span itself was squeezed into that 36px column, wrapping "举报原因"/the reason text onto multiple lines instead of the single flexible column it needs. */ .report-selected-reason { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 0.7rem; padding: 0.9rem 1rem; background: #fff; } .report-selected-reason > .material-icons { color: #b14650; font-size: 2rem; } .report-selected-reason span, .report-selected-reason strong, .report-selected-reason small { display: block; min-width: 0; } .report-selected-reason small { margin-bottom: 0.2rem; color: #858d96; } .report-selected-reason button { min-height: 2.5rem; margin: 0; padding: 0 0.5rem; border: 0; box-shadow: none; color: #3476ce; background: transparent; } .support-textarea { display: block; position: relative; margin-top: 0.7rem; padding: 1rem; background: #fff; } .support-textarea > span { display: block; margin-bottom: 0.6rem; font-weight: 600; } .support-textarea b { margin-left: 0.2rem; color: #d6424b; } .support-textarea textarea { display: block; width: 100%; height: 10.5rem; margin: 0; padding: 0.75rem 0.8rem 2rem; resize: vertical; border: 0; box-shadow: none; background: #fff; line-height: 1.5; } .support-textarea > small { position: absolute; right: 1.8rem; bottom: 1.6rem; color: #9ba2ab; } .evidence-section, .feedback-upload { margin-top: 0.7rem; padding: 1rem; background: #fff; } .evidence-section > header, .feedback-upload > header { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; margin-bottom: 0.8rem; } .evidence-section header span, .evidence-section header strong, .evidence-section header small, .feedback-upload header span, .feedback-upload header strong, .feedback-upload header small { display: block; min-width: 0; } .evidence-section header small, .feedback-upload header small { margin-top: 0.2rem; color: #858d96; } .evidence-section header em, .feedback-upload header em { color: #858d96; font-style: normal; } .evidence-section article { display: grid; grid-template-columns: 2.5rem minmax(0, 1fr) 2.5rem; align-items: center; min-height: 3.5rem; border-bottom: 1px solid #eceef1; } .evidence-section article > .material-icons { color: #5273a8; } .evidence-section article > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .evidence-section article button { display: grid; place-items: center; width: 2.5rem; height: 2.5rem; margin: 0; padding: 0; border: 0; box-shadow: none; color: #989fa7; background: transparent; } .evidence-upload { display: flex; align-items: center; justify-content: center; width: 100%; min-height: 4.5rem; margin: 0; padding: 0.7rem; border: 1px dashed #cbd1d8; border-radius: 0.35rem; box-shadow: none; color: #3476ce; background: #f8f9fa; flex-direction: column; } .feedback-upload > button { display: flex; align-items: center; justify-content: center; width: 7.5rem; height: 7.5rem; margin: 0; padding: 0.7rem; border: 0; border-radius: 0.35rem; box-shadow: none; color: #858d96; background: #fff; flex-direction: column; } .evidence-upload .material-icons, .feedback-upload > button .material-icons { margin-bottom: 0.25rem; font-size: 1.8rem; } .report-privacy-note { display: flex; align-items: flex-start; gap: 0.5rem; margin: 0.8rem 1rem 0; color: #74808b; font-size: 0.78rem; line-height: 1.45; } .report-privacy-note .material-icons { color: #4b8065; font-size: 1.05rem; } .support-submit-bar { padding: 0.75rem 1rem max(0.8rem, env(safe-area-inset-bottom)); border-top: 1px solid #e1e4e8; background: #fff; flex: none; } .support-submit-bar button, .support-success > button { width: 100%; min-height: 3.1rem; margin: 0; padding: 0 1rem; border: 0; border-radius: 0.35rem; box-shadow: none; color: #fff; background: #347bd7; font-weight: 600; } .support-success { display: flex; align-items: center; padding: 4rem 1.2rem 1.5rem; text-align: center; flex-direction: column; } .support-success > .material-icons { color: #3a9365; font-size: 5rem; } .support-success h2 { margin: 1rem 0 0.55rem; font-size: 1.35rem; } .support-success > p { max-width: 26rem; margin: 0; color: #66707a; line-height: 1.6; } .support-success dl { width: min(100%, 26rem); margin: 1.5rem 0; padding: 0.5rem 1rem; border: 1px solid #e0e4e8; border-radius: 0.4rem; background: #fff; } .support-success dl > div { display: flex; align-items: center; justify-content: space-between; min-height: 3rem; border-bottom: 1px solid #eceef1; } .support-success dl > div:last-child { border-bottom: 0; } .support-success dt, .support-success dd { margin: 0; } .support-success dt { color: #7c858f; } .support-success > button { width: min(100%, 26rem); } .feedback-categories { padding: 1rem; background: #fff; } .feedback-categories h2 { margin: 0 0 0.8rem; font-size: 1rem; } .feedback-categories > div { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.55rem; } .feedback-categories button { /* docs/images/意见反馈.png has no category selector at all (server/im_http.go's `category` field is real and required, but the design was never drawn for it -- same "no reference, add the simplest reasonable UI" call as Ch.6's own-group-nickname editor). This card layout (flex column, tall min-height) was carried over from an icon-above-label grid pattern used elsewhere, but this button only ever renders a single line of plain text -- with no `justify-content` set, `column` direction defaults the main axis to `flex-start`, pinning that one line to the top of a much taller box instead of centering it, which is the "why does this look off" of it. Simplified to a plain centered pill sized for the text it actually holds. */ display: flex; align-items: center; justify-content: center; min-width: 0; min-height: 2.75rem; margin: 0; padding: 0.45rem; border: 1px solid #e0e4e8; border-radius: 0.35rem; box-shadow: none; color: #666f79; background: #fff; } .feedback-categories button.active { border-color: #347bd7; color: #2f70c7; background: #eef5ff; } .feedback-categories .material-icons { margin-bottom: 0.25rem; font-size: 1.45rem; } .feedback-categories button span { width: 100%; overflow-wrap: anywhere; font-size: 0.76rem; line-height: 1.25; text-align: center; } .feedback-contact { display: block; padding: 1rem; background: #fff; } .feedback-contact > span { display: block; margin-bottom: 0.55rem; font-weight: 600; } .feedback-contact input { width: 100%; height: 3rem; margin: 0; padding: 0 0.75rem; border: 1px solid #dfe3e7; border-radius: 0.35rem; box-shadow: none; background: #fff; } .diagnostics-consent { display: grid; grid-template-columns: 1.8rem minmax(0, 1fr); align-items: flex-start; gap: 0.5rem; margin-top: 0.7rem; padding: 1rem; background: #fff; } .diagnostics-consent input { width: 1.25rem; height: 1.25rem; margin: 0.1rem 0 0; } .diagnostics-consent span, .diagnostics-consent strong, .diagnostics-consent small { display: block; min-width: 0; } .diagnostics-consent small { margin-top: 0.3rem; color: #7e8791; line-height: 1.45; } @media screen and (max-width: 480px) { .risk-dialog { padding: 1rem; } .risk-symbol { width: 4.3rem; height: 4.3rem; } .risk-symbol .material-icons { font-size: 2.8rem; } .feedback-categories > div { gap: 0.35rem; } } /* QR scanning ("扫一扫"): full-screen camera view + the post-scan group-join confirm sheet. No reference screenshot covers the scanning viewfinder itself (docs/images/ only has the generate-a-code screens) -- z-index 200 matches the call overlays (widgets/call-panel.jsx), the only other feature that also needs to sit above every other full-screen surface. */ .qr-scan-view { position: fixed; z-index: 200; inset: 0; overflow: hidden; background: #000; } .qr-scan-video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; } .qr-scan-mask { position: absolute; inset: 0; display: grid; place-items: center; } .qr-scan-frame { position: relative; width: 62vw; max-width: 17rem; aspect-ratio: 1; border-radius: 0.5rem; box-shadow: 0 0 0 999rem rgba(0,0,0,0.5); } .qr-scan-corner { position: absolute; width: 1.6rem; height: 1.6rem; border: 0.22rem solid #4d8dff; font-style: normal; } .qr-scan-corner-tl { top: -0.11rem; left: -0.11rem; border-right: 0; border-bottom: 0; border-radius: 0.4rem 0 0 0; } .qr-scan-corner-tr { top: -0.11rem; right: -0.11rem; border-left: 0; border-bottom: 0; border-radius: 0 0.4rem 0 0; } .qr-scan-corner-bl { bottom: -0.11rem; left: -0.11rem; border-right: 0; border-top: 0; border-radius: 0 0 0 0.4rem; } .qr-scan-corner-br { bottom: -0.11rem; right: -0.11rem; border-left: 0; border-top: 0; border-radius: 0 0 0.4rem 0; } .qr-scan-header { position: absolute; z-index: 2; top: 0; left: 0; right: 0; display: flex; align-items: center; justify-content: space-between; padding: 0.9rem 0.5rem; background: linear-gradient(rgba(0,0,0,0.45), transparent); } .qr-scan-header button { width: 2.6rem; height: 2.6rem; border: 0; box-shadow: none; color: #fff; background: transparent; } .qr-scan-header h1 { margin: 0; color: #fff; font-size: 1.05rem; font-weight: 500; } .qr-scan-header span { width: 2.6rem; } .qr-scan-hint { position: absolute; left: 0; right: 0; bottom: 14%; margin: 0; color: #e7ebf0; font-size: 0.9rem; text-align: center; } .qr-scan-error { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.6rem; padding: 0 2rem; color: #fff; text-align: center; } .qr-scan-error .material-icons { font-size: 2.6rem; color: #f2b53d; } .qr-scan-error button { margin-top: 0.6rem; padding: 0 1.4rem; min-height: 2.6rem; border: 0; border-radius: 1.4rem; box-shadow: none; color: #fff; background: #347bd7; } .qr-join-backdrop { position: fixed; z-index: 200; inset: 0; display: grid; place-items: center; padding: 1rem; background: rgba(22,26,31,0.52); } .qr-join-sheet { width: min(100%, 25rem); padding: 1.4rem 1.25rem 1.25rem; border-radius: 0.5rem; background: #fff; text-align: center; } .qr-join-avatar { display: grid; place-items: center; width: 4rem; height: 4rem; margin: 0 auto 0.6rem; border-radius: 50%; overflow: hidden; color: #9aa3ad; background: #eef1f4; } .qr-join-avatar img { width: 100%; height: 100%; object-fit: cover; } .qr-join-avatar .material-icons { font-size: 1.9rem; } .qr-join-sheet h2 { margin: 0.2rem 0; font-size: 1.1rem; } .qr-join-sheet > p { margin: 0 0 0.9rem; color: #757d87; } .qr-join-sheet input { width: 100%; height: 2.9rem; margin: 0 0 0.8rem; padding: 0 0.75rem; border: 1px solid #dce0e5; border-radius: 0.35rem; box-shadow: none; text-align: center; } .qr-join-sheet button { width: 100%; min-height: 2.9rem; margin: 0.45rem 0 0; border: 0; border-radius: 0.35rem; box-shadow: none; color: #4d5660; background: #f0f2f4; } .qr-join-sheet button.primary { color: #fff; background: #347bd7; } /* 合并转发卡片(widgets/forward-bundle.jsx,第4章 4.20)。 服务端 mode="bundle" 生成的消息不是 Drafty,单独渲染成一张可展开的"聊天记录"卡片。 */ .forward-bundle { min-width: 11rem; max-width: 18rem; } .forward-bundle-title { margin-bottom: 0.35rem; font-weight: 500; } .forward-bundle-lines { margin: 0; padding: 0; list-style: none; } .forward-bundle-lines li { overflow: hidden; margin: 0.15rem 0; color: var(--clr-text-secondary); font-size: 0.85rem; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; } .forward-bundle-lines li b { font-weight: 500; } .forward-bundle-more, .forward-bundle-count { display: block; width: 100%; margin: 0.4rem 0 0; padding: 0.35rem 0 0; border: 0; border-top: 1px solid var(--clr-divider, #e7e9ec); border-radius: 0; box-shadow: none; background: none; color: var(--clr-text-secondary); font-size: 0.8rem; line-height: 1.3; text-align: left; text-transform: none; } .forward-bundle-more { color: #347bd7; cursor: pointer; } .forward-bundle-comment { margin-top: 0.4rem; color: var(--clr-text-primary); font-size: 0.85rem; }