Uh oh!
There was an error while loading. Please reload this page.
') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })();
There was an error while loading. Please reload this page.
参赛项目名称
【枕边雾】
【产品理念】
枕边雾,是一处只为深夜打开的情绪容器。
它不急着分析、解决或评判失眠时的想法,而是让那些难以安放的情绪,先以“雾”的方式被收下。白天继续生活,夜晚再慢慢靠近自己。
【设计初衷】
失眠时的念头往往强烈、零碎,也更私密。它们不一定适合在白天被反复翻看,更不应该成为日常生活的负担。
因此,产品用昼夜作为情绪边界:
白天,雾被封存,让用户回到正常生活。
夜晚,雾慢慢弥漫,允许用户写下、回望和安放那些未眠的言语。
内容不会直接铺陈在首页,而是藏在雾团里;用户需要主动点开、擦拭,才能看见那一夜留下的话。
这种“先遮蔽、后显现”的方式,不是为了增加操作,而是给情绪留出一点距离与缓冲。
【核心功能】
夜间雾卡记录
用户可以写下一句或一段深夜思绪,生成一张雾卡,并选择当下情绪的浓淡。
时间雾团首页
每一条记录会成为一个雾团,按照时间自然分布,并由一条轻微的雾线串联。首页不直接展示文字,保护内容的私密感。
擦雾阅读
点击雾团后,用户通过点击或擦拭逐渐看见内容;雾会在一段时间后重新聚拢,让阅读保持克制。
雾的归处
这是用户主动翻找历史的档案页。记录按月份编排,完整展示文字,支持文字搜索和按月份筛选。
拨雾入口
用户可随时从首页进入“雾的归处”,在明确想回望时翻阅旧记录。
雾灵陪伴
用户可以向雾灵低语,获得一种偏陪伴与反射式的回应,而不是标准答案或说教。
枕边雾希望成为的,不是一个高效的情绪管理工具,而是一盏在深夜亮得很低的灯。
团队 / 作者
Pinkie-Pie-Lucky
我做了什么
在OpenWork 中使用百炼模型qwen3.6-plus qwen3.7-plus qwen3.7-max deepseek-v4-flash等完成方案设计、UI优化、Prompt优化
使用的工具
效果展示
项目链接(可选)
pillowmist.pixiepoppy.com