:root{
    --bg:#0d0f12;
    --ink:#e9eef5;
    --muted:#a8b3c2;
    --gold:#c8b071;
    --line:#253041;
    --safeTop: env(safe-area-inset-top, 0px);
    --safeBottom: env(safe-area-inset-bottom, 0px);
    --safeLeft: env(safe-area-inset-left, 0px);
    --safeRight: env(safe-area-inset-right, 0px);
  }
  *{box-sizing:border-box}
  body{
    margin:0; height:100vh; overflow:hidden;
    background: radial-gradient(1200px 700px at 30% 20%, #151a22 0%, var(--bg) 60%);
    color:var(--ink);
    font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial;
    -webkit-tap-highlight-color: transparent;
  }
  header{
    position:absolute;
    left: calc(12px + var(--safeLeft));
    right: calc(12px + var(--safeRight));
    top: calc(12px + var(--safeTop));
    display:flex; justify-content:space-between; align-items:flex-start; gap:10px;
    z-index:5; pointer-events:none;
  }
  .brand{pointer-events:auto; display:flex; flex-direction:column; gap:2px; line-height:1.15;}
  .brand .t{font-weight:750; letter-spacing:.6px; font-size:13px; margin:0;}
  .brand .s{color:var(--muted); font-size:12px; margin:0;}
  .bar{
    pointer-events:auto;
    display:flex; gap:8px; align-items:center; flex-wrap:wrap;
    background: rgba(17,21,27,.55);
    border: 1px solid rgba(37,48,65,.6);
    backdrop-filter: blur(10px);
    padding:10px 10px;
    border-radius:14px;
  }
  .btn{
    cursor:pointer;
    font-size:12px; color:var(--ink);
    padding:7px 10px;
    border-radius:12px;
    border:1px solid rgba(37,48,65,.9);
    background: rgba(29,38,51,.55);
    user-select:none;
  }
  .btn:hover{background: rgba(34,49,70,.7);}
  .btn.gold{border-color: rgba(200,176,113,.8); background: rgba(200,176,113,.10);}
  .chip{font-size:12px; color:var(--muted); padding:6px 10px; border-radius:999px; border:1px solid rgba(37,48,65,.7); background: rgba(15,19,24,.45);}
  .chip.gold{border-color: rgba(200,176,113,.8); background: rgba(200,176,113,.10);}
  .chip b{color:var(--ink)}
  .chip.clickable{cursor:pointer; user-select:none;}
  .chip.clickable:hover{background: rgba(29,38,51,.55); border-color: rgba(200,176,113,.45);}

  #wrap{position:absolute; inset:0;}
  #edgeFade{
    position:absolute;
    inset:0;
    pointer-events:none;
    opacity:0;
    z-index:2;
    background:
      linear-gradient(to bottom, rgba(0,0,0,.72) 0, rgba(0,0,0,0) 1cm),
      linear-gradient(to top, rgba(0,0,0,.72) 0, rgba(0,0,0,0) 1cm),
      linear-gradient(to right, rgba(0,0,0,.72) 0, rgba(0,0,0,0) 1cm),
      linear-gradient(to left, rgba(0,0,0,.72) 0, rgba(0,0,0,0) 1cm);
    transition: opacity .22s ease-out;
  }
  canvas{width:100%; height:100%; display:block; touch-action:none;}

  .hint{
    position:absolute;
    left: calc(12px + var(--safeLeft));
    bottom: calc(12px + var(--safeBottom));
    z-index:3;
    padding:10px 12px;
    border-radius:14px;
    background: rgba(17,21,27,.55);
    border:1px solid rgba(37,48,65,.6);
    backdrop-filter: blur(10px);
    font-size:12px;
    color:var(--muted);
    pointer-events:none;
    max-width:min(520px, calc(100vw - 24px));
  }
  @media (max-width: 820px){ .hint{max-width: calc(100vw - 24px);} }

  /* 90% immersive modal */
  .modal{position:fixed; inset:0; z-index:20; display:none; overflow-y:auto;}
  .modal.open{display:block;}
  .modal .backdrop{position:absolute; inset:0; background: rgba(0,0,0,.52); backdrop-filter: blur(8px);}
  .modal .sheet{
    position:relative;
    left:auto; top:auto;
    transform:none;
    margin: calc(14px + var(--safeTop)) auto calc(14px + var(--safeBottom));
    width: min(1100px, calc(90vw - var(--safeLeft) - var(--safeRight)));
    height: auto;
    min-height: calc(90vh - var(--safeTop) - var(--safeBottom));
    border-radius:22px;
    overflow:visible;
    border:1px solid rgba(37,48,65,.75);
    background: rgba(15,19,24,.92);
    box-shadow: 0 30px 90px rgba(0,0,0,.55);
    display:flex; flex-direction:column;
  }
  @media (max-width: 520px){
    .modal .sheet{width: calc(92vw - var(--safeLeft) - var(--safeRight)); border-radius:18px;}
  }
  .mHead{
    display:flex; align-items:center; justify-content:space-between; gap:10px;
    padding: 12px 12px;
    background: rgba(17,21,27,.78);
    border-bottom: 1px solid rgba(37,48,65,.7);
  }
  .mTitle{display:flex; flex-direction:column; gap:2px; min-width:0;}
  .mTitle .t{font-weight:800; font-size:14px; letter-spacing:.4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
  .mTitle .s{font-size:12px; color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
  .mBody{flex:1; min-height:0;}

  .editor{
    position:relative;
    display:grid;
    grid-template-columns: minmax(0,1fr) 320px;
    grid-template-areas:
      "top side"
      "canvas side";
    padding:12px;
    gap:0;
    overflow:visible;
  }
  .editorTop{
    grid-area: top;
    display:flex; gap:8px; align-items:center; flex-wrap:wrap;
    margin-bottom:10px;
  }
  .subbtn{
    cursor:pointer; font-size:12px; color:var(--ink);
    padding:7px 10px; border-radius:12px;
    border:1px solid rgba(37,48,65,.9);
    background: rgba(29,38,51,.55);
  }
  .subbtn:hover{background: rgba(34,49,70,.7);}
  .subbtn.danger{border-color: rgba(220,90,90,.7); background: rgba(220,90,90,.08);}
  .subbtn.gold{border-color: rgba(200,176,113,.75); background: rgba(200,176,113,.10);}
  .canvasBox{
    grid-area: canvas;
    position:relative;
    margin-top:10px;
    width:100%;
    min-height:200px;
    border-radius:18px;
    border:1px solid rgba(37,48,65,.75);
    background: rgba(0,0,0,.20);
    overflow:auto;
  }
  #roomCanvas{width:100%; height:100%; display:block;}
  .side{
    grid-area: side;
    border-left: 1px solid rgba(37,48,65,.7);
    background: rgba(17,21,27,.35);
    padding:12px;
    display:flex;
    flex-direction:column;
    min-height:0;
    overflow:hidden;
    margin-left:12px;
    border-radius:14px;
  }
  .side h3{margin:0 0 8px 0; font-size:13px; letter-spacing:.3px;}
  .palette{
    display:flex;
    flex-direction:column;
    flex-wrap:nowrap;
    align-items:stretch;
    gap:6px;
    flex:1;
    min-height:0;
    overflow-y:auto;
    overflow-x:hidden;
    padding-right:2px;
  }
  .pItem{
    flex:0 0 auto;
    min-width:0;
    border:1px solid rgba(37,48,65,.75);
    border-radius:14px;
    background: rgba(15,19,24,.45);
    padding:6px;
    cursor:pointer;
    display:flex; flex-direction:row; gap:8px; align-items:center; justify-content:flex-start;
  }
  .pItem.selected{outline:2px solid rgba(200,176,113,.8);}
  .pItem img{width:64px; height:64px;}
  .pItem img.photoTileIcon{
    width:112px;
    height:80px;
    object-fit:cover;
    border-radius:10px;
    border:1px solid rgba(255,255,255,.26);
    box-shadow:
      0 2px 10px rgba(0,0,0,.30),
      inset 0 1px 0 rgba(255,255,255,.24);
    filter:saturate(1.22) contrast(1.08) brightness(1.04) sepia(.06);
  }
  .pItem span{font-size:11px; color:var(--muted); text-align:left;}
  .kv{font-size:12px; color:var(--muted); line-height:1.35; margin-top:10px;}
  .kv code{color:var(--ink);}

  @media (max-width: 860px){
    .editor{
      grid-template-columns: 1fr;
      grid-template-areas:
        "top"
        "side"
        "canvas";
    }
    .editorTop{margin-bottom:8px;}
    .side{
      margin:0 0 10px 0;
      border-left:none;
      border:1px solid rgba(37,48,65,.7);
      max-height:none;
      overflow:visible;
    }
  }

  .miniModal{position:fixed; inset:0; z-index:32; display:none;}
  .miniModal.open{display:block;}
  #detailModal{z-index:34;}
  .miniModal .mb{
    position:absolute; inset:0;
    background: rgba(0,0,0,.45);
    backdrop-filter: blur(4px);
  }
.miniModal .ms{
  position:absolute;
  left:50%; top:50%;
  transform: translate(-50%,-50%);
  width:min(620px, calc(92vw - var(--safeLeft) - var(--safeRight)));
  max-height: calc(80vh - var(--safeTop) - var(--safeBottom));
  overflow:auto;
  border-radius:18px;
  border:1px solid rgba(37,48,65,.75);
    background: rgba(15,19,24,.95);
    box-shadow: 0 20px 60px rgba(0,0,0,.55);
}
#addRoomPickerModal .ms{
  width:min(80vw, calc(100vw - var(--safeLeft) - var(--safeRight) - 24px));
  max-width: 1400px;
}
.miniModal .mh{
    display:flex; align-items:center; justify-content:space-between; gap:10px;
    padding:10px 12px;
    border-bottom:1px solid rgba(37,48,65,.7);
    background: rgba(17,21,27,.70);
  }
  .miniModal .mh > div{display:flex; flex-direction:column; gap:1px; line-height:1.08;}
  .miniModal .mt{font-size:13px; font-weight:800; letter-spacing:.3px; margin:0; line-height:1.08;}
  .miniModal .msub{font-size:12px; color:var(--muted); margin:0; line-height:1.08;}
  .miniModal .mc{padding:12px;}
  .sourceGrid{
    display:flex;
    flex-direction:column;
    gap:10px;
    max-height:55vh;
    overflow-y:auto;
    overflow-x:hidden;
    padding-right:2px;
  }
  .detailGrid{
    display:flex;
    flex-direction:column;
    gap:10px;
    max-height:55vh;
    overflow-y:auto;
    overflow-x:hidden;
    padding-right:2px;
  }
  .sourceItem{
    border:1px solid rgba(37,48,65,.75);
    border-radius:12px;
    padding:8px;
    background: rgba(15,19,24,.50);
    font-size:12px;
    color:var(--ink);
    display:grid;
    grid-template-columns: 148px 1fr;
    align-items:center;
    gap:10px;
    min-height:118px;
    text-align:left;
    cursor:pointer;
  }
  .sourceItem:hover{background: rgba(29,38,51,.62);}
  .sourceIcon{
    width:100%;
    height:100%;
    object-fit:cover;
    border-radius:10px;
    box-shadow: 0 2px 8px rgba(0,0,0,.28);
  }
  .sourceIcon.photoTileIcon{
    width:100%;
    height:100%;
    border-radius:10px;
    border:1px solid rgba(255,255,255,.26);
    box-shadow:
      0 3px 12px rgba(0,0,0,.34),
      inset 0 1px 0 rgba(255,255,255,.24);
    filter:saturate(1.22) contrast(1.08) brightness(1.04) sepia(.06);
  }
  .sourceText{
    min-width:0;
    width:100%;
    display:flex;
    flex-direction:column;
    justify-content:flex-start;
    align-items:flex-start;
    gap:4px;
  }
  .sourceName{
    font-size:13px;
    font-weight:700;
    line-height:1.2;
  }
  .sourceKind{
    color:var(--muted);
    font-size:11px;
    line-height:1.2;
  }
.roomPickGrid{
  display:grid;
  grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
  gap:10px;
}
.roomPickItem{
  border:1px solid rgba(37,48,65,.75);
  border-radius:12px;
  padding:10px;
  background: rgba(15,19,24,.50);
  color:var(--ink);
  text-align:left;
  cursor:pointer;
  display:flex;
  flex-direction:column;
  gap:4px;
}
.roomPickIcon{
  width:100%;
  height:86px;
  object-fit:cover;
  border-radius:10px;
  border:1px solid rgba(255,255,255,.18);
  box-shadow: 0 2px 8px rgba(0,0,0,.28);
  margin-bottom:2px;
}
.roomPickItem:hover{background: rgba(29,38,51,.62);}
.roomPickItem b{font-size:12px; line-height:1.15;}
.roomPickItem span{font-size:11px; color:var(--muted);}
.detailItem{
  border:1px solid rgba(37,48,65,.75);
  border-radius:12px;
  padding:8px;
  background: rgba(15,19,24,.50);
  display:grid;
  grid-template-columns: 144px 1fr;
  align-items:start;
  gap:10px;
  min-height:148px;
  text-align:left;
}
.detailIcon{
  width:100%;
  height:118px;
  object-fit:cover;
  border-radius:10px;
  box-shadow: 0 2px 8px rgba(0,0,0,.28);
  grid-column:1;
  grid-row:1 / span 2;
}
.detailHead{
  width:100%;
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:8px;
  grid-column:2;
}
.detailActions{
  display:flex;
  align-items:center;
  gap:6px;
}
.findBtn{
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  vertical-align:middle;
  line-height:1;
  font-size:16px;
  color:var(--ink);
  padding:5px 12px;
  border-radius:8px;
  border:1px solid rgba(200,176,113,.65);
  background: rgba(200,176,113,.15);
  white-space:nowrap;
}
.findBtn:hover{background: rgba(200,176,113,.25);}
.addBtn{
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  vertical-align:middle;
  line-height:1;
  font-size:16px;
  color:var(--ink);
  padding:5px 12px;
  border-radius:8px;
  border:1px solid rgba(96,180,120,.70);
  background: rgba(96,180,120,.16);
  white-space:nowrap;
}
.addBtn:hover{background: rgba(96,180,120,.28);}
.detailItem b{display:block; font-size:12px; margin-bottom:2px; color:var(--ink);}
.detailItem span{color:var(--muted); font-size:11px; grid-column:2; margin-top:2px;}

