@supports(display: grid) {
:root {
--sidebar-width-on-desktop: calc((var(--base-font-size) * (14 / 15)) * 19);
--body-width-on-desktop: 45.75rem;
}
@media only screen and (min-width: 769px) {
#side-bar .close-menu {
display: block;
position: fixed;
top: unset;
bottom: 0.5rem;
left: 0.5rem;
width: 3rem;
height: 3rem;
background: unset;
opacity: 1;
pointer-events: all;
z-index: -1;
}
#side-bar .close-menu img {
color: transparent;
}
#side-bar .close-menu::before,
#side-bar .close-menu::after {
content: "";
box-sizing: border-box;
position: fixed;
display: block;
top: unset;
bottom: 0.5rem;
left: 0.5rem;
width: 3rem;
height: 3rem;
padding: 0;
margin: 0;
text-align: center;
pointer-events: all;
cursor: pointer;
transition:
opacity var(--sidebar-transition-timing);
}
#side-bar .close-menu::before {
--mask:url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='Hamburger' x='0' y='0' baseProfile='tiny' overflow='visible' version='1.2' viewBox='0 0 32 32' xml:space='preserve'%3E%3Cpath d='M4 10h24c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm24 4H4c-1.1 0-2 .9-2 2s.9 2 2 2h24c1.1 0 2-.9 2-2s-.9-2-2-2zm0 8H4c-1.1 0-2 .9-2 2s.9 2 2 2h24c1.1 0 2-.9 2-2s-.9-2-2-2z'/%3E%3C/svg%3E");
z-index: -1;
background-color: var(--toggle-icon-color, rgb(var(--sidebar-links-text))) !important;
-webkit-mask: var(--mask);
mask: var(--mask);
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: 50% 50%;
mask-position: 50% 50%;
-webkit-mask-size: 60%;
mask-size: 60%;
}
#side-bar .close-menu::after {
z-index: -2;
background-color: var(--toggle-button-bg, rgb(var(--sidebar-bg-color))) !important;
border-radius: var(--toggle-roundness, 50%);
border: var(--toggle-border-color, rgb(var(--sidebar-links-text))) var(--toggle-border-width, 0.25rem) solid;
}
#side-bar:focus-within .close-menu,
#side-bar:not(:has(.close-menu:hover)):not(:focus-within):hover .close-menu {
pointer-events: none;
}
#side-bar:focus-within .close-menu::before,
#side-bar:focus-within .close-menu::after {
opacity: 0;
pointer-events: none;
}
#side-bar:not(:has(.close-menu:hover)):not(:focus-within):hover .close-menu::before,
#side-bar:not(:has(.close-menu:hover)):not(:focus-within):hover .close-menu::after {
opacity: 0;
pointer-events: none;
}
#side-bar {
display: block;
position: fixed;
top: 0;
left: calc(var(--sidebar-width-on-desktop)*-1);
z-index: 10;
transition:
left 500ms cubic-bezier(0.4, 0, 0.2, 1) 100ms;
height: 100%;
overflow-y: auto;
overflow-x: hidden;
margin-top: 0;
}
#side-bar:focus-within {
left: 0;
}
#side-bar:not(:has(.close-menu:hover)):not(:focus-within):hover {
left: 0;
}
#side-bar .side-block {
margin-top: 1rem;
background-color: rgb(0, 0, 0, 0);
border-radius: 0;
border-left-width: 0px;
border-right-width: 0px;
}
#main-content::before {
content: "";
display: block;
position: fixed;
top: 0;
right: 0;
z-index: -1;
opacity: 0;
transition:
opacity 500ms cubic-bezier(0.4, 0, 0.2, 1) 100ms,
width 500ms cubic-bezier(0.4, 0, 0.2, 1) 100ms;
margin-left: var(--sidebar-width-on-desktop);
background: rgba(var(--swatch-menubg-black-color), .3) 1px 1px repeat;
padding-right: 0;
width: 100%;
height: 100vh;
pointer-events: none;
z-index: 99;
}
#side-bar:focus-within ~ #main-content::before {
width: calc(100% - var(--sidebar-width-on-desktop));
opacity: 1;
pointer-events: all;
}
#side-bar:not(:has(.close-menu:hover)):not(:focus-within):hover ~ #main-content::before {
width: calc(100% - var(--sidebar-width-on-desktop));
opacity: 1;
pointer-events: all;
}
@supports (-moz-appearance:none) and (background-attachment:local) and (not (-moz-osx-font-smoothing:auto)) { #side-bar {
padding: inherit;
} }
#content-wrap {
display: flex;
flex-direction: row;
width: calc(100vw - (100vw - 100%));
min-height: calc(100vh - calc(var(--final-header-height-on-desktop, 10.125rem)));
flex-grow: 2;
height: auto;
position: relative;
margin: 0 auto;
max-width: inherit;
}
#main-content {
width: 100%;
position: initial;
max-height: 100%;
padding: 2rem 1rem;
max-width: var(--body-width-on-desktop, 45.75rem);
margin: 0 auto;
}
#page-content {
max-width: min(90vw, var(--body-width-on-desktop, 45.75rem));
}
@supports (-webkit-hyphens:none) {
#side-bar {
transition:
left 500ms cubic-bezier(0.4, 0, 0.2, 1) 100ms,
padding-right 500ms cubic-bezier(0.4, 0, 0.2, 1) 100ms,
background-color 500ms cubic-bezier(0.4, 0, 0.2, 1) 100ms;
padding-right: 0;
background-color: rgb(0, 0, 0, 0);
pointer-events: all;
overflow-x: visible;
overflow-y: visible;
z-index: 999;
}
#side-bar::-webkit-scrollbar {
opacity: 0;
-webkit-transition: opacity 500ms cubic-bezier(0.4, 0, 0.2, 1) 100ms;
transition: opacity 500ms cubic-bezier(0.4, 0, 0.2, 1) 100ms;
}
#side-bar .close-menu::before {
z-index: 999;
}
#side-bar .close-menu::after {
z-index: 998;
}
#side-bar:hover .close-menu::before,
#side-bar:hover .close-menu::after {
opacity: 0;
}
#side-bar:hover {
left: 0;
background-color: rgba(var(--swatch-menubg-color), 1);
padding-right: 0;
}
#side-bar:hover::-webkit-scrollbar {
opacity: 1;
}
#side-bar:hover~#main-content::before {
width: calc(100% - var(--sidebar-width-on-desktop));
opacity: 1;
pointer-events: all;
}
}
}
}
}
:root {
/* header measurements */
--header-height-on-desktop: 10rem;
--header-height-on-mobile: 10rem;
--header-h1-font-size: clamp(2rem, 5vw, 2.8125rem);
--header-h2-font-size: clamp(0.875rem, 3vw, 0.9375rem);
--logo-image: url("https://scp-jp.github.io/Black-Highlighter/img/logo.svg");
}
#header {
--search-textbox-text-color: var(--swatch-secondary-color);
background: none;
}
#header::before {
content: " ";
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0.75rem;
background-image: var(--logo-image);
background-repeat: no-repeat;
background-position: center 0;
background-size: auto calc(var(--header-height-on-desktop) - 1.5rem);
opacity: 0.8;
pointer-events: none;
}
#header h1,
#header h2 {
margin: 0;
padding: 0;
width: 100%;
height: var(--header-height-on-desktop);
display: flex;
align-items: center;
justify-content: center;
display: flex;
align-items: center;
justify-content: center;
}
#header h1 a,
#header h1 a::before,
#header h2 span,
#header h2 span::before {
margin: 0;
padding: 0;
z-index: 0;
display: block;
text-align: center;
}
#header h1 {
z-index: 1;
}
#header h1 a::before,
#header h1 a::after {
content: var(--header-title);
}
#header h1 a::before {
color: rgb(var(--swatch-text-tertiary-color));
z-index: -1;
-webkit-text-stroke: 0.325rem rgb(var(--swatch-text-dark));
}
#header h1 a::after {
color: rgb(var(--swatch-headerh1-color));
z-index: 1;
}
#header h2 {
z-index: 0;
text-transform: uppercase;
pointer-events: none;
}
#header h2 span {
margin-top: calc(var(--header-height-on-mobile)/2 + var(--header-h1-font-size)/1.6 - 2em);
}
#header h2 span::before,
#header h2 span::after {
--wght: 600;
content: var(--header-subtitle);
position: absolute;
left: 50%;
transform: translateY(-50%) translateX(-50%);
width: 100%;
text-align: center;
}
#header h2 span::before {
-webkit-text-stroke: 0.25rem rgb(var(--swatch-text-dark));
}
#header h2 span::after {
color: rgb(var(--swatch-headerh2-color));
z-index: 1;
}
#search-top-box form[id="search-top-box-form"]:not(:focus-within) input[type="text"] {
color: rgba(0, 0, 0, 0);
}
@media (min-width: 36rem) {
#login-status {
flex-grow: 1;
left: 3%;
right: initial;
}
#login-status::before {
--mask-image: none;
background-color: transparent;
}
#login-status:not(:focus-within) {
color: rgb(var(--login-line-divider-color));
-webkit-user-select: initial;
-moz-user-select: initial;
-ms-user-select: initial;
user-select: initial;
}
#login-status #account-topbutton,
#login-status:not(:focus-within) #account-topbutton {
--clip-path:
polygon( 0 0, 100% 0, 100% 100%, 0 100% );
background-color: rgba(var(--login-arrow-color), 0);
}
#login-status #account-topbutton::before{
--clip-path:
polygon( 30% 35%, 70% 35%, 50% 60%, 50% 60% );
--mask-image: initial;
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(var(--login-arrow-color), 1);
-webkit-clip-path: var(--clip-path);
clip-path: var(--clip-path);
}
#login-status #account-topbutton::before,
#login-status:not(:focus-within) #account-topbutton::before,
#login-status:not(:focus-within) #account-topbutton:hover::before {
--clip-path:
polygon( 30% 35%, 70% 35%, 50% 60%, 50% 60% );
--mask-image: initial;
}
#login-status:not(:focus-within) #account-topbutton::after {
display: none;
}
#login-status:not(:focus-within) *:not(#account-topbutton):not([href*="account/messages"]) {
--clip-path:
polygon(
0 0,
100% 0,
100% 100%,
0 100%
);
pointer-events: all;
-webkit-clip-path: var(--clip-path);
clip-path: var(--clip-path);
}
#login-status:not(:focus-within) *:not(#account-topbutton):not(#account-options):not([href*="account/messages"]) {
opacity: 1;
}
#login-status #my-account {
--wght: 300;
}
#account-options {
background: var(--gradient-header);
}
#search-top-box {
top: 1.5em;
right: 3%;
background: rgba(var(--search-focus-textbox-bg-color), 0.4);
}
#search-top-box:focus-within ~ #login-status {
opacity: 1;
}
#search-top-box::after {
transition:
background-color 150ms cubic-bezier(0.4, 0, 0.2, 1),
-webkit-clip-path 150ms cubic-bezier(0.4, 0, 0.2, 1);
transition:
background-color 150ms cubic-bezier(0.4, 0, 0.2, 1),
clip-path 150ms cubic-bezier(0.4, 0, 0.2, 1);
transition:
background-color 150ms cubic-bezier(0.4, 0, 0.2, 1),
clip-path 150ms cubic-bezier(0.4, 0, 0.2, 1),
-webkit-clip-path 150ms cubic-bezier(0.4, 0, 0.2, 1);
}
#search-top-box:not(:focus-within)::after {
--clip-path:
polygon(
0 0,
100% 0,
100% 100%,
0% 100%
);
background-color: rgba(var(--search-icon-bg-color, --dark-accent), 1);
-webkit-clip-path: var(--clip-path);
clip-path: var(--clip-path);
}
#search-top-box:not(:focus-within):hover::after {
--clip-path:
polygon(
0 0,
100% 0,
100% 100%,
0 100%
);
background-color: rgb(var(--search-icon-hover-bg-color));
}
#search-top-box form[id="search-top-box-form"]:not(:focus-within) {
max-width: var(--search-width);
}
#search-top-box form[id="search-top-box-form"]:not(:focus-within) input[type="text"] {
max-width: var(--search-width);
padding: 0 var(--search-height) 0 1em;
outline-width: 0;
background-color: rgb(var(--search-focus-textbox-bg-color), 0.35);
color: rgba(var(--search-textbox-text-color), 0.4);
cursor: pointer;
}
#search-top-box form[id="search-top-box-form"]:not(:focus-within) input[type="submit"],
#search-top-box form[id="search-top-box-form"]:focus-within input[type="submit"] {
pointer-events: all;
border: none;
}
}
#page-title::after,
.meta-title::after,
#page-title::before,
.meta-title::before {
content: "";
flex-grow: 1;
height: 0.0625rem;
background: rgb(var(--swatch-primary));
}
#page-title::before,
.meta-title::before {
margin: auto 1.25rem auto auto;
}
クレジット
タイトル: O2PD事件ファイル - BOOGEYMAN
著者: ©︎
SealBaby-V
作成年: 2025
午後3時、前時代的なデザインのボロいアパートのある一室に3人の警官が突入しようとしていた。1人は四肢を完全に機械であり、もう1人は頭部がモニターに置き換わっている。そして最後の一人は──何も無い。ただの人間だ。音をたてぬように扉を開き侵入する。誰かがいる様子は無い。
(俺は右の部屋、タマキは奥、アカサカは左を見ろ)
モニター頭が文章を表示する。それぞれ指示に従うように動き始めた。何も無いただの人間──アカサカ──は既に開いている扉から左の部屋の様子を覗く。
人影が見えた
遠くにいる2人に声をかけようとするもそんなことをすれば逃げられてしまう。かと言って目を離して伝えに行くわけにも行かない。アカサカは1人で捕まえることを決意した。幸運にも容疑者はこちらに背を向けていて、どこか義体化しているようにも見えない。銃で脅すよりも組み付いて捕まえる方が確実だ。
後ろから勢いよく飛び出し相手の足を掬い、倒れそうになったところを頭・両手を掴み身動きを取れなくする。大きなもの音を聞いてモニター頭とタマキが加勢に来るだろう。実際、ドタドタとこちらに向かって走ってくる音がする。
勝ちを確信した瞬間、ふと部屋の奥に置かれていたベッドが目に入った。赤い布団の中に入っていたのは、顎から上の無い、血濡れた死体だった。
動揺、混乱、そして少しの恐怖
一瞬力が緩んだその隙に拘束を抜けられ、両手でアカサカの頭をがっしりと掴むと血走った目を向けながらブツブツと何かを言い始める。即座に銃に手を伸ばそうとするも体が全く動かない。耳・目・鼻から血が出る。割れるような頭痛もしてきた。
目の前が赤く、そして黒くなっていく。
何も見えなく、何も聞こえず、何の匂いを感じない
痛みすらも感じなくなり
身を任せるように
眠った
「起きろアカサカァ!」
大声で目が覚め、飛び起きるように体を起こす。周りを見渡せば、簡易ベッドのようなものに寝かされていたようで、ガスマスクを付けた整備士のような格好した人達がこちらをじっと見ていた。
自分の置かれた状況を把握するために頭を返させようとするがなかなか時間がかかる。ひとつ分かることは、ここは先程のアパートの廊下のようで、アカサカを起こしたのは──
「イナビカリ本部長」
「いつまで寝とんねんはよ起きて医者さんに礼言わんかい!」
「医者……?」
周りを見渡した時に医者のような人はいなかった。なら、こっちを見つめてくる──ガスマスク越しなので本当にこっちに目線が来ているかは分からないが──整備士達の事を言っているんだろう。アカサカが礼をいえば、無言でそのままどこかへ立ち去っていった。
「自分もう死にかけとってどないしようもなかったから、体勝手にちょっと義体化させたぞ。文句ないなぁ?同意書とかは後で書いとくんやで?」
先程から感じていた違和感はそれだろう。何となく体の左右のバランスが取れていない感覚がずっとあった。正直言って今まで体を機械にするのには抵抗があったが、今回のような状況では仕方がなかったのだろう。
「わかりました。ところで犯人は捕まえましたか?」
「いや、逃げられてもうたらしい。窓からぴょーんって外に飛び降りてそんまま走ってったんやと」
「窓から?ここ8階ですよ?」
「タマキとモニターがそう言うとんねん!ワシに聞くんちゃうわ!」
なら自分で聞きに行こうと立ち上がる。整備士が置いていってくれたのだろう杖を使い、進入禁止のホログラム結界に群がる野次馬をどかしながらアカサカは現場に入る。
そのまま寝室の方へと進めば、あの時見た顎から上の無い死体とアカサカの耳と目と鼻から出た血を鑑識達が囲っていた。何となく少し恥ずかしかった。それよりも気になったのは、鑑識の横でタバコを吸いながら死体を見つめてる背の高い女だ。
「シビミヤてめぇコラァ!また現場でタバコ吸うとんのかぁ!」
ついて来ていたのか、イナビカリ本部長がアカサカの後ろから叫ぶ。また耳から血が出るんじゃないかと思えるほどの声量だ。しかも、またと言ったことからこいつは常習犯なのだろう。女は煙を吐きながらこちらを向く。
「部長。こいつジョン・ドゥすよ。身分証明書もアパートの記録も全部デタラメ。義体化痕も無いからそこからの特定も不可能。極め付きにこのアパートってことも含めて考えると多分こいつは違法滞在者──誰っすかそいつ」
目と目が合う。スーツにヨレヨレのコートを着て髪を後ろに雑に纏め、虚ろで光の無い隈だらけの目をした女だ。本部長を前にしてもタバコを吸う手は止まらないどころか、次のタバコを吸おうとしている。
「吸うなって何回も言うとるやろが!ええ加減にせぇ!ポケットになおしとけ!あとワシの事は部長やなくて本部長って呼べ!」
「わかりましたよ。注文が多いなぁ……で、誰すかそいつ」
「こいつは新人のアカサカ、そこで死にかけとったヤツや!今日から自分とバディ組むことになるからちゃんと覚えときな!」
「え、聞いてない」
もちろんアカサカも聞いていなかった。
「アカサカは独断行動が過ぎる。やから杖で身体支えなあかんくなる状況になんねん。シビミヤはこんなんでも優秀や。しばらく下におれば義体化にも慣れて、得られるもんもあるやろう」
「……そう言われましても、いきなり過ぎて困ります。確かに一人行動で死にかけたことは事実ですし反省していますが──」
「自分は見ず知らずの子供のお守りをするほど暇じゃねぇんすよ。アカ……なんたらも同じこと思ってるっすよ。どうせ適当にバディ決めてんだろって」
思ってる思ってないで言えば思っている。先輩から聞いた話によると、イナビカリ本部長はバディを組ませるときは手がかかるやつを合わせて無理矢理相互抑制させて解決しようとする節があるが、もちろん解決などするはずはなく、むしろ悪化して2人共辞職するなんてこともよくあるらしい。
「やかましい!これは命令や!ええ加減自分は後輩育成の一つや二つこなさんかい!」
「はいはい命令ならやりますよ。えーと、アカウラ?」
「アカサカです」
「あぁそうアカサカ、な。よろしく。シビミヤだ」
シビミヤは指をクイックイッと曲げて着いてくるように示してくる。まだ義体化に慣れていないので杖に支えてもらいながら何とか歩く。何度も倒れそうになるが、その度に壁に手を付いて進み続ける。
死体のある部屋に入り、シビミヤはそのまま窓の方へと歩き続けた。体を乗り出して窓の外の様子を見ると、溜息をつきながらアカサカの方を向いた。
「8階から落ちても無事な人間、どんなやつだと思う?」
「全身を義体化していたとしてもここから落ちて無事ではいられないでしょう。なら、何かしらのアーティファクトを所持しているか紫煙使いといった能力者である可能性もあると思います」
「そうだよなぁ……紫煙使いかもしれないよなぁ……面倒だなぁ……」
紫煙使い──死に直面するようなトラウマを抱いた状態で神格に遭遇した時に力を得ることの出来る能力者──の事を聞いた途端にシビミヤのやる気が目に見えて無くなっていくのを感じた。
「まあ、タマキとモニターが紫煙を見ていないって言ってたから多分違うと思うが……能力者の可能性は全然あるんだよなぁ……」
「そこまで厄介なものなのですか?」
「あぁ厄介も厄介、大厄介だよ。捕まえても逃げられるわ仲間も大勢殺されるわ民間人も巻き込むわで……そのくせ責任は私ら警察の方に来るんだよ。面倒だなぁ……」
そうボヤきながらポケットからタバコを取り再び吸い始める。
「なら、早く捕まえましょう。死体は身元不明と言っていましたが、犯人の手がかりはなにかありましたか?」
「あーそうだな。死体の身元の方だが一応アテはある。紫煙使いを相手にすることの次に面倒なことしないといけないけどな。で、犯人の手がかりはこれだけだ」
タバコを持っていない方の手でポケットからジップロックに入れられた小さな紙を見せてくる。そこに書かれていたのは──
O/Oに来れば逃げられるとでも思ったか?
全員そこで待ってろ
ブギーマンが殺しに行くからな
──犯行声明だった。
«グーッモーニン O/Oオーオー!»
今日も電波ジャックによってどこの誰が流しているかも分からないラジオ番組を聞いている。この放送はどんなテレビやインターネットよりも早く情報をくれる。
おぉっとこれはひどい!キョウバシ区画ディストリクトのアパートでなんと殺人事件が起きたらしい。しかも?殺されたのが誰かわからんし?顎から上が吹き飛ばされたんだってぇ!?可哀想に!リスナーの諸君は吹き飛ばされても大丈夫なようしっかりと頭部は全部義体化しときや!
ところでこのアパート、実は違法滞在者が沢山住んでいるらしいな!H.R.Kに呼ばれてきた奴らと違法滞在者に違いがあるんかはようわからんけど。そんでさらに!なんとこのアパート、実はあのギャング組織、"紫の……おぉっとすまない!3年振りに誰かが俺の場所を特定したと情報が入った!まあもちろんそんなことできるはずはないんだが……念の為今日の放送は終了!ここまでお送りしましたのはアウターオーサカ名物DJ──
そこまで聞いてラジオを切り、ため息をついてからグラスの中に少しだけ余っているバイオレットフィズを喉の奥へと流し込む。カウンターに空のグラスを叩きつけると同時にスマホのホログラムが着信が来ていることを示してくる。
『……失礼します。O2PDの刑事二人がお会いしたいと連絡を受けましたがどうされますか』
「わかった。連れてきてくれ」
『了解しました。女王』
「女王?」
「あぁ。正確には"紫の女王"。私はムラサキって呼んでる。女王なんて肩書がつくほど良いやつじゃない」
商店街を刑事二人が歩いている。二人はあるバーに向かっていた。シビミヤが言うには、そのバーに被害者の事を知っているムラサキという人物がいるらしく話を聞きに行っているのだが……
「なあ休憩しないか。歩き疲れた」
「ついさっき休憩したばっかりですし、何回休憩するんですか」
自分から提案しておいてシビミヤが行きたがらないのだ。「紫煙使いを相手にすることの次に面倒なことしないといけない」と言っていたが、今から会う相手はそんなに面倒な人物なのだろうかとアカサカは疑問に思う。
「早くいきましょう。事件の早期解決を目指すのが刑事でしょう」
「……わかったよ」
「ほら、もう着きますよ」
"Bar Queen's Rose"
チリンと鈴の音が扉を開けるとともに店内に響く。店内の装飾の豪華さと裏腹に客はほとんどいない。居るのはたった一人。カウンターに座っている紫のドレスを着た女性だ。二人の方を見ると手を上げ指でこちらに来るように示してくる。
その女性の横に一つ席を空けてシビミヤ、そのすぐ隣にアカサカが座る。ウェイターが注文を聞いてくるがシビミヤが「いらない」というとどこかへ行ってしまった。
「シビミヤ久しぶりだなぁ。何で会いに来ない?私の事が嫌いか?」
「嫌いだよクソ女」
「そうかよヤニカス女。で、そっちのは誰だよ」
女性は目線を変え、アカサカと目と目が合う。シビミヤが虚ろな目をしていたり髪が乱れているということもあるからだろうが、女性は非常に美人に見えた。よく見れば紫色の瞳、紫のインナーカラー、さらにネイルも紫色……体の装飾品が全て紫色で構成されている。執着のようなものを感じ取れるがどれも美しく、この女性に似合っているように見える。
「アカサカです。シビミヤさんの後輩です」
「へぇ。で、何しに来た」
興味が無くなったのかすぐにシビミヤの方へと目線を直す。装飾の特徴やシビミヤとのやり取りを加味してこの女性がムラサキであることは間違いない。
それよりも気になるのは二人の関係性だ。割とお互いを知っているようではあるが、仲は悪そうだ。友人同士の仲だからこそとも見えるが、シビミヤのあの態度を見るにそうでは無いのだろう。
「どうせ知ってんだろ。お前のとこのアパートで人が殺されたんだ。でも誰かわかんねぇから聞きに来たんだよ。さっさと教えろ」
「本当に礼儀を知らないな?その辺の物乞いでも頭を下げるぐらいのことはするぞ」
シビミヤは舌打ちをしてコートの中から古めかしい拳銃を取り出しムラサキの額に銃口を当てる。そんな状況でも、ムラサキは余裕そうな態度を崩さない。
「シビミヤさん。彼女に発砲命令は出ていません。銃を下ろしてください」
「『危機的状況に陥った場合許可なく発砲しても良い』だよルーキー。ギャングに脅されたから今危険な状況なんだ私は。こいつを殺せばオーサカから1個癌を潰せて顧客情報を取れて一石二鳥なんだよ」
「好きにしなよ。殺しても意味ないことぐらい知ってるくせに」
互いに睨み合い、居心地の悪い静寂が場を包む。唯一その場で動いているのはシビミヤのタバコの煙だけだった。アカサカはその空気に耐えられるほど我慢強くはなく、それよりも先に行動してしまう人間だった。
「では、何をすればいいですか」
「は?」
アカサカのその一言に呆気にとられたシビミヤは口からタバコを零した。落ちる前に銃を持っていない方の手で再び加えてから、銃口の先をアカサカの方へと向けた。
「おい。何もするなとは言ってないが何かしろとも言ってない!今の言葉をすぐに取り消──
「いいだろう!シビミヤがダメならお前と契約する。決定だ」
そう嬉しそうに言った瞬間、シビミヤはムラサキに向かって発砲する。至近距離での発砲。初めて銃を握った人間でも当てられる確率の非常に高い距離で──シビミヤは全弾外した。
「『契約の場の邪魔をしない』だったか、昔お前と契約した時の条件は。今の契約不履行は見逃してやろう。さあその席をどいてくれ。アカサカと話したいんだ」
シビミヤを無理矢理席から離してアカサカの隣に座る。何かの花の香水の匂いが彼女が動くたびに周囲に漂う。アカサカにとっては苦手な匂いだった。
「こっちが提示する条件は……そうだな。『一度だけ絶対に言うことを聞く』にしようか。わかりやすいだろ?」
発言やシビミヤの態度を見るに、ムラサキは契約に関する能力を持っているんだろう。「相手との契約時、提示した条件は今後いかなる状況でも破ることはできない」のような。この条件を断れば、さらに厳しい条件を出してこちらを揺さぶってくるだろう。ならば──
「わかりました。その条件の代わりに顧客についての情報を教えてください」
「アカサカ!」
「シビミヤ、邪魔するな。それじゃあアカサカ、これから仲良くしていこうじゃないか」
ムラサキが右手を差し出す。アカサカはその手を握り、契約は成立された。
「じゃあ手配するから少しここで待ってろ」
ムラサキが離れたところでスマホを持って誰かに電話をかけている中、シビミヤはアカサカの胸倉をつかみあげる。アカサカが若干顔をしかめるが直ぐに真顔に戻った。
「何やってんだお前!」
「あの状態からいい方向に動くとは思えませんでした。むしろ悪い方に行くでしょう。自分で言うのもなんですが、賢明な判断だったと思います」
「だからって!……いや、すまない。私が悪かった」
シビミヤの握る手が少しずつ緩んでいく。完全に手を離した頃には怒りの感情は消え、何とも形容しがたい顔をしていた。焦り、後悔、落胆が混ざったような顔だ。
そんなことをしていると、ムラサキがいつの間にかカウンターに戻り、二人を見てニヤニヤしながらカクテルを呑んでいることに気づいた。
「仲がいいのは素晴らしいことだが、顧客情報は見なくてもいいのか?なんの見返りもなしに私の願いを聞きたいのなら早めに言ってくれ」
二人が無言でカウンターに座るとムラサキはスマホの画面を二回タップしホログラムを展開した。
「まずお前らが一番気になっている奴を見せてやろう」
「さっさと見せろ。被害者は誰なんだよ」
「なんだ。犯人よりもそっちの方が気になるのか」
「は?」
「はい?」
二人は頭が一瞬動かなかった。仮にムラサキが犯人を知っているとして、なぜ・どうやって知っているのか合理的な理由が思いつかないからだ。相手がギャングのボスとはいえ警察よりも早く犯人を特定しているなんてことはありえない。
「ほら。こいつだよ」
ホログラムに一人の男の顔が映し出される。アカサカがあのアパートで見た顔だ。頭を割られそうになっていたのを思い出し若干気分が悪くなる。
「確かに。こいつです。でも何故あなたが知っているんですか?」
「客だよ。情報を買いに来たんだ。三人分」
「そのうちの一人が被害者だったからこいつが犯人ってことか」
ムラサキが画面をスワイプし今度は三人の顔を映す。この三人の情報を買ったのだろう。そしてそのうちの一人が──顎から上が無かったので正確にはわからないがおそらく──被害者なんだろう。
「この三人の関係は?」
「元ギャングの運び屋。ギャングっていってもこいつらの宇宙のギャングだから詳しくは知らない」
「彼らは何のためにここに来たんですか?」
「元の宇宙でなんかやらかしたみたいで、必死に逃げてここまで来たんだと」
……と問答を繰り返していくうちに、2人の頭の中で彼らの人物像が浮かんできた。
彼らは