/* ============================================================
   PowerPoint Web Replica — Fluent UI styling
   ============================================================ */
:root{
  --app:#B7472A;               /* PowerPoint brand red-orange */
  --app-dark:#8f3018;
  --app-darker:#7d2a15;
  --titlebar:#7d2a15;
  --ribbon-bg:#f5f3f1;
  --ribbon-tab-bg:#ece9e7;
  --border:#d6d2ce;
  --border-light:#e4e1de;
  --text:#252423;
  --text-dim:#605e5c;
  --hover:#e1dfdd;
  --sel:#c43e1c;
  --sel-bg:#fdf3f0;
  --pane-bg:#faf9f8;
  --canvas-area:#e9e7e5;
  --shadow:0 1.6px 3.6px rgba(0,0,0,.13),0 .3px .9px rgba(0,0,0,.11);
  --shadow-lg:0 6.4px 14.4px rgba(0,0,0,.18),0 1.2px 3.6px rgba(0,0,0,.15);
  --font:'Segoe UI',-apple-system,BlinkMacSystemFont,'Helvetica Neue',Arial,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden}
body{font-family:var(--font);font-size:12px;color:var(--text);background:#fff;-webkit-font-smoothing:antialiased;user-select:none}
.hidden{display:none!important}
::-webkit-scrollbar{width:12px;height:12px}
::-webkit-scrollbar-thumb{background:#c8c6c4;border:3px solid transparent;background-clip:content-box;border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:#a19f9d;background-clip:content-box;border:3px solid transparent}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-corner{background:transparent}

#app{display:flex;flex-direction:column;height:100vh}

/* ===================== Title bar ===================== */
#titlebar{height:32px;min-height:32px;background:var(--titlebar);display:flex;align-items:stretch;color:#fff;position:relative;z-index:60}
.qat{display:flex;align-items:center;padding:0 2px}
.qat-btn{width:26px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:2px;cursor:default;position:relative;color:#fff}
.qat-btn svg{width:16px;height:16px;fill:none;stroke:#fff;stroke-width:1.2}
.qat-btn .fillable{fill:#fff}
.qat-btn:hover{background:rgba(255,255,255,.14)}
.qat-btn.disabled{opacity:.4;pointer-events:none}
.qat-sep{width:1px;height:16px;background:rgba(255,255,255,.3);margin:0 2px}
.qat-menu{position:relative}
#titlesave{position:absolute;left:50%;top:0;transform:translateX(-50%);height:32px;display:flex;align-items:center;gap:8px;font-size:12px;max-width:40vw;pointer-events:none}
#doc-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:auto;cursor:default}
#doc-title:hover{text-decoration:underline}
.save-state{font-size:11px;opacity:.75;pointer-events:auto}
#title-right{margin-left:auto;display:flex;align-items:stretch}
.tb-btn{display:flex;align-items:center;justify-content:center;width:34px;font-size:11px;color:#fff;cursor:default}
.tb-btn:hover{background:rgba(255,255,255,.14)}
.tb-close:hover{background:#e81123}

/* ===================== Ribbon ===================== */
#ribbon{background:var(--ribbon-bg);border-bottom:1px solid var(--border);z-index:55;flex:none}
#ribbon-tabs-row{display:flex;align-items:stretch;height:34px;background:var(--ribbon-tab-bg);padding-right:4px}
#ribbon-tabs{display:flex;list-style:none;align-items:stretch}
#ribbon-tabs li{padding:0 11px;display:flex;align-items:center;font-size:12px;cursor:default;position:relative;color:var(--text);border-top:2px solid transparent}
#ribbon-tabs li:hover{background:var(--hover)}
#ribbon-tabs li.active{background:var(--ribbon-bg);border-top-color:transparent;font-weight:600}
#ribbon-tabs li.file-tab{color:#fff;background:var(--app);font-weight:400;padding:0 16px}
#ribbon-tabs li.file-tab:hover{background:var(--app-dark)}
#ribbon-tabs li.file-tab.active{background:var(--app-dark)}
#ribbon-tabs li.ctx-tab{color:var(--app);font-weight:600}
#ribbon-tabs li.ctx-tab::before{content:"";position:absolute;left:0;right:0;top:-2px;height:3px;background:var(--app)}
#ribbon.collapsed #ribbon-body{display:none}
#ribbon.collapsed #ribbon-tabs li.active{background:var(--ribbon-tab-bg)}
#tellme{margin-left:8px;display:flex;align-items:center;background:#fff;border:1px solid var(--border);border-radius:2px;height:24px;align-self:center;padding:0 6px;width:220px;position:relative}
#tellme input{border:none;outline:none;font-family:var(--font);font-size:12px;width:100%;background:transparent}
.tellme-icon{font-size:11px;margin-right:5px;color:var(--text-dim)}
#ribbon-right{margin-left:auto;display:flex;align-items:center;gap:2px}
.ribbon-user{width:24px;height:24px;border-radius:50%;background:#6b5f59;color:#fff;display:flex;align-items:center;justify-content:center;font-size:11px;margin-right:2px;cursor:default}
.ribbon-caret{font-size:14px;color:var(--text);width:26px}
.ribbon-caret:hover{background:var(--hover)}

#ribbon-body{display:flex;align-items:stretch;min-height:96px;padding:2px 4px 0;overflow:hidden}
.rb-group{display:flex;flex-direction:column;border-right:1px solid var(--border-light);padding:0 3px;min-width:0}
.rb-group:last-child{border-right:none}
.rb-group-label{height:17px;text-align:center;font-size:11px;color:var(--text-dim);display:flex;align-items:flex-end;justify-content:center;padding-bottom:2px;position:relative;white-space:nowrap}
.rb-launcher{position:absolute;right:1px;bottom:0;width:12px;height:12px;font-size:8px;color:var(--text-dim);cursor:default;display:flex;align-items:center;justify-content:center}
.rb-launcher:hover{background:var(--hover)}
.rb-row{display:flex;align-items:flex-start;flex:1;padding-top:1px}
.rb-col{display:flex;flex-direction:column;justify-content:flex-start}

.rb-btn{display:flex;align-items:center;gap:5px;padding:2px 5px;border-radius:2px;cursor:default;position:relative;white-space:nowrap;border:1px solid transparent}
.rb-btn svg{width:16px;height:16px;flex:none}
.rb-btn .lbl{font-size:12px;color:var(--text)}
.rb-btn:hover{background:var(--hover);border-color:var(--border)}
.rb-btn.disabled{opacity:.42;pointer-events:none}
.rb-btn.toggled{background:#d8edfc;border-color:#98c6ea}
.rb-btn.toggled:hover{background:#c4e2f7}
.rb-btn.big{flex-direction:column;gap:2px;align-items:center;padding:3px 8px;height:70px;justify-content:flex-start;text-align:center}
.rb-btn.big svg{width:30px;height:30px}
.rb-btn.big .lbl{line-height:1.15;max-width:74px;white-space:normal;font-size:11.5px}
.rb-btn .caret{font-size:7px;color:var(--text-dim);margin-left:1px}
.rb-split{display:flex;flex-direction:column;border-radius:2px}
.rb-split .top{display:flex;align-items:center;gap:5px;padding:2px 5px 1px;border-radius:2px 2px 0 0;border:1px solid transparent;border-bottom:none}
.rb-split .bot{display:flex;align-items:center;justify-content:center;padding:0 5px 1px;font-size:7px;color:var(--text-dim);border-radius:0 0 2px 2px;border:1px solid transparent;border-top:none}
.rb-split:hover .top,.rb-split:hover .bot{background:var(--hover);border-color:var(--border)}
.rb-split.big{height:70px}
.rb-split.big .top{flex-direction:column;gap:2px;padding:3px 8px 0;align-items:center;flex:1}
.rb-split.big .top svg{width:30px;height:30px}
.rb-split.big .top .lbl{line-height:1.15;max-width:74px;white-space:normal;font-size:11.5px;text-align:center}
.rb-split.big .bot{padding:1px 0}
.rb-split.disabled .top,.rb-split.disabled .bot{opacity:.42;pointer-events:none}
.rb-split .bot:hover{background:var(--hover)}

.rb-combo{display:flex;align-items:center;border:1px solid var(--border);background:#fff;height:21px;border-radius:1px;margin:1px 2px;min-width:0}
.rb-combo:hover{border-color:#a19f9d}
.rb-combo input{border:none;outline:none;font-size:12px;font-family:var(--font);padding:0 3px;height:100%;background:transparent;min-width:0}
.rb-combo .combo-caret{width:15px;display:flex;align-items:center;justify-content:center;font-size:7px;color:var(--text-dim);border-left:1px solid transparent;height:100%}
.rb-combo .combo-caret:hover{background:var(--hover)}
.rb-combo.disabled{opacity:.42;pointer-events:none}
.rb-inline{display:flex;align-items:center}
.rb-color-split{display:flex;flex-direction:column;align-items:center;cursor:default;border:1px solid transparent;border-radius:2px;padding:1px 3px}
.rb-color-split:hover{background:var(--hover);border-color:var(--border)}
.rb-color-split.disabled{opacity:.42;pointer-events:none}
.rb-color-split .cs-glyph{display:flex;flex-direction:column;align-items:center;line-height:1}
.rb-color-split .cs-glyph span{font-size:12px;font-weight:700;height:13px}
.rb-color-split .cs-bar{width:16px;height:4px;margin-top:1px}
.rb-color-split .cs-caret{font-size:7px;color:var(--text-dim)}
.rb-check{display:flex;align-items:center;gap:5px;padding:2px 5px;font-size:12px;cursor:default;border-radius:2px}
.rb-check:hover{background:var(--hover)}
.rb-check input{margin:0;accent-color:var(--app)}
.rb-num{border:1px solid var(--border);background:#fff;height:21px;border-radius:1px;display:flex;align-items:center;margin:1px 2px}
.rb-num input{border:none;outline:none;width:44px;font-size:12px;font-family:var(--font);padding:0 3px;text-align:right}
.rb-num .num-unit{color:var(--text-dim);font-size:11px;padding-right:4px}
.rb-num.disabled{opacity:.42;pointer-events:none}
.rb-sep{width:1px;background:var(--border-light);margin:2px 2px;align-self:stretch}

/* Galleries / popups */
.popup{position:absolute;background:#fff;border:1px solid #b3aea9;box-shadow:var(--shadow-lg);z-index:1000;min-width:120px}
.popup .pop-title{font-size:11px;color:var(--text-dim);padding:7px 10px 4px;border-bottom:none}
.menu-list{padding:3px 0}
.menu-item{display:flex;align-items:center;gap:8px;padding:5px 22px 5px 10px;font-size:12px;cursor:default;position:relative;min-height:24px}
.menu-item svg{width:16px;height:16px;flex:none}
.menu-item:hover{background:var(--hover)}
.menu-item.disabled{opacity:.42;pointer-events:none}
.menu-item .mi-check{width:14px;flex:none;text-align:center;color:var(--app)}
.menu-item .mi-label{flex:1;white-space:nowrap}
.menu-item .mi-key{margin-left:24px;color:var(--text-dim);font-size:11px}
.menu-item .mi-sub{font-size:8px;color:var(--text-dim);margin-left:8px}
.menu-sep{height:1px;background:var(--border-light);margin:3px 0}
.menu-item .mi-desc{display:block;font-size:10.5px;color:var(--text-dim);white-space:normal}
.gal{padding:8px;max-width:720px}
.gal-grid{display:flex;flex-wrap:wrap;gap:6px}
.gal-item{border:1px solid var(--border-light);border-radius:2px;cursor:default;padding:4px;display:flex;flex-direction:column;align-items:center;gap:3px;background:#fff}
.gal-item:hover{border-color:var(--app);background:var(--sel-bg)}
.gal-item.sel{border-color:var(--app);background:var(--sel-bg);box-shadow:inset 0 0 0 1px var(--app)}
.gal-item .gi-label{font-size:10.5px;color:var(--text);text-align:center;white-space:nowrap}
.gal-cols{display:flex;gap:14px}
.gal-col-head{font-size:11px;color:var(--text-dim);padding:4px 2px}

/* Color picker */
.cp{padding:10px;width:236px}
.cp-sec{font-size:11px;color:var(--text-dim);margin:4px 0 4px}
.cp-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:0}
.cp-sw{width:20px;height:20px;cursor:default;position:relative;border:1px solid #fff}
.cp-sw:hover{outline:1px solid #000;z-index:2}
.cp-std{display:grid;grid-template-columns:repeat(10,1fr);gap:0;margin-top:2px}
.cp-more{margin-top:8px;padding-top:8px;border-top:1px solid var(--border-light);display:flex;align-items:center;gap:6px;font-size:12px}
.cp-more input{width:70px;border:1px solid var(--border);padding:2px 4px;font-size:12px;font-family:var(--font)}
.cp-recent{display:flex;gap:0;flex-wrap:wrap}
.cp-none{display:flex;align-items:center;gap:6px;padding:4px 6px;font-size:12px;cursor:default;border-radius:2px;margin-bottom:4px}
.cp-none:hover{background:var(--hover)}
.cp-none .none-sw{width:16px;height:16px;border:1px solid var(--border);background:linear-gradient(to top right,#fff 44%,#e00 46%,#e00 54%,#fff 56%)}

/* ===================== Workspace ===================== */
#workspace{flex:1;display:flex;min-height:0;background:#fff}
#thumb-pane{width:190px;min-width:120px;max-width:400px;background:#fbfaf9;border-right:none;display:flex;flex-direction:column;flex:none}
#thumb-list{flex:1;overflow-y:auto;overflow-x:hidden;padding:8px 6px 8px 10px;outline:none}
.thumb-item{position:relative;margin-bottom:8px;cursor:default}
.thumb-item .t-num{position:absolute;left:-2px;top:2px;font-size:11px;color:var(--text-dim);width:20px;text-align:right}
.thumb-item .t-badge{position:absolute;left:-2px;bottom:2px;font-size:9px;color:var(--text-dim)}
.thumb-item .t-frame{margin-left:24px;border:1px solid var(--border);background:#fff;position:relative}
.thumb-item .t-frame .slide{position:absolute;inset:0}
.thumb-item.sel .t-frame{outline:2px solid var(--sel);outline-offset:1px}
.thumb-item.sel .t-num{color:var(--sel);font-weight:600}
.thumb-item:hover .t-frame{outline:1px solid #c8c6c4;outline-offset:1px}
.thumb-item.sel:hover .t-frame{outline:2px solid var(--sel)}
.thumb-item .t-hidden-ov{position:absolute;inset:0;background:rgba(255,255,255,.55);margin-left:24px;display:flex;align-items:center;justify-content:center}
.thumb-item .t-star{position:absolute;right:2px;bottom:2px;font-size:10px}
.thumb-item.drop-above::before{content:"";position:absolute;top:-6px;left:24px;right:0;height:3px;background:var(--app);border-radius:2px}
.thumb-item.drop-below::after{content:"";position:absolute;bottom:-6px;left:24px;right:0;height:3px;background:var(--app);border-radius:2px}
#thumb-splitter{width:5px;margin-left:-2px;position:relative;z-index:5;cursor:col-resize;background:transparent;flex:none}
#thumb-splitter:hover{background:var(--hover)}

#center-col{flex:1;display:flex;flex-direction:column;min-width:0}
#slide-scroll{flex:1;overflow:auto;background:var(--canvas-area);position:relative}
#slide-stage{min-width:100%;min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px}
#slide-holder{position:relative;flex:none}
#empty-deck{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:var(--canvas-area)}
.empty-deck-inner{text-align:center;color:var(--text-dim);cursor:default;padding:30px 46px;border:2px dashed #b7b3b0;border-radius:4px}
.empty-deck-inner:hover{border-color:var(--app);color:var(--app)}
.empty-deck-icon{width:56px;height:40px;margin:0 auto 10px;border:2px solid currentColor;border-radius:2px;position:relative}
.empty-deck-icon::after{content:"+";position:absolute;right:-8px;top:-12px;font-size:20px}

/* Slide surface */
.slide{position:relative;overflow:hidden;background:#fff}
#slide-holder .slide{box-shadow:0 2px 8px rgba(0,0,0,.28)}
.sobj{position:absolute}
.sobj .obj-inner{width:100%;height:100%;position:relative}
.sobj.selected>.obj-inner{outline:none}
.obj-selbox{position:absolute;border:1.5px solid var(--sel);pointer-events:none;z-index:5}
.handle{position:absolute;width:9px;height:9px;background:#fff;border:1.5px solid var(--sel);border-radius:50%;z-index:6;pointer-events:auto}
.handle.nw{left:-6px;top:-6px;cursor:nwse-resize}
.handle.n{left:calc(50% - 4.5px);top:-6px;cursor:ns-resize}
.handle.ne{right:-6px;top:-6px;cursor:nesw-resize}
.handle.e{right:-6px;top:calc(50% - 4.5px);cursor:ew-resize}
.handle.se{right:-6px;bottom:-6px;cursor:nwse-resize}
.handle.s{left:calc(50% - 4.5px);bottom:-6px;cursor:ns-resize}
.handle.sw{left:-6px;bottom:-6px;cursor:nesw-resize}
.handle.w{left:-6px;top:calc(50% - 4.5px);cursor:ew-resize}
.handle.rot{left:calc(50% - 5px);top:-26px;width:10px;height:10px;cursor:grab}
.rot-stem{position:absolute;left:calc(50% - .75px);top:-17px;width:1.5px;height:12px;background:var(--sel);z-index:5;pointer-events:none}
.marquee{position:absolute;border:1px dashed var(--sel);background:rgba(196,62,28,.06);z-index:20;pointer-events:none}
.guide-line{position:absolute;background:#20b2aa;z-index:15;pointer-events:none}
.guide-label{position:absolute;background:#20b2aa;color:#fff;font-size:9px;padding:0 3px;z-index:15;pointer-events:none;border-radius:2px}

/* text inside objects */
.ppt-text{width:100%;height:100%;position:relative;overflow:hidden;word-wrap:break-word}
.ppt-text[contenteditable="true"]{cursor:text;user-select:text}
.para{position:relative;min-height:1em}
.para .run{white-space:pre-wrap}
.ph-prompt{color:#a19f9d!important}
.ph-prompt .run{color:inherit}
.sobj.ph-empty .ppt-text{outline:none}
.ppt-table{border-collapse:collapse;width:100%;height:100%;table-layout:fixed}
.ppt-table td{border:1px solid;padding:4px 6px;vertical-align:top;overflow:hidden}

/* Notes pane */
#notes-splitter{height:18px;background:var(--pane-bg);border-top:1px solid var(--border);font-size:10px;color:var(--text-dim);display:flex;align-items:center;justify-content:center;cursor:row-resize;flex:none}
#notes-splitter:hover{background:var(--hover)}
#notes-pane{height:76px;min-height:0;background:#fff;flex:none;display:flex}
#notes-pane.collapsed{display:none}
#notes-edit{flex:1;padding:8px 12px;outline:none;font-size:12px;overflow-y:auto;user-select:text}
#notes-edit:empty::before{content:attr(data-ph);color:#a19f9d}

/* Sorter view */
#sorter-view{flex:1;overflow:auto;background:var(--canvas-area);padding:16px}
#sorter-grid{display:flex;flex-wrap:wrap;gap:18px;align-content:flex-start}
.sorter-item{position:relative;cursor:default}
.sorter-item .s-num{position:absolute;left:0;top:-18px;font-size:11px;color:var(--text-dim)}
.sorter-item .s-frame{border:1px solid var(--border);background:#fff;position:relative}
.sorter-item.sel .s-frame{outline:3px solid var(--sel);outline-offset:1px}
.sorter-item .s-title{font-size:11px;color:var(--text);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}
.sorter-item .s-trans{position:absolute;left:4px;bottom:4px;font-size:10px;color:#fff;background:rgba(0,0,0,.55);padding:1px 5px;border-radius:2px}

/* ===================== Status bar ===================== */
#statusbar{height:24px;min-height:24px;background:var(--pane-bg);border-top:1px solid var(--border);display:flex;align-items:center;padding:0 8px;font-size:11px;color:var(--text-dim);z-index:50}
#status-left{display:flex;align-items:center;gap:14px;overflow:hidden}
.st-item{white-space:nowrap}
#st-spell{color:#107c10}
#status-right{margin-left:auto;display:flex;align-items:center;gap:6px}
.st-view{width:26px;height:20px;display:flex;align-items:center;justify-content:center;border-radius:2px;cursor:default}
.st-view svg{width:15px;height:15px;stroke:var(--text-dim);fill:none;stroke-width:1.2}
.st-view:hover{background:var(--hover)}
.st-view.active{background:#d2d0ce}
.zoom-btn{width:22px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:2px;font-size:13px;cursor:default}
.zoom-btn:hover{background:var(--hover)}
#zoom-slider{width:110px;accent-color:var(--app);height:18px;cursor:default}
#zoom-pct{width:38px;text-align:right}
#zoom-fit{padding:1px 8px;border-radius:2px;cursor:default}
#zoom-fit:hover{background:var(--hover)}

/* ===================== Task pane ===================== */
#task-pane{width:300px;min-width:240px;max-width:480px;background:#fff;border-left:1px solid var(--border);display:flex;flex-direction:column;flex:none}
#task-pane-head{height:32px;background:var(--pane-bg);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 10px;font-size:13px;font-weight:600}
#task-pane-title{flex:1}
#task-pane-close{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:2px;font-size:10px;cursor:default}
#task-pane-close:hover{background:var(--hover)}
#task-pane-body{flex:1;overflow-y:auto;padding:12px;font-size:12px}
.tp-sec{margin-bottom:14px}
.tp-sec-head{font-size:12px;font-weight:600;padding:4px 0;display:flex;align-items:center;cursor:default}
.tp-sec-head::before{content:"▾";font-size:9px;margin-right:6px;color:var(--text-dim)}
.tp-sec-head.closed::before{content:"▸"}
.tp-row{display:flex;align-items:center;gap:8px;margin:6px 0}
.tp-row label{flex:0 0 110px;color:var(--text)}
.tp-row input[type=text],.tp-row input[type=number],.tp-row select{flex:1;border:1px solid var(--border);padding:3px 6px;font-size:12px;font-family:var(--font);border-radius:1px;min-width:0}
.tp-row input[type=range]{flex:1}
.tp-radio{display:flex;align-items:center;gap:6px;margin:5px 0;font-size:12px;cursor:default}
.tp-btn{display:inline-block;border:1px solid var(--border);background:#fff;padding:4px 14px;font-size:12px;border-radius:2px;cursor:default;text-align:center}
.tp-btn:hover{background:var(--hover);border-color:#a19f9d}
.tp-btn.primary{background:var(--app);border-color:var(--app);color:#fff}
.tp-btn.primary:hover{background:var(--app-dark)}
.tp-btn.disabled{opacity:.42;pointer-events:none}
.tp-swatches{display:grid;grid-template-columns:repeat(10,1fr);gap:0}
.tp-list-item{border:1px solid var(--border-light);border-radius:2px;padding:6px 8px;margin-bottom:6px;display:flex;align-items:center;gap:8px;background:#fff;cursor:default}
.tp-list-item:hover{border-color:#a19f9d}
.tp-list-item.sel{border-color:var(--app);background:var(--sel-bg)}
.tp-list-item .li-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tp-list-item .li-ico{width:14px;height:14px;flex:none;color:var(--text-dim)}
.tp-mini-btn{width:20px;height:20px;display:flex;align-items:center;justify-content:center;border-radius:2px;font-size:9px;color:var(--text-dim);flex:none}
.tp-mini-btn:hover{background:var(--hover)}
.comment-card{border:1px solid var(--border-light);border-radius:3px;padding:8px;margin-bottom:8px;background:#fff}
.comment-card .c-head{display:flex;align-items:center;gap:7px;margin-bottom:4px}
.comment-card .c-avatar{width:22px;height:22px;border-radius:50%;background:var(--app);color:#fff;display:flex;align-items:center;justify-content:center;font-size:10px}
.comment-card .c-author{font-weight:600;font-size:11.5px}
.comment-card .c-time{color:var(--text-dim);font-size:10px;margin-left:auto}
.comment-card .c-body{font-size:12px;user-select:text;white-space:pre-wrap}
.comment-card .c-actions{margin-top:5px;display:flex;gap:10px;font-size:11px}
.comment-card .c-actions span{color:#106ebe;cursor:default}
.comment-card .c-actions span:hover{text-decoration:underline}
.comment-new textarea{width:100%;border:1px solid var(--border);border-radius:2px;padding:6px;font-family:var(--font);font-size:12px;resize:vertical;min-height:44px;outline:none}
.comment-new textarea:focus{border-color:var(--app)}

/* ===================== Context menu ===================== */
.ctx-menu{position:absolute;background:#fff;border:1px solid #b3aea9;box-shadow:var(--shadow-lg);z-index:2000;min-width:200px;padding:3px 0}
.ctx-item{display:flex;align-items:center;padding:5px 10px;font-size:12px;cursor:default;gap:8px;position:relative}
.ctx-item:hover{background:var(--hover)}
.ctx-item.disabled{opacity:.42;pointer-events:none}
.ctx-item .ci-check{width:16px;text-align:center;flex:none}
.ctx-item .ci-label{flex:1;white-space:nowrap}
.ctx-item .ci-key{color:var(--text-dim);font-size:11px;margin-left:20px}
.ctx-item .ci-sub{font-size:8px;color:var(--text-dim);margin-left:6px}
.ctx-sep{height:1px;background:var(--border-light);margin:3px 8px}
.ctx-sub{position:absolute;left:100%;top:-4px;background:#fff;border:1px solid #b3aea9;box-shadow:var(--shadow-lg);min-width:190px;padding:3px 0;z-index:2001}

/* ===================== Tooltip ===================== */
#tooltip{position:absolute;z-index:3000;background:#fff;border:1px solid #b3aea9;box-shadow:var(--shadow);padding:8px 10px;max-width:280px;pointer-events:none;font-size:11px}
#tooltip .tt-title{font-weight:600;font-size:12px;margin-bottom:2px}
#tooltip .tt-key{color:var(--text-dim);font-size:10.5px;margin-left:6px;font-weight:400}
#tooltip .tt-desc{color:var(--text);line-height:1.35;white-space:normal}

/* ===================== Dialogs ===================== */
.dlg-overlay{position:fixed;inset:0;background:rgba(0,0,0,.28);z-index:4000;display:flex;align-items:center;justify-content:center}
.dlg{background:#fff;border:1px solid #a19f9d;box-shadow:var(--shadow-lg);min-width:340px;max-width:640px;display:flex;flex-direction:column;border-radius:2px}
.dlg-head{height:36px;display:flex;align-items:center;padding:0 12px;font-size:14px;font-weight:600;background:var(--pane-bg);border-bottom:1px solid var(--border)}
.dlg-head .dlg-x{margin-left:auto;width:26px;height:26px;display:flex;align-items:center;justify-content:center;font-size:11px;cursor:default;border-radius:2px}
.dlg-head .dlg-x:hover{background:#e81123;color:#fff}
.dlg-body{padding:16px;font-size:12px;overflow-y:auto;max-height:60vh}
.dlg-foot{padding:10px 16px;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--border-light);background:var(--pane-bg)}
.dlg-btn{border:1px solid var(--border);background:#fff;padding:5px 18px;font-size:12px;border-radius:2px;cursor:default;font-family:var(--font)}
.dlg-btn:hover{background:var(--hover)}
.dlg-btn.primary{background:var(--app);color:#fff;border-color:var(--app)}
.dlg-btn.primary:hover{background:var(--app-dark)}
.dlg-btn:disabled,.dlg-btn.disabled{opacity:.45;pointer-events:none}
.dlg label{display:block;margin-bottom:4px}
.dlg .fld{margin-bottom:12px}
.dlg input[type=text],.dlg input[type=number],.dlg select{border:1px solid var(--border);padding:4px 7px;font-size:12px;font-family:var(--font);width:100%;border-radius:1px}
.dlg input:focus,.dlg select:focus,.dlg textarea:focus{border-color:var(--app);outline:none}
.dlg-radio{display:flex;align-items:center;gap:7px;margin:5px 0;cursor:default}
.dlg-fieldset{border:1px solid var(--border-light);padding:10px 12px;margin-bottom:12px}
.dlg-fieldset legend{font-size:11px;color:var(--text-dim);padding:0 4px}

/* ===================== Backstage (File) ===================== */
#backstage{position:fixed;inset:0;z-index:3500;display:flex;background:#fff}
.bs-nav{width:220px;background:var(--pane-bg);border-right:1px solid var(--border);display:flex;flex-direction:column;padding-top:8px;flex:none}
.bs-back{display:flex;align-items:center;gap:8px;padding:8px 16px;font-size:13px;cursor:default}
.bs-back:hover{background:var(--hover)}
.bs-nav-item{padding:9px 16px 9px 22px;font-size:13px;cursor:default;position:relative}
.bs-nav-item:hover{background:var(--hover)}
.bs-nav-item.active{background:#e6e4e2;font-weight:600}
.bs-nav-item.active::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--app)}
.bs-nav-sep{height:1px;background:var(--border);margin:6px 0}
.bs-main{flex:1;overflow-y:auto;padding:34px 48px}
.bs-title{font-size:22px;font-weight:600;margin-bottom:18px}
.bs-cards{display:flex;flex-wrap:wrap;gap:16px}
.bs-card{width:180px;cursor:default}
.bs-card .bs-card-thumb{width:180px;height:110px;border:1px solid var(--border);background:#fff;position:relative;overflow:hidden}
.bs-card:hover .bs-card-thumb{outline:2px solid var(--app);outline-offset:1px}
.bs-card .bs-card-name{margin-top:6px;font-size:12px;text-align:center}
.bs-info-grid{display:flex;gap:40px;max-width:900px}
.bs-props{font-size:12px;line-height:1.9}
.bs-props .k{color:var(--text-dim);display:inline-block;width:130px}
.bs-btn{display:inline-block;border:1px solid var(--border);background:#fff;padding:6px 18px;font-size:12px;border-radius:2px;cursor:default;margin-right:8px}
.bs-btn:hover{background:var(--hover)}
.bs-btn.primary{background:var(--app);color:#fff;border-color:var(--app)}
.bs-btn.primary:hover{background:var(--app-dark)}
.bs-section-h{font-size:14px;font-weight:600;margin:22px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--border-light);max-width:640px}

/* ===================== Slideshow ===================== */
#slideshow-root{position:fixed;inset:0;background:#000;z-index:5000;overflow:hidden}
.ss-stage{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}
.ss-slide{position:absolute;inset:0;overflow:hidden;background:#fff}
.ss-slide .slide{position:absolute;inset:0;width:100%!important;height:100%!important;transform-origin:0 0!important}
.ss-end{position:absolute;inset:0;display:flex;align-items:flex-start;justify-content:center;color:#888;font-size:14px;padding-top:10vh}
.ss-ink{position:absolute;inset:0;pointer-events:none}
.ss-navhint{position:fixed;left:10px;bottom:10px;opacity:0;transition:opacity .3s;z-index:5001}
#slideshow-root:hover .ss-navhint{opacity:.35}
.ss-navhint:hover{opacity:1!important}
.ss-navhint span{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;color:#fff;font-size:15px;cursor:default;border-radius:3px;margin-right:4px}
.ss-navhint span:hover{background:rgba(255,255,255,.2)}

/* transitions */
.tr-fade-out{transition:opacity var(--d) ease;opacity:0}
.tr-fade-in{transition:opacity var(--d) ease;opacity:1}
@keyframes trPushIn{from{transform:translateX(var(--from))}to{transform:translateX(0)}}
@keyframes trPushOut{from{transform:translateX(0)}to{transform:translateX(var(--to))}}
@keyframes trPushInY{from{transform:translateY(var(--from))}to{transform:translateY(0)}}
@keyframes trPushOutY{from{transform:translateY(0)}to{transform:translateY(var(--to))}}
@keyframes trCoverIn{from{transform:translate(var(--fx,0),var(--fy,0))}to{transform:translate(0,0)}}
@keyframes trZoomIn{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes trSplitIn{0%{clip-path:inset(0 50% 0 50%)}100%{clip-path:inset(0 0 0 0)}}
@keyframes trSplitOut{0%{clip-path:inset(0 0 0 0)}100%{clip-path:inset(0 50% 0 50%)}}
@keyframes trFlash{0%{background:#fff;opacity:1}100%{background:#fff;opacity:0}}
.tr-wipe-clip{transition:clip-path var(--d) ease-in-out}
.tr-push-anim{animation-duration:var(--d);animation-timing-function:ease-in-out;animation-fill-mode:both}

/* object animations */
.an-flyin{animation:anFly var(--d) ease both}
@keyframes anFly{from{transform:translate(var(--fx),var(--fy));opacity:1}to{transform:translate(0,0)}}
.an-fade{animation:anFade var(--d) ease both}
@keyframes anFade{from{opacity:0}to{opacity:1}}
.an-zoom{animation:anZoom var(--d) ease both}
@keyframes anZoom{from{transform:scale(.3);opacity:0}to{transform:scale(1);opacity:1}}
.an-wipe{animation:anWipe var(--d) ease both;clip-path:inset(0 0 0 0)}
@keyframes anWipe{from{clip-path:var(--clip-from)}to{clip-path:inset(0 0 0 0)}}
.an-split{animation:anSplit var(--d) ease both}
@keyframes anSplit{from{clip-path:inset(0 50% 0 50%)}to{clip-path:inset(0 0 0 0)}}
.an-float{animation:anFloat var(--d) ease both}
@keyframes anFloat{from{transform:translateY(40px);opacity:0}to{transform:translateY(0);opacity:1}}
.an-spin{animation:anSpin var(--d) ease both}
@keyframes anSpin{from{transform:rotate(-360deg) scale(.4);opacity:0}to{transform:rotate(0) scale(1)}}
.an-grow{animation:anGrow var(--d) ease both}
@keyframes anGrow{from{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}
.an-bounce{animation:anBounce var(--d) cubic-bezier(.3,1.6,.5,1) both}
@keyframes anBounce{from{transform:translateY(-120%);opacity:0}to{transform:translateY(0);opacity:1}}
.an-pulse{animation:anPulse var(--d) ease both}
@keyframes anPulse{0%{transform:scale(1)}50%{transform:scale(1.12)}100%{transform:scale(1)}}
.an-teeter{animation:anTeeter var(--d) ease both}
@keyframes anTeeter{0%{transform:rotate(0)}25%{transform:rotate(-6deg)}75%{transform:rotate(6deg)}100%{transform:rotate(0)}}
.an-exit-fade{animation:anExitFade var(--d) ease both}
@keyframes anExitFade{from{opacity:1}to{opacity:0}}
.an-exit-fly{animation:anExitFly var(--d) ease both}
@keyframes anExitFly{from{transform:translate(0,0)}to{transform:translate(var(--fx),var(--fy));opacity:0}}
.an-exit-zoom{animation:anExitZoom var(--d) ease both}
@keyframes anExitZoom{from{transform:scale(1);opacity:1}to{transform:scale(.3);opacity:0}}
.an-exit-disappear{animation:anExitFade .01s linear both}
.an-appear{animation:anAppear .01s linear both}
@keyframes anAppear{from{opacity:0}to{opacity:1}}

/* grid picker (tables, shapes insert) */
.grid-pick{padding:10px}
.grid-pick .gp-cells{display:grid;gap:1px;background:var(--border-light);border:1px solid var(--border-light)}
.grid-pick .gp-cell{background:#fff;width:18px;height:18px}
.grid-pick .gp-cell.on{background:#cde4f7}
.grid-pick .gp-label{text-align:center;font-size:11px;color:var(--text-dim);margin-top:6px}
.shape-gal{display:grid;grid-template-columns:repeat(8,34px);gap:4px;padding:10px;max-width:330px}
.shape-gal .sg{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:2px;cursor:default}
.shape-gal .sg:hover{border-color:var(--app);background:var(--sel-bg)}
.shape-gal .sg svg{width:26px;height:26px}
.sg-sec{grid-column:1/-1;font-size:10.5px;color:var(--text-dim);margin-top:4px}

/* Tell me results */
.tm-results{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #b3aea9;box-shadow:var(--shadow-lg);z-index:1500;max-height:320px;overflow-y:auto}
.tm-item{padding:7px 12px;font-size:12px;cursor:default;display:flex;align-items:center;gap:8px}
.tm-item:hover,.tm-item.sel{background:var(--hover)}
.tm-item svg{width:14px;height:14px;flex:none}
.tm-head{padding:5px 12px;font-size:10.5px;color:var(--text-dim);background:var(--pane-bg)}

/* ruler / gridlines */
#slide-scroll.show-grid .slide{background-image:none}
.canvas-grid{position:absolute;inset:0;pointer-events:none;opacity:.5}
.guide-h,.guide-v{position:absolute;background:#20b2aa;z-index:14;pointer-events:none}
.guide-h{height:1px;left:0;right:0}
.guide-v{width:1px;top:0;bottom:0}

/* print */
#print-root{display:none}
@media print{
  #app,#popup-layer,#tooltip,#slideshow-root{display:none!important}
  #print-root{display:block}
  .print-slide{page-break-after:always;width:10in;height:7.5in;position:relative;margin:0 auto}
  .print-slide .slide{width:100%!important;height:100%!important}
}

/* narrow viewport notice */
#narrow-note{display:none}
@media (max-width:760px){
  #narrow-note{display:flex;position:fixed;inset:0;z-index:9000;background:rgba(255,255,255,.97);flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px;font-size:14px;color:var(--text)}
  #narrow-note .nn-title{font-size:18px;font-weight:600;margin-bottom:10px}
}

/* --- missing bits appended --- */
#save-state{color:rgba(255,255,255,.75);font-size:11px;margin-left:6px}
.ppt-cell{display:flex;align-items:flex-start;padding:3px 7px;overflow:hidden}
.sel-frame{position:absolute;border:1.5px solid var(--sel);pointer-events:none;z-index:15}
.tp-check{display:flex;align-items:center;gap:6px;font-size:12px;padding:3px 0;cursor:default}

/* rulers + guides */
.ruler-h{position:fixed;top:0;left:0;right:0;height:16px;background:#fbfaf9;border-bottom:1px solid var(--border);z-index:40;pointer-events:none;overflow:hidden}
.ruler-h span{position:absolute;top:1px;font-size:8px;color:var(--text-dim);border-left:1px solid #b7b3b0;padding-left:2px;height:14px;line-height:10px}
.ruler-v{position:fixed;width:16px;background:#fbfaf9;border-right:1px solid var(--border);z-index:40;pointer-events:none;overflow:hidden}
.ruler-v span{position:absolute;left:1px;font-size:8px;color:var(--text-dim);border-top:1px solid #b7b3b0;width:14px;writing-mode:vertical-rl;transform:rotate(180deg)}
.ruler-corner{position:fixed;width:16px;height:16px;background:#fbfaf9;border-right:1px solid var(--border);border-bottom:1px solid var(--border);z-index:41}
.canvas-guides{position:absolute;inset:0;pointer-events:none;z-index:19}
.canvas-guides .guide{position:absolute}

/* chart data editor */
.cd-grid{border-collapse:collapse;width:100%}
.cd-grid th,.cd-grid td{border:1px solid var(--border);padding:0}
.cd-grid th{background:var(--pane-bg);font-weight:600;font-size:11px}
.cd-in{border:none;outline:none;width:76px;padding:4px 6px;font-family:var(--font);font-size:12px;background:transparent}
.cd-num{text-align:right}
.cd-del{border:none;background:none;cursor:pointer;color:var(--text-dim);padding:2px 6px}
.cd-del:hover{color:var(--app)}

/* reading view: keep title bar + status bar visible */
#slideshow-root.reading{top:32px;bottom:24px}
