/* 编辑器样式 */
html,body{height:100%;margin:0;}
/* 顶栏美化（覆盖 home.css 基础样式：渐变 + 细阴影，提升精致感） */
.card-top{background:linear-gradient(90deg,#39485a,#425369);box-shadow:0 1px 6px rgba(0,0,0,.18);}
.cardtop-txt{letter-spacing:2px;}
.cardtop-name{display:inline-block;max-width:36vw;margin-left:12px;padding:2px 12px;border-radius:11px;background:rgba(255,255,255,.16);color:#fff;font-size:12px;letter-spacing:0;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cardtop-name:empty{display:none;}
.back-link{position:absolute;left:18px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;gap:5px;padding:6px 14px;color:#fff;font-size:13px;line-height:1;text-decoration:none;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);border-radius:18px;
  transition:background .18s,box-shadow .18s,transform .12s,border-color .18s;}
.back-link .back-arr{width:13px;height:13px;stroke:#fff;stroke-width:2.4;fill:none;stroke-linecap:round;stroke-linejoin:round;}
.back-link:hover{color:#fff;text-decoration:none;background:rgba(255,255,255,.22);border-color:rgba(255,255,255,.42);
  box-shadow:0 2px 8px rgba(0,0,0,.18);transform:translateY(-50%) translateX(-1px);}
.back-link:active{transform:translateY(-50%) translateX(0);background:rgba(255,255,255,.3);}
body{background:#fff;font-family:"Microsoft YaHei","Helvetica Neue",Arial,sans-serif;}

.ed-wrap{display:flex;height:calc(100vh - 50px);margin-top:50px;}

/* v98：左侧栏已移除（内容并入右侧面板 .panel-sum），画布独占剩余宽度 */
.ed-left{display:none;}
.panel-sum{padding:14px 16px;}
.ed-tool{display:block;margin-bottom:10px;padding:9px 12px;background:linear-gradient(135deg,#1a9bfc,#3dabff);border:none;border-radius:8px;
  font-size:13px;color:#fff;cursor:pointer;text-decoration:none;user-select:none;text-align:center;font-weight:500;
  box-shadow:0 2px 6px rgba(26,155,252,.3);transition:all .18s;}
.ed-tool:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(26,155,252,.38);color:#fff;}
.ed-tool:active{transform:translateY(0);box-shadow:0 1px 3px rgba(26,155,252,.3);}
.ed-tool::before{content:'\2699  ';font-size:12px;}
.ed-info{margin-top:12px;display:flex;flex-wrap:wrap;}
.ed-info > *{margin:0 6px 6px 0;}
.ed-info .info-line{display:inline-block;font-size:12px;color:#5a6573;line-height:1.6;background:#eef3f8;border-radius:12px;padding:2px 12px;}

/* 中间画布 */
.ed-center{flex:1;overflow:auto;background:#f0f2f5;padding:20px 24px;}
.warm-prompt{display:table;margin:0 auto 14px;border:1px solid rgba(230,30,30,.45);border-radius:4px;background:#fff;
  color:rgba(230,30,30,.85);font-size:12px;padding:4px 14px;}
#paper{display:flex;flex-direction:column;align-items:center;}
#paper > * + *{margin-top:28px;}   /* 兼容旧内核：替代 flex gap */

.empty-hint{text-align:center;color:#9aa5b1;padding:80px 0;font-size:14px;}
.empty-hint::before{content:'\270E';display:block;font-size:44px;margin-bottom:14px;color:#d4dae1;font-style:normal;}
/* 空态引导大卡（v71：零基础老师第一眼看到该做什么） */
.empty-hint{max-width:520px;margin:60px auto;background:#fff;border:2px dashed #b8c4d0;border-radius:10px;
  padding:44px 36px;color:#33404d;font-size:15px;line-height:1.9;box-shadow:0 2px 12px rgba(20,40,70,.06);}
.empty-hint::before{content:'👉';font-size:40px;margin-bottom:10px;color:#f0a63c;}
.empty-hint b{color:#1a7fd4;font-size:16px;}
/* ========== 通用确认弹窗 ========== */
/* 通用确认弹窗 */
.modal-confirm{width:400px;margin-top:12%;}
.modal-confirm .modal-content{border-radius:8px;border:none;box-shadow:0 8px 40px rgba(10,30,60,.25);}
.cf-text{font-size:15px;color:#33404d;text-align:center;margin:10px 0 4px;line-height:1.8;}

/* 页眉（自定义） */

/* ---------- 页首考生信息区（跨全宽，与原站一致） ---------- */
.card-title-ph{border:1px dotted #999;color:#111;text-align:center;font-size:16px;font-weight:bold;
  padding:6px 12px;margin:2px auto 10px;width:78%;min-height:16px;outline:none;background:#fff;}
.card-title-ph:empty::before{content:attr(data-ph);color:#aaa;font-weight:normal;}
.card-title-ph:focus{border-color:#1a9bfc;}
/* 考生信息框：与考号框同顶同高、带边框（原站 studentInfo SVG rect） */

/* 注意事项 */

/* ---------- A4 页首（原站 A4 截图实测：整体缩放约0.72，注意事项与考号网格并排大框） ---------- */
/* 考生信息横排一行（无框、灰下划线、行尾编辑按钮；字段均分宽度防溢出截断） */
/* 大框：贴纸左右缘（原站框线与纸边框相接），上=标题栏（注意事项|准考证号），下=内容区 */

/* ---------- A3 横向（原站 A3 截图实测：2× A4 度量体系，大框贴纸左右缘） ----------
   度量红线：页首总高必须 ≤600px（内容高 742），否则选择题掉到第 2 页 */
/* A3 模版细节缩放 */

/* 考号填涂区：标题条带在框内顶部（原站 rect 1047,110,440,78），网格列线贯穿手写区+填涂区 */
.bub{display:block;}


/* 非首栏与次页考号 */

/* 密封线（纸张左缘竖排） */



/* 题目模块 */
/* 客观题全宽块（与原站 question-box 744px 一致） */

/* 涂卡表 */

/* 拖拽反馈 */

/* 作文（真实模版：15列、行高22/行距带9、每3行右侧字数标记） */

/* ---------- 真实学校模版细节（编辑态对齐成品）：定位块 / 栏警示 / 空白补位 ---------- */
/* 客观题标题栏右侧"填涂示例" */

/* 非作答区 */

/* 工具条 */
/* 每组题数步进器（与原站 addCount 一致） */

/* 右侧面板 */
.ed-right{width:332px;flex:none;border-left:1px solid #e6e9ee;background:#f5f6f8;overflow-y:auto;padding:14px 14px 90px;}
/* 右侧面板各分区统一卡片化：白底、圆角、轻阴影，与浅灰面板底形成层次 */
.ed-right > *{background:#fff;border-radius:10px;box-shadow:0 1px 3px rgba(20,40,70,.05);margin-bottom:12px;overflow:hidden;}
.ed-right > *:last-child{margin-bottom:0;}
.panel-title{font-size:14px;font-weight:bold;color:#2c3e50;margin:0;padding:14px 16px 12px;border-bottom:1px solid #eef1f5;
  position:relative;padding-left:24px;}
.panel-title::before{content:'';position:absolute;left:14px;top:16px;bottom:16px;width:3px;border-radius:2px;background:#1a9bfc;}
.panel-body-set{padding:14px 16px;}
.numlen{display:flex;align-items:center;font-size:13px;color:#444;font-weight:normal;margin:0;}
.numlen > * + *{margin-left:10px;}
.numlen input{width:56px;height:30px;border:1px solid #dcdfe6;border-radius:6px;text-align:center;font-size:14px;color:#333;transition:border-color .15s,box-shadow .15s;}
.numlen input:focus{border-color:#1a9bfc;box-shadow:0 0 0 3px rgba(26,155,252,.12);outline:none;}
.numlen-tip{font-size:12px;color:#999;font-weight:normal;}

.q-types{padding:14px;display:grid;grid-template-columns:1fr 1fr;gap:10px;}   /* grid gap 自 Chrome66/FF61/Safari12 起支持，早于 grid 本身，无需降级 */
.add-item{display:flex;align-items:center;justify-content:center;width:100%;padding:11px 4px;background:#fff;border:1px solid #e3e7ec;border-radius:8px;
  font-size:13px;color:#444;cursor:pointer;transition:all .18s;font-weight:500;}
.add-item > * + *{margin-left:7px;}
.add-item:hover{border-color:#1a9bfc;color:#1a9bfc;transform:translateY(-1px);box-shadow:0 4px 12px rgba(26,155,252,.15);}
.add-item:active{transform:translateY(0);box-shadow:none;}
.ai-ico{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:6px;color:#fff;font-size:12px;font-weight:bold;flex:none;}
.ico-obj{background:linear-gradient(135deg,#1a9bfc,#4db5ff);}
.ico-solve{background:linear-gradient(135deg,#f0ad4e,#f5c379);}
.ico-zh{background:linear-gradient(135deg,#d9544f,#e8837f);}
.ico-area{background:linear-gradient(135deg,#8a98a8,#a8b3bf);}

.panel-actions{padding:14px;display:flex;}
.panel-actions > * + *{margin-left:10px;}
.panel-actions .btn{flex:1;padding:10px 0;border:none;border-radius:8px;font-size:13px;font-weight:500;transition:all .18s;cursor:pointer;}
.panel-actions .btn:hover{transform:translateY(-1px);}
.panel-actions .btn:active{transform:translateY(0);}
.btn-preview{background:linear-gradient(135deg,#5cb85c,#74c474);color:#fff;box-shadow:0 2px 6px rgba(92,184,92,.3);}
.btn-preview:hover{box-shadow:0 4px 12px rgba(92,184,92,.4);color:#fff;}
.btn-save{background:linear-gradient(135deg,#337ab7,#4a93d4);color:#fff;box-shadow:0 2px 6px rgba(51,122,183,.3);}
.btn-save:hover{box-shadow:0 4px 12px rgba(51,122,183,.4);color:#fff;}
/* v203：公开/保密状态按钮（保密=灰蓝，公开=绿色） */
.btn-secret{background:linear-gradient(135deg,#6b7a8d,#8296ab);color:#fff;box-shadow:0 2px 6px rgba(107,122,141,.3);}
.btn-secret:hover{box-shadow:0 4px 12px rgba(107,122,141,.4);color:#fff;}
.btn-secret.is-public{background:linear-gradient(135deg,#5cb85c,#74c474);box-shadow:0 2px 6px rgba(92,184,92,.3);}
.btn-secret.is-public:hover{box-shadow:0 4px 12px rgba(92,184,92,.4);color:#fff;}
.btn-download{background:linear-gradient(135deg,#f0ad4e,#f5c071);color:#fff;box-shadow:0 2px 6px rgba(240,173,78,.3);}
.btn-download:hover{box-shadow:0 4px 12px rgba(240,173,78,.4);color:#fff;}
#btnSave{min-width:64px;}

/* 创建弹窗 */
.create-row{margin-bottom:18px;}
.create-label{display:inline-block;width:80px;vertical-align:top;font-size:14px;color:#333;padding-top:8px;}
.paper-opts{display:inline-block;}
.paper-opt{display:inline-block;text-align:center;margin:0 14px;cursor:pointer;}
.paper-opt input{display:none;}
.paper-icon{display:inline-block;border:2px solid #ccc;border-radius:4px;font-weight:bold;color:#888;padding:10px 16px;}
.paper-icon.small{font-size:15px;padding:12px 16px;}
.paper-opt input:checked + .paper-icon{border-color:#1a9bfc;color:#1a9bfc;}
.paper-opt em{display:block;font-style:normal;font-size:12px;color:#666;margin-top:4px;}
.paper-opt input:checked ~ em{color:#1a9bfc;}
.col-icon{display:inline-block;border:2px solid transparent;padding:6px;}
.col-icon i{display:inline-block;width:14px;height:22px;border:1px solid #999;margin:0 2px;background:repeating-linear-gradient(#fff 0 3px,#ddd 3px 4px);}
.col-icon.two i{background:repeating-linear-gradient(#1a9bfc 0 3px,#cde9fd 3px 4px);}
.col-icon.one i{width:28px;}
.paper-opt input:checked ~ .col-icon.one i{background:repeating-linear-gradient(#1a9bfc 0 3px,#cde9fd 3px 4px);}
.paper-opt input:checked ~ .col-icon{border-color:#1a9bfc;border-radius:4px;}
.paper-opt input:checked ~ .col-icon i{border-color:#1a9bfc;}

/* ---------- 客观题设置弹窗 ---------- */
#objModal .modal-content{border-radius:10px;box-shadow:0 12px 40px rgba(20,40,70,.18);border:none;}
#objModal .modal-header{border-bottom:1px solid #eef1f4;padding:15px 20px;}
#objModal .modal-title{font-size:17px;font-weight:600;color:#222;}
#objModal .modal-body{padding:18px 24px 0;}
#objModal .modal-footer{border-top:1px solid #eef1f4;padding:12px 20px;}
#objModal .modal-footer .btn{min-width:78px;border-radius:5px;padding:7px 16px;}
.obj-top-row{display:flex;margin-bottom:4px;}
.obj-top-row > * + *{margin-left:18px;}
.obj-field label{font-weight:normal;color:#666;font-size:13px;margin:0 0 5px;}
.obj-field .form-control{width:110px;border-radius:5px;border-color:#dde3ea;box-shadow:none;}
.obj-field .form-control:focus{border-color:#1a9bfc;box-shadow:0 0 0 2px rgba(26,155,252,.12);}
.obj-field-grow{flex:1;}
.obj-field-grow .form-control{width:100%;}
.obj-sec-title{display:flex;align-items:center;font-size:13px;color:#8a93a0;margin:14px 0 8px;}
.obj-sec-title > *{margin-right:10px;}
.obj-sec-title:after{content:'';flex:1;height:1px;background:#eef1f4;}
.checktitle{margin:0 0 8px;color:#e5534d;min-height:18px;font-size:13px;}
.obj-pane .seg-row{padding:7px 12px;margin-bottom:8px;display:flex;align-items:center;background:#f8fafc;border:1px solid #eef1f4;border-radius:6px;transition:border-color .15s,background .15s;}
.obj-pane .seg-row > * + *{margin-left:6px;}
.obj-pane .seg-row:hover{border-color:#d3e5f7;background:#f5faff;}
.obj-pane .seg-row label{font-weight:normal;margin:0;color:#666;font-size:13px;white-space:nowrap;}
.obj-pane .seg-row .form-control{display:inline-block;width:56px;float:none;flex:none;text-align:center;height:30px;padding:2px 4px;font-size:13px;border-radius:4px;border-color:#dde3ea;box-shadow:none;}
.obj-pane .seg-row .form-control:focus{border-color:#1a9bfc;box-shadow:0 0 0 2px rgba(26,155,252,.12);}
.obj-pane .seg-row .seg-del{font-size:16px;color:#c3cad3;cursor:pointer;margin-left:auto;flex:none;transition:color .15s;}
.obj-pane .seg-row .seg-del:hover{color:#d9534f;}
.addsmlq{color:#1a9bfc;margin-left:2px;font-size:13px;font-weight:normal;cursor:pointer;display:inline-block;}
.addsmlq:hover{color:#0f87e0;}
.cont-box{height:200px;border:1px solid #e7ebef;border-radius:6px;margin:0;overflow-y:auto;padding:0;background:#fff;}
.cont-box ul{margin:0;padding:0;}
.cont-box ul li{font-size:15px;padding:0 12px;list-style:none;line-height:38px;transition:background .12s;}
.cont-box ul li:hover{background:#f7fbff;}
.cont-box .qNum{display:inline-block;min-width:24px;text-align:center;background:#eaf5fe;color:#1a9bfc;border-radius:4px;line-height:20px;padding:0 6px;font-size:13px;font-weight:600;margin-right:6px;}
.cont-box .counts,.cont-box .scores{float:right;cursor:pointer;font-size:13px;color:#555;}
.cont-box .scores{margin-right:15px;}
.cont-box .counts input,.cont-box .scores input{width:38px;height:24px;text-align:center;font-size:13px;padding:0;border-radius:4px;border-color:#dde3ea;box-shadow:none;}
.insertQuestion{margin-top:12px;padding:0 2px;height:40px;line-height:40px;}
.insertQuestion > div{display:inline-block;font-size:14px;color:#333;}
.insertQuestion .disableInsert{color:#888;cursor:not-allowed;pointer-events:none;}
.insertQuestion .insert-select{display:inline-block;width:70px;margin:0 5px;height:30px;padding:0 2px;}
.showIcon{width:14px;height:14px;display:inline-block;vertical-align:-2px;margin-right:5px;background-size:14px 14px;background-repeat:no-repeat;}
.pane{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NENFMEMxODQ4NDdDMTFFNkI4NDA4RDcxODg2NTVFMTAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NENFMEMxODU4NDdDMTFFNkI4NDA4RDcxODg2NTVFMTAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0Q0UwQzE4Mjg0N0MxMUU2Qjg0MDhENzE4ODY1NUUxMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0Q0UwQzE4Mzg0N0MxMUU2Qjg0MDhENzE4ODY1NUUxMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuCMq6wAAAB9SURBVHjaYtywYQMDENQCcSYQSzLgB8+BeDoQN7NANVkCsbG/v/9zfLo2btwIMnguSA8T1KZkQppAAKomGawH6NT/QMBACgbpYWIgE4xqpJXG59AUQRQAqpUAUi+YoGlvDlSAkCZpaJKbDkqrzUBcB8TnidD8FGpRK0CAAQA8/01NMwi4xgAAAABJRU5ErkJggg==");}
.onpane{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODgyRkY5RTA4NDdDMTFFNjhDNzM5RjFDMTZDMDdFNDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODgyRkY5RTE4NDdDMTFFNjhDNzM5RjFDMTZDMDdFNDciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4ODJGRjlERTg0N0MxMUU2OEM3MzlGMUMxNkMwN0U0NyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4ODJGRjlERjg0N0MxMUU2OEM3MzlGMUMxNkMwN0U0NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pl7Ec8cAAAEASURBVHjaYmRY+5sBCGqBOBOIJRnwg+dAPB2Im1mgmpoYiAOSMLWMQBufEWEThs1MxGryE2FikGBB2MxEjKZ8eSaGueaMDNLsjHAxuEYVoGCVMqY5BUBNDbpMDH//MTB8+suAqZGHmYEhW42JYbouM4qmeqCmn3//M/ge/sdw+8d/uBzc1U9//md4/4uBIUQOxGNmuPnpP4qm01/+o7gEFKpwERlWBoYddiwM4hz/GVgYGXFqQnEqCDwBpgWPQ38YXvxgZPjxD7cmDBthQJwF5GdGhrs//+MMaSZoMkIBL/8w4NUEBC+YoGmPVDAdFKrNYCdDErkEAQ1PoRa1AgQYAFD2V6EiGB8qAAAAAElFTkSuQmCC");}
.contentRetain{position:relative;}
.contentRetain .tooltip-newInfo{border:1px solid #666;height:16px;width:16px;display:inline-block;line-height:16px;text-align:center;border-radius:8px;font-weight:600;font-size:12px;color:#666;cursor:pointer;position:relative;margin-left:10px;}
.contentRetain .tooltip-newInfo .tooltipText{visibility:hidden;width:360px;background:#666;color:#fff;border-radius:3px;padding:5px;position:absolute;text-align:left;z-index:10;top:-5px;left:60%;font-weight:400;font-size:12px;line-height:1.7;}
.contentRetain .tooltip-newInfo .tooltipText::after{content:"";position:absolute;top:10%;right:100%;margin-top:-5px;border-width:7px;border-style:solid;border-color:transparent #666 transparent transparent;}
.contentRetain .tooltip-newInfo:hover .tooltipText{visibility:visible;}
.contentRetain .tooltip-newInfo .tooltipText p{margin:0;}

/* ---------- 预览 ---------- */
#previewMask{position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:100000;overflow:auto;}
.pv-inner{width:80%;margin:30px auto;}
.pv-close{position:fixed;right:30px;top:20px;color:#fff;font-size:15px;cursor:pointer;z-index:100001;
  background:rgba(0,0,0,.35);border-radius:16px;padding:6px 14px;transition:background .15s;}
.pv-close:hover{background:rgba(0,0,0,.55);}

/* ---------- 成品纸（学校模版样式：真实尺寸、干净版式） ---------- */
#printArea{position:fixed;left:-99999px;top:0;opacity:0;pointer-events:none;}
.paper-final{position:relative;background:#fff;margin:0 auto 24px;box-sizing:border-box;
  overflow:hidden;box-shadow:0 2px 14px rgba(0,0,0,.25);color:#000;}
#previewMask .paper-final{zoom:.52;box-shadow:0 4px 26px rgba(0,0,0,.45);}
/* 四角 OMR 锚块 */
/* 四角 OMR 锚块：距纸边 13mm（原 8mm，v254 与 20mm 页边距同步内移 5mm）。
   宽 7mm → 内边缘正好落在 20mm 内容区边线上，不贴纸边，也不侵入内容区 */
.fm-anchor{position:absolute;width:7mm;height:3.3mm;background:#000;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
.fm-anchor.lt{left:13mm;top:13mm;} .fm-anchor.rt{right:13mm;top:13mm;}
.fm-anchor.lb{left:13mm;bottom:13mm;} .fm-anchor.rb{right:13mm;bottom:13mm;}
/* 左缘涂点定位块 */
/* 栏 */
.fm-cols{display:flex;align-items:stretch;}
.fm-cols > * + *{margin-left:6mm;}
.fm-col{flex:1 1 0;min-width:0;display:flex;flex-direction:column;position:relative;}
.fm-col > *{flex-shrink:0;}
/* 空白补位框（真实模版：栏内剩余空间"此处空白"黑框） */
/* 页首 */
.fm-head{margin-bottom:4mm;}
.fm-title{text-align:center;font-weight:bold;font-size:18pt;line-height:1.4;letter-spacing:1px;margin-bottom:3mm;}
/* 第二行：学科答题卡名称（如：物理答题卡） */
.fm-subtitle{text-align:center;font-size:14pt;line-height:1.4;letter-spacing:1px;}
/* 考生信息（左栏竖排）| 学号填涂 表单区（参考好分数样式） */
.fm-form{display:flex;border:1px solid #000;margin-top:3mm;}
.fm-ff-l{flex:1.25;display:flex;flex-direction:column;min-width:0;padding:3mm 3.5mm 2.5mm;position:relative;}
.fm-ff-r{flex:0 0 auto;min-width:0;text-align:center;padding:0;position:relative;border-left:1px solid #000;box-sizing:border-box;}
.fm-ff-r .fp-svg{display:block;} /* 消除 inline SVG 基线空隙，保证竖线与表格底边框连接 */
.fm-num-t{font-size:10.5pt;letter-spacing:2px;padding:1.4mm 0 1.2mm;border-bottom:1px solid #000;}
.fm-fields{flex:1;display:flex;flex-direction:column;justify-content:space-evenly;}
.fm-fi{display:flex;align-items:flex-end;font-size:11pt;line-height:1.3;}
.fm-fi span{white-space:nowrap;}
.fm-fi i{flex:1;min-width:12mm;border-bottom:1px solid #000;height:1em;}
.fm-marks{display:flex;align-items:center;margin:auto -3.5mm 0;padding:2mm 3.5mm 0 14mm;border-top:1px solid #000;font-size:9.5pt;}
.fm-marks > * + *{margin-left:14mm;}
.fm-marks .mkb{display:inline-block;width:4.6mm;height:2.8mm;border:1px solid #000;margin-left:2.5mm;position:relative;vertical-align:middle;}
.fm-marks .mkb.full{background:#000;-webkit-print-color-adjust:exact;print-color-adjust:exact;} /* 打印时强制保留黑色填充 */
.fm-marks .mk{display:inline-flex;align-items:center;}
/* 大题标题 */
.fm-qtitle{font-size:10.5pt;font-weight:bold;margin:3.5mm 0 1.6mm;}
.fm-qtitle:first-child{margin-top:0;}
.fp-objwrap{position:relative;}
/* 客观题标题行：题组标题居左、填涂示例居右（同一行） */
.fm-objhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:3.4mm;} /* 标题与选项行间距加大（OCR 识别需要独立行） */
.fp-objwrap .fp-svg{display:block;} /* 消除 inline SVG 基线空隙，保证标题间距精确 */
.fm-objex{font-size:7pt;font-weight:normal;display:flex;align-items:center;white-space:nowrap;}
.fm-objex > * + *{margin-left:1mm;}
.fm-objex i{width:4.6mm;height:2.8mm;background:#000;display:inline-block;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
/* 主观题矩形盒 */
.fm-box{position:relative;border:1.2px solid #000;margin-bottom:2.6mm;box-sizing:border-box;overflow:hidden;}
.fm-box:last-child{margin-bottom:0;}
/* 续接段：同一道题跨栏切开的后续段，紧贴前段、不加外边距 */
.fm-box.fm-box-cont{margin-bottom:0;}
/* v256：本题「最后一段」续接段恢复 2.6mm 下边距 —— 它与下一题组之间需要标准间距，
   否则在预览/导出 PDF 里看起来跟非作答区/下一道主观题「合并」了 */
.fm-box.fm-box-cont.fm-box-cont-last{margin-bottom:2.6mm;}
/* 客观题容器：与主观题盒保持一致的大题间距 */
.fp-objwrap{position:relative;margin-bottom:2.6mm;}
.fp-objwrap:last-child{margin-bottom:0;}
/* v97：栏底警示改为绝对定位后，紧贴警示上方的那一块（下边距 2.6mm）会顶进警示文字区，
   警示永远是栏内最后一个子元素，故用 nth-last-child(2) 命中它并清零下边距 */
/* v106：写作「栏内倒数第二个子元素」——即紧贴警示上方的那一块（警示永远是最后一个子元素）。
   主观题的作答盒在 .fp-part 内部，原来的 `.fm-box:last-child` 规则匹配不到它，
   v106 删掉标题行后这2.6mm 下边距就会把内容顶进警示区（test-warn-top t4 -0.6mm）。
   故改为按「栏内位置」清零：无论是裸盒、.fp-blankarea 还是包着盒子的 .fp-part 都覆盖。 */
.fm-col > *:nth-last-child(2).fp-blankarea,
.fm-col > *:nth-last-child(2) .fm-box,
.fm-col > *:nth-last-child(2) > .fm-box,
.fm-col > *:nth-last-child(2) .fp-blankarea,
.fm-col > *:nth-last-child(2) > .fp-blankarea,
.fm-col > *:nth-last-child(2) .fp-objwrap,
.fm-col > *:nth-last-child(2) > .fp-objwrap{margin-bottom:0;}
/* v97：栏底警示文字改为绝对定位钉在栏底 —— 原先作为 flex 项参与流布局，
   内容一多（栏高 +10mm 后更容易顶满）就会被推出栏底；绝对定位后永远贴合栏底，不被内容挤出 */
.fm-warn{position:absolute;left:0;right:0;bottom:0;font-size:8pt;color:#000;text-align:center;padding-top:1.6mm;letter-spacing:.5px;}
/* v91：主观题盒内不再渲染题号/分值标签（.fm-qn 已移除），文字区 top 由 JS 按有无整线内联给定 */
/* 解答题盒：文字区与图片同处 .fm-bx-body（v87）——图片 float 后文字自然环绕（Word 四周型环绕）；
   无图片时该容器仅承载文字，位置与旧的绝对定位文字区等价 */
/* v196：overflow 从 body 上移到 .fm-box（见上方规则），body 改为 visible。
   原因：换行符标记(.fm-pcr) 用「零宽 + overflow:visible」向右溢出显示字形，
   原 body 的 overflow:hidden 会把行尾的标记裁掉 → 标记时有时无。
   裁切下移一层到 .fm-box 后，文本/图片仍被盒边界裁切（打印与溢出红框检测不变），
   标记溢出进右侧留白即可见。原 right 由 2mm 加到 4mm 给标记留空间；
   v294 按用户要求收回为左右均 2mm（左右留白一致）——行尾恰好顶满时标记字形
   可能被盒边裁掉少许，仅影响编辑态标记可见性，不影响折行与打印。 */
.fm-bx-body{position:absolute;left:2mm;right:2mm;top:6.5mm;bottom:0;overflow:visible;} /* v294：right 4mm→2mm，与左侧一致（用户反馈左右留白不一致） */
/* v188：开启横线时 body 底部对齐到网格——bottom 设为 egap 的余数部分（由 JS 内联覆盖），
   保证最后一条横线与盒底之间留白 = 首条横线与盒顶的留白（对称）。 */
/* v170：预览/打印与编辑态折行完全一致 —— Chromium 给 contenteditable 的 UA 默认样式是
   overflow-wrap:break-word + line-break:after-white-space（超长单词/连续数字串强制折行），
   而预览/打印渲染的是普通 div（overflow-wrap:normal）→ 同一段连续"2222…"在编辑态折成多行、
   预览/下载却挤成一条溢出长行被裁掉（用户反馈"页面渲染/预览/下载完全不一致"）。
   这里把 UA 两个值显式补进 .fm-bx-txt，三种链路折行位置完全一致（编辑态本就有该 UA 样式，不受影响）。 */
/* v188：编辑区内所有块级子元素统一行高、零边距——确保按回车产生的 <div>/<p> 严格占一个
   横线网格行高，不出现段落间距导致的错位。
   v231：显式设置 font-family 并强制内部子元素继承，覆盖粘贴内容可能带的外部字体，
   保证全卡字体一致（不再出现宋体/Calibri 与微软雅黑混排）。 */
.fm-bx-txt{font-family:"Microsoft YaHei","Helvetica Neue",Arial,sans-serif;font-size:12pt;line-height:9mm;color:#111;min-height:1em;white-space:pre-wrap;word-break:normal;overflow-wrap:break-word;-webkit-line-break:after-white-space;box-sizing:border-box;}
.fm-bx-txt *{margin:0;padding:0;line-height:inherit;font-family:inherit;box-sizing:border-box;}
.fm-bx-txt p,.fm-bx-txt div{margin:0;padding:0;}
.fm-bx-txt br{line-height:inherit;}
/* v121：下划线像 Word 一样贯穿空格（不在空格处断线）。
   v210：原规则只作用于 #paper（编辑态）——预览/打印链路缺失时，含 ZWSP/空格的
   下划线 span 在两条链路用 UA 默认 text-decoration-skip-ink:auto 绘制，与编辑态
   skip:none 的观感不一致（空格处可能断线）。现三条链路统一，保证编辑/预览/PDF 一致。 */
#paper .fm-bx-txt u,
#previewMask .fm-bx-txt u,
#printArea .fm-bx-txt u,
#paper .fm-bx-txt [style*="underline"],
#previewMask .fm-bx-txt [style*="underline"],
#printArea .fm-bx-txt [style*="underline"]{text-decoration:underline;text-decoration-skip:none;-webkit-text-decoration-skip:none;}
/* 主观题盒内横线（v69）：真实 DOM 线（打印 100% 可靠，渐变背景有打印丢失风险）。
   首条距盒顶 egap、间距 egap（默认 9mm）；pointer-events:none 不挡编辑。
   v184/v188：首条位置 = egap（与间距一致），文字行高 = egap，文字垂直居中在两条横线之间 */
.el-line{position:absolute;left:0;right:0;height:0;border-top:1px solid #000;pointer-events:none;}
/* v162：工具条「虚实」对作答横线同样生效（与填空横线 .fm-rule.dashed 一致） */
.el-line.dashed{border-top-style:dashed;}
.fm-box .fm-bx-body,.fm-box .fm-bx-rules{z-index:1;} /* 内容压在横线之上 */
/* v87 插入图片：无边框；环绕方式 wr-left/wr-right 用 float 实现文字绕排，wr-none 为嵌入居中 */
.fm-bx-img{position:relative;display:block;}
.fm-bx-img.wr-left{float:left;margin:0 2.5mm 1.5mm 0;}
.fm-bx-img.wr-right{float:right;margin:0 0 1.5mm 2.5mm;}
.fm-bx-img.wr-none{margin:0 auto 1.5mm;}
/* v173 自由摆放：拖拽图片到框内任意位置 → 绝对定位，left/top 由 g.images[i].x/y(mm) 给出（相对文字区 .fm-bx-body） */
.fm-bx-img.wr-free{position:absolute;margin:0;z-index:2;}
.fm-bx-img.wr-free{cursor:move;}
.fm-bx-img.wr-free .fm-img-sel{cursor:move;}
.fm-bx-body::after{content:'';display:block;clear:both;} /* 清浮动，防止文字绕到框外 */
.fm-bx-img img{display:block;width:100%;height:auto;border:0;-webkit-user-drag:none;-webkit-user-select:none;user-select:none;} /* v87 图片不加边框；v131 禁止浏览器默认拖拽，避免缩放时复制出一份 */
/* v122：图片 Word/PPT 式选中框 —— 编辑态hover时显示浅蓝虚线框 + 8个方向缩放柄 */
.fm-img-sel{position:absolute;left:-2px;top:-2px;right:-2px;bottom:-2px;border:1.5px dashed #1daef8;
  border-radius:1px;display:none;z-index:4;}
.fm-bx-img:hover .fm-img-sel{display:block;}
.fm-img-h{position:absolute;width:9px;height:9px;background:#1daef8;border:1px solid #fff;
  box-shadow:0 1px 2px rgba(0,0,0,.25);z-index:6;}
.fm-img-h[data-h="tl"]{left:-5px;top:-5px;cursor:nwse-resize;}
.fm-img-h[data-h="tm"]{left:50%;top:-5px;transform:translateX(-50%);cursor:ns-resize;}
.fm-img-h[data-h="tr"]{right:-5px;top:-5px;cursor:nesw-resize;}
.fm-img-h[data-h="ml"]{left:-5px;top:50%;transform:translateY(-50%);cursor:ew-resize;}
.fm-img-h[data-h="mr"]{right:-5px;top:50%;transform:translateY(-50%);cursor:ew-resize;}
.fm-img-h[data-h="bl"]{left:-5px;bottom:-5px;cursor:nesw-resize;}
.fm-img-h[data-h="bm"]{left:50%;bottom:-5px;transform:translateX(-50%);cursor:ns-resize;}
.fm-img-h[data-h="br"]{right:-5px;bottom:-5px;cursor:nwse-resize;}
.fm-img-tools{position:absolute;left:2px;top:2px;display:none;background:rgba(20,24,28,.85);border-radius:3px;padding:1px;z-index:5;}
.fm-img-tools > * + *{margin-left:1px;}
.fm-bx-img:hover .fm-img-tools{display:inline-flex;}
.fm-img-tools a{color:#fff;font-size:11px;padding:1px 5px;cursor:pointer;text-decoration:none;line-height:1.5;}
.fm-img-tools a:hover{background:#1daef8;}
.fm-img-tools a.on{background:#1daef8;}
/* v87 填空横线：排在题目文字之后（参考填空题版式）；短 38% / 长 72%，与盒边框留白由 body 的 padding 提供 */
/* v221：文字→下划线→下一行 总间距对齐行高 9mm（2.5+6.5），避免有下划线的行比普通行高出半毫米 */
.fm-bx-rules{margin-top:2.5mm;}
.fm-rule{height:0;border-bottom:1px solid #000;margin-bottom:6.5mm;position:relative;clear:both;}
.fm-rule.w-s{width:38%;}
.fm-rule.w-l{width:72%;}
/* v131：虚实线切换（云校 dotted/solid）——横线切成虚线 */
.fm-rule.dashed{border-bottom-style:dashed!important;}
/* v131：中文着重号（云校 heavy）——每个字符上方加实心点 */
.fm-bx-txt .heavy{-webkit-text-emphasis:filled dot;-webkit-text-emphasis-position:over;text-emphasis:filled dot;text-emphasis-position:over;}
.fm-rule-del{position:absolute;right:-4mm;top:-3.4mm;width:3.4mm;height:3.4mm;line-height:3.2mm;text-align:center;
  font-size:8pt;color:#fff;background:#ff6b6b;border-radius:50%;text-decoration:none;display:none;cursor:pointer;}
.fm-rule:hover .fm-rule-del{display:block;}
/* 编辑弹窗内图片列表（v69） */
#paper .fm-bx-txt{cursor:text;outline:none;}
/* v230：移除编辑态文字区 min-height:100%——原 v167 让文字区填满整个盒子，
   但导致内容不足一整盒时，底部出现大片空白（有横线但无文字、无 ↵ 标记），
   用户按回车后误以为「底部多了一个空行」。改为 min-height:1em，文字区只占内容高度；
   点击空白区域由 .fm-bx-body 的 mousedown handler 兜底聚焦文字区（见 editor.js）。
   保留光标蓝色与聚焦淡蓝底。 */
#paper .fm-bx-txt[contenteditable="true"]{min-height:1em;caret-color:#1a9bfc;}
/* v226：开启横线时，文字行高=横线间距(egap)，每行文字正好占一个横线网格，
   文字在行高内垂直居中 → 自然落在两条横线中间。不需要负 margin，否则会偏上。 */
#paper .fm-box.has-eline .fm-bx-txt{margin-top:0;}
#paper .fm-bx-txt[contenteditable="true"]:focus{background:rgba(26,155,252,.045);}
/* v230：文字区不再 100% 高后，聚焦淡蓝底改用 :focus-within 铺到整个 .fm-bx-body，
   保持「正在编辑这个盒子」的视觉反馈覆盖全盒。 */
#paper .fm-bx-body:focus-within{background:rgba(26,155,252,.045);}
/* 大题标题/题号标签手动改写（编辑态 contenteditable）：聚焦无描边，悬停蓝框提示可编辑 */
.fp-title-ed,.fp-qn-ed{cursor:pointer;outline:none;border-radius:1px;}
.fp-title-ed:hover,.fp-qn-ed:hover{box-shadow:0 0 0 1px #4a90d9 inset;border-bottom:1px dashed #4a90d9;}
/* 弹层打开时高亮被编辑元素 */
.fp-title-ed.te-active,.fp-qn-ed.te-active{box-shadow:0 0 0 1px #1a9bfc inset;border-bottom:1px solid #1a9bfc;}

/* 文字快速修改弹层：白底卡片 + 阴影 + 小箭头，贴元素下方 */
#tePop{position:fixed;z-index:4000;background:#fff;border-radius:8px;box-shadow:0 6px 24px rgba(0,0,0,.18);
  border:1px solid #e4e8ee;padding:12px 14px 10px;box-sizing:border-box;}
#tePop.hide{display:none;}
#tePop::before{content:'';position:absolute;top:-6px;left:calc(50% - 6px);width:12px;height:12px;background:#fff;
  border-left:1px solid #e4e8ee;border-top:1px solid #e4e8ee;transform:rotate(45deg);}
#tePop .te-tip{font-size:11px;color:#9aa5b1;margin-bottom:8px;}
#teInput{width:100%;height:32px;border:1px solid #d5dbe3;border-radius:4px;font-size:14px;padding:0 10px;
  box-sizing:border-box;outline:none;transition:border-color .15s,box-shadow .15s;}
#teInput:focus{border-color:#1a9bfc;box-shadow:0 0 0 2px rgba(26,155,252,.15);}
#tePop .te-btns{display:flex;align-items:center;margin-top:10px;}
#tePop .te-flex{flex:1;}
#tePop .te-auto{font-size:12px;color:#f0ad4e;cursor:pointer;text-decoration:none;margin-right:8px;}
#tePop .te-auto:hover{text-decoration:underline;}
#tePop .te-btn{height:26px;padding:0 14px;border:1px solid #d5dbe3;background:#fff;border-radius:4px;font-size:12px;
  color:#555;cursor:pointer;transition:all .15s;margin-left:8px;}
#tePop .te-btn:hover{border-color:#1a9bfc;color:#1a9bfc;}
#tePop .te-btn.te-ok{background:#1a9bfc;border-color:#1a9bfc;color:#fff;}
#tePop .te-btn.te-ok:hover{background:#0d8de0;}

/* 全局轻提示（操作反馈）：顶部居中下滑浮现，1.8s 自动消失 */
#toast{position:fixed;left:50%;top:18px;transform:translateX(-50%) translateY(-8px);z-index:5000;
  display:flex;align-items:center;background:rgba(38,42,48,.92);
  padding:8px 18px;border-radius:20px;box-shadow:0 4px 16px rgba(0,0,0,.25);color:#fff;font-size:14px;
  transition:opacity .22s ease,transform .22s ease;pointer-events:none;}
#toast > * + *{margin-left:8px;}
#toast.hide{display:none;}
#toast.toast-in{opacity:1;transform:translateX(-50%) translateY(0);}
#toast .toast-ok{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;
  border-radius:50%;background:#5cb85c;color:#fff;font-size:10px;font-weight:bold;}

#paper .fm-bx-txt:empty::before{content:'可输入文字内容';color:#bbb;pointer-events:none;} /* v226：提示文字不拦截点击，用户可直接点进文字区输入 */
/* v89：v75 的 fm-bx-tools 工具条已并入 fm-bx-fmt（见 .fm-bx-fmt 区块） */
#paper .fm-bx-rs{position:absolute;right:2px;bottom:2px;width:18px;height:12px;cursor:ns-resize;z-index:3;}
#paper .fm-bx-exp{padding:0.6mm 3.5mm;font-size:9.5pt;line-height:1.25;
  color:#1a9bfc;background:#fff;border:1px solid #b9dcf9;border-radius:10px;cursor:pointer;
  box-shadow:0 1px 4px rgba(0,0,0,.12);white-space:nowrap;}
#paper .fm-bx-exp:hover{background:#eaf5fe;border-color:#1a9bfc;}
/* v109：主观题/非作答区底部按钮统一用 .fm-bx-btns 容器包起来并相对边框居中 */
#paper .fm-bx-btns{position:absolute;left:50%;bottom:4.5mm;transform:translateX(-50%);
  display:inline-flex;white-space:nowrap;z-index:4;}
#paper .fm-bx-btns > * + *{margin-left:3px;}
#paper .fm-bx-btns > .fm-bx-exp{position:static;right:auto;bottom:auto;}
#paper .fm-bx-rs::before{content:'';position:absolute;left:3px;right:3px;top:2px;height:2px;background:#1a9bfc;box-shadow:0 4px 0 #1a9bfc;}
#paper .fm-bx-rs:hover::before{background:#0b82dd;box-shadow:0 4px 0 #0b82dd;}
/* v95：非作答区拖高柄（沿用主观题盒同款样式与交互） */
#paper .fm-ba-rs{position:absolute;right:2px;bottom:2px;width:18px;height:12px;cursor:ns-resize;z-index:3;}
#paper .fm-ba-rs::before{content:'';position:absolute;left:3px;right:3px;top:2px;height:2px;background:#1a9bfc;box-shadow:0 4px 0 #1a9bfc;}
#paper .fm-ba-rs:hover::before{background:#0b82dd;box-shadow:0 4px 0 #0b82dd;}
body.rs-drag{user-select:none;cursor:ns-resize;}
/* 解答题盒：相邻两盒边界横线微调（悬停底边高亮 + 上下拖动光标） */
#paper .fm-box.fm-bx-edge{cursor:n-resize;border-bottom-color:#1a9bfc;}
/* v101：非作答区拖下边框调高度（与主观题盒同款反馈） */
#paper .fp-blankarea.fm-bx-edge{cursor:n-resize;border-bottom-color:#1a9bfc;}
body.bx-edge-drag #paper .fp-blankarea{cursor:n-resize;}
body.bx-edge-drag{user-select:none;cursor:n-resize;}
body.bx-edge-drag #paper .fm-box{cursor:n-resize;}
/* v179：主观题作答内容溢出盒高告警（仅编辑态）。
   .fm-bx-body 设了 overflow:hidden，超出部分打印会被截断；此处给溢出盒子加红边 +
   底部提示条，提醒用户调大盒高或精简内容。告警条用 ::after 生成，不进 DOM、不影响排版。 */
#paper .fm-box.fm-overflow{border-color:#e74c3c;border-width:1.5px;
  box-shadow:0 0 0 1px rgba(231,76,60,.15) inset;}
#paper .fm-box.fm-overflow > .fm-bx-body::after{
  content:'内容超出，超出部分打印将被截断 — 请拖动右下角调大盒高';
  position:absolute;left:0;right:0;bottom:0;z-index:5;
  padding:1.5mm 3mm;font-size:9.5pt;line-height:1.3;color:#c0392b;
  background:rgba(255,235,232,.92);border-top:1px solid #f5c6c0;
  text-align:center;pointer-events:none;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;
}
/* 作文 */
.fm-essay-t{font-size:10.5pt;margin:1mm 0 2mm;}
.fm-essay-t i{display:inline-block;width:38%;border-bottom:1px solid #000;vertical-align:-1px;}
/* 语文作文（v76 按成品参考图重构）：圆角外框框住「题号行 + 方格区」，大题名在框外；
   方格逐行铺满整栏、每行独立（行间白 ≈0.2 格高，实测 5px@24px 格），不再 3 行一组 */
/* v85 去掉 overflow:hidden：格宽已是精确的 calc(100%/每行格数) 不会溢出，
   但「＋增加一行」按钮要挂在框外（top:100%），裁剪会导致按钮看不见 */
/* v114：作文外框去掉圆角（border-radius:0），与其他作答框（直角）一致 */
.fm-zhbox{border:1px solid #000;border-radius:0;padding:1.2mm 1mm 1.6mm;box-sizing:border-box;position:relative;}
/* v179：延伸到栏底时清零底内边距，让末行格子顶到框底边框（配合 ehAdj 补偿 1.6mm） */
.fm-zhbox.no-pad-b{padding-bottom:0;}
/* v79 题头两行：「N.（X分）」一行、「题目：____」一行，合计高度 = 2 个格子高度
   （JS 按格高×2 给 .fm-zh-head 行内样式；两行 flex:1 各占一半，正好铺满 2 格，不留空档）
   题目行整体右移，位置按参考图像素量测：文字起于框内 23%，下划线 33%→77%（实测 x143/195~438，框内宽 552px）
   下划线用绝对定位的 left/right 百分比，避免 flex 撑出框外 */
.fm-zh-head{display:flex;flex-direction:column;}
.fm-zh-no{flex:1 1 0;display:flex;align-items:center;padding-left:1mm;font-size:10.5pt;line-height:1.2;}
/* v179：作文题号+分值可点击修改，hover 时高亮提示 */
.fm-zh-no.fp-qedit{cursor:pointer;border-radius:3px;transition:background .12s;}
.fm-zh-no.fp-qedit:hover{background:rgba(26,155,252,.12);}
.fm-zh-topic{position:relative;flex:1 1 0;display:flex;align-items:center;padding-left:23%;font-size:10.5pt;line-height:1.2;}
.fm-zh-topic i{position:absolute;left:33%;right:23%;bottom:.32em;border-bottom:1px solid #000;}
/* 末行去行间白：末行已有 .fm-ezrow-last 标记，直接命中，
   不依赖 :last-child（编辑态 fm-essay-btns 挂在框内末行之后会使 :last-child 失效） */
.fm-zhbox .fm-ezrow-last{margin-bottom:0;}
.fm-ezrow{position:relative;font-size:0;display:flex;align-items:stretch;box-sizing:content-box;
  border-top:1px solid #000;border-bottom:1px solid #000;margin-bottom:1.6mm;}
/* v78 每条竖线只画一次 + 精确铺满框内净宽：
   行容器只画上/下边线；竖线由格子画——首格画左边线、每格画右边线。
   格宽由 flex:1 均分（不写死 px），与外框边框/padding 的实际计算宽度无关，
   彻底消除「末列竖线戳出圆角框」与「小数格宽累积出 2px 加粗线」两个问题 */
/* v82/v83 格宽统一：每格 width=calc(100%/每行格数)（JS 内联给定）→ 每行恰好 100% 铺满框内净宽，
   且各行格子完全等宽；v83 起末行也补全成整行（字数只决定行数），不再出现右侧留白 */
.fm-ezrow i{flex:0 0 auto;min-width:0;box-sizing:border-box;border-right:1px solid #000;}
.fm-ezrow i:first-of-type{border-left:1px solid #000;}
/* 字数标记：每 100 字一个，落在「格子与格子之间的空白带」里（行间白 1.6mm）——
   v86：原来用 bottom:-0.6mm，文字整体压在格子里（用户反馈"应该在格子正下方 格子与格子之间空白处"），
   改为 top:100% + 3 像素上边距 = 从行底线往下排，字号缩到 5pt 正好嵌进空白带 */
.fm-ezrow .egmark{position:absolute;top:100%;margin-top:.3mm;font-size:5pt;font-weight:normal;color:#666;letter-spacing:.2px;white-space:nowrap;line-height:1;}
/* v179：egmark 的 left 由 JS 按实际每行格数 perRow 内联计算（off * 100 / perRow%），
   不再用 CSS 硬编码的 16 格百分比——8mm/9mm/10mm 格子都能精确对齐到对应格子的左边界 */
/* v88/v89 富文本工具条（参考同类答题卡工具的编辑体验）：
   v89 改为固定浮在编辑区顶部（单例 #fmFmtBar，.ed-center 内、不在缩放的 #paper 里），
   编辑态有主观题即常驻；聚焦/悬停某作答盒时切换绑定。不遮挡盒子的拖高柄/按钮。
   v90 按用户反馈砍到 Word 文本框式最小集：字号/撤销/B/U/Ω符号/短横线/长横线/图片/分割线。 */
/* v94：工具条改为「右侧面板内常规流」块级元素（不再是 fixed 浮层），
   外层 .fm-fmt-slot 负责标题与显示/隐藏（选中主观题时才显示） */
.fm-fmt-slot{display:none;padding:14px 16px;}
/* v164：工具条显示时吸附在右侧面板顶部——JS 会把它移到面板最顶部再显示（见 editor.js showFmtBar），
   sticky 保证面板向下滚动时它始终钉在顶部可见 */
.fm-fmt-slot.on{display:block;position:sticky;top:0;z-index:30;background:#fff;box-shadow:0 4px 14px rgba(20,40,70,.1);border-radius:10px;}
.fm-fmt-slot .ffs-t{font-size:14px;color:#2c3e50;font-weight:bold;margin-bottom:12px;position:relative;padding-left:12px;}
.fm-fmt-slot .ffs-t::before{content:'';position:absolute;left:0;top:3px;bottom:3px;width:3px;border-radius:2px;background:#1a9bfc;}
/* v187：主观题工具条重排版+美化。三行布局：第1行文字格式，第2行行距/对齐/横线，第3行图片/分割线。
/* v187：主观题工具条重排版+美化。三行布局：第1行文字格式，第2行行距/对齐/横线，第3行图片/分割线。
   所有控件统一 28px 高度；分组之间用竖线分隔；hover/on 态更精致。
   v188：兼容性收紧——flex gap 换成 margin（旧 Safari/Chrome 不支持 gap）；
   行允许换行，窄面板不裁切；对齐按钮改内联 SVG 图标，左/中/右一眼可辨。 */
.fm-bx-fmt{display:flex;flex-direction:column;
  padding:10px;background:#fff;border:1px solid #e4e8ee;border-radius:10px;font-size:12px;
  box-shadow:0 1px 3px rgba(20,40,70,.04);-webkit-box-shadow:0 1px 3px rgba(20,40,70,.04);}
.fm-bx-fmt.on{display:flex;}
.fm-bx-fmt .fmt-row{display:flex;flex-wrap:wrap;align-items:center;}
.fm-bx-fmt .fmt-row > *{margin:0 3px 4px 0;}
.fm-bx-fmt .fmt-row > *:last-child{margin-right:0;}
.fm-bx-fmt .fmt-row + .fmt-row{border-top:1px dashed #eaeef3;padding-top:8px;margin-top:2px;}
/* 分组竖线分隔符 */
.fm-bx-fmt .fmt-sep{display:inline-block;width:1px;height:16px;background:#dce2ea;margin:0 5px 4px;flex:0 0 auto;}
/* 按钮统一高度与下拉框对齐 */
.fm-bx-fmt a{display:inline-flex;align-items:center;justify-content:center;
  height:28px;padding:0 8px;border-radius:6px;cursor:pointer;text-decoration:none;line-height:1;
  font-size:12px;white-space:nowrap;flex:0 0 auto;
  -webkit-transition:background .15s,color .15s,border-color .15s;transition:background .15s,color .15s,border-color .15s;
  color:#4a5566;background:#f5f7fa;border:1px solid transparent;font-weight:500;
  -webkit-user-select:none;user-select:none;}
.fm-bx-fmt a:hover{background:#e8f3ff;color:#1a9bfc;border-color:#cfe6fb;}
.fm-bx-fmt a:active{background:#d8ecff;color:#1184dc;}
.fm-bx-fmt a.on{background:#1a9bfc;color:#fff;border-color:transparent;
  box-shadow:0 2px 6px rgba(26,155,252,.35);-webkit-box-shadow:0 2px 6px rgba(26,155,252,.35);}
/* 下拉框：与按钮等高 */
.fm-bx-fmt select{height:28px;font-size:12px;border:1px solid #d5dbe3;border-radius:6px;margin:0;padding:0 5px;
  cursor:pointer;flex:0 0 auto;background:#f5f7fa;color:#444;font-weight:500;
  -webkit-transition:border-color .15s;transition:border-color .15s;outline:none;}
.fm-bx-fmt select:hover{border-color:#1a9bfc;background:#fff;color:#1a9bfc;}
.fm-bx-fmt select:focus{border-color:#1a9bfc;background:#fff;}
/* 字体下拉宽度稍大，容纳中文名称 */
.fm-bx-fmt .fmt-ff{max-width:110px;}
/* 危险操作：删除分割线 */
.fm-bx-fmt a.bt-div-del{color:#d9534f;background:#fdf2f2;}
.fm-bx-fmt a.bt-div-del:hover{background:#fdecea;color:#c9302c;border-color:#f5c6cb;}
.fm-bx-fmt a.bt-div-del.off,
.fm-bx-fmt a.bt-div-del[disabled]{color:#bbb;cursor:not-allowed;background:#f0f2f5;}
.fm-bx-fmt a.bt-div-del.off:hover,
.fm-bx-fmt a.bt-div-del[disabled]:hover{color:#bbb;background:#f0f2f5;border-color:transparent;box-shadow:none;}
/* 文字格式按钮：B/I/U 用衬线体更接近 Word 的观感 */
.fm-bx-fmt a.fmt-b{font-family:Georgia,"Times New Roman",serif;font-size:14px;font-weight:700;}
.fm-bx-fmt a.fmt-i{font-family:Georgia,"Times New Roman",serif;font-size:14px;font-style:italic;}
.fm-bx-fmt a.fmt-u{font-family:Georgia,"Times New Roman",serif;font-size:14px;text-decoration:underline;}
/* v231：格式刷按钮——激活态高亮，连续模式时图标微抖提示 */
.fm-bx-fmt a.fmt-brush{font-size:12px;padding:0 6px;}
.fm-bx-fmt a.fmt-brush.on{background:#1a9bfc;color:#fff;border-color:transparent;}
/* 格式刷激活时，编辑区鼠标变刷子（crosshair 近似，浏览器无原生刷子光标） */
#paper.brush-mode .fm-bx-txt{cursor:crosshair;}
/* 编辑标记按钮 ↵ 字号稍小 */
.fm-bx-fmt a.bt-pilcrow{font-size:14px;padding:0 7px;}
/* v188：对齐按钮——内联 SVG 图标（三横线左/中/右错位排布），hover 跟随 currentColor 变色 */
.fm-bx-fmt a.fmt-jl,.fm-bx-fmt a.fmt-jc,.fm-bx-fmt a.fmt-jr{width:28px;padding:0;}
.fm-bx-fmt a.fmt-jl svg,.fm-bx-fmt a.fmt-jc svg,.fm-bx-fmt a.fmt-jr svg{display:block;margin:0 auto;}
/* v90 分割线：通栏细线把作答区上下分成两半（区分第(1)问/第(2)问作答区）
   真实 DOM + border-top → 打印 100% 可靠；编辑态可上下拖动、双击删除
   v110：分割线限制在作答框内，不超出左右边框 */
.fm-bx-div{position:absolute;left:0;right:0;height:0;border-top:1px solid #000;z-index:3;}
.fm-bx-div-h{position:absolute;left:-4mm;right:-4mm;top:-7px;height:14px;cursor:ns-resize;}
#paper .fm-bx-div:hover{border-top-color:#1a9bfc;}
#paper .fm-bx-div-h::after{content:'';position:absolute;left:50%;top:5px;width:26px;height:4px;margin-left:-13px;
  border-radius:2px;background:#1a9bfc;opacity:0;transition:opacity .12s;}
#paper .fm-bx-div:hover .fm-bx-div-h::after{opacity:1;}
/* v126：分割线旁显示段落标记（1）/（2）/（3）…，编辑态可见，便于区分多个作答区 */
.fm-bx-lbl{position:absolute;left:2mm;font-size:8pt;color:#666;line-height:1;white-space:nowrap;pointer-events:none;}
/* v137：编辑态编辑标记（v179 起统一为：回车 ↵ / 空格 · ° □），
   帮助用户快速定位；预览/打印不显示。
   v120 的 br::after 方案在 Chrome 上无效（<br> 不生成伪元素），已改为 JS 注入 <i class="fm-pcr">，
   这里只负责样式：零宽 inline-block + overflow:visible，标记溢出显示但**不占字宽**，
   因此不会改变折行位置（编辑态折行与预览/打印逐字一致）。 */
#paper .fm-pcr{display:inline-block;width:0;overflow:visible;white-space:nowrap;
  color:#9aa4ad;font-size:9pt;line-height:0;font-style:normal;font-weight:normal;
  text-decoration:none;pointer-events:none;user-select:none;-webkit-user-select:none;}
/* v179：按标记类型分色——断行类（↵）深一点，空白类（·/°/□）浅一点，一眼可区分 */
#paper .fm-pcr.para,#paper .fm-pcr.soft{color:#9aa4ad;}
#paper .fm-pcr.sp,#paper .fm-pcr.nbsp,#paper .fm-pcr.full{color:#bcc4cb;}
/* 空作答框：标完 ↵ 后补「可输入文字内容」提示（CSS 生成，不进 DOM/存储） */
/* v158：提示行高跟随该框的行间距——`.fm-pcr` 自身是 line-height:0（零宽不占行高），
   这里显式 inherit，否则把行距调到 13mm 时提示仍停在写死的 1.75 倍，观感对不上 */
#paper .fm-pcr.only-tip{line-height:inherit;}
#paper .fm-pcr.only-tip::after{content:'可输入文字内容';margin-left:5px;color:#bbb;
  font-size:10.5pt;line-height:inherit;pointer-events:none;} /* v226：提示文字不拦截点击 */
.fm-bx-lbl-top{bottom:1.5mm;}      /* 位于分割线上方，标识第(i)问作答区 */
.fm-bx-lbl-bottom{bottom:1.5mm;}   /* 位于盒底，标识最后一个作答区 */
#paper .fm-bx-txt hr{border:0;border-top:1px solid #999;margin:1mm 0;}.fm-bx-txt .ws-ul{display:inline-block;height:.95em;border-bottom:1px solid #111;vertical-align:baseline;margin:0 1px;overflow:hidden;user-select:all;-webkit-user-select:all;cursor:text;} /* v225：空 span 加 user-select:all，点击/拖拽时整体选中，便于复制填空横线；v247：overflow:hidden 裁掉内部选择锚点 NBSP，宽度只由 width 决定 */
/* v245：contenteditable=false 的填空横线，点击即可整体选中，Delete/Backspace 删除 */
.fm-bx-txt .ws-ul[contenteditable="false"]{cursor:default;}
.fm-bx-txt .ws-ul:hover{border-bottom-color:#1a9bfc;}
#paper .fm-bx-txt blockquote{margin:0 0 0 2em;padding:0;border:0;}
/* v84 快速增加行：按钮绝对定位「骑」在作文框下边缘（top:100% + 上移半个自身高度），
   不占版面、不参与分页（否则点一次加行就把一页顶成两页），也不会掉到页脚区域 */
.fm-essay-add{position:absolute;top:100%;left:50%;transform:translate(-50%,-52%);margin-top:0;
  padding:0.6mm 3.5mm;font-size:9.5pt;line-height:1.25;white-space:nowrap;
  color:#1a9bfc;background:#fff;border:1px solid #b9dcf9;border-radius:10px;cursor:pointer;z-index:5;
  box-shadow:0 1px 4px rgba(0,0,0,.12);}
.fm-essay-add:hover{background:#eaf5fe;border-color:#1a9bfc;}
/* v111/v113：作文按钮组放在框内，考虑到 .fm-zhbox 有 1.6mm 下内边距，
   用 bottom:6mm 让按钮相对格子区底部与主观题/非作答区（bottom:4.5mm）对齐，避免压到末行格子 */
.fm-essay-btns{position:absolute;left:50%;bottom:6mm;transform:translateX(-50%);
  display:inline-flex;white-space:nowrap;z-index:5;}
.fm-essay-btns > * + *{margin-left:3px;}
/* 组内按钮改为常规流（旧的 .fm-essay-add 自带绝对定位会在组内叠在一起） */
.fm-essay-btns > .fm-essay-add{position:static;left:auto;top:auto;transform:none;margin:0;}
.fm-essay-btns.inside{top:auto;bottom:6mm;transform:translateX(-50%);}
.fm-essay-ext,.fm-essay-del{padding:0.6mm 3.5mm;font-size:9.5pt;line-height:1.25;color:#1a9bfc;background:#fff;
  border:1px solid #b9dcf9;border-radius:10px;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.12);}
.fm-essay-ext:hover,.fm-essay-del:hover{background:#eaf5fe;border-color:#1a9bfc;}
/* v92：英语作文（.fm-ebox 整框盒 + .fm-eb-rs 拖高柄）已整体移除 */
/* 条形码区 */
/* 空白区 */
.fp-blankarea{border:1.2px solid #000;box-sizing:border-box;display:flex;align-items:center;justify-content:center;position:relative;margin-bottom:2.6mm;} /* v255：补 margin-bottom 与 .fm-box 一致 —— 之前缺省导致「非作答区在上、主观题在下」时两框紧贴 */
/* 非作答区提示：6.5pt→9pt（v70 用户反馈打印太小；与页脚同级，比栏底警示 8pt 大一级）
   v115：用户要求再加大到 26pt */
.fp-blank-tip{font-size:26pt;color:#000;letter-spacing:.5px;}
/* 页脚：与底部两个黑色定位矩形（.fm-anchor.lb/.rb，bottom:13mm、高3.3mm）居中对齐——
   同一垂直带（bottom:13mm + height:3.3mm），line-height 同高使文字在带内垂直居中；
   v254 与 20mm 下边距同步内移 5mm，仍完整落在下边距内 */
.fm-foot{position:absolute;left:0;right:0;bottom:13mm;height:3.3mm;line-height:3.3mm;text-align:center;font-size:9pt;letter-spacing:1px;}

/* ---------- 编辑态浮层（基于成品纸，所见即所得）：题组工具条 / 拖拽 / 页首编辑 / 可编辑标题 ---------- */
#paper .paper-final{cursor:default;}
.fp-part{position:relative;}
.fp-part.fp-hover{outline:1.6px solid #1daef8;outline-offset:1px;z-index:4;}
/* 作文组（方格行/英文横线行）行 part 不描蓝：整组悬停时每行都描边，蓝线与黑色格线/
   行线交叠成一片乱线（v67 用户反馈"各种线有重叠"）；工具条仍在标题行显示，操作反馈不受影响 */
#paper .fp-part.fp-eg.fp-hover,#paper .fp-part.fp-eg:hover{outline:none;}
/* 工具条整体：大号点击目标（按钮高 24px、间隔分明），贴题组右上角 */
.fp-gtools{position:absolute;top:2px;right:2px;display:none;background:#333;border-radius:5px;padding:4px;z-index:9;align-items:center;box-shadow:0 2px 10px rgba(0,0,0,.3);}
.fp-gtools > * + *{margin-left:3px;}
/* 悬停题组时显示编辑工具条（JS 会为同组所有 part 加 .fp-hover，CSS :hover 兜底） */
.fp-part:hover .fp-gtools,.fp-part.fp-hover .fp-gtools,.fm-zhbox:hover > .fp-gtools,.fm-zhbox.fp-hover > .fp-gtools{display:flex;}
/* 主观题：标题是独立 part。工具条曾移到标题顶边外侧（bottom:100%）避免遮挡作答盒，
   但鼠标从标题移向工具条必须穿过标题与工具条之间的空白区——离开 .fp-part 悬停区后
   工具条立即消失，形成"还没碰到就没了"的死区（v60→v66 用户反馈）。
   重新规划：工具条收回标题行内部（与客观题一致），标题行加高到 34px 完整容纳 32px
   工具条——鼠标在标题行内任意移动都不离开悬停区，零死区；工具条底边(34px)仍在
   标题行内，不触碰下方第一个作答盒（part 高 40px，盒顶在 40px）。 */
/* v106：主观题无标题行 → 工具条移到作答框顶外侧（同非作答区），并加透明桥接带消除悬停死区 */
.fp-part[data-type="solve"] > .fp-gtools{top:auto;bottom:100%;margin-bottom:0;}
.fp-part[data-type="solve"] > .fp-gtools::before{content:'';position:absolute;left:0;right:0;top:100%;height:6px;}
/* 语文作文：工具条挂在 .fm-zhbox 上，同样移到框顶外侧 */
.fm-zhbox > .fp-gtools{top:auto;bottom:100%;margin-bottom:0;}
.fm-zhbox > .fp-gtools::before{content:'';position:absolute;left:0;right:0;top:100%;height:6px;}
.fm-zhbox.fp-ghead.drag-src{opacity:.4;}
/* v99：非作答区没有独立标题行，工具条留在框内会压住「请勿在此区域作答」提示文字
   （截图反馈）→ 移到框顶外侧；用透明桥接带补上 6px，消除「悬停死区」 */
.fp-part[data-type="blankArea"] > .fp-gtools{top:auto;bottom:100%;margin-bottom:0;}
.fp-part[data-type="blankArea"] > .fp-gtools::before{content:'';position:absolute;left:0;right:0;top:100%;height:6px;}
/* v108：选择题工具条与主观题/作文/非作答区统一放到框顶外侧，避免压住标题文字 */
.fp-part[data-type="objective"] > .fp-gtools{top:auto;bottom:100%;margin-bottom:0;}
.fp-part[data-type="objective"] > .fp-gtools::before{content:'';position:absolute;left:0;right:0;top:100%;height:6px;}
/* 编辑/删除：按钮化，24px 高、12px 字、左右留白，指尖友好 */
.fp-gtools a.fp-edit,.fp-gtools a.fp-del{color:#fff;font-size:12px;margin:0;cursor:pointer;text-decoration:none;line-height:1;
  padding:0 12px;height:24px;display:inline-flex;align-items:center;border-radius:4px;}
.fp-gtools a.fp-edit:hover{background:#1a9bfc;}
.fp-gtools a.fp-del:hover{background:#e8543f;}
/* 拖拽手柄：26px 见方，明显可抓 */
.fp-drag{color:#bbb;font-size:15px;cursor:move;margin:0;user-select:none;width:26px;height:24px;
  display:inline-flex;align-items:center;justify-content:center;border-radius:4px;}
.fp-drag:hover{background:#1a9bfc;color:#fff;}
/* 每组题数步进器：独立白色卡片，从深色工具条中跳出来，按钮更大更易点 */
.fp-gtools .pg-step{display:inline-flex;align-items:center;background:#fff;border-radius:6px;
  padding:2px 4px;margin:0 2px;white-space:nowrap;box-shadow:0 1px 3px rgba(0,0,0,.2);}
.fp-gtools .pg-step > * + *{margin-left:2px;}
.fp-gtools .pg-step::before{content:'每组题数';color:#555;font-size:11px;font-weight:600;padding:0 4px 0 2px;letter-spacing:.3px;}
.fp-gtools .pg-step a{color:#333;font-size:18px;font-weight:bold;line-height:1;padding:0;width:26px;height:26px;
  display:inline-flex;align-items:center;justify-content:center;border-radius:5px;background:#f0f3f7;
  transition:all .12s;}
.fp-gtools .pg-step a:hover{background:#1a9bfc;color:#fff;}
.fp-gtools .pg-step a.pg-off{opacity:.3;pointer-events:none;}
.fp-gtools .pg-num{width:38px;height:26px;border:1px solid #d8dde5;border-radius:5px;text-align:center;
  font-size:14px;font-weight:bold;color:#1a9bfc;margin:0;padding:0;background:#fafcff;}
/* 拖拽反馈 */
#paper .fp-part.drag-src{opacity:.35;}
#paper .fp-part.drag-over,#paper .fm-zhbox.drag-over{outline:2px dashed #1daef8;outline-offset:2px;}
.drag-ghost{background:#fff;box-shadow:0 4px 14px rgba(0,0,0,.3);}
/* 页首编辑 */
.paper-final .fm-ff-l,.paper-final .fm-ff-r{position:relative;}
.paper-final .fm-title-edit,.paper-final .fm-subtitle-edit{border:1px dotted #999;outline:none;display:block;width:fit-content;max-width:90%;margin-left:auto;margin-right:auto;min-width:140px;padding:0 12px;box-sizing:border-box;}
.paper-final .fm-title-edit:empty::before,.paper-final .fm-subtitle-edit:empty::before{content:attr(data-ph);color:#aaa;font-weight:normal;}
/* v94：画布缩放控制从顶栏移到右侧面板（浅色样式，常规流布局） */
.panel-zoom{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;}
.panel-zoom .pz-label{font-size:13px;color:#444;font-weight:500;}
.zoom-ctl{display:inline-flex;align-items:center;font-size:13px;color:#333;background:#f3f5f8;border-radius:8px;overflow:hidden;}
.zoom-ctl button{width:30px;height:30px;border:none;background:transparent;color:#5a6573;font-size:16px;line-height:1;cursor:pointer;transition:all .15s;}
.zoom-ctl button:hover{background:#1a9bfc;color:#fff;}
.zoom-ctl #zoomVal{min-width:50px;text-align:center;font-weight:600;color:#2c3e50;user-select:none;}

/* 打印设置提示浮层：打印对话框缩放值代码无法控制，弹窗提醒用户选「默认(100%)」保证 1:1 打印 */
#printTip{position:fixed;left:0;top:0;right:0;bottom:0;z-index:3000;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;}
#printTip.hide{display:none;}
#printTip .pt-box{background:#fff;border-radius:8px;padding:24px 28px;width:430px;max-width:92vw;box-shadow:0 8px 30px rgba(0,0,0,.25);}
#printTip h4{margin:0 0 12px;font-size:17px;color:#222;}
#printTip p{margin:0 0 8px;font-size:14px;color:#333;}
#printTip .pt-paper{font-size:15px;color:#1a9bfc;font-weight:bold;}
#printTip .pt-sub{color:#555;}
#printTip ul{margin:0 0 16px;padding-left:18px;font-size:13px;color:#555;line-height:2.1;}
#printTip ul em{color:#c00;font-style:normal;}
#printTip .pt-btns{text-align:right;}
#printTip .pt-btns button{margin-left:8px;min-width:88px;}

/* 打印 */
@media print{
  /* 覆盖 bootstrap 打印样式的 * {background:transparent!important}，保留填涂黑框 */
  .fm-marks .mkb.full{background:#000 !important;}
  /* 黑色定位标记/示例块：bootstrap 打印样式的 * {background:transparent!important} 会洗掉黑底，
     且浏览器打印默认不输出背景图形——须 !important 强制黑底 + print-color-adjust 双保险 */
  .fm-anchor,.fm-objex i{background:#000 !important;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  #printTip{display:none !important;}
  .card-top,.ed-left,.ed-right,.q-tools,.pv-close,.warm-prompt,.q-acts,.q-drag,.fp-gtools,.fm-title-edit,.fm-subtitle-edit,.pg-step,#toast,#tePop{display:none !important;}
  body.print-final > *:not(#printArea){display:none !important;}
  body.print-final #printArea{display:block !important;position:static;left:auto;opacity:1;visibility:visible;pointer-events:auto;}
  body.print-final .paper-final{margin:0;box-shadow:none;page-break-after:always;break-after:page;}
  body.print-final .paper-final:last-child{page-break-after:auto;break-after:auto;}
  body.print-final #previewMask{display:none !important;}
  .ed-wrap{display:block;height:auto;margin:0;}
  .ed-center{overflow:visible;padding:0;background:#fff;}
  #paper{display:block;}
}



/* v151：已移除 UEditor 全部样式。
   UEditor 的工具条（20+ 按钮）在答题卡窄栏里换行成 3 行、把作答框内本就不多的
   空间吃光，且 iframe 让输入区溢出到框外导致打不了字。
   空作答框提示回到最简的 :empty::before 方案（contenteditable 下 div 确实会为空）。 */
#paper .fm-bx-txt:empty::before{content:'可输入文字内容';color:#bbb;pointer-events:none;} /* v226：提示文字不拦截点击，用户可直接点进文字区输入 */
/* 编辑区打印/预览（viewOnly）时富文本内嵌图片的显示 */
#paper .fm-bx-txt img, #previewMask .fm-bx-txt img, #printArea .fm-bx-txt img { max-width: 100%; }
/* 打印/预览态（viewOnly）的段落标记：↵（v179 与编辑态统一，段落/软换行均为 ↵） */
#paper .fm-bx-txt.show-pilcrow p::after,
#previewMask .fm-bx-txt.show-pilcrow p::after {
  content: '\21B5'; color: #9aa4ad; font-size: 9pt; font-weight: normal; margin-left: 1px;
}
