Files
tamabox/outputs/verify/explore.html
T
2026-10-19 11:43:24 +08:00

2170 lines
71 KiB
HTML

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>探索 - 狼の質問箱 | 匿名質問箱</title>
<meta name="msvalidate.01" content="2F185E8E63C93635F50B3574F3B31E42" />
<meta name="description" content="狼の質問箱は登録不要で使える匿名質問箱。誰でも匿名で質問でき、安心してやり取りできる場所です。">
<meta name="keywords" content="匿名質問箱,質問箱,匿名質問,狼の質問箱,匿名で質問,匿名Q&amp;A">
<script>
(function () {
var m = document.cookie.match(/(?:^|;\s*)theme=([^;]*)/);
if (m && m[1] === 'dark') document.documentElement.setAttribute('data-theme', 'dark');
})();
</script>
<style>
:root {
--tb-bg: #f7f8fa;
--tb-surface: #ffffff;
--tb-surface-2: #f4f6f8;
--tb-surface-hover: #f3f7ff;
--tb-border: #e8eaee;
--tb-text: #1f2329;
--tb-text-secondary: #5c6370;
--tb-text-muted: #8a919c;
--tb-primary: #1e87f0;
--tb-primary-weak: rgba(30, 135, 240, 0.10);
--tb-radius: 12px;
--tb-radius-sm: 8px;
--tb-radius-xs: 6px;
--tb-shadow: 0 1px 2px rgba(16, 24, 40, 0.04), 0 12px 28px -18px rgba(16, 24, 40, 0.20);
--tb-shadow-hover: 0 1px 2px rgba(16, 24, 40, 0.05), 0 18px 40px -20px rgba(16, 24, 40, 0.28);
--tb-font: system-ui, -apple-system, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Microsoft YaHei", sans-serif;
}
html[data-theme="dark"] {
--tb-bg: #1a1d23;
--tb-surface: #242830;
--tb-surface-2: #2d323c;
--tb-surface-hover: rgba(92, 141, 255, 0.12);
--tb-border: #3a404c;
--tb-text: #d8dce4;
--tb-text-secondary: #a8b0bd;
--tb-text-muted: #8b93a1;
--tb-primary: #5c8dff;
--tb-primary-weak: rgba(92, 141, 255, 0.14);
--tb-shadow: 0 1px 2px rgba(0, 0, 0, 0.30), 0 12px 28px -18px rgba(0, 0, 0, 0.55);
--tb-shadow-hover: 0 1px 2px rgba(0, 0, 0, 0.35), 0 18px 40px -20px rgba(0, 0, 0, 0.65);
}
</style>
<link rel="preconnect" href="https://r2.337845818.best" crossorigin>
<link rel="preconnect" href="https://cdnjs.snrat.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.snrat.com/ajax/libs/uikit/3.3.3/css/uikit.min.css"/>
<link rel="stylesheet" href="https://r2.337845818.best/tamabox/cdn/waline/client/v2/waline-no-commits.css" media="print" onload="this.media='all'"/>
<script defer src="https://cdnjs.snrat.com/ajax/libs/uikit/3.3.3/js/uikit.min.js"></script>
<script defer src="https://cdnjs.snrat.com/ajax/libs/uikit/3.3.3/js/uikit-icons.min.js"></script>
<style>
.uk-light { color: rgba(0,0,0,.7); }
.uk-light .uk-h1, .uk-light .uk-h2, .uk-light .uk-h3, .uk-light .uk-h4, .uk-light .uk-h5, .uk-light .uk-h6,
.uk-light .uk-heading-2xlarge, .uk-light .uk-heading-large, .uk-light .uk-heading-medium, .uk-light .uk-heading-small, .uk-light .uk-heading-xlarge,
.uk-light h1, .uk-light h2, .uk-light h3, .uk-light h4, .uk-light h5, .uk-light h6 { color: #000; }
.uk-light .uk-table th { color: rgba(0,0,0,.7); }
</style>
<script defer src="https://cdnjs.snrat.com/ajax/libs/dayjs/1.10.8/dayjs.min.js"></script>
<script defer src="https://cdnjs.snrat.com/ajax/libs/alpinejs/3.9.0/cdn.min.js"></script>
<script defer src="https://cdnjs.snrat.com/ajax/libs/waline/2.15.8/waline.js"></script>
<style>
.captcha-equation-box {
display: inline-flex;
align-items: center;
background: #f0f2f5;
border: 1px solid #dcdcdc;
border-radius: 8px;
padding: 8px 8px 8px 16px;
gap: 6px;
transition: border-color 0.2s;
}
.captcha-equation-box:focus-within {
border-color: #1e87f0;
box-shadow: 0 0 0 3px rgba(30,135,240,0.12);
}
.math-captcha-modal-question {
font-size: 1.4rem;
font-family: "Courier New", monospace;
font-weight: 700;
color: #333;
letter-spacing: 1px;
white-space: nowrap;
}
#captcha-modal-answer {
width: 80px;
padding: 6px 10px;
text-align: center;
font-size: 1.2rem;
font-family: "Courier New", monospace;
font-weight: 600;
border: 1px solid #ccc;
border-radius: 5px;
outline: none;
transition: border-color 0.15s, box-shadow 0.15s;
background: #fff;
}
#captcha-modal-answer:focus {
border-color: #1e87f0;
box-shadow: 0 0 0 2px rgba(30,135,240,0.2);
}
#captcha-modal-answer::-webkit-inner-spin-button,
#captcha-modal-answer::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
#captcha-modal-answer {
-moz-appearance: textfield;
}
</style>
<style>
.grecaptcha-badge {visibility: hidden;}
.icon-container {
display: flex;
justify-content: center;
width: 100%;
}
.icon {
margin-left: 10px;
width: 20px;
height: auto;
}
.emoji-placeholder {
display: inline-block;
animation: jump 0.5s ease-in-out;
}
@keyframes jump {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-5px); }
}
.uk-dropbar {
opacity: 0;
visibility: hidden;
transition: opacity 0.2s ease, visibility 0.2s ease;
}
.uk-dropbar.uk-open {
opacity: 1;
visibility: visible;
}
a.uk-button.uk-button-link {
text-transform: none;
}
@media (max-width: 640px) {
.uk-logo {
font-size: 1rem;
}
.uk-navbar-nav a {
font-size: 0.78rem;
padding: 0 4px;
}
.emoji-placeholder {
font-size: 1rem;
}
.tb-nav-username {
max-width: 64px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-block;
vertical-align: middle;
}
}
</style>
<style>
html[data-theme="dark"],
html[data-theme="dark"] body {
background-color: var(--tb-bg) !important;
color: var(--tb-text) !important;
}
html[data-theme="dark"] .uk-card,
html[data-theme="dark"] .uk-card-default,
html[data-theme="dark"] .uk-card-secondary,
html[data-theme="dark"] .uk-dropbar,
html[data-theme="dark"] .uk-navbar-dropdown,
html[data-theme="dark"] .uk-modal-dialog,
html[data-theme="dark"] .uk-dropdown,
html[data-theme="dark"] .uk-offcanvas-bar,
html[data-theme="dark"] .uk-section,
html[data-theme="dark"] .uk-tile,
html[data-theme="dark"] .uk-panel,
html[data-theme="dark"] .uk-background-default,
html[data-theme="dark"] .uk-search-default .uk-search-input {
background-color: var(--tb-surface) !important;
color: var(--tb-text) !important;
}
html[data-theme="dark"] .uk-navbar-container {
background-color: var(--tb-surface) !important;
color: var(--tb-text) !important;
}
html[data-theme="dark"] .uk-navbar-nav > li > a,
html[data-theme="dark"] .uk-card a,
html[data-theme="dark"] .uk-link,
html[data-theme="dark"] a.uk-button-link,
html[data-theme="dark"] .uk-navbar-dropdown-nav > li > a,
html[data-theme="dark"] .uk-dropdown-nav > li > a,
html[data-theme="dark"] .uk-list a {
color: var(--tb-text) !important;
}
html[data-theme="dark"] .uk-navbar-nav > li > a:hover,
html[data-theme="dark"] .uk-card a:hover,
html[data-theme="dark"] .uk-navbar-dropdown-nav > li > a:hover,
html[data-theme="dark"] .uk-dropdown-nav > li > a:hover {
color: var(--tb-primary) !important;
}
html[data-theme="dark"] .uk-input,
html[data-theme="dark"] .uk-textarea,
html[data-theme="dark"] .uk-select {
background-color: var(--tb-surface-2) !important;
color: var(--tb-text) !important;
border-color: var(--tb-border) !important;
}
html[data-theme="dark"] .uk-input:focus,
html[data-theme="dark"] .uk-textarea:focus,
html[data-theme="dark"] .uk-select:focus {
border-color: var(--tb-primary) !important;
}
html[data-theme="dark"] .uk-text-muted,
html[data-theme="dark"] .uk-text-meta,
html[data-theme="dark"] .uk-text-secondary,
html[data-theme="dark"] .uk-text-muted a,
html[data-theme="dark"] .uk-text-small.uk-text-muted {
color: var(--tb-text-muted) !important;
}
html[data-theme="dark"] .uk-divider-icon::after,
html[data-theme="dark"] hr,
html[data-theme="dark"] .uk-table th,
html[data-theme="dark"] .uk-table td,
html[data-theme="dark"] .uk-list-divider > li:nth-child(n+2) {
border-color: var(--tb-border) !important;
}
html[data-theme="dark"] .uk-button-default {
background-color: var(--tb-surface-2) !important;
color: var(--tb-text) !important;
border-color: var(--tb-border) !important;
}
html[data-theme="dark"] .uk-modal-title,
html[data-theme="dark"] h1, html[data-theme="dark"] h2, html[data-theme="dark"] h3,
html[data-theme="dark"] h4, html[data-theme="dark"] h5, html[data-theme="dark"] h6,
html[data-theme="dark"] .uk-card-title {
color: var(--tb-text) !important;
}
html[data-theme="dark"] .uk-alert-warning,
html[data-theme="dark"] .uk-alert-danger,
html[data-theme="dark"] .uk-alert-success,
html[data-theme="dark"] .uk-alert-primary {
background-color: var(--tb-surface-2) !important;
color: var(--tb-text) !important;
}
html[data-theme="dark"] #math-captcha-modal .uk-modal-dialog {
background-color: var(--tb-surface) !important;
color: var(--tb-text) !important;
}
html[data-theme="dark"] #math-captcha-modal .captcha-equation-box {
background-color: var(--tb-surface-2) !important;
border-color: var(--tb-border) !important;
}
html[data-theme="dark"] #math-captcha-modal .math-captcha-modal-question {
color: var(--tb-text) !important;
}
html[data-theme="dark"] #math-captcha-modal #captcha-modal-answer {
background-color: var(--tb-surface) !important;
color: var(--tb-text) !important;
border-color: var(--tb-border) !important;
}
html[data-theme="dark"] #math-captcha-modal #captcha-modal-answer::placeholder {
color: var(--tb-text-muted) !important;
}
html[data-theme="dark"] #math-captcha-modal .uk-text-meta,
html[data-theme="dark"] #math-captcha-modal #captcha-modal-refresh {
color: var(--tb-text-muted) !important;
}
html[data-theme="dark"] #math-captcha-modal #captcha-modal-refresh:hover {
color: var(--tb-primary) !important;
}
html[data-theme="dark"] .uk-label {
color: #fff !important;
}
html[data-theme="dark"] .recommend-card,
html[data-theme="dark"] .recommend-card:hover {
background-color: var(--tb-surface-2) !important;
}
html[data-theme="dark"] .explore-name a {
color: var(--tb-text) !important;
}
html[data-theme="dark"] .explore-name a:hover {
color: var(--tb-primary) !important;
}
html[data-theme="dark"] .explore-intro {
color: var(--tb-text-muted) !important;
}
#theme-toggle .tb-icon-dark, #theme-toggle-mobile .tb-icon-dark { display: none; }
html[data-theme="dark"] #theme-toggle .tb-icon-light,
html[data-theme="dark"] #theme-toggle-mobile .tb-icon-light { display: none; }
html[data-theme="dark"] #theme-toggle .tb-icon-dark,
html[data-theme="dark"] #theme-toggle-mobile .tb-icon-dark { display: inline; }
</style>
<style>
html,
body {
font-family: var(--tb-font);
background-color: var(--tb-bg);
color: var(--tb-text);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.uk-card {
border-radius: var(--tb-radius);
}
.uk-card-default {
background-color: var(--tb-surface);
box-shadow: var(--tb-shadow);
}
.uk-card-default.uk-card-hover:hover {
box-shadow: var(--tb-shadow-hover);
}
.uk-card-header {
border-radius: var(--tb-radius) var(--tb-radius) 0 0;
}
.uk-card-footer {
border-radius: 0 0 var(--tb-radius) var(--tb-radius);
}
.uk-card,
.uk-button,
.uk-alert,
.uk-label {
transition: box-shadow 0.18s ease, background-color 0.18s ease, border-color 0.18s ease, color 0.18s ease;
}
.uk-button {
border-radius: var(--tb-radius-sm);
}
.uk-input,
.uk-select,
.uk-textarea,
.uk-form-small,
.uk-search-input {
border-radius: var(--tb-radius-sm);
}
.uk-label {
border-radius: var(--tb-radius-xs);
}
.uk-alert {
border-radius: 10px;
}
.uk-modal-dialog {
border-radius: 14px;
}
.uk-dropdown,
.uk-navbar-dropdown {
border-radius: 10px;
box-shadow: var(--tb-shadow);
}
.uk-navbar-container:not(.uk-navbar-transparent) {
background-color: var(--tb-surface);
}
.uk-button:focus-visible,
.uk-navbar-nav > li > a:focus-visible {
outline: 2px solid var(--tb-primary);
outline-offset: 2px;
}
.uk-text-muted,
.uk-text-meta {
color: var(--tb-text-muted);
}
.uk-table,
.tb-num {
font-variant-numeric: tabular-nums;
}
.tb-img-uploader {
width: 100%;
background-color: var(--tb-surface-2);
display: flex;
padding-top: 5px;
padding-bottom: 5px;
align-items: center;
justify-content: flex-start;
gap: 5px;
}
.tb-cover {
position: relative;
border-radius: var(--tb-radius) var(--tb-radius) 0 0;
overflow: hidden;
}
.tb-cover::after,
.tb-cover.uk-flex::after {
content: "";
display: block;
position: absolute;
inset: 0;
z-index: 0;
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.58) 55%, rgba(255, 255, 255, 0.84) 100%);
pointer-events: none;
}
.tb-cover.tb-cover-dark::after {
background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.16) 45%, rgba(0, 0, 0, 0.46) 100%);
}
.tb-cover > * {
position: relative;
z-index: 1;
}
.tb-cover h3,
.tb-cover p {
text-shadow: 0 1px 10px rgba(255, 255, 255, 0.65);
}
.tb-cover.tb-cover-dark h3,
.tb-cover.tb-cover-dark p {
text-shadow: 0 1px 12px rgba(0, 0, 0, 0.45);
}
@media (prefers-reduced-motion: reduce) {
.uk-card,
.uk-button,
.emoji-placeholder {
transition: none;
animation: none;
}
}
</style>
<style>
.uk-navbar-nav a {
font-size: 0.95rem;
padding: 0 10px;
}
.tb-mobile-balancer { display: none; }
.tb-navbar .uk-logo {
white-space: nowrap;
}
@media (max-width: 1200px) {
.uk-navbar-nav a {
font-size: 0.88rem;
padding: 0 8px;
}
}
@media (max-width: 1000px) {
.uk-navbar-nav a {
font-size: 0.82rem;
padding: 0 6px;
}
.uk-logo {
font-size: 1.1rem;
}
.tb-nav-username {
max-width: 110px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-block;
vertical-align: middle;
}
}
@media (max-width: 800px) {
.uk-navbar-nav a {
font-size: 0.78rem;
padding: 0 4px;
}
.uk-logo {
font-size: 1rem;
}
.tb-nav-username {
max-width: 80px;
}
}
@media (max-width: 640px) {
.tb-navbar {
position: relative;
min-height: 56px;
overflow: visible;
}
.tb-navbar > .uk-navbar-center {
position: relative !important;
top: auto !important;
left: auto !important;
right: auto !important;
bottom: auto !important;
transform: none !important;
display: flex !important;
align-items: center;
justify-content: center;
width: 100%;
min-height: 56px;
white-space: nowrap;
flex-wrap: nowrap;
}
.tb-navbar .uk-navbar-center-left,
.tb-navbar .uk-navbar-center-right {
position: static !important;
top: auto !important;
left: auto !important;
right: auto !important;
bottom: auto !important;
transform: none !important;
display: flex !important;
align-items: center;
flex: 0 0 auto;
white-space: nowrap;
}
.tb-navbar .uk-navbar-center-left > div,
.tb-navbar .uk-navbar-center-right > div {
display: flex;
align-items: center;
white-space: nowrap;
}
.tb-navbar .uk-navbar-nav {
display: flex;
flex-wrap: nowrap;
flex: 0 0 auto;
}
.tb-navbar .uk-navbar-nav > li > a,
.tb-navbar .uk-logo {
white-space: nowrap;
}
.tb-mobile-balancer { display: block; }
}
</style>
<style>
.tb-label-btn {
border: none !important;
cursor: pointer;
font-family: inherit;
margin: 0;
vertical-align: middle;
outline: none;
background-image: none;
box-sizing: border-box;
-webkit-appearance: none;
appearance: none;
}
.tb-label-btn:hover {
opacity: 0.85;
}
.tb-pin-flag {
font-size: 0.9em;
margin-right: 4px;
vertical-align: -1px;
cursor: default;
}
</style>
<style>
.tb-preline {
white-space: pre-wrap;
}
.tb-clamp-5 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 5;
overflow: hidden;
}
.md-body {
line-height: 1.7;
text-align: left;
word-break: break-word;
}
.md-body p { margin: 0.5em 0; }
.md-body h1, .md-body h2, .md-body h3,
.md-body h4, .md-body h5, .md-body h6 {
margin: 0.8em 0 0.4em;
font-weight: 600;
line-height: 1.4;
}
.md-body ul, .md-body ol { padding-left: 1.6em; margin: 0.5em 0; }
.md-body li { margin: 0.2em 0; }
.md-body blockquote {
border-left: 3px solid #d3d1c7;
margin: 0.6em 0;
padding: 0.2em 1em;
color: #5f5e5a;
}
.md-body pre {
background: #f5f5f5;
padding: 0.8em 1em;
border-radius: 6px;
overflow-x: auto;
margin: 0.6em 0;
}
.md-body code {
background: #f0f0f0;
padding: 0.1em 0.35em;
border-radius: 4px;
font-size: 0.9em;
}
.md-body pre code { background: none; padding: 0; }
.md-body img { max-width: 100%; height: auto; }
.md-body table { border-collapse: collapse; margin: 0.6em 0; }
.md-body th, .md-body td {
border: 1px solid #ddd;
padding: 0.4em 0.8em;
}
.md-body hr { margin: 1em 0; }
html[data-theme="dark"] .md-body blockquote {
border-color: #3a404c;
color: #8b93a1;
}
html[data-theme="dark"] .md-body pre,
html[data-theme="dark"] .md-body code { background: #2d323c; }
html[data-theme="dark"] .md-body th,
html[data-theme="dark"] .md-body td { border-color: #3a404c; }
</style>
<style>
.uk-progress {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
height: 10px;
margin: 0;
border: none;
border-radius: 6px;
background-color: #e5e5e5;
overflow: hidden;
box-shadow: none;
}
.uk-progressbar {
display: block;
height: 100%;
background-color: #1e87f0;
border-radius: 6px 0 0 6px;
transition: width 0.3s ease;
}
html[data-theme="dark"] .uk-progress {
background-color: var(--tb-border);
}
html[data-theme="dark"] .uk-progressbar {
background-color: var(--tb-primary);
}
</style>
<style>
#tb-mobile-utils {
display: none;
}
@media (max-width: 640px) {
.tb-nav-utils {
display: none !important;
}
.tb-nav-username {
display: none !important;
}
#tb-mobile-utils {
display: flex;
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
justify-content: center;
align-items: center;
gap: 10px;
padding: 8px 12px calc(8px + env(safe-area-inset-bottom));
background: rgba(255, 255, 255, 0.92);
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.08);
}
#tb-mobile-utils .uk-select {
width: 110px;
}
html[data-theme="dark"] #tb-mobile-utils {
background: rgba(36, 40, 48, 0.92);
box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.4);
}
body {
padding-bottom: 56px;
}
}
</style>
<meta property="og:site_name" content="狼の質問箱 | 匿名質問箱" />
<meta property="og:type" content="website" />
<meta property="og:title" content="狼の質問箱 | 匿名質問箱" />
<meta property="og:url" content="https://box-dev-api.337845818.best/explore" />
<meta property="og:description" content="狼の質問箱は登録不要で使える匿名質問箱。誰でも匿名で質問でき、安心してやり取りできる場所です。" />
<meta itemprop="image" content="https://r2.337845818.best/tamabox/tamabox_low.png"/>
<meta name="msapplication-TileImage" content="https://r2.337845818.best/tamabox/tamabox_low.png"/>
<link rel="shortcut icon" href="https://r2.337845818.best/tamabox/tamabox_low.png" />
<link rel="apple-touch-icon" href="https://r2.337845818.best/tamabox/tamabox_low.png"/>
<link rel="icon" sizes="192x192" href="https://r2.337845818.best/tamabox/tamabox_low.png">
<meta name="twitter:image:src" content="https://r2.337845818.best/tamabox/tamabox_low.png" />
<meta name="google-site-verification" content="fEPwRRJfiGsgwc5SINBQwZhPK8F0cwRaOvRx0YRurI4" />
<meta name="msvalidate.01" content="2F185E8E63C93635F50B3574F3B31E42" />
<script>
window.addEventListener("load", function () {
var s = document.createElement("script");
s.src = "https://mami.shiroko.one/tamami.js";
s.setAttribute("data-website-id", "c42ebe8b-9281-4da0-83a4-8f18b3e710fe");
document.body.appendChild(s);
});
</script>
</head>
<body>
<script>
window.tbRenderQR = function (el, getOptions) {
if (!el || typeof QRCode === 'undefined') return;
var opts = getOptions();
function remoteOf(o, key) {
var v = o[key];
return (typeof v === 'string' && v.indexOf('http') === 0) ? v : '';
}
var good = window._tbQrGood || (window._tbQrGood = {});
var bad = window._tbQrBad || (window._tbQrBad = {});
function layerState(url) { return !url ? '' : (good[url] ? 1 : (bad[url] ? 0 : null)); }
var layers = [
{ url: remoteOf(opts, 'logo'), st: null, present: function (o, on) {
if (on) { } else { o.logo = undefined; o.logoWidth = undefined; o.logoHeight = undefined; o.logoBackgroundTransparent = undefined; }
} },
{ url: remoteOf(opts, 'backgroundImage'), st: null, present: function (o, on) {
if (on) { } else { o.backgroundImage = undefined; o.backgroundImageAlpha = undefined; }
} }
];
var needProbe = false;
for (var i = 0; i < layers.length; i++) {
layers[i].st = layerState(layers[i].url);
if (layers[i].st === null) needProbe = true;
}
function paint(states) {
var o = {};
for (var k in opts) o[k] = opts[k];
for (var j = 0; j < layers.length; j++) layers[j].present(o, states[j] === 1);
el.innerHTML = '';
new QRCode(el, o);
}
var initStates = [];
for (var n = 0; n < layers.length; n++) initStates.push(layers[n].st === 1 ? 1 : 0);
paint(initStates);
if (!needProbe) return;
var pending = 0, cross = opts.crossOrigin || 'anonymous';
layers.forEach(function (L) {
if (L.st !== null) return;
pending++;
var im = new Image();
im.onload = function () { good[L.url] = true; L.st = 1; onDone(); };
im.onerror = function () { bad[L.url] = true; L.st = 0; onDone(); };
if (cross) im.crossOrigin = cross;
im.src = L.url;
});
function onDone() {
if (--pending > 0) return;
var finalStates = [];
for (var m = 0; m < layers.length; m++) finalStates.push(layers[m].st === 1 ? 1 : 0);
var changed = false;
for (var q = 0; q < finalStates.length; q++) if (finalStates[q] !== initStates[q]) changed = true;
if (changed) paint(finalStates);
}
setTimeout(function () { if (pending > 0) { pending = 0; onDone(); } }, 3000);
};
</script>
<nav class="uk-navbar-container uk-margin tb-navbar" uk-navbar>
<div class="uk-navbar-center">
<div class="uk-navbar-center-left">
<div>
<ul class="uk-navbar-nav">
<li><a href="/explore">探索</a></li>
<li class="tb-mobile-balancer" aria-hidden="true"><a tabindex="-1" style="visibility:hidden">マイ</a></li>
</ul>
</div>
</div>
<a class="uk-navbar-item uk-logo" href="/"><span class="emoji-placeholder" aria-label="random animal">🐺</span>の質問箱</a>
<div class="uk-navbar-center-right">
<div>
<ul class="uk-navbar-nav">
<li><a href="/register">登録</a></li>
</ul>
<ul class="uk-navbar-nav">
<li><a href="/login">ログイン</a></li>
</ul>
<ul class="uk-navbar-nav tb-nav-utils">
<li>
<a href="#" aria-label="言語" title="言語">🌐</a>
<div class="uk-navbar-dropdown" uk-drop="mode: click; pos: bottom-right">
<ul class="uk-nav uk-navbar-dropdown-nav">
<li class="">
<a href="/i18n/zh-CN?to=%2Fexplore">简体中文</a>
</li>
<li class="">
<a href="/i18n/zh-TW?to=%2Fexplore">繁體中文</a>
</li>
<li class="">
<a href="/i18n/en?to=%2Fexplore">English</a>
</li>
<li class="uk-active">
<a href="/i18n/ja?to=%2Fexplore">日本語</a>
</li>
</ul>
</div>
</li>
</ul>
<ul class="uk-navbar-nav tb-nav-utils">
<li>
<a href="#" id="theme-toggle" title="ダーク/ライトモード切替" aria-label="ダーク/ライトモード切替">
<span class="tb-icon-light">🌙</span><span class="tb-icon-dark">☀️</span>
</a>
</li>
</ul>
</div>
</div>
</div>
</nav>
<script>
document.addEventListener("DOMContentLoaded", function() {
const emojis = ["🐺","🐗","🐻","🐨","🐼","🐹","🐭","🐰","🦊","🐮","🐷","🐽","🐸","🐒","🦍","🐔","🐧","🐦","🐤","🐦‍⬛","🦅","🦉","🦇","🐴","🦄","🐝","🦎","🦖","🦕","🐙","🦑","🦐","🦞","🦀","🐡","🐠","🐟","🐬","🐳","🐋","🦈","🐊","🐅","🐆","🦓","🦍","🦧","🐘","🦛","🦏","🐪","🐫","🦒","🦘","🐃","🐂","🐄","🐎","🐖","🐏","🐑","🦙","🐐","🦌","🐕","🐩","🦮","🐕‍🦺","🐈","🐋","🐳","🐬","🐉","🐲"];
const placeholder = document.querySelector('.emoji-placeholder');
if (placeholder) {
placeholder.textContent = emojis[Math.floor(Math.random() * emojis.length)];
}
});
</script>
<div id="tb-mobile-utils">
<select id="mobile-lang-select" class="uk-select uk-form-small" aria-label="言語">
<option value="zh-CN" >简体中文</option>
<option value="zh-TW" >繁體中文</option>
<option value="en" >English</option>
<option value="ja" selected>日本語</option>
</select>
<button type="button" id="theme-toggle-mobile" class="uk-button uk-button-default uk-button-small"
title="ダーク/ライトモード切替" aria-label="ダーク/ライトモード切替">
<span class="tb-icon-light">🌙</span><span class="tb-icon-dark">☀️</span>
</button>
</div>
<script>
(function() {
var THEME_COOKIE = 'theme';
function getTheme() {
var m = document.cookie.match(/(?:^|;\s*)theme=([^;]*)/);
return m ? m[1] : '';
}
function applyTheme(theme) {
if (theme === 'dark') {
document.documentElement.setAttribute('data-theme', 'dark');
} else {
document.documentElement.removeAttribute('data-theme');
}
}
function toggleTheme() {
var next = getTheme() === 'dark' ? 'light' : 'dark';
applyTheme(next);
var expires = new Date(Date.now() + 365 * 24 * 3600 * 1000).toUTCString();
document.cookie = THEME_COOKIE + '=' + next + '; path=/; max-age=' + (365 * 24 * 3600) + '; SameSite=Lax';
}
document.addEventListener('DOMContentLoaded', function() {
var buttons = document.querySelectorAll('#theme-toggle, #theme-toggle-mobile');
buttons.forEach(function(btn) {
btn.addEventListener('click', function(e) {
e.preventDefault();
toggleTheme();
});
});
var langSel = document.getElementById('mobile-lang-select');
if (langSel) {
langSel.addEventListener('change', function() {
if (!this.value) return;
var to = window.location.pathname + window.location.search;
window.location.href = '/i18n/' + encodeURIComponent(this.value) + '?to=' + encodeURIComponent(to);
});
}
});
})();
</script>
<div class="uk-container uk-container-xsmall">
<div id="math-captcha-modal" uk-modal>
<div class="uk-modal-dialog uk-modal-body uk-text-center">
<h3 class="uk-modal-title">人機認証</h3>
<p class="uk-text-meta">以下の計算問題を解いて、ロボットでないことを証明してください</p>
<div class="captcha-equation-box">
<span id="captcha-modal-question" class="math-captcha-modal-question">読み込み中...</span>
<input type="number" id="captcha-modal-answer" placeholder="?" autocomplete="off" inputmode="numeric">
</div>
<div style="margin-top:6px;">
<button type="button" class="uk-button uk-button-text uk-text-small" id="captcha-modal-refresh">別の問題</button>
</div>
<div id="captcha-modal-error" class="uk-text-danger uk-text-small" style="display:none;min-height:20px;"></div>
<div class="uk-margin-small-top">
<button type="button" class="uk-button uk-button-primary" id="captcha-modal-submit">送信</button>
<button type="button" class="uk-button uk-button-default uk-modal-close">キャンセル</button>
</div>
</div>
</div>
<script>
var CAPTCHA_I18N = {
loading: "読み込み中...",
loadFailed: "読み込み失敗",
loadRetry: "読み込み失敗、再試行してください",
inputAnswer: "答えを入力してください",
wrongAnswer: "答えが違います。もう一度計算してください",
verifyFailed: "認証失敗、再試行してください",
needPassword: "この質問箱にはパスワードが必要です",
needEmail: "通知を受け取るメールアドレスを入力してください"
};
</script>
<script>
(function() {
var captchaId = '';
var pendingForm = null;
var pendingNeedPassword = false;
var verifying = false;
function fetchCaptcha() {
var qEl = document.getElementById('captcha-modal-question');
var errEl = document.getElementById('captcha-modal-error');
var ansEl = document.getElementById('captcha-modal-answer');
qEl.textContent = CAPTCHA_I18N.loading;
fetch('/api/captcha/generate')
.then(function(r) { return r.json(); })
.then(function(data) {
if (data.code === 0 && data.data) {
captchaId = data.data.id;
qEl.textContent = data.data.question;
if (errEl) errEl.style.display = 'none';
if (ansEl) { ansEl.value = ''; ansEl.focus(); }
} else {
qEl.textContent = CAPTCHA_I18N.loadFailed;
}
})
.catch(function() {
qEl.textContent = CAPTCHA_I18N.loadRetry;
});
}
function getCSRFToken() {
var input = document.querySelector('input[name="_csrf"]');
return input ? input.value : '';
}
function doSubmit(form) {
var ans = document.getElementById('captcha-modal-answer').value.trim();
var hidden = form.querySelector('[name="g-recaptcha-response"]');
if (hidden) hidden.value = captchaId + ':' + (ans || '0');
UIkit.modal('#math-captcha-modal').hide();
if (pendingNeedPassword) {
UIkit.modal.prompt(CAPTCHA_I18N.needPassword, '', 'password')
.then(function(password) {
if (password) {
var pwInput = document.getElementById('ask_password_input');
if (pwInput) pwInput.value = password;
form.submit();
}
});
} else {
form.submit();
}
}
document.getElementById('captcha-modal-submit').addEventListener('click', function() {
if (verifying) return;
var ans = document.getElementById('captcha-modal-answer').value.trim();
if (!ans) {
var errEl = document.getElementById('captcha-modal-error');
errEl.textContent = CAPTCHA_I18N.inputAnswer;
errEl.style.display = 'block';
return;
}
verifying = true;
fetch('/api/captcha/verify', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': getCSRFToken()
},
body: JSON.stringify({ id: captchaId, answer: parseInt(ans, 10) })
})
.then(function(r) { return r.json(); })
.then(function(data) {
verifying = false;
if (data.correct) {
if (pendingForm) doSubmit(pendingForm);
} else {
var errEl = document.getElementById('captcha-modal-error');
errEl.textContent = CAPTCHA_I18N.wrongAnswer;
errEl.style.display = 'block';
fetchCaptcha();
}
})
.catch(function() {
verifying = false;
var errEl = document.getElementById('captcha-modal-error');
errEl.textContent = CAPTCHA_I18N.verifyFailed;
errEl.style.display = 'block';
fetchCaptcha();
});
});
document.getElementById('captcha-modal-answer').addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
e.preventDefault();
document.getElementById('captcha-modal-submit').click();
}
});
document.getElementById('captcha-modal-refresh').addEventListener('click', fetchCaptcha);
document.addEventListener('click', function(e) {
var btn = e.target.closest('.math-captcha-trigger');
if (!btn) return;
e.preventDefault();
var form = btn.closest('form');
if (!form) return;
pendingForm = form;
pendingNeedPassword = !!(form.querySelector('#ask_password_input'));
var notifyCb = document.getElementById('notify-checkbox');
var emailInput = document.getElementById('email-input');
if (notifyCb && notifyCb.checked && emailInput && emailInput.value.trim() === '') {
UIkit.modal.alert(CAPTCHA_I18N.needEmail);
return;
}
fetchCaptcha();
UIkit.modal('#math-captcha-modal').show();
});
})();
</script>
<style>
.truncate {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.line-clamp-2 {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
word-break: break-word;
}
.explore-avatar {
width: 60px;
height: 60px;
border-radius: 50%;
object-fit: cover;
margin-right: 15px;
}
.explore-info {
flex: 1;
min-width: 0;
}
.explore-name {
font-size: 1.2rem;
font-weight: bold;
margin-bottom: 5px;
}
.explore-name a {
text-decoration: none;
color: var(--tb-text);
}
.explore-name a:hover {
color: var(--tb-primary);
}
.explore-intro {
color: var(--tb-text-secondary);
margin-bottom: 10px;
font-size: 0.9rem;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
min-height: 2.6em;
}
.explore-tags {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.explore-tags .uk-label {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.recommend-card {
display: flex;
align-items: center;
padding: 10px;
background: var(--tb-surface-2);
border-radius: 8px;
transition: background 0.2s;
}
.recommend-card:hover {
background: #f0f0f0;
}
.recommend-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 10px;
}
.recommend-info {
flex: 1;
min-width: 0;
}
.recommend-name {
font-weight: bold;
font-size: 1rem;
}
.recommend-name a {
text-decoration: none;
color: var(--tb-text);
}
.recommend-tags {
display: flex;
flex-wrap: wrap;
gap: 3px;
margin-top: 3px;
}
.recommend-tags .uk-label {
font-size: 0.7rem;
padding: 0 5px;
}
.hot-votes-list {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
margin-top: 16px;
}
.hot-vote-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
min-width: 0;
padding: 16px 18px;
border: 1px solid var(--tb-border);
border-radius: 8px;
background: var(--tb-surface-2);
text-decoration: none;
transition: border-color 0.2s ease, background 0.2s ease, transform 0.2s ease;
}
.hot-vote-item:hover {
border-color: var(--tb-primary);
background: #f5faff;
text-decoration: none;
transform: translateY(-1px);
}
.hot-vote-content {
min-width: 0;
}
.hot-vote-title {
display: block;
overflow: hidden;
color: var(--tb-text);
font-size: 0.98rem;
font-weight: 600;
line-height: 1.45;
text-overflow: ellipsis;
white-space: nowrap;
}
.hot-vote-meta {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 7px;
margin-top: 8px;
}
.hot-vote-meta .uk-label {
font-size: 0.72rem;
line-height: 1.6;
}
.hot-vote-action {
flex: 0 0 auto;
color: var(--tb-primary);
font-size: 0.82rem;
white-space: nowrap;
}
html[data-theme="dark"] .hot-vote-item {
border-color: var(--tb-border);
background: var(--tb-surface-2);
}
html[data-theme="dark"] .hot-vote-item:hover {
border-color: var(--tb-primary);
background: rgba(78, 168, 245, 0.10);
}
html[data-theme="dark"] .hot-vote-title {
color: var(--tb-text);
}
@media (max-width: 640px) {
.hot-votes-list {
grid-template-columns: 1fr;
}
.hot-vote-item {
padding: 14px;
}
}
.explore-tabs {
display: flex;
justify-content: center;
gap: 4px;
padding: 4px;
margin: 2px auto 20px;
max-width: 320px;
border: 1px solid var(--tb-border);
border-radius: 9px;
background: var(--tb-surface-2);
}
.explore-tab {
border: 0;
border-radius: 6px;
padding: 8px 15px;
background: transparent;
color: var(--tb-text-secondary);
cursor: pointer;
font-size: 0.9rem;
transition: background 0.2s ease, color 0.2s ease;
}
.explore-tab:hover { color: var(--tb-primary); }
.explore-tab.is-active {
background: #fff;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.10);
color: var(--tb-primary);
font-weight: 600;
}
.explore-panel[hidden] { display: none !important; }
.explore-vote-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 16px;
}
.explore-vote-toolbar p { margin: 4px 0 0; }
.vote-random-btn {
flex: 0 0 auto;
border: 1px solid #dce9ff;
border-radius: 7px;
padding: 7px 11px;
color: var(--tb-primary);
background: #f5faff;
cursor: pointer;
font-size: 0.84rem;
}
.vote-random-btn:hover { border-color: var(--tb-primary); background: #edf6ff; }
.all-votes-list { display: grid; gap: 10px; }
.all-vote-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 14px 16px;
border-bottom: 1px solid var(--tb-border);
text-decoration: none;
}
.all-vote-item:first-child { border-top: 1px solid var(--tb-border); }
.all-vote-item:hover { background: #f8fbff; text-decoration: none; }
.all-vote-item .hot-vote-title { max-width: 100%; }
html[data-theme="dark"] .explore-tabs {
border-color: var(--tb-border);
background: var(--tb-surface-2);
}
html[data-theme="dark"] .explore-tab { color: var(--tb-text-muted); }
html[data-theme="dark"] .explore-tab.is-active { background: var(--tb-surface); color: var(--tb-primary); }
html[data-theme="dark"] .vote-random-btn { border-color: var(--tb-border); background: var(--tb-surface-2); color: var(--tb-primary); }
html[data-theme="dark"] .all-vote-item { border-color: var(--tb-border); }
html[data-theme="dark"] .all-vote-item:hover { background: rgba(78, 168, 245, 0.10); }
.explore-notice {
background: #f0f7ff;
border-left: 4px solid var(--tb-primary);
padding: 15px 20px;
margin-bottom: 20px;
border-radius: 4px;
color: var(--tb-text);
font-size: 0.9rem;
line-height: 1.6;
}
.explore-notice strong {
color: var(--tb-primary);
}
.tb-shuffle-btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 14px;
font-size: 0.85rem;
line-height: 1.4;
color: var(--tb-primary);
background: transparent;
border: 1px solid #e3e3e3;
border-radius: 999px;
cursor: pointer;
transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}
.tb-shuffle-btn:hover {
background: #f0f7ff;
border-color: var(--tb-primary);
}
.tb-shuffle-btn:active {
transform: scale(0.96);
}
.tb-shuffle-btn .uk-icon {
transition: transform 0.5s ease;
}
.tb-shuffle-btn.is-spinning .uk-icon {
transform: rotate(360deg);
}
html[data-theme="dark"] .tb-shuffle-btn {
color: #4ea8f5;
border-color: #3a3f45;
}
html[data-theme="dark"] .tb-shuffle-btn:hover {
background: rgba(78, 168, 245, 0.12);
border-color: #4ea8f5;
}
</style>
<div class="uk-container uk-container-small">
<h2>ユーザータグを探索</h2>
<div class="explore-notice">
<p>ここでは<span class="uk-text-bold">「ホームでタグを表示」</span>を有効にしたユーザーを紹介しています。この機能は初期状態でオフです。自分の質問箱を見つけてもらいたい場合は <a href="/user/profile" class="uk-text-bold">個人設定</a> から有効にしてください。</p>
</div>
<div class="explore-tabs" role="tablist" aria-label="ユーザータグを探索">
<button type="button" class="explore-tab is-active" data-explore-tab="questions" role="tab" aria-selected="true">質問</button>
<button type="button" class="explore-tab" data-explore-tab="votes" role="tab" aria-selected="false">投票</button>
</div>
<div class="explore-panel" data-explore-panel="questions">
<div class="uk-card uk-card-default uk-card-body uk-margin-bottom">
<div class="uk-flex uk-flex-between uk-flex-middle">
<h3 class="uk-card-title uk-margin-remove">ランダムおすすめ</h3>
<button class="tb-shuffle-btn" id="refresh-recommend" type="button">
<span uk-icon="icon: refresh"></span> シャッフル
</button>
</div>
<div id="recommend-list" class="uk-grid-small uk-child-width-1-2@s uk-child-width-1-3@m uk-grid-match" uk-grid>
<div>
<a href="/_/admin3" class="recommend-card">
<img class="recommend-avatar" src="https://r2.337845818.best/tamabox/picture/2026/09/04/a528101dbe8b2154f74d6f5092aa08" alt="avatar">
<div class="recommend-info">
<div class="recommend-name truncate">admin3x</div>
<div class="recommend-tags">
<span class="uk-label uk-label-success">测试</span>
<span class="uk-label uk-label-warning">胡言乱语</span>
</div>
</div>
</a>
</div>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-margin-bottom">
<h4 class="uk-card-title uk-margin-remove-bottom">人気タグ</h4>
<div class="uk-margin-small-top uk-flex uk-flex-wrap uk-flex-middle" style="gap: 6px;">
<a class="uk-label uk-label-success"
href="/explore?q=%E6%B5%8B%E8%AF%95" style="text-decoration:none;">#测试</a>
<a class="uk-label uk-label-warning"
href="/explore?q=%E8%83%A1%E8%A8%80%E4%B9%B1%E8%AF%AD" style="text-decoration:none;">#胡言乱语</a>
</div>
</div>
<form method="get" action="/explore" class="uk-margin uk-margin-bottom">
<div class="uk-grid-small" uk-grid>
<div class="uk-width-expand">
<div class="uk-inline uk-width-1-1">
<button class="uk-form-icon uk-form-icon-flip" uk-icon="icon: search" type="submit"></button>
<input class="uk-input" type="text" name="q" placeholder="タグを検索..." value="">
</div>
</div>
<div class="uk-width-auto">
<select name="sort" class="uk-select" onchange="this.form.submit()">
<option value="latest" selected>新着順</option>
<option value="oldest" >古い順</option>
</select>
</div>
</div>
</form>
<div class="uk-child-width-1-1 uk-child-width-1-2@s uk-grid-match" uk-grid>
<div>
<div class="uk-card uk-card-default uk-card-hover uk-card-body">
<div class="uk-flex uk-flex-top">
<div>
<img class="explore-avatar" src="https://r2.337845818.best/tamabox/picture/2026/09/04/a528101dbe8b2154f74d6f5092aa08" alt="avatar">
</div>
<div class="explore-info">
<div class="explore-name truncate">
<a href="/_/admin3" title="admin3x">admin3x</a>
</div>
<div class="explore-intro" title="这里的内容可能会很长,希望能够自动分段,不然就很难看了,万一要是更长的话会怎么样呢????">
这里的内容可能会很长,希望能够自动分段,不然就很难看了,万一要是更长的话会怎么样呢????
</div>
<div class="explore-tags">
<span class="uk-label uk-label-success" title="测试">测试</span>
<span class="uk-label uk-label-warning" title="胡言乱语">胡言乱语</span>
</div>
</div>
</div>
</div>
</div>
</div>
<ul class="uk-pagination uk-flex-center uk-margin-top" uk-margin>
<li class="uk-disabled"><span><span uk-pagination-previous></span> 前へ</span></li>
<li class="uk-active"><span>1 / 1</span></li>
<li class="uk-disabled"><span>次へ <span uk-pagination-next></span></span></li>
</ul>
</div>
<div class="explore-panel" data-explore-panel="votes" hidden>
<div class="uk-card uk-card-default uk-card-body uk-margin-bottom">
<div class="explore-vote-toolbar">
<div>
<h3 class="uk-card-title uk-margin-remove">公開投票</h3>
<p class="uk-text-meta uk-text-small">開催中の公開投票を見て、興味のあるテーマに参加できます。</p>
</div>
<button type="button" class="vote-random-btn" id="random-vote-btn"><span uk-icon="icon: refresh; ratio: .8"></span> ランダムおすすめ</button>
</div>
<h4 class="uk-heading-bullet uk-margin-small-bottom">人気の投票</h4>
<div class="hot-votes-list uk-margin-small-bottom">
<a href="/vote/9wfpVjXi73mc" class="hot-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="测试功能">测试功能</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/urSsfenvRomb" class="hot-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="11">11</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/7l0MwF7cLz4T" class="hot-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检单选投票0915133910">巡检单选投票0915133910</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">単一選択</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/JuqHYc3j7BE8" class="hot-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检单选投票0915133322">巡检单选投票0915133322</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">単一選択</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/psUJCr90tO9a" class="hot-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检单选投票0915132618">巡检单选投票0915132618</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">単一選択</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/WNfp0f322FPP" class="hot-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检单选投票0915132251">巡检单选投票0915132251</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">単一選択</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
</div>
<h4 class="uk-heading-bullet uk-margin-medium-top uk-margin-small-bottom">すべての投票</h4>
<div class="all-votes-list" id="all-votes-list">
<a href="/vote/DNpmhaBN8K9P" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检表单投票0915133910">巡检表单投票0915133910</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-09-15</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/7l0MwF7cLz4T" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检单选投票0915133910">巡检单选投票0915133910</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">単一選択</span>
<span class="uk-text-meta">2026-09-15</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/4G3i79OCYa2E" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检表单投票0915133322">巡检表单投票0915133322</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-09-15</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/JuqHYc3j7BE8" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检单选投票0915133322">巡检单选投票0915133322</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">単一選択</span>
<span class="uk-text-meta">2026-09-15</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/uavsxaP0pb6Y" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检表单投票0915132618">巡检表单投票0915132618</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-09-15</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/psUJCr90tO9a" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检单选投票0915132618">巡检单选投票0915132618</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">単一選択</span>
<span class="uk-text-meta">2026-09-15</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/tDx3mgg2bBAv" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检表单投票0915132251">巡检表单投票0915132251</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-09-15</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/WNfp0f322FPP" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="巡检单选投票0915132251">巡检单选投票0915132251</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">単一選択</span>
<span class="uk-text-meta">2026-09-15</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/9J1zgXwQ05Ai" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="测试屏蔽词">测试屏蔽词</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-09-03</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/MIiFcpqFRGgR" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="111">111</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-09-02</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/t86urUZo26xE" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="吃什么">吃什么</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-08-26</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/9wfpVjXi73mc" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="测试功能">测试功能</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-08-25</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/7kcP5kR8YnJC" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="测试">测试</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-08-25</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/C84m7PoENWsG" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="测试5">测试5</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">単一選択</span>
<span class="uk-text-meta">2026-08-25</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/z9F8mIqPtDOA" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="测试4">测试4</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-08-24</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/urSsfenvRomb" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="11">11</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">フォーム</span>
<span class="uk-text-meta">2026-08-24</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
<a href="/vote/GJkdls4fH78y" class="all-vote-item">
<div class="hot-vote-content">
<span class="hot-vote-title" title="明天吃什么">明天吃什么</span>
<span class="hot-vote-meta">
<span class="uk-label uk-label-primary">評価</span>
<span class="uk-text-meta">2026-08-24</span>
</span>
</div>
<span class="hot-vote-action">投票する <span uk-icon="icon: arrow-right; ratio: .8"></span></span>
</a>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const recommendContainer = document.getElementById('recommend-list');
const refreshBtn = document.getElementById('refresh-recommend');
const tabs = document.querySelectorAll('[data-explore-tab]');
const panels = document.querySelectorAll('[data-explore-panel]');
function showExplorePanel(name) {
tabs.forEach(function(tab) {
const active = tab.dataset.exploreTab === name;
tab.classList.toggle('is-active', active);
tab.setAttribute('aria-selected', active ? 'true' : 'false');
});
panels.forEach(function(panel) {
panel.hidden = panel.dataset.explorePanel !== name;
});
if (window.history && window.history.replaceState) {
window.history.replaceState({}, document.title, window.location.pathname + (name === 'votes' ? '#votes' : ''));
}
}
tabs.forEach(function(tab) {
tab.addEventListener('click', function() { showExplorePanel(tab.dataset.exploreTab); });
});
if (window.location.hash === '#votes') showExplorePanel('votes');
const randomVoteBtn = document.getElementById('random-vote-btn');
if (randomVoteBtn) {
randomVoteBtn.addEventListener('click', function() {
const votes = Array.from(document.querySelectorAll('#all-votes-list .all-vote-item'));
if (!votes.length) return;
const target = votes[Math.floor(Math.random() * votes.length)];
randomVoteBtn.classList.add('is-spinning');
target.style.outline = '2px solid #1e87f0';
target.style.outlineOffset = '2px';
window.setTimeout(function() {
window.location.href = target.href;
}, 350);
});
}
function extractUsers(obj) {
if (Array.isArray(obj)) return obj;
if (!obj || typeof obj !== 'object') return [];
if (obj.domain || obj.id) {
return [obj];
}
if (obj.data) {
return extractUsers(obj.data);
}
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const val = obj[key];
if (Array.isArray(val)) {
return val;
} else if (val && typeof val === 'object') {
const result = extractUsers(val);
if (result.length > 0) return result;
}
}
}
return [];
}
function escapeHTML(str) {
if (str == null) return '';
return String(str)
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;');
}
function safeAvatarURL(url) {
if (typeof url !== 'string') return '';
if (/^https?:\/\//i.test(url)) return url;
return '';
}
function loadRandomRecommend() {
recommendContainer.innerHTML = '<div class="uk-text-center uk-padding"><div uk-spinner></div> 読み込み中...</div>';
fetch('/api/v1/explore/random')
.then(response => {
if (!response.ok) throw new Error(`HTTP 読み込み失敗 ${response.status}`);
return response.json();
})
.then(resp => {
const users = extractUsers(resp);
if (users.length === 0) {
recommendContainer.innerHTML = '<div class="uk-text-center uk-padding">おすすめユーザーはいません</div>';
return;
}
let html = '';
users.forEach(user => {
let tagsHtml = '';
if (user.tag_list && user.tag_list.length) {
user.tag_list.forEach((tag, idx) => {
const colorClass = (user.tag_color && user.tag_color[idx]) || 'uk-label-default';
tagsHtml += `<span class="uk-label ${escapeHTML(colorClass)}" title="${escapeHTML(tag)}">${escapeHTML(tag)}</span>`;
});
} else {
tagsHtml = '<span class="uk-text-muted">タグなし</span>';
}
html += `
<div>
<a href="/_/${escapeHTML(user.domain)}" class="recommend-card">
<img class="recommend-avatar" src="${safeAvatarURL(user.avatar)}" alt="avatar">
<div class="recommend-info">
<div class="recommend-name truncate">${escapeHTML(user.name)}</div>
<div class="recommend-tags">${tagsHtml}</div>
</div>
</a>
</div>
`;
});
recommendContainer.innerHTML = html;
if (window.UIkit && UIkit.grid) {
UIkit.grid(recommendContainer);
}
})
.catch(error => {
console.error('Failed to load random recommends:', error);
recommendContainer.innerHTML = '<div class="uk-alert uk-alert-danger">加载失败:' + escapeHTML(error.message) + '</div>';
});
}
refreshBtn.addEventListener('click', function() {
refreshBtn.classList.remove('is-spinning');
void refreshBtn.offsetWidth;
refreshBtn.classList.add('is-spinning');
loadRandomRecommend();
});
});
</script>
<p class=" uk-text-right uk-text-muted uk-text-small">
<br>
<a href="/rules">ルール</a> |
<a href="https://box.shiroko.one/_/tamakyi" target="_blank">管理者へ</a>
<br>
<a href="https://share.shiroko.one" target="_blank">ドライブ</a>
| <a href="https://blog.shiroko.one" target="_blank">お知らせ</a>
| <a href="https://chat.shiroko.one" target="_blank">チャット</a>
| <a href="https://status.shiroko.one" target="_blank">ステータス</a>
| <a href="https://shiroko.one" target="_blank">リンク</a>
<br>Powered by NekoBox | 狼ICP备 20230101
<br>質問箱は稼働中:<span id="box_runtime"></span>
</p>
<script>
(function () {
var create = Math.round(Date.UTC(2023, 6, 1, 18, 15, 43) / 1000);
function tick() {
var el = document.getElementById("box_runtime");
if (!el) return;
var s = Math.round((Date.now() + 8 * 3600 * 1000) / 1000) - create;
var t = [0, 0, 0, 0, 0];
if (s >= 31536000) { t[0] = s / 31536000 | 0; s %= 31536000; }
if (s >= 86400) { t[1] = s / 86400 | 0; s %= 86400; }
if (s >= 3600) { t[2] = s / 3600 | 0; s %= 3600; }
if (s >= 60) { t[3] = s / 60 | 0; s %= 60; }
if (s > 0) { t[4] = s; }
el.innerHTML = t[0] + '年 ' + t[1] + '天 ' + t[2] + '时 ' + t[3] + '分 ' + t[4] + '秒 ';
}
tick();
setInterval(tick, 1000);
})();
</script>
<br>
</div>
<script>
var SUBMIT_I18N = {
submitting: '送信中...',
uploading: 'アップロード中...'
};
function tbResetSubmitButtons() {
document.querySelectorAll('button[data-tb-submitting]').forEach(function(b) {
b.disabled = false;
b.removeAttribute('data-tb-submitting');
var orig = b.getAttribute('data-tb-restore');
if (orig !== null) {
b.innerHTML = orig;
b.removeAttribute('data-tb-restore');
}
});
}
document.addEventListener('submit', function(e) {
var form = e.target;
if (!form || form.tagName !== 'FORM') return;
if (e.defaultPrevented || form.getAttribute('data-tb-skip-submit-feedback') === '1') {
form.removeAttribute('data-tb-skip-submit-feedback');
return;
}
if (form.getAttribute('target') === '_blank') return;
var trigger = e.submitter || form.querySelector('button[type="submit"]');
var hasFile = false;
form.querySelectorAll('input[type="file"]').forEach(function(f) {
if (f.files && f.files.length > 0) hasFile = true;
});
var label = hasFile ? SUBMIT_I18N.uploading : SUBMIT_I18N.submitting;
if (trigger && trigger.tagName === 'BUTTON') {
trigger.setAttribute('data-tb-restore', trigger.innerHTML);
trigger.innerHTML = '<span uk-spinner="ratio: 0.6"></span> ' + label;
}
form.querySelectorAll('button').forEach(function(b) {
b.disabled = true;
b.setAttribute('data-tb-submitting', '1');
});
});
window.addEventListener('pageshow', tbResetSubmitButtons);
</script>
</body>
</html>