@@ -143,83 +143,27 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
. csg-h b { position : relative ; font-size : 17 px ; font-weight : 900 ; color : #2A1E1E }
. csg-h b { position : relative ; font-size : 17 px ; font-weight : 900 ; color : #2A1E1E }
. csg-h b :: after { content : "" ; position : absolute ; left : -2 px ; right : -2 px ; bottom : 1 px ; height : 7 px ; border-radius : 4 px ; background : var ( - - tg ) ; opacity : .22 ; z-index : -1 }
. csg-h b :: after { content : "" ; position : absolute ; left : -2 px ; right : -2 px ; bottom : 1 px ; height : 7 px ; border-radius : 4 px ; background : var ( - - tg ) ; opacity : .22 ; z-index : -1 }
. csg-h b { z-index : 0 }
. csg-h b { z-index : 0 }
. pc { display : inline-flex ; align-items : center ; margin-top : 3 px ; font-size : 11 px ; font-style : normal ; font-weight : 700 ; color : #C98A7A }
. csf . pc { display : flex ; margin : 6 px 0 0 }
. pc :: before { content : "" ; width : 6 px ; height : 6 px ; margin-right : 4 px ; border-radius : 50 % ; background : #FF8A6B ; box-shadow : 0 0 0 2 px rgba ( 255 , 138 , 107 , .2 ) }
. csg-h small { font-size : 12 px ; color : #A08B85 }
. csg-h small { font-size : 12 px ; color : #A08B85 }
. csg-h em { margin-left : auto ; font-style : normal ; font-size : 12 px ; font-weight : 800 ; color : var ( - - tg ) }
. csg-h em { margin-left : auto ; font-style : normal ; font-size : 12 px ; font-weight : 800 ; color : var ( - - tg ) }
. csf { position : relative ; display : flex ; align-items : center ; gap : 12 px ; width : 100 % ; margin-top : 10 px ; padding : 14 px 12 px 14 px 16 px ; border-radius : 22 px ; overflow : hidden ; text-align : left ; background : linear-gradient ( 125 deg , var ( - - tl ) , #fff 85 % ) ; box-shadow : 0 8 px 20 px -14 px var ( - - tg ) }
/* 11-02 v4 用户:「测一测页面太乱,整洁一些,多少人测过要明显」→ 所有分组统一一种列表行:缩略图 + 标题/说明 + 右侧大号人数 */
. csf : active , . csr : active { transform : scale ( .985 ) }
. cpl { margin-top : 8 px ; border-radius : 20 px ; background : #fff ; box-shadow : 0 3 px 12 px rgba ( 170 , 110 , 90 , .07 ) ; overflow : hidden }
. csf . t x { flex : 1 ; min- width: 0 ; position : relative ; z-index : 1 }
. cr { display : fle x ; align-items : center ; gap : 12 px ; width : 100 % ; padding : 12 px ; text-align : left ; border-top : 1 px solid #F7EFEB }
. csf . tx small { display : inline-block ; height : 20 px ; padding : 0 8 px ; border-radius : 99 px ; background : #fff ; color : var ( - - tg ) ; font-size : 11 px ; font-weight : 800 ; line-height : 20 px }
. cr : first-child { border-top : 0 }
. csf . tx b { display : block ; margin-top : 7 px ; font-size : 17 px ; font-weight : 900 ; line-height : 1.38 ; color : #2A1E1E }
. cr : active { background : #FCF8F6 }
. csf . tx p { margin-top : 3 px ; font-size : 12.5 px ; color : #7A6A66 ; line- height: 1.5 }
. cr . cth { position : relative ; flex : none ; width : 58 px ; height: 58 px }
. csf . tx . go { display : inline-flex ; align-items : center ; gap : 2 px ; margin-top : 10 px ; height : 30 px ; padding : 0 14 px ; border-radius : 99 px ; background : var ( - - tg ) ; color : #fff ; font-size : 13 px ; font-weight : 800 ; box-shadow : 0 5 px 12 px -5 px var ( - - tg ) }
. cr . cth img { display : block ; width : 100 % ; height : 100 % ; border-radius : 14 px ; object-fit : cover ; object-position : center 28 % ; background : var ( - - tl ) }
. csf . tx . go . ic { width : 13 px ; height : 13 px ; stroke-width : 2.4 }
. cr . crk { position : absolute ; left : -5 px ; top : -5 px ; min- width: 20 px ; height : 20 px ; padding : 0 5 px ; border-radius : 7 px ; background : #B9A7A1 ; color : #fff ; font-size : 11.5 px ; font-weight : 900 ; line-height : 20 px ; text-align : center ; border : 2 px solid #fff ; font-style : normal }
. csf img { flex : none ; width : 118 px ; height : 118 px ; border-radius : 28 px 28 px 28 px 8 px ; object-fit : cover ; object-position : center 30 % ; border : 3 px solid #fff ; box-shadow : 0 8 px 18 px -10 px var ( - - tg ) }
. cr . crk . r1 { background : #F0453A } . cr . crk . r2 { background : #F28A1E } . cr . crk . r3 { background : #F2B21E }
. csk . ckl { margin-top : 8 p x; border-radius : 20 px ; background : #fff ; box-shadow : 0 3 px 12 px rgba ( 170 , 110 , 90 , .07 ) ; overflow : hidden }
. cr . t x{ flex : 1 ; min-width : 0 }
. ck r { display : flex ; align-items : center ; ga p: 1 2px ; width : 100 % ; padding : 11 px 12 px ; text-align : left ; border-top : 1 px solid #F7EDE9 }
. cr b { display : -webkit- box ; -webkit- line-clam p: 2 ; -webkit- box-orient : vertical ; overflow : hidden ; font-size : 14.5 px ; font-weight : 800 ; line-height : 1.4 ; color : #2A1E1E }
. ckr : first-child { border-top : 0 }
. cr small { display : block ; margin-top : 3 px ; font-size : 12 px ; color : #A99590 ; overflow : hidden ; white-space : nowrap ; text-overflow : ellipsis }
. ck r . rk { flex : none ; width : 26 px ; text-align : center ; font-siz e : 17 px ; font-weight : 9 00; font-style : italic ; color : #C9B3AC ; font-family : Georgia , serif }
. cr small em { font-styl e : normal ; font-weight : 8 00; color : var ( - - tg ) }
. ck r . rk . r1 , . ckr . rk . r2 , . ckr . rk . r3 { width : 26 px ; height : 26 px ; border-radius : 8 px ; font-sty le: normal ; font-size : 14 px ; line-height : 26 px ; color : #fff }
. cr . cn { f lex : none ; min-width : 58 px ; text-align : right }
. ck r . rk . r1 { background : linear-gradient ( 135 deg , #FF8A4C , #F0453A ) } . ckr . rk . r2 { background : linear-gradient ( 135 deg , #FFB547 , #F28A1E ) } . ckr . rk . r3 { background : linear-gradient ( 135 deg , #FFD166 , #F2B21E ) }
. cr . cn b { display : block ; font-size : 18 px ; font-weight : 900 ; line-height : 1.1 ; color : #F0603E ; font-family : - apple-system , "DIN Alternate" , "Helvetica Neue" , sans-serif ; letter-spacing : -.3 px }
. ck r . tx { flex : 1 ; min-width : 0 }
. cr . cn b i { font-size : 12 px ; font-style : normal ; font-weight : 800 ; margin-left : 1 px }
. ck r b { display : block ; font-size : 14 px ; font-weight : 800 ; line-height : 1.4 ; color : #2A1E1E ; overflow : hidden ; white-space : nowrap ; text-overflow : ellipsis }
. cr . cn small { margin-top : 2 px ; font-size : 11 px ; color : #B8A39D }
. ck r . hb { display : block ; height : 4 px ; margin : 5 px 0 4 px ; border-radius : 4 px ; background : #F6EEEA ; overflow : hidden }
. cr . cn . dn b { font-size : 13 px ; color : var ( - - tg ) }
. ckr . hb i { display : block ; height : 100 % ; border-radius : 4 px ; background : linear-gradient ( 90 deg , #FFB08C , #F0603E ) }
. ckm { display : block ; width : 100 % ; height : 42 px ; border-top : 1 px solid #F7EFEB ; color : #8A7470 ; font-size : 12.5 px ; font-weight : 800 ; background : #fff }
. ckr small { display : block ; font-size : 11.5 px ; color : #A08B85 }
. ckr small em { font-style : normal ; font-weight : 800 ; color : var ( - - tg ) ; margin-right : 6 px }
. ckr . go { flex : none ; height : 26 px ; padding : 0 11 px ; border-radius : 99 px ; background : var ( - - tl ) ; color : var ( - - tg ) ; font-size : 12 px ; font-weight : 800 ; line-height : 26 px }
. ckm { display : block ; width : 100 % ; margin-top : 8 px ; height : 36 px ; border-radius : 12 px ; background : rgba ( 255 , 255 , 255 , .7 ) ; color : #8A7470 ; font-size : 12.5 px ; font-weight : 800 }
. csq { margin-top : 8 px ; border-radius : 20 px ; background : #fff ; box-shadow : 0 3 px 12 px rgba ( 170 , 110 , 90 , .07 ) ; overflow : hidden }
. csn { display : flex ; align-items : center ; gap : 12 px ; width : 100 % ; padding : 12 px 12 px 12 px 14 px ; text-align : left ; border-top : 1 px dashed #F1E2DC }
. csn : first-child { border-top : 0 }
. csn . no { flex : none ; width : 40 px ; font-size : 20 px ; font-weight : 900 ; color : var ( - - tg ) ; line-height : 1 ; font-family : Georgia , serif ; font-style : italic }
. csn . no small { display : block ; font-size : 9 px ; font-style : normal ; letter-spacing : 1 px ; opacity : .6 ; margin-bottom : 2 px ; font-family : inherit }
. csn . tx { flex : 1 ; min-width : 0 }
. csn b { display : block ; font-size : 14.5 px ; font-weight : 800 ; line-height : 1.4 ; color : #2A1E1E ; overflow : hidden ; white-space : nowrap ; text-overflow : ellipsis }
. csn small { display : block ; font-size : 12 px ; color : #A08B85 ; overflow : hidden ; white-space : nowrap ; text-overflow : ellipsis }
. csn small em { font-style : normal ; color : var ( - - tg ) ; font-weight : 700 }
. csn . ar { flex : none ; color : #D9C3BC } . csn . ar . ic { width : 15 px ; height : 15 px ; stroke-width : 2.4 }
. csp { display : grid ; grid-template-columns : 1 fr 1 fr ; gap : 10 px ; margin-top : 10 px }
. cst { --a : #7C5CFC ; --b : #F1EDFF ; position : relative ; display : flex ; flex-direction : column ; min-height : 128 px ; padding : 14 px 14 px 12 px ; border-radius : 20 px ; overflow : hidden ; text-align : left ; background : var ( - - b ) }
. cst . k1 { --a : #E96F8F ; --b : #FFEAF0 } . cst . k2 { --a : #2C9C86 ; --b : #E2F5EF } . cst . k3 { --a : #D98A1E ; --b : #FFF2DC } . cst . k4 { --a : #4F7EE0 ; --b : #E6EEFF }
. cst . wide { grid-column : 1 /- 1 ; min-height : 0 }
. cst . big { grid-column : 1 /- 1 ; min-height : 0 ; padding : 18 px 18 px 14 px ; background : linear-gradient ( 120 deg , #8E6BFF , #C07BF0 ) ; color : #fff }
. cst . qm { position : absolute ; right : -6 px ; top : -22 px ; font-style : normal ; font-size : 118 px ; font-weight : 900 ; line-height : 1 ; color : var ( - - a ) ; opacity : .13 ; font-family : Georgia , serif }
. cst . big . qm { color : #fff ; opacity : .2 ; font-size : 150 px ; right : 6 px }
. cst b { position : relative ; display : -webkit- box ; -webkit- line-clamp : 3 ; -webkit- box-orient : vertical ; overflow : hidden ; font-size : 15 px ; font-weight : 900 ; line-height : 1.42 ; color : #2A1E1E }
. cst . big b { font-size : 19 px ; color : #fff ; padding-right : 60 px }
. cst small { position : relative ; display : block ; margin-top : 5 px ; font-size : 12 px ; line-height : 1.45 ; color : #8A7A76 }
. cst . big small { color : rgba ( 255 , 255 , 255 , .85 ) }
. cst . ft { position : relative ; display : flex ; align-items : center ; justify-content : space-between ; margin-top : auto ; padding-top : 10 px ; font-size : 12 px ; font-weight : 800 ; color : var ( - - a ) }
. cst . big . ft { color : #fff }
. cst . ft em { font-style : normal ; overflow : hidden ; white-space : nowrap ; text-overflow : ellipsis }
. cst . ar { flex : none ; width : 26 px ; height : 26 px ; border-radius : 50 % ; display : grid ; place-items : center ; background : #fff ; color : var ( - - a ) }
. cst . big . ar { color : #8E6BFF }
. cst . ar . ic { width : 13 px ; height : 13 px ; stroke-width : 2.6 }
. csm { position : relative ; margin-top : 10 px ; padding : 4 px 0 ; list-style : none }
. csm :: before { content : "" ; position : absolute ; left : 27 px ; top : 24 px ; bottom : 24 px ; border-left : 3 px dashed var ( - - tg ) ; opacity : .35 }
. csm li + li { margin-top : 10 px }
. csx { position : relative ; display : flex ; align-items : center ; gap : 12 px ; width : 100 % ; text-align : left }
. csx . nd { position : relative ; z-index : 1 ; flex : none ; width : 56 px ; height : 56 px ; border-radius : 50 % ; display : flex ; align-items : baseline ; justify-content : center ; padding-top : 9 px ; background : #fff ; border : 3 px solid var ( - - tg ) ; color : var ( - - tg ) ; font-size : 24 px ; font-weight : 900 ; line-height : 1.2 ; font-family : Georgia , serif }
. csx . nd small { font-size : 10 px ; font-weight : 800 ; font-family : inherit }
. csx . ok . nd { background : var ( - - tg ) ; color : #fff }
. csx . tx { flex : 1 ; min-width : 0 ; padding : 12 px 12 px 12 px 14 px ; border-radius : 16 px ; background : #fff ; box-shadow : 0 3 px 12 px rgba ( 170 , 110 , 90 , .07 ) }
. csx b { display : block ; font-size : 14.5 px ; font-weight : 800 ; line-height : 1.4 ; color : #2A1E1E }
. csx . tx small { display : block ; margin-top : 1 px ; font-size : 12 px ; color : #A08B85 ; overflow : hidden ; white-space : nowrap ; text-overflow : ellipsis }
. csx . ok . tx small { color : var ( - - tg ) ; font-weight : 700 }
. csx . go { position : absolute ; right : 12 px ; top : -8 px ; height : 20 px ; padding : 0 9 px ; border-radius : 99 px ; background : var ( - - tg ) ; color : #fff ; font-size : 11 px ; font-weight : 800 ; line-height : 20 px ; box-shadow : 0 4 px 10 px -4 px var ( - - tg ) }
. csn : active , . cst : active , . csx : active { transform : scale ( .985 ) }
. csr { display : flex ; align-items : center ; gap : 12 px ; width : 100 % ; margin-top : 8 px ; padding : 9 px 10 px 9 px 9 px ; border-radius : 18 px ; background : #fff ; text-align : left ; box-shadow : 0 3 px 12 px rgba ( 170 , 110 , 90 , .07 ) }
. csr img { flex : none ; width : 58 px ; height : 58 px ; border-radius : 15 px ; object-fit : cover ; object-position : center 28 % ; background : var ( - - tl ) }
. csr . tx { flex : 1 ; min-width : 0 }
. csr b { display : block ; font-size : 14.5 px ; font-weight : 800 ; line-height : 1.4 ; color : #2A1E1E ; overflow : hidden ; white-space : nowrap ; text-overflow : ellipsis }
. g-shop . csr b { display : -webkit- box ; -webkit- line-clamp : 2 ; -webkit- box-orient : vertical ; white-space : normal }
. csr small { display : block ; margin-top : 1 px ; font-size : 12 px ; color : #A08B85 ; line-height : 1.45 ; overflow : hidden ; white-space : nowrap ; text-overflow : ellipsis }
. csr small em { font-style : normal ; color : var ( - - tg ) ; font-weight : 700 }
. csr . ar { flex : none ; width : 30 px ; height : 30 px ; border-radius : 50 % ; display : grid ; place-items : center ; background : var ( - - tl ) ; color : var ( - - tg ) }
. csr . ar . ic { width : 15 px ; height : 15 px ; stroke-width : 2.4 }
. k-ceshi { --kf : #7C5CFC ; --kt : #6346B0 ; --kl : #F1EDFF ; --kl2 : #E4DDFD }
. k-ceshi { --kf : #7C5CFC ; --kt : #6346B0 ; --kl : #F1EDFF ; --kl2 : #E4DDFD }
. g-quiz { --tg : #F0714F ; --tl : #FFEFE9 } . g-psy { --tg : #7C5CFC ; --tl : #F1EDFF } . g-game { --tg : #13A08A ; --tl : #E4F6F1 } . g-shop { --tg : #E9557F ; --tl : #FFEEF3 }
. g-quiz { --tg : #F0714F ; --tl : #FFEFE9 } . g-psy { --tg : #7C5CFC ; --tl : #F1EDFF } . g-game { --tg : #13A08A ; --tl : #E4F6F1 } . g-shop { --tg : #E9557F ; --tl : #FFEEF3 }
. nc . tst . cvw { background : var ( - - tl ) }
. nc . tst . cvw { background : var ( - - tl ) }
@@ -606,10 +550,10 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
< div id = "sheet" role = "dialog" aria-modal = "true" > < i class = "sg" > < / i > < div class = "sbd" id = "sbd" > < / div > < / div >
< div id = "sheet" role = "dialog" aria-modal = "true" > < i class = "sg" > < / i > < div class = "sbd" id = "sbd" > < / div > < / div >
< div class = "toast" id = "toast" > < / div >
< div class = "toast" id = "toast" > < / div >
< script src = "topics.js?v=26110228 " > < / script >
< script src = "topics.js?v=26110229 " > < / script >
< script src = "data.js?v=26110228 " > < / script >
< script src = "data.js?v=26110229 " > < / script >
< script src = "feed.js?v=26110228 " > < / script >
< script src = "feed.js?v=26110229 " > < / script >
< script src = "ceshi/meta.js?v=26110228 " > < / script >
< script src = "ceshi/meta.js?v=26110229 " > < / script >
< script >
< script >
( function ( ) {
( function ( ) {
'use strict' ;
'use strict' ;
@@ -818,53 +762,27 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
/* 热度排序: 按「N人测过」( ceshi/meta.js gcTested, 模拟数, 见 AGENTS.md 12b) 从高到低 */
/* 热度排序: 按「N人测过」( ceshi/meta.js gcTested, 模拟数, 见 AGENTS.md 12b) 从高到低 */
var byHot = function ( l ) { return l . slice ( ) . sort ( function ( a , b ) { return gcTested ( b . id ) - gcTested ( a . id ) ; } ) ; } , hotOpen = false ;
var byHot = function ( l ) { return l . slice ( ) . sort ( function ( a , b ) { return gcTested ( b . id ) - gcTested ( a . id ) ; } ) ; } , hotOpen = false ;
var TGD = { quiz : '有标准答案,答完看解析' , psy : '没有对错,测测你是哪一型' , game : '挑战一下,看能拿什么称号' , shop : '看看你是哪一类育儿采购玩家' } ;
var TGD = { quiz : '有标准答案,答完看解析' , psy : '没有对错,测测你是哪一型' , game : '挑战一下,看能拿什么称号' , shop : '看看你是哪一类育儿采购玩家' } ;
/* 每组换一种排法,避免整页一个样:考卷=编号卷宗,心理=双列卡,闯关=横滑大卡,好物=图文行 */
/* 统一列表行:缩略图(热度榜带名次)+ 标题 / 说明 + 右侧大号人数;测过的右侧换成「已测」 */
function rest ( g , l , done ) {
function rowHTML ( x , done , rank ) {
if ( g === 'psy' ) return '<div class="csp">' + l . map ( function ( x , i ) {
var d = done [ x . id ] , num = gcTestedText ( x . id ) . replace ( '人测过' , '' ) . replace ( '万' , '<i>万</i>' ) ;
var d = done [ x . id ] ;
return '<button type="button" class="cr g-' + x . group + '" data-test="' + x . id + '"><span class="cth"><img src="ceshi/img/' + x . id + '_s.webp" alt="" loading="lazy">' +
return '<button type="button" class="cst k' + ( i % 5 ) + ( i == = 0 ? ' big ' : i === l . length - 1 && l . length % 2 === 0 ? ' wide ' : '' ) + '" data-test="' + x . id + '"><i class="qm">?</i >' +
( rank ? '<i class="cr k' + ( rank < = 3 ? ' r ' + rank : '' ) + '">' + rank + '</i> ' : '' ) + '</span >' +
'<b>' + esc ( x . title ) + '</b><small>' + esc ( x . sub ) + '</small>' +
'<span class="tx"> <b>' + esc ( x . title ) + '</b><small>' + ( d ? '<em>' + ( x . group === 'quiz' || x . group === 'game' ? '已拿「' : '我是「' ) + esc ( d . title ) + '」</em>' : ( rank ? '<em>' + TG [ x . group ] + '</em> · ' : '' ) + esc ( x . sub ) ) + '</small></span> ' +
'<span class="ft">' + ( d ? '<em>我是 · ' + esc ( d . title ) + '</em>' : gcTestedText ( x . id ) ) + '<span class="ar"><svg class="ic"><use href="#i-right"/></svg></span ></span></button>' ;
'<span class="cn"><b>' + num + '</b><small>人测过</small ></span></button>' ;
} ) . join ( '' ) + '</div>' ;
if ( g === 'game' ) return '<ol class="csm">' + l . map ( function ( x , i ) {
var d = done [ x . id ] ;
return '<li><button type="button" class="csx' + ( d ? ' ok' : '' ) + '" data-test="' + x . id + '"><span class="nd"><small>第</small>' + ( i + 1 ) + '<small>站</small></span>' +
'<span class="tx"><b>' + esc ( x . title ) + '</b><small>' + ( d ? '已拿称号「' + esc ( d . title ) + '」' : esc ( x . sub ) ) + '</small>' + '<i class="pc">' + gcTestedText ( x . id ) + '</i>' + '</span>' +
'<span class="go">' + ( d ? '再闯' : '开闯' ) + '</span></button></li>' ;
} ) . join ( '' ) + '</ol>' ;
if ( g === 'quiz' ) return '<div class="csq">' + l . map ( function ( x , i ) {
var d = done [ x . id ] ;
return '<button type="button" class="csn" data-test="' + x . id + '"><span class="no"><small>TOP</small>' + ( '0' + ( byHot ( TM . filter ( function ( y ) { return y . group === 'quiz' ; } ) ) . indexOf ( x ) + 1 ) ) . slice ( - 2 ) + '</span><span class="tx"><b>' + esc ( x . title ) + '</b>' +
'<small>' + ( d ? '<em>已测 · ' + esc ( d . title ) + '</em>' : esc ( x . sub ) ) + '</small>' + '<i class="pc">' + gcTestedText ( x . id ) + '</i>' + '</span><span class="ar"><svg class="ic"><use href="#i-right"/></svg></span></button>' ;
} ) . join ( '' ) + '</div>' ;
return l . map ( function ( x ) {
var d = done [ x . id ] ;
return '<button type="button" class="csr" data-test="' + x . id + '"><img src="ceshi/img/' + x . id + '_s.webp" alt="" loading="lazy"><span class="tx"><b>' + esc ( x . title ) + '</b>' +
'<small>' + ( d ? '<em>已测 · ' + esc ( d . title ) + '</em>' : esc ( x . sub ) ) + '</small>' + '<i class="pc">' + gcTestedText ( x . id ) + '</i>' + '</span><span class="ar"><svg class="ic"><use href="#i-right"/></svg></span></button>' ;
} ) . join ( '' ) ;
}
}
function hotHTML ( done ) {
function hotHTML ( done ) {
var l = byHot ( TM ) , top = gcTested ( l [ 0 ] . id ) ;
var l = byHot ( TM ) ;
return '<section class="csg csk"><div class="csg-h"><b>热度榜</b><small>按测过的人数排名</small></div><div class="ck l">' +
return '<section class="csg csk"><div class="csg-h"><b>热度榜</b><small>按测过的人数排名</small></div><div class="cp l">' +
l . slice ( 0 , hotOpen ? l . length : 10 ) . map ( function ( x , i ) {
l . slice ( 0 , hotOpen ? l . length : 5 ) . map ( function ( x , i ) { return rowHTML ( x , done , i + 1 ) ; } ) . join ( '' ) +
var d = done [ x . id ] ;
'<button type="button" class="ckm" data-hot="1">' + ( hotOpen ? '收起' : '查看完整榜单(' + l . length + ' 个)' ) + '</button></div></section>' ;
return '<button type="button" class="ckr g-' + x . group + '" data-test="' + x . id + '"><span class="rk r' + ( i < 3 ? i + 1 : 0 ) + '">' + ( i + 1 ) + '</span>' +
'<span class="tx"><b>' + esc ( x . title ) + '</b><span class="hb"><i style="width:' + Math . max ( 18 , Math . round ( gcTested ( x . id ) / top * 100 ) ) + '%"></i></span>' +
'<small><em>' + TG [ x . group ] + '</em>' + gcTestedText ( x . id ) + ( d ? ' · 已测' : '' ) + '</small></span>' +
'<span class="go">' + ( d ? '再测' : '去测' ) + '</span></button>' ;
} ) . join ( '' ) + '</div><button type="button" class="ckm" data-hot="1">' + ( hotOpen ? '收起' : '查看完整榜单(' + l . length + ' 个)' ) + '</button></section>' ;
}
}
function ceshiListHTML ( ) {
function ceshiListHTML ( ) {
var done = csDone ( ) ;
var done = csDone ( ) ;
return '<div class="csl">' + ( tGrp ? '' : hotHTML ( done ) ) + [ 'quiz' , 'psy' , 'game' , 'shop' ] . filter ( function ( g ) { return ! tGrp || tGrp === g ; } ) . map ( function ( g ) {
return '<div class="csl">' + ( tGrp ? '' : hotHTML ( done ) ) + [ 'quiz' , 'psy' , 'game' , 'shop' ] . filter ( function ( g ) { return ! tGrp || tGrp === g ; } ) . map ( function ( g ) {
var l = byHot ( TM . filter ( function ( x ) { return x . group === g ; } ) ) ; if ( ! l . length ) return '' ;
var l = byHot ( TM . filter ( function ( x ) { return x . group === g ; } ) ) ; if ( ! l . length ) return '' ;
var nd = l . filter ( function ( x ) { return done [ x . id ] ; } ) . length ;
var nd = l . filter ( function ( x ) { return done [ x . id ] ; } ) . length ;
var f = l . filter ( function ( x ) { return ! done [ x . id ] ; } ) [ 0 ] || l [ 0 ] ; /* 推荐位:本组第一个没测过的 */
if ( g === 'psy' || g === 'game' ) return '<section class="csg g-' + g + '"><div class="csg-h"><b>' + TG [ g ] + '</b><small>' + l . length + ' 套 · ' + TGD [ g ] + '</small>' + ( nd ? '<em>已测 ' + nd + '</em>' : '' ) + '</div>' + rest ( g , l , done ) + '</section>' ;
return '<section class="csg g-' + g + '"><div class="csg-h"><b>' + TG [ g ] + '</b><small>' + l . length + ' 套 · ' + TGD [ g ] + '</small>' + ( nd ? '<em>已测 ' + nd + '</em>' : '' ) + '</div>' +
return '<section class="csg g-' + g + '"><div class="csg-h"><b>' + TG [ g ] + '</b><small>' + l . length + ' 套 · ' + TGD [ g ] + '</small>' + ( nd ? '<em>已测 ' + nd + '</em>' : '' ) + '</div>' +
'<button type="button" class="csf" data-test=" ' + f . id + '"><span class="tx"><small>' + ( done [ f . id ] ? '再测一次' : f === l [ 0 ] ? '本组最热' : '本组推荐' ) + '</small><b>' + esc ( f . title ) + '</b><p>' + esc ( f . sub ) + '</p><i class="pc">' + gcTestedText ( f . id ) + '</i>' +
'<div class="cpl"> ' + l . map ( function ( x ) { return rowHTML ( x , done ) ; } ) . join ( '' ) + '</div></section>' ;
'<span class="go">' + ( done [ f . id ] ? '再测' : '开始测' ) + '<svg class="ic"><use href="#i-right"/></svg></span></span><img src="ceshi/img/' + f . id + '_s.webp" alt="" loading="lazy"></button>' +
rest ( g , l . filter ( function ( x ) { return x !== f ; } ) , done ) + '</section>' ;
} ) . join ( '' ) + '</div>' ;
} ) . join ( '' ) + '</div>' ;
}
}
function ceshiHead ( ) {
function ceshiHead ( ) {