@import url('https://fonts.googleapis.com/css2?family=Nixie+One&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400;1,700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap');
:root {
--body-bg: 225, 225, 225;
--content-bg: var(--global-white-color);
--bg-opacity: 0.9;
--extra-bg-1: url(https://imagebed.pro/images/liurd/skyline.svg);
--extra-bg-2: url(https://imagebed.pro/images/liurd/skyline.svg);
--extra-bg-3: url(https://imagebed.pro/images/liurd/skyline.svg);
--extra-opacity-1: 0.15;
--extra-opacity-2: 0.05;
--extra-opacity-3: 0.05;
--topbar-hover-bg: var(--dark-ui-bg), 0.2;
--topbar-hover-txt: var(--light-ui-txt);
--user-drop-txt: var(--dark-ui-txt);
--bottombar-bg: var(--dark-ui-bg);
--bottombar-txt: var(--dark-ui-txt);
--header-title: "Backrooms";
--banner-title: "BACKROOMS";
--banner-subtitle: "当色彩褪去的时候";
--header-height: 3rem;
--topbar-height: 2.5rem;
--dropdown-height: var(--topbar-height);
--banner-height: 25rem;
--header-ui-size: 3rem;
--header-title-size: 1.8rem;
--topbar-size: clamp(0.8rem, calc(0.4rem + 0.8vw), 1.2rem);
--banner-title-size: clamp(2rem, calc(2rem + 3.5vw), 6rem);
--banner-subtitle-size: 1rem;
--banner-font: "Nixie One", "Noto Serif SC", Franklin Gothic Medium, Franklin Gothic, ITC Franklin Gothic, Arial, serif;
--header-font: var(--banner-font);
--title-font: "Outfit", "Noto Sans SC", "Noto Sans TC", Franklin Gothic Medium, Franklin Gothic, ITC Franklin Gothic, Arial, sans-serif;
--body-font: "Atkinson Hyperlegible", "Noto Sans SC", "Noto Sans TC", Arimo, Verdana, Geneva, sans-serif;
--ui-font: "Outfit", "Noto Sans SC", "Noto Sans TC", Arimo, Verdana, Geneva, sans-serif;
}
#extra-div-1 {
position: fixed;
width: 100%;
height: 25vh;
bottom: 0;
left: 0;
z-index: -1;
background-image: var(--extra-bg-1);
background-size: 20rem;
background-repeat: repeat-x;
background-position: center;
opacity: var(--extra-opacity-1);
}
#extra-div-2 {
position: fixed;
width: 100%;
height: 50vh;
bottom: 0;
left: 0;
z-index: -2;
background-image: var(--extra-bg-2);
background-size: 40rem;
background-repeat: repeat-x;
background-position: center;
opacity: var(--extra-opacity-2);
}
#extra-div-3 {
position: fixed;
width: 100%;
height: 100vh;
bottom: 0;
left: 0;
z-index: -3;
background-image: var(--extra-bg-3);
background-size: contain;
background-repeat: repeat-x;
background-position: bottom;
opacity: var(--extra-opacity-3);
}
#container {
display: grid;
grid-template-columns: minmax(var(--sidebar-width), 1fr)auto 1fr;
grid-template-rows: auto auto auto auto;
}
#extrac-div-1 {
grid-column: 2 / 3;
grid-row: 1 / 2;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-family: var(--banner-font);
font-weight: 200;
width: 100%;
height: var(--banner-height);
color: rgb(var(--header-txt));
order: -1;
}
#extrac-div-1::before {
content: var(--banner-title);
font-size: var(--banner-title-size);
}
#extrac-div-1::after {
content: var(--banner-subtitle);
font-size: var(--banner-subtitle-size);
}
#header {
grid-column: 1 / 2;
grid-row: 1 / 3;
min-width: var(--sidebar-width);
width: 100%;
height: fit-content;
grid-template-columns: var(--header-ui-size) 1fr auto auto;
grid-template-rows: var(--header-ui-size) calc(var(--banner-height) - var(--header-ui-size)) auto;
top: calc(0px - var(--banner-height));
order: -2;
}
#search-top-box {
grid-column: 3 / 4;
position: fixed;
right: var(--header-ui-size);
backdrop-filter: blur(1rem);
}
#login-status {
grid-column: 4 / 5;
position: fixed;
right: 0;
backdrop-filter: blur(1rem);
}
#header h1 {
grid-column: 2 / 3;
grid-row: 1 / 2;
height: var(--header-height);
position: static;
}
#header h1 a {
justify-content: flex-start;
padding: 0;
padding-left: 0.5rem;
transition: padding var(--global-duration);
}
#header h1 a:is(:hover, :focus) {
padding-left: 1rem;
transition: padding var(--global-hover-duration);
}
#header h2 {
display: none;
}
#header-extra-div-1 {
display: none;
}
#top-bar {
grid-column: 1 / 5;
grid-row: 3 / 4;
height: auto;
}
#top-bar > div > ul {
flex-direction: column;
height: auto;
margin-right: 0;
}
#top-bar > div > ul > li {
flex-basis: unset;
height: var(--topbar-height);
}
#top-bar > div > ul > li > a {
justify-content: flex-end;
padding: 0 1rem;
}
#top-bar > div > ul > :is(li, li:last-of-type) > ul {
top: 0;
left: 100%;
width: 24em;
max-width: max-content;
min-width: auto;
flex-direction: row;
flex-wrap: wrap;
}
#top-bar > div > ul > li > ul > li {
width: 10em;
flex-grow: 1;
}
#top-bar > div > ul > :is(li, li:hover, li:focus, li.sfhover, li:focus-within) > ul > li > a {
box-sizing: border-box;
}
#content-wrap {
display: contents;
}
#side-bar {
max-height: unset;
overflow-y: auto;
border: unset;
box-shadow: 0 0 1.5rem -1rem rgb(var(--global-dark-color));
}
#side-bar::after {
backdrop-filter: blur(1rem);
}
#main-content {
grid-column: 2 / 3;
grid-row: 2 / 3;
min-height: 100vh;
box-sizing: border-box;
margin: 0 auto 15vh;
padding: 1.5rem;
box-shadow: 0 0 2.5rem -1rem rgb(var(--global-dark-color));
position: relative;
background: rgba(var(--content-bg), var(--bg-opacity));
}
#main-content::after {
content: "你曾经来过这里.";
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top: 100%;
left: 0;
width: 100%;
height: 10vh;
color: rgb(var(--header-txt));
font-family: var(--banner-font);
font-weight: 200;
}
#page-title {
padding: 0;
}
:is(blockquote, .blockquote, div.blockquote, [class*=blockquote]) {
padding: 0.5rem 1rem;
border-width: 0 0 0 0.3rem;
background: rgba(var(--light-block-bg), 0.4);
}
#page-options-container {
font-family: var(--ui-font);
}
#footer {
grid-column: 1 / 4;
grid-row: 3 / 4;
box-sizing: border-box;
justify-content: flex-end;
margin-top: 0.5rem;
border: unset;
}
#license-area {
grid-column: 1 / 4;
grid-row: 4 / 5;
padding: 0.5rem;
justify-content: flex-end;
}
#license-area a {
color: rgb(var(--global-pale-color));
}
@media only screen and (max-width: 1024px) {
#container-wrap {
perspective-origin: 49.5% 5rem;
}
#container {
display: flex;
}
#header {
min-width: var(--sidebar-width);
grid-template-columns: var(--header-ui-size) 1fr auto auto;
grid-template-rows: var(--header-ui-size) auto auto;
top: 0;
width: initial;
position: static;
}
#content-wrap {
display: block;
margin: 0;
}
#login-status {
position: relative;
backdrop-filter: unset;
}
#search-top-box {
position: static;
backdrop-filter: unset;
}
#login-status #account-options {
left: initial;
right: 0;
}
#top-bar > div > ul {
flex-direction: row;
margin-right: auto;
}
#top-bar > div > ul > li {
flex-basis: min-content;
}
#top-bar > div > ul > li > a {
justify-content: center;
padding: 0;
}
#top-bar > div > ul > :is(li, li:last-of-type) > ul {
top: 100%;
left: 0;
width: auto;
flex-direction: column;
}
#top-bar > div > ul > li:last-of-type > ul {
left: initial;
right: 0;
}
#top-bar > div > ul > li > ul > li {
width: 100%;
flex-grow: 1;
}
}
@media only screen and (max-width: 768px) {
#top-bar > div > ul > :is(li, li:last-of-type) > ul {
flex-direction: row;
}
#top-bar > div > ul > li > ul > li {
width: 50%;
}
}
恍惚间又是一年春节啊,在后室,不知不觉已经度过三年了……
中国传统的农历新年似乎很少被提起,唯一值得注意的一个节日就是元旦,能让人们在后室错乱的时间中共同感受岁月的归属。
我看一眼手机上的日历,大年三十儿了,Level 11。
外头还是那副老样子,空气里一股子机油和旧灰尘混在一块儿的味儿。头顶上那些巨大的霓虹灯牌,红的绿的蓝的,在永恒的白天下没精打采地亮着,映着底下灰扑扑的水泥地。它们倒是勤快,一年到头也不歇着,可这会儿,它们亮它们的,跟“年”这个字儿,半毛钱关系也扯不上。
我缩在角落里,背靠着一摞废弃的、锈迹斑斑的金属箱子。手里攥着那个屏幕裂了几道纹的通讯器,信号时断时续。群里头像倒是亮了好几个,都是散落在后室各处的老伙计。老张的头像跳了跳,蹦出来一行字:“哥儿几个,都还喘气儿呢吧?过年好哇!”
“过年好!” “过年好!” “老张你也活着呢?” 消息像挤在窄门缝里似的,一条条蹦出来,带着点延迟的卡顿。大家伙儿就这么你一句我一句,在群里互相拜年,说些“平安是福”、“撑住就有希望”的车轱辘话。话是平常话,可在这鬼地方,能听见“人声儿”,能知道还有人惦记着,心里头那点冷气儿,好像真被这断断续续的字符焐热了一点。
老张在Level 11的另一边,他说他找到个废弃的便利店,里头居然翻出几盒没过期的罐头和泡面,还有半瓶颜色可疑的液体,权当年夜酒了。他拍了个模糊的照片发过来,罐头堆在落满灰的柜台上。我回他:“行啊老张,你这年过得比我阔气,我这儿就剩几瓶杏仁水,一块皇家口粮,半块压缩饼干了。” 群里又一阵哄笑,夹杂着几句“省着点吃”、“回头找你分点”的玩笑。
聊着聊着,话题就有点跑偏。不知谁提了句“前厅这会儿,该放炮了吧?” 群里一下子静了。那点刚焐热乎的气儿,好像又顺着脚底板溜走了。我盯着屏幕上那行字,眼前有点模糊,对啊,家里人应该很想我吧。
前厅的炮仗声儿……那才叫过年啊。不是后室这死气沉沉的嗡嗡声,是那种带着硫磺味儿、炸得人耳朵嗡嗡响、心里头却敞亮痛快的热闹。空气是冷的,吸一口带着冰碴子似的清爽劲儿,不像这里,永远一股子陈腐味儿。家家户户窗户里透出来的光,是暖黄的,照着窗花上的福字,红得刺眼,也喜兴。哪像头顶这些射灯,冷冰冰的,照得人心里发慌。
记忆里的年味儿,像潮水一样涌上来。是奶奶在厨房里忙活,锅铲叮当响,炖肉的香气能把人魂儿勾走;是爸爸带着我贴春联,胶水粘手,冻得通红也开心;是妈妈塞过来的新衣服,带着一股子崭新的布料味儿;是满桌子的菜,热气腾腾,一家人团聚在一块儿,筷子碰着碗,笑声能把屋顶掀了……还有那压岁钱,薄薄的红包揣在兜里,感觉自己是全世界最阔气的人。
“唉……” 老张在群里叹了口气,后面跟着一串省略号,像是一下子把话都叹没了。没人再说话。那点靠着群聊硬撑起来的虚假热闹,像被戳破的气球,“噗”地一声,瘪了。只剩下通讯器屏幕微弱的光,映着我这张在后室里熬得灰头土脸的脸。
我靠在冰冷的金属箱子上,手里那半块压缩饼干也忘了吃。外边传来呜呜的风声,像在嘲笑我们这群回不了家的孤魂野鬼。Level 11的霓虹灯牌还在不知疲倦地闪烁,把巨大的、扭曲的影子投在墙上,变幻着形状。那些光怪陆离的颜色,红的、绿的、蓝的,交织在一起,却拼凑不出一个“家”字的模样。
心里头空落落的,像被挖走了一大块。前厅的烟花,好像就在我记忆里炸开了,五彩斑斓,轰轰作响,亮得刺眼,又远得够不着。那热闹是别人的,那温暖是过去的。我在这片钢筋水泥的迷宫里,攥着个冰冷的通讯器,听着永恒的叹息,终于明白,最浓的年味儿,原来不是饺子,不是炮仗,是那扇再也推不开的家门,是那片永远回不去的灯火人间。
这年,就算在群里拜过了。
群里的消息渐渐稀疏了,通讯器的光在Level 11的房间里昏暗的灯光下显得格外刺眼。我靠在吱呀作响的金属椅上,努力回想着在前厅过年时的场景,恍惚间竟突然发觉自己好像忘记了家人的模样,朋友们在群里的拜年声还回荡着——老张发了个红包,还有人贴了张前厅年夜饭的旧照——可热闹过后,只剩下一片空落。前厅的记忆像潮水一样涌来:鞭炮声、年夜饭的香气、一家人围坐包饺子的笑声……那些画面越清晰,心口就越闷得慌。
这时,一阵急促的敲门声打断了我的思绪。我起身开门,是Tom,那个在M.E.G.勘探队的朋友。他一身灰扑扑的制服和防弹衣,脸上带着疲惫的笑,手里却小心翼翼地捧着一个保温饭盒。“嘿,没打扰你吧?”他喘着气,眼里闪着光,“刚从前哨站回来,路上撞见基地的一箱补给物资,里头居然有这个——我猜你用得着。”他掀开盒盖,一股熟悉的热气扑面而来:是饺子,白白胖胖的,整齐地码着,皮薄得透出馅料的油光,空气里瞬间弥漫开面粉和肉馅的鲜香。
我愣住了,喉咙像被什么堵住。Tom自顾自地说起来:“那帮后勤的人真行,不知从哪搞来的面粉和肉,说是按传统方法包的。馅料是猪肉白菜的,还加了点姜末去腥。”他递过一双木质方便筷子,“尝尝?我从Level 1跑过来,就为赶上大年三十儿这个点儿。”我夹起一个,热气烫得指尖发红,咬下去时,汁水溢满口腔——那味道,跟记忆里一模一样。前厅的春节,母亲总在饺子里藏一枚硬币,说吃到的人来年会有好运。可眼前这些饺子,没有硬币,没有家人的絮叨,只有Level 11怪异的安静。
我们盘腿坐在地上,就着饭盒分吃起来。Tom边嚼边讲他巡逻时的见闻:有人聚着模仿前厅的守岁,M.E.G.的临时食堂里,大伙儿用罐头汤凑合着过节。他的话像一把钥匙,拧开了我的回忆闸门。我轻声说:“小时候,家里包饺子,我总捣乱,把面粉糊得满脸。我妈笑骂我,说‘再闹就不给你硬币了’……”声音渐渐低下去,饭盒里只剩几个孤零零的饺子。Tom拍拍我肩,“这儿是后室,但咱能自己造点暖意。你看,饺子不就来了?”
窗外,Level 11的虚假天幕依然明亮,没有烟花,没有钟声。可那一刻,饺子的温热从胃里蔓延开,像一小簇火苗。前厅的影子依然挥之不去,但Tom的这份心意,让这冰冷的层级多了丝人情味。我知道,后室的日子还得继续,可至少今晚,这顿饺子成了我们对抗虚无的锚——简单,真实,足以叫人攥紧拳头,又慢慢松开。
"爆竹声中一岁除,春风送暖入屠苏。"
"千门万户彤彤日,总把新桃换旧符。"