<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>产品复盘 on 友派博客</title><link>https://blog.uipad.cn/tags/%E4%BA%A7%E5%93%81%E5%A4%8D%E7%9B%98/</link><description>Recent content in 产品复盘 on 友派博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 20 Mar 2026 15:30:00 +0800</lastBuildDate><atom:link href="https://blog.uipad.cn/tags/%E4%BA%A7%E5%93%81%E5%A4%8D%E7%9B%98/index.xml" rel="self" type="application/rss+xml"/><item><title>我如何避免把 AI 产品做成“填表工具”：一次关于成果感的交互反思</title><link>https://blog.uipad.cn/post/2026-03/avoid-form-like-ai-products-by-designing-for-outcomes/</link><pubDate>Fri, 20 Mar 2026 15:30:00 +0800</pubDate><guid>https://blog.uipad.cn/post/2026-03/avoid-form-like-ai-products-by-designing-for-outcomes/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;我第一次真正对产品设计感到不安，&lt;br&gt;
不是因为功能不够，&lt;br&gt;
而是因为它“太像在填表”。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这篇文章，记录的是我在设计 uipad（友派）过程中，一个非常具体、但影响整个产品方向的反思。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-那种熟悉的不适感我是不是在被采集信息"&gt;1) 那种熟悉的不适感：我是不是在被“采集信息”？
&lt;/h2&gt;&lt;p&gt;在 uipad 的早期版本里，流程大概是这样的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户输入一些背景&lt;/li&gt;
&lt;li&gt;AI 继续追问&lt;/li&gt;
&lt;li&gt;再补充几个选项&lt;/li&gt;
&lt;li&gt;再确认一次&lt;/li&gt;
&lt;li&gt;再进入下一步&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;逻辑上完全说得通。&lt;br&gt;
但当我自己反复使用时，心里开始出现一个念头：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“我是不是一直在给系统喂信息？”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这种感觉很微妙，却非常真实。&lt;/p&gt;
&lt;p&gt;它不是“难用”，也不是“不清楚”，&lt;br&gt;
而是一种更深层的心理落差：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;我在做工作，&lt;br&gt;
还是在帮系统完成它的工作？&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="2-ai-产品最容易犯的错把输入当成核心体验"&gt;2) AI 产品最容易犯的错：把“输入”当成核心体验
&lt;/h2&gt;&lt;p&gt;后来我意识到，问题并不只存在于 uipad。&lt;/p&gt;
&lt;p&gt;很多 AI 产品都有一个共通问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;体验的重心在“输入”&lt;/li&gt;
&lt;li&gt;成功的标志是“我问完了”&lt;/li&gt;
&lt;li&gt;下一步永远是“请再补充一点”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从设计视角看，这其实是一种&lt;strong&gt;表单心智的延续&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;字段填完了 → 才算完成。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;但在 AI 产品里，这种结构会被无限放大。&lt;/p&gt;
&lt;p&gt;因为 AI 永远可以继续问。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3-真正的问题不是问得多而是看不到完成"&gt;3) 真正的问题不是“问得多”，而是“看不到完成”
&lt;/h2&gt;&lt;p&gt;转折点来自一个很简单的判断：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;如果一个步骤结束时，&lt;br&gt;
用户看不到任何“已完成的东西”，&lt;br&gt;
那它在心理上就永远没有结束。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这时候我才意识到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;问题不在“输入步骤太多”&lt;/li&gt;
&lt;li&gt;而在&lt;strong&gt;每一步都缺少成果锚点&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没有锚点，用户只会觉得：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我还在路上。&lt;br&gt;
我还没做完。&lt;br&gt;
我是不是还要再填一点？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="4-uipad-的转向从流程完成到成果完成"&gt;4) uipad 的转向：从“流程完成”，到“成果完成”
&lt;/h2&gt;&lt;p&gt;于是我开始反向设计完成态。&lt;/p&gt;
&lt;p&gt;不再问：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“这个步骤收集够信息了吗？”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而是问：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“用户此刻完成了什么？”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这带来了几个非常具体的设计变化。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="-变化一完成页必须先展示成果而不是按钮"&gt;✅ 变化一：完成页必须先展示成果，而不是按钮
&lt;/h3&gt;&lt;p&gt;在 uipad 里，每个工具完成后，页面的视觉顺序被彻底调整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不是先出现「完成并继续」&lt;/li&gt;
&lt;li&gt;而是先出现一个明确的成果区块&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;✅ 开场破冰 · 同频判断序列&lt;br&gt;
已生成 3 条判断 · 预计用时 3–5 分钟&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;这是一个心理锚点&lt;/strong&gt;：&lt;br&gt;
你已经完成了一件事。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="-变化二用物料包替代结果列表"&gt;✅ 变化二：用“物料包”，替代“结果列表”
&lt;/h3&gt;&lt;p&gt;我刻意没有把生成结果呈现为一长串文本。&lt;/p&gt;
&lt;p&gt;而是把它命名为：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;开场破冰 · 物料包&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;里面包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🎤 主持人引导卡（可照读）&lt;/li&gt;
&lt;li&gt;🖥 大屏流程示意（只读展示）&lt;/li&gt;
&lt;li&gt;👥 参与者说明（一句话）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个命名的作用非常直接：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;你不是生成了一段内容，&lt;br&gt;
而是准备好了一整套可以拿去用的东西。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="-变化三让预览成为推进而不是干扰"&gt;✅ 变化三：让“预览”成为推进，而不是干扰
&lt;/h3&gt;&lt;p&gt;在很多产品里，预览是可选的、次要的。&lt;/p&gt;
&lt;p&gt;但在 uipad 中：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;预览本身就是体验的一部分。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;因为它让用户开始在脑中完成一件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想象主持时怎么用&lt;/li&gt;
&lt;li&gt;想象现场如何展开&lt;/li&gt;
&lt;li&gt;想象“我已经准备好了”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种心理状态，和继续填写输入框，是完全不同的。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-从-input-driven到-output-driven"&gt;5) 从 Input-driven，到 Output-driven
&lt;/h2&gt;&lt;p&gt;回头看，我会用一句话总结这次转变：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI 产品的核心体验，&lt;br&gt;
不应该是“你输入了什么”，&lt;br&gt;
而应该是“你带走了什么”。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这也是 uipad 现在非常明确的一条设计原则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;输入只是手段&lt;/li&gt;
&lt;li&gt;输出才是完成&lt;/li&gt;
&lt;li&gt;成果必须是可感知、可使用的&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-写给正在做-ai-产品的独立开发者"&gt;6) 写给正在做 AI 产品的独立开发者
&lt;/h2&gt;&lt;p&gt;如果你正在设计 AI 产品，不妨问自己几个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户完成一个步骤后，能不能说出：&lt;br&gt;
“我刚刚完成了 X”？&lt;/li&gt;
&lt;li&gt;如果把所有输入框隐藏，只看输出，&lt;br&gt;
产品还成立吗？&lt;/li&gt;
&lt;li&gt;用户是否能把结果直接带走、复用、使用？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果这些问题的答案不够清晰，&lt;br&gt;
那你的产品，可能正在不知不觉中变成一个&lt;strong&gt;高级填表工具&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="结语"&gt;结语
&lt;/h2&gt;&lt;p&gt;uipad 后来有一个我很喜欢的内部判断标准：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;如果一个功能不能被“拿在手里用”，&lt;br&gt;
那它很可能只是系统的满足，而不是用户的完成。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这篇反思并不是一个“成功经验”，&lt;br&gt;
而是一条我踩过坑之后，愿意反复提醒自己的设计底线。&lt;/p&gt;
&lt;p&gt;也许它对你，也会有一点帮助。&lt;/p&gt;</description></item><item><title>为什么我坚持把 uipad 做成“线下优先”，而不是一个更好演示的活动 SaaS</title><link>https://blog.uipad.cn/post/2026-03/offline-first-event-planning-not-live-polling/</link><pubDate>Fri, 20 Mar 2026 10:00:00 +0800</pubDate><guid>https://blog.uipad.cn/post/2026-03/offline-first-event-planning-not-live-polling/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;线下活动最珍贵的不是“互动数据”，&lt;br&gt;
而是“现场感”。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果你做过同学聚会、年会、婚礼、线下分享会，你会知道：&lt;br&gt;
现场最怕的不是流程不够炫，而是——人到了，却不在场。&lt;/p&gt;
&lt;p&gt;而我在做 uipad（友派）的时候，最反直觉、但最重要的决定就是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;把它做成“线下优先”的 AI 活动策划助手，&lt;br&gt;
而不是一个“更好演示”的活动互动平台。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="一-更好演示的路径很诱人扫码实时投票结果上墙"&gt;一、 “更好演示”的路径很诱人：扫码、实时投票、结果上墙
&lt;/h2&gt;&lt;p&gt;在产品早期，你很容易被一种逻辑吸引：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;参与者扫码&lt;/li&gt;
&lt;li&gt;屏幕实时显示投票结果&lt;/li&gt;
&lt;li&gt;主持人一句话就能带起互动&lt;/li&gt;
&lt;li&gt;Demo 看起来特别“聪明”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;而且这个赛道已经被验证过：&lt;br&gt;
像 Slido&lt;sup&gt;&lt;a href="https://www.slido.com/" class="ref-link" target="_blank" rel="noopener"&gt;4&lt;/a&gt;&lt;/sup&gt;、Mentimeter&lt;sup&gt;&lt;a href="https://teambuilding.com/en/articles/icebreaker-apps-and-tools" class="ref-link" target="_blank" rel="noopener"&gt;3&lt;/a&gt;&lt;/sup&gt; 这类工具就是用“实时投票、问答、词云”来提升会议互动感的。&lt;/p&gt;
&lt;p&gt;所以从“理性产品规划”角度看，走这条路非常合理。&lt;/p&gt;
&lt;p&gt;但我很快发现：&lt;br&gt;
&lt;strong&gt;合理不等于正确。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="二-我真正想解决的问题不是互动功能而是现场状态"&gt;二、 我真正想解决的问题，不是“互动功能”，而是“现场状态”
&lt;/h2&gt;&lt;p&gt;uipad 的用户不是专业主持人，也不是活动公司。&lt;br&gt;
更多是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同学聚会发起人&lt;/li&gt;
&lt;li&gt;HR/行政&lt;/li&gt;
&lt;li&gt;社区组织者&lt;/li&gt;
&lt;li&gt;临时被推上台的人&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;他们真正焦虑的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;开场会不会尴尬&lt;/li&gt;
&lt;li&gt;节奏会不会散&lt;/li&gt;
&lt;li&gt;我该说什么&lt;/li&gt;
&lt;li&gt;如果冷场怎么办&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些问题的答案通常不在“功能更强的互动系统”里，而在：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一套靠谱的策划结构 + 一套能照读的引导语 + 一套能拿在手里的提示。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;换句话说：&lt;br&gt;
uipad 要做的是“让人进入状态”，而不是“让手机进入状态”。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="三-为什么线下优先因为线下的优势是人和人真正同场"&gt;三、 为什么线下优先？因为线下的优势是“人和人真正同场”
&lt;/h2&gt;&lt;p&gt;线上互动工具擅长“收集输入”和“可视化输出”。&lt;br&gt;
但线下活动的价值恰恰来自另一件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;面对面互动更能读到非语言信息（眼神、表情、气氛）&lt;/li&gt;
&lt;li&gt;共同空间带来的“群体同步”&lt;/li&gt;
&lt;li&gt;偶然发生的小对话、小笑点&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些东西，在很多研究和实践总结里被反复强调：&lt;br&gt;
面对面会议/活动能带来更丰富的沟通与协作环境。&lt;sup&gt;&lt;a href="https://www.gable.to/blog/post/in-person-meetings" class="ref-link" target="_blank" rel="noopener"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href="https://www.mccormick.northwestern.edu/news/articles/2025/01/study-reveals-why-in-person-conferences-still-matter-in-a-virtual-world/" class="ref-link" target="_blank" rel="noopener"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href="https://ixdf.org/literature/article/ui-form-design" class="ref-link" target="_blank" rel="noopener"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;所以如果我把 uipad 做成一个“扫码互动平台”，我实际上在做一件很矛盾的事：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;把线下活动的优势（真实同场）&lt;br&gt;
换成线上工具的优势（数据与展示）。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这不是说线上投票没价值，而是说：&lt;br&gt;
&lt;strong&gt;它解决的不是我想解决的那类问题。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="四-uipad-的选择不做参与者交互只做策划--组织支持"&gt;四、 uipad 的选择：不做参与者交互，只做“策划 + 组织支持”
&lt;/h2&gt;&lt;p&gt;这是一条边界很硬的产品原则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;uipad 不做扫码投票&lt;/li&gt;
&lt;li&gt;不做参与者账号体系&lt;/li&gt;
&lt;li&gt;不做实时统计&lt;/li&gt;
&lt;li&gt;不做“大家都低头看手机”的互动&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;uipad 做的是：&lt;/p&gt;
&lt;h3 id="a-策划design-the-experience"&gt;A) 策划（Design the experience）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;给出结构：开场/升温/高点/收尾&lt;/li&gt;
&lt;li&gt;用 AI 生成“只有这一群人才懂”的破冰题（但有安全边界）&lt;/li&gt;
&lt;li&gt;把互动控制在“线下口播可执行”的范围&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="b-组织支持support-the-host"&gt;B) 组织支持（Support the host）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;主持人引导语（逐句可照读）&lt;/li&gt;
&lt;li&gt;可打印提示卡（A6/A5，编号 1/2/3）&lt;/li&gt;
&lt;li&gt;大屏展示素材（回忆杀时间轴、标题字幕、播放顺序提示）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我更愿意把 uipad 看作：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一个“幕后策划板”，&lt;br&gt;
它不替你互动，但让你更容易把现场带起来。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="五-这条路的代价demo-没那么炫但产品更像真东西"&gt;五、 这条路的代价：Demo 没那么炫，但产品更像“真东西”
&lt;/h2&gt;&lt;p&gt;说实话，这条路线在营销上更难：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你没法展示“实时投票曲线”&lt;/li&gt;
&lt;li&gt;你没法用互动数据证明“参与率”&lt;/li&gt;
&lt;li&gt;Demo 没有那种炫酷的即时反馈&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但它换来的是我认为更重要的东西：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;组织者能真正用得上&lt;/li&gt;
&lt;li&gt;主持人能“拿着就走”&lt;/li&gt;
&lt;li&gt;活动不会被 Wi-Fi 或设备状况毁掉&lt;/li&gt;
&lt;li&gt;参与者被拉回现场，而不是拉进屏幕&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我更在乎 uipad 被评价为：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“这个东西真能帮我把活动办下来”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而不是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“这个 Demo 真好看”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="小结当技术可以做更多时克制反而更专业"&gt;小结：当技术可以做更多时，克制反而更专业
&lt;/h2&gt;&lt;p&gt;uipad 的核心不是“互动平台”，而是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;offline-first event planning（线下优先活动策划）&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;它是给组织者的 AI 助手，输出的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;host script（主持人话术）&lt;/li&gt;
&lt;li&gt;printable cue cards（可打印提示卡）&lt;/li&gt;
&lt;li&gt;display assets（大屏素材）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你也在做产品，或许你会遇到同样的诱惑：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;做一个更完整的系统，还是做一个更清晰的工具？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我这次的答案是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;我宁愿做一个更克制的产品，让它真正服务线下现场。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Mentimeter — &lt;a class="link" href="https://teambuilding.com/en/articles/icebreaker-apps-and-tools" target="_blank" rel="noopener"
&gt;Icebreaker apps and tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Slido — &lt;a class="link" href="https://www.slido.com/" target="_blank" rel="noopener"
&gt;Slido&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Gable — &lt;a class="link" href="https://www.gable.to/blog/post/in-person-meetings" target="_blank" rel="noopener"
&gt;In-person meetings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;McCormick (Northwestern) — &lt;a class="link" href="https://www.mccormick.northwestern.edu/news/articles/2025/01/study-reveals-why-in-person-conferences-still-matter-in-a-virtual-world/" target="_blank" rel="noopener"
&gt;Study: why in-person conferences still matter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IXDF — &lt;a class="link" href="https://ixdf.org/literature/article/ui-form-design" target="_blank" rel="noopener"
&gt;UI form design literature&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>我为什么放弃做一个“功能更强的工具”，转而做一个更克制的产品</title><link>https://blog.uipad.cn/post/2026-03/why-i-abandoned-feature-rich-tool-for-restrained-product/</link><pubDate>Thu, 19 Mar 2026 14:30:00 +0800</pubDate><guid>https://blog.uipad.cn/post/2026-03/why-i-abandoned-feature-rich-tool-for-restrained-product/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;独立开发最难的不是“能不能做”，&lt;br&gt;
而是“明明能做，为什么不做”。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这是我在最近一次产品立项过程中，反复撞到的一堵墙。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一我最初想做的是一个什么都能规划的工具"&gt;一、我最初想做的，是一个“什么都能规划的工具”
&lt;/h2&gt;&lt;p&gt;最早开始构思 uipad（友派）时，我脑海里的产品形态其实非常“标准”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;能规划完整活动流程&lt;/li&gt;
&lt;li&gt;能生成详细议程&lt;/li&gt;
&lt;li&gt;能让参与者扫码互动&lt;/li&gt;
&lt;li&gt;能实时投票、统计结果&lt;/li&gt;
&lt;li&gt;最好还能顺便做成一个通用的活动 SaaS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这套想法本身&lt;strong&gt;没有错&lt;/strong&gt;，而且站在“功能完整度”的角度看，甚至很合理。&lt;/p&gt;
&lt;p&gt;问题在于：&lt;br&gt;
&lt;strong&gt;它太合理了，以至于我几乎没有停下来问过一句——&lt;br&gt;
“我为什么要做这些？”&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="二当我真的开始设计时问题出现了"&gt;二、当我真的开始设计时，问题出现了
&lt;/h2&gt;&lt;p&gt;随着设计逐步推进，一个感觉越来越强烈：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;产品在变复杂，但价值并没有同步变清晰。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;具体表现是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每加一个功能，就要引入一整套新状态&lt;/li&gt;
&lt;li&gt;每支持一个场景，就要牺牲原本的简洁&lt;/li&gt;
&lt;li&gt;AI 的引导开始变得发散，甚至有点失控&lt;/li&gt;
&lt;li&gt;最关键的是：&lt;br&gt;
我自己已经很难用一句话说清楚这个产品“到底是干嘛的”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这时候我意识到一个危险信号：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;我正在用“功能覆盖”，掩盖“定位不清”。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="三真正的转折点我开始认真列不做什么"&gt;三、真正的转折点：我开始认真列“不做什么”
&lt;/h2&gt;&lt;p&gt;事情真正发生变化，是在我第一次&lt;strong&gt;反向列清单&lt;/strong&gt;的时候。&lt;/p&gt;
&lt;p&gt;我没有再问：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“我们下一步还能加什么？”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而是问了一个更残酷的问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“如果我什么都做，这个产品最终会死在哪？”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后，我开始一条条写下“不做清单”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不做参与者实时互动平台&lt;/li&gt;
&lt;li&gt;不做扫码投票、实时统计&lt;/li&gt;
&lt;li&gt;不做完整多日议程管理&lt;/li&gt;
&lt;li&gt;不做会议系统、票务系统&lt;/li&gt;
&lt;li&gt;不做任何会让参与者低头看手机的功能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这张清单一写出来，反而发生了一件很有意思的事：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;产品轮廓第一次变清楚了。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="四从功能驱动转向边界驱动"&gt;四、从“功能驱动”，转向“边界驱动”
&lt;/h2&gt;&lt;p&gt;当我接受“不是所有我能做的都应该做”之后，&lt;br&gt;
uipad 的定位开始发生根本变化。&lt;/p&gt;
&lt;p&gt;它不再是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;一个帮你“管理活动”的系统&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而逐渐变成：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一个帮你把线下活动“想清楚、说清楚、带着走”的策划板&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个转向，带来了几个非常关键的连锁反应：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;产品结构突然变得收敛&lt;/li&gt;
&lt;li&gt;每一个功能都必须回答：&lt;br&gt;
“它是否服务于线下现场？”&lt;/li&gt;
&lt;li&gt;AI 的角色从“万能生成器”，变成“策划协作者”&lt;/li&gt;
&lt;li&gt;UI 设计开始围绕“成果感”而不是“输入项”展开&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最重要的是：&lt;br&gt;
&lt;strong&gt;我终于能用一句话向别人解释 uipad 是什么了。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="五为什么更克制反而让我更有信心"&gt;五、为什么“更克制”，反而让我更有信心？
&lt;/h2&gt;&lt;p&gt;从表面看，这像是一种退让：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;功能更少了&lt;/li&gt;
&lt;li&gt;能做的场景更窄了&lt;/li&gt;
&lt;li&gt;Demo 也不再“炫”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但从长期来看，这种克制带来的，是完全不同的状态：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每加一个功能，都不会破坏整体&lt;/li&gt;
&lt;li&gt;每一次设计决策，都有清晰的判断标准&lt;/li&gt;
&lt;li&gt;产品不会轻易被“用户多提一个需求”带跑偏&lt;/li&gt;
&lt;li&gt;我作为独立开发者，不再每天被“还能不能再加点什么”追着跑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我开始理解一句以前听过却没真正体会的话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;MVP 不是功能最少的版本，&lt;br&gt;
而是边界最清楚的版本。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="六写给同样在立项阶段的独立开发者"&gt;六、写给同样在立项阶段的独立开发者
&lt;/h2&gt;&lt;p&gt;如果你正在做一个产品，而且经常陷入这些困惑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“这个功能其实也可以加”&lt;/li&gt;
&lt;li&gt;“不加是不是显得不够强？”&lt;/li&gt;
&lt;li&gt;“万一用户以后需要呢？”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我想分享我这次最重要的一个收获：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;独立开发者真正的稀缺资源，不是时间，也不是技术，&lt;br&gt;
而是对复杂度的承受能力。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;当你用“不做什么”来保护产品时，&lt;br&gt;
你其实是在保护未来的自己。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="结语"&gt;结语
&lt;/h2&gt;&lt;p&gt;uipad 这个名字里有一个 “Pad”。&lt;/p&gt;
&lt;p&gt;它提醒我，这个产品不是一个系统，不是一个平台，&lt;br&gt;
而更像是一块&lt;strong&gt;可以反复擦写、但必须保持清爽的策划板&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;而我在这次立项过程中学到的最重要的一课是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;当你开始认真放弃一些看起来“很合理”的功能时，&lt;br&gt;
你才真正开始在做产品。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>独立开发者的 UI/UX 进化课：从防错设计到极简表单的重构实践</title><link>https://blog.uipad.cn/post/2026-03/ui-ux-evolution-error-prevention-minimalist-design/</link><pubDate>Sun, 15 Mar 2026 12:00:00 +0800</pubDate><guid>https://blog.uipad.cn/post/2026-03/ui-ux-evolution-error-prevention-minimalist-design/</guid><description>&lt;p&gt;在打磨我的独立开发项目《往来·记 (Give &amp;amp; Take)》 V1.0.9 版本的过程中，我遭遇了一个典型且棘手的体验设计难题。&lt;/p&gt;
&lt;p&gt;这是一款主打极简的账本应用。许多小商家用户用它来管理客户的会员预付费和消耗。但问题出现了：&lt;strong&gt;记账是一个高频且容易形成肌肉记忆的操作&lt;/strong&gt;。由于我们的系统底层采用了极其严格的“单向流水”（不可修改、不可删除，错账只能靠红字对冲）机制，一旦用户在疲惫时把“消费”记成了“充值”，修改成本极高。&lt;/p&gt;
&lt;p&gt;如何拯救这些“手滑”的用户？我经历了一次反复推翻、深刻迭代的 UI/UX 重构之旅。&lt;/p&gt;
&lt;h2 id="一-防错与效率的博弈-the-anti-error-dilemma"&gt;一、 防错与效率的博弈 (The Anti-Error Dilemma)
&lt;/h2&gt;&lt;p&gt;面对高频误操作，开发者的第一直觉往往是“加一层防御”：比如每次保存前弹出一个确认弹窗，或者把输入框隐藏起来，强迫用户先点击一个巨大的“充值”或“消费”按钮。&lt;/p&gt;
&lt;p&gt;但这违背了极简工具的核心要义：&lt;strong&gt;心流 (Flow)&lt;/strong&gt;。
一天记 50 笔账的老板，绝不希望每天多点 50 次无意义的确认键。好的防错设计，应该是**“隐形且致命的”**——不增加任何操作步骤，却能在用户犯错的边缘将其拉回。&lt;/p&gt;
&lt;p&gt;经过反复权衡，我放弃了阻断式的交互，选择了一套**“强视觉联动 + 状态化按钮”**的融合方案：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;输入框的红绿变色&lt;/strong&gt;：用户的视线焦点始终在数字上。当滑块切到“消费”时，输入的数字会自动变成红色，并带上 &lt;code&gt;-&lt;/code&gt; 号；切到“充值”则是绿色 &lt;code&gt;+&lt;/code&gt; 号。这种利用周边视觉的反馈是极其强烈的。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;极简黑卡按钮&lt;/strong&gt;：我曾试过把底部保存按钮填满大红大绿，结果刺眼得像个警报器。最终的解法是：&lt;strong&gt;底色永远保持高级的品牌黑&lt;/strong&gt;。防错的任务，交给按钮左侧一颗小小的动态变色 Icon（🟢 / 🔴），以及分离式的动态文案（如 &lt;code&gt;确认 · 充值&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;国际化 (i18n) 避坑&lt;/strong&gt;：这里特别提一句，千万不要用“保存”+“变量”去拼接字符串，这在多语言翻译里是灾难。用中圆点 &lt;code&gt;·&lt;/code&gt; 隔开标准动词和自定义名词，不仅解决了语法倒装问题，看起来还很有大厂的质感。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这套组合拳打下来，没有增加一次额外的点击，但用户在敲击键盘和按下按钮的瞬间，绝不可能忽视当前的操作定性。&lt;/p&gt;
&lt;h2 id="二-告别刺眼重塑-fintech-语义色"&gt;二、 告别刺眼：重塑 Fintech 语义色
&lt;/h2&gt;&lt;p&gt;在最初实现红绿联动时，我直接调用了 Material Design 的标准绿 (&lt;code&gt;0xFF00C853&lt;/code&gt;) 和红 (&lt;code&gt;0xFFEF4444&lt;/code&gt;)。结果跑在实机上，一股“土味页游”的廉价感扑面而来。&lt;/p&gt;
&lt;p&gt;纯正的荧光绿和警报红，放在大字号文本和按钮高光上会产生严重的“光晕刺眼感 (Vibration)”。
参考了 Stripe、Apple Wallet 等顶级海外 Fintech 产品的调色板后，我对系统的 &lt;code&gt;Semantic Colors&lt;/code&gt; 进行了彻底的焕新：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;资产/增加&lt;/strong&gt;：换成了偏冷的 &lt;strong&gt;祖母绿 (Emerald, &lt;code&gt;0xFF10B981&lt;/code&gt;)&lt;/strong&gt;。它更加沉稳、克制，有一种“钞票”的昂贵质感。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;负债/减少&lt;/strong&gt;：换成了稍微柔和的 &lt;strong&gt;玫瑰红 (Rose, &lt;code&gt;0xFFF43F5E&lt;/code&gt;)&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提示/警告&lt;/strong&gt;：同步引入了无工业感的 &lt;strong&gt;灵动蓝&lt;/strong&gt; 和更深邃的 &lt;strong&gt;琥珀橙&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;将颜色饱和度稍微降低、明度微调后，哪怕是在深色模式的黑底上，巨大的 &lt;code&gt;+ 100&lt;/code&gt; 也显得极为通透高级，再也不突兀了。&lt;/p&gt;
&lt;h2 id="三-拯救臃肿表单做减法的艺术"&gt;三、 拯救臃肿表单：做减法的艺术
&lt;/h2&gt;&lt;p&gt;随着功能的增加，应用的“账本定义”设置页变得越来越长，各种文字说明和巨大的状态卡片挤在一起，几乎要逼迫用户去滑动屏幕。为了把界面“压”回一屏之内，我进行了大刀阔斧的“减法”：&lt;/p&gt;
&lt;h3 id="1-渐进式展现-progressive-disclosure"&gt;1. 渐进式展现 (Progressive Disclosure)
&lt;/h3&gt;&lt;p&gt;原先表单下有一堆带 &lt;code&gt;*&lt;/code&gt; 的啰嗦说明（比如“修改名称将同步更新至所有绑定的联系人卡片”）。我将它们全部砍掉，浓缩成标题旁边一个极简的 &lt;code&gt;?&lt;/code&gt; 图标。点击后才呼出黑底白字的 Tooltip。这一步，直接干掉了 30% 的无用高度。&lt;/p&gt;
&lt;h3 id="2-拯救丑陋的-dropdown"&gt;2. 拯救丑陋的 Dropdown
&lt;/h3&gt;&lt;p&gt;原生的 &lt;code&gt;DropdownButton&lt;/code&gt; 会破坏极简中性风。我抛弃了默认组件，使用 &lt;code&gt;PopupMenuButton&lt;/code&gt; 结合自定义的浅灰小圆角胶囊容器，配合 &lt;code&gt;↕&lt;/code&gt; 排序箭头，把“默认操作”选项完美融入了表单中。&lt;/p&gt;
&lt;h3 id="3-用状态联动代替空间占有"&gt;3. 用“状态联动”代替“空间占有”
&lt;/h3&gt;&lt;p&gt;原来底部有一个巨大的白色卡片，仅仅是为了装一个“活跃状态”的开关。这太喧宾夺主了。
我引入了**“归档 (Archive)”&lt;strong&gt;的设计语义：把巨大的卡片剥离，变成贴在最底部的一行小字开关 &lt;code&gt;停用此账本&lt;/code&gt;。
最妙的交互在于联动：一旦开启开关，上方&lt;/strong&gt;所有的输入框全部置灰锁定 (Disabled)**。不需要任何多余的解释，用户瞬间明白这个账本被冻结了，这比写一万字说明都有效。&lt;/p&gt;
&lt;h2 id="四-最后"&gt;四、 最后
&lt;/h2&gt;&lt;p&gt;作为独立开发者，我们常常容易陷入“功能实现”的代码自嗨中，而忽略了&lt;strong&gt;界面语义 (UI Semantics)&lt;/strong&gt; 的同理心。&lt;/p&gt;
&lt;p&gt;这次重构让我深刻体会到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;好设计是隐形的&lt;/strong&gt;：它不需要你多点一下去确认，而是在你输入数字时，用一抹祖母绿和加号给你笃定感。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;无必要，勿增实体&lt;/strong&gt;：如果能用置灰表达“不可用”，就不要用大红字去写警告；如果能收纳进 &lt;code&gt;?&lt;/code&gt;，就不要让它霸占屏幕。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;追求极致的路上，做加法很容易，做减法才是真功夫。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Good design is invisible; it provides the exact certainty you need, right when you need it.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="uipad-promo-widget"&gt;
&lt;div class="promo-header"&gt;
&lt;h2 class="promo-title"&gt;你的智能生意账本与人情管家。&lt;/h2&gt;
&lt;p class="promo-desc"&gt;人情生意，有来有往。告别繁琐的表格，用一句话搞定客户管理、账单管理与人际往来。完全离线可用，您的数据仅属于您自己。&lt;/p&gt;
&lt;/div&gt;
&lt;div class="promo-buttons"&gt;
&lt;a href="https://apps.apple.com/app/id6759519513" target="_blank" rel="noopener noreferrer" class="promo-btn btn-dark"&gt;
&lt;svg viewBox="0 0 384 512"&gt;&lt;path fill="currentColor" d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/&gt;&lt;/svg&gt;
&lt;span class="promo-btn-label"&gt;在 App Store 获取&lt;/span&gt;
&lt;/a&gt;
&lt;a href="https://dl.aipad.app/app/ledger.apk" target="_blank" rel="noopener noreferrer" class="promo-btn btn-light"&gt;
&lt;svg viewBox="0 0 384 512"&gt;&lt;path fill="currentColor" d="M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"/&gt;&lt;/svg&gt;
&lt;span class="promo-btn-label"&gt;下载 APK 安装包&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="promo-image"&gt;
&lt;img src="https://blog.uipad.cn/images/system/app-mockup-zh.png" alt="往来记 App 预览" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;style&gt;
.uipad-promo-widget {
text-align: center;
margin: 4rem 0;
font-family: system-ui, -apple-system, sans-serif;
}
.uipad-promo-widget .promo-title {
display: inline-block;
margin-inline-start: 0;
padding-inline-start: 0;
border-inline-start: none;
font-size: var(--font-3xl);
font-weight: 800;
letter-spacing: -0.04em;
margin-bottom: 0.75rem;
background: linear-gradient(90deg, #3b30d9, #8b30d9);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
}
.uipad-promo-widget .promo-desc {
color: var(--body-text-color, #555);
max-width: 660px;
margin: 0 auto 2.5rem;
line-height: 1.7;
font-size: var(--font-lg);
}
.uipad-promo-widget .promo-buttons {
display: flex;
justify-content: center;
gap: 1rem;
flex-wrap: wrap;
margin-bottom: 3.5rem;
}
.uipad-promo-widget .promo-btn {
display: inline-flex;
align-items: center;
gap: 0.6rem;
padding: 0.88rem 1.75rem;
border-radius: 50px;
text-decoration: none !important;
font-weight: 500;
font-size: var(--font-md);
transition: transform 0.2s ease, box-shadow 0.2s ease;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.08);
text-shadow: none;
-webkit-font-smoothing: antialiased;
font-synthesis: none;
}
.uipad-promo-widget .promo-btn:hover {
transform: translateY(-3px);
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.12);
}
.uipad-promo-widget .promo-btn svg {
width: 1.15rem;
height: 1.15rem;
flex-shrink: 0;
}
.uipad-promo-widget .promo-btn-label {
display: inline-block;
line-height: 1.3;
}
.uipad-promo-widget .btn-dark {
background-color: #000;
color: #fff !important;
}
.uipad-promo-widget .btn-light {
background-color: #fff;
color: #000 !important;
border: 1px solid #e0e0e0;
}
.uipad-promo-widget .promo-image img {
max-width: 100%;
height: auto;
display: block;
margin: 0 auto;
filter: drop-shadow(0 20px 30px rgba(0, 0, 0, 0.1));
}
[data-scheme="dark"] .uipad-promo-widget .promo-title {
background-image: linear-gradient(90deg, #9aa7f7, #b09ded);
}
[data-scheme="dark"] .uipad-promo-widget .btn-light {
background-color: #2a2a2a;
color: #fff !important;
border-color: #444;
}
@media (max-width: 640px) {
.uipad-promo-widget .promo-title { font-size: var(--font-2xl); }
.uipad-promo-widget .promo-desc { font-size: var(--font-base); }
.uipad-promo-widget .promo-btn { font-size: var(--font-base); padding: 0.8rem 1.4rem; }
}
&lt;/style&gt;</description></item></channel></rss>