// =====================================================================
// CENA B-docs (2,62-4,95 s, ref 4,875) - janela escura estilo Google Earth/Docs no Chrome. Agente w-agenda, 17/10/2026. ES3.
// Rodar num eval.run:  $.evalFile(P + "ae/B-docs.jsx"); return GERAR_B();
// Mundo = quadro 4,875 s do original. Camera: camera/w-agenda/cena-B-docs.json (cadeia SIFT; o trecho 4,46-4,83
// NAO segura: a camera continua recuando - so o anel de texto do globo gira).
// Interface igual ao original (menu em indonesio). Textos de letra: slots B1 e B2 do ae/letra.json.
// Elementos (de baixo para cima):
//   PAGINA (PNG 3x: faixa do menu, faixa da barra, campo preto com estrelas, icones da barra)
//   ENCAIXE A-agenda (comp provisoria) + JANELA A matte (quadrado da janela que arredonda ate virar circulo)
//   ESFERA B (o icone azul: cresce de 0,8 a 49 px de mundo entre 2,625 e 3,5 s, centro fixo)
//   MENU (6 textos), PILULA + LUPA (vetor), BUSCA (texto digitado, a camera segue)
//   GLOBO (imagem fixa) + ANEL TEXTO (slot B2) (texto em caminho circular que gira 4,42 s em diante)
//   MOLDURA (cinza com furo arredondado que cresce 4,58-4,92 s: a janela/cartao do alt-tab aparece) + LEGENDA
// =====================================================================
var P_W = File.decode("<HOME>/Documents/Cria%C3%A7%C3%A3o%20de%20conteudo/07-videos/projetos/2026-10-17-subzmotion-recriacao/");
$.evalFile(new File(P_W + "ae/camera.jsx"));
$.evalFile(new File(P_W + "ae/digitar.jsx"));
$.evalFile(new File(P_W + "ae/w-agenda/util.jsx"));
$.evalFile(new File(P_W + "ae/letra.jsx"));
// Busca (slot B1): tempos medidos no original (1a letra de cada palavra em 3,125 / 3,375 / 3,75 / 3,958 s; ultima em 4,167 s).
var B_DIG = { t: [3.125, 3.375, 3.75, 3.958], fim: 4.23, fica: 0 };

var B_COR = { texto: [227, 227, 227], pilula: [53, 55, 58], lupa: [196, 199, 197], moldura: [27, 27, 27], anel: [236, 236, 236], legenda: [214, 214, 214] };
var B_GS = "GoogleSansFlex120pt-Regular", B_GSM = "GoogleSansFlex120pt-Medium";
var B_ENC = { centro: [-318.7, 135.6], lado: 59.21 };          // onde a cena A mora no mundo B (= mira/zoom do CAM em 2,625 s)
var B_JANELA = { centro: [-320.6, 134.6], lado: [53.5, 53.6] };  // janela da Agenda dentro do encaixe (mundo B)
var B_GLOBO = { c: [544.5, 586.5], r: 143, rTexto: 151, inicioGraus: 136.5, arcoGraus: 206 };  // anel: linha de base no raio 151, de 136,5 a 342,5 graus

function B_encaixeProvisorio(nome) {
  var velha = U_comp(nome); if (velha) velha.remove();
  var c = app.project.items.addComp(nome, 1080, 1080, 1, 814 / 24, 24);
  c.layers.addSolid([0.42, 0.42, 0.42], "cinza", 1080, 1080, 1, c.duration);
  var t = c.layers.addText(nome);
  var tp = t.property("ADBE Text Properties").property("ADBE Text Document"); var d = tp.value;
  d.font = "GoogleSansFlex120pt-Medium"; d.fontSize = 90; d.fillColor = [1, 1, 1]; d.justification = ParagraphJustification.CENTER_JUSTIFY;
  tp.setValue(d);
  t.property("ADBE Transform Group").property("ADBE Position").setValue([540, 560]);
  return c;
}
// circulo como Shape de 4 vertices comecando no angulo a0 (graus, tela: 0 = direita, 90 = baixo) e andando no sentido horario
function B_circulo(cx, cy, r, a0) {
  var s = new Shape(), v = [], it = [], ot = [], k = r * 0.5523;
  for (var i = 0; i < 4; i++) {
    var a = (a0 + 90 * i) * Math.PI / 180, c = Math.cos(a), sn = Math.sin(a);
    v.push([cx + r * c, cy + r * sn]); ot.push([-k * sn, k * c]); it.push([k * sn, -k * c]);
  }
  s.vertices = v; s.inTangents = it; s.outTangents = ot; s.closed = true; return s;
}

// a busca do original e toda em minusculas (estilo de digitacao na pilula), qualquer que seja a caixa do texto colado
function B_caixaB1(t) { return String(t).toLowerCase(); }

function GERAR_B() {
  var comp = U_novaComp("CENA B-docs");
  var cam = CAMERA_criar(comp, P_W + "camera/w-agenda/cena-B-docs.json");
  var f = U_f, i;

  var fundo = comp.layers.addSolid([0, 0, 0], "FUNDO", 1080, 1080, 1, comp.duration); fundo.moveToEnd();
  var pag = U_importar(P_W + "assets/B-docs/B-pagina.png");
  var lp = U_png(comp, pag, "PAGINA", cam, [-450, -150]);
  U_tr(lp).property("ADBE Anchor Point").setValue([0, 0]);

  // ---------- a Agenda encolhida vira o fundo do icone ----------
  var enc = B_encaixeProvisorio("ENCAIXE A-agenda");
  var le = CAMERA_encaixe(comp, cam, enc, B_ENC.centro, B_ENC.lado, 0, "ENCAIXE A-agenda");
  le.motionBlur = true;
  var jm = U_forma(comp, "JANELA A matte", cam);
  var jg = U_ret(jm, "janela", B_JANELA.centro[0] - B_JANELA.lado[0] / 2, B_JANELA.centro[1] - B_JANELA.lado[1] / 2,
                 B_JANELA.centro[0] + B_JANELA.lado[0] / 2, B_JANELA.centro[1] + B_JANELA.lado[1] / 2, 0.8, [255, 255, 255]);
  var rr = [[63, 0.8], [65, 1.2], [67, 2.2], [68, 3.2], [69, 5.5], [70, 8.5], [71, 12.5], [72, 17], [73, 22.5], [74, 26.8]];
  var lr = []; for (i = 0; i < rr.length; i++) lr.push([f(rr[i][0]), rr[i][1]]);
  U_chaves(jm.property("ADBE Root Vectors Group").property("janela").property("ADBE Vectors Group").property("ADBE Vector Shape - Rect").property("ADBE Vector Rect Roundness"), lr);
  jm.moveBefore(le);
  le.setTrackMatte(jm, TrackMatteType.ALPHA);

  // ---------- esfera azul (icone do app) ----------
  var es = U_png(comp, U_importar(P_W + "assets/A-agenda/esfera.png"), "ESFERA B", cam, [-320.8, 135.6], 0);
  var dEs = [[63, 0.82], [64, 1.31], [65, 2.14], [66, 3.08], [67, 4.16], [68, 5.78], [69, 7.96], [70, 11.14], [71, 15.79], [72, 23.3],
             [73, 31.7], [74, 38.0], [75, 40.7], [76, 43.0], [77, 44.9], [78, 46.2], [79, 47.3], [80, 48.5], [81, 48.8], [82, 49.0], [84, 49.3]];
  var lse = []; for (i = 0; i < dEs.length; i++) { var e = 100 * dEs[i][1] / 1090; lse.push([f(dEs[i][0]), [e, e]]); }
  U_chaves(U_tr(es).property("ADBE Scale"), lse);
  es.inPoint = f(63);

  // ---------- menu (vetor) ----------
  // igual ao original (interface em indonesio), com o inicio de cada item medido no mundo
  var itens = ["File", "Edit", "Tampilan", "Tambahkan", "Alat", "Bantuan"];
  var xs = [-275, -208, -138, -21, 119, 190];
  for (i = 0; i < itens.length; i++) U_texto(comp, "MENU " + itens[i], itens[i], cam, [xs[i], 105], B_GS, 22, B_COR.texto, 0);
  // ---------- pilula de busca + lupa + texto digitado ----------
  var pl = U_forma(comp, "PILULA", cam);
  U_ret(pl, "pilula", -270, 132, 152, 185, 26.5, B_COR.pilula);
  var lu = U_forma(comp, "LUPA", cam);
  U_elipse(lu, "lente", -238.5, 155, 15, B_COR.lupa, 2.6);
  U_linha(lu, "cabo", [[-232.8, 160.8], [-226.5, 167.2]], B_COR.lupa, 2.6);
  // texto de exemplo cinza na pilula ate 3,04 s; no quadro seguinte so o cursor; depois a digitacao
  var ph = U_texto(comp, "BUSCA exemplo", "Explore", cam, [-194, 166], B_GS, 25, [150, 150, 152], 0);
  ph.outPoint = f(74);
  var sB1 = LETRA("B1");
  var bu = U_texto(comp, "BUSCA", B_caixaB1(sB1.texto), cam, [-194, 166], B_GS, 25, B_COR.texto, 0);
  // digitacao quadro a quadro medida no original (letras por quadro, tamanho das palavras, cursor piscando);
  // texto colado com outro numero de palavras cai no DIGITAR com os tempos B_DIG
  var B1Q = { F0: 74, C: [0,1,2,2,3,3,3,5,6,6,7,7,8,9,9,10,11,11,12,12,12,14,14,15,16,16,17], LO: [3,5,2,4], CUR: [[74,74],[83,90],[99,100]] };
  if (sB1.palavras.length == B1Q.LO.length) U_digitarQuadros(bu, B_caixaB1(sB1.texto), B1Q.C, B1Q.F0, B1Q.LO, B1Q.CUR);
  else DIGITAR(bu, sB1.palavras, (sB1.palavras.length == B_DIG.t.length) ? B_DIG.t : sB1.tempos, B_DIG.fim, { cursor: true, cursorFica: B_DIG.fica });

  // ---------- globo + anel de texto ----------
  var gl = U_png(comp, U_importar(P_W + "assets/B-docs/globo.png"), "GLOBO", cam, B_GLOBO.c, 100 * 2 * B_GLOBO.r / 1162.5);
  gl.inPoint = f(104);
  // texto curvo (slot B2, caixa alta). Dimensionado para ocupar o mesmo arco do original: de 136,5 a 342,5 graus
  // sobre o raio 151 (535 px de linha de base). Fonte Poppins SemiBold corpo 98 (altura das maiusculas ~70 px, como
  // no original); o espacamento ajusta; texto comprido demais reduz o corpo.
  var sB2 = LETRA("B2"); var txB2 = sB2.texto.toUpperCase();
  var an = U_texto(comp, "ANEL TEXTO", txB2, cam, [0, 0], "Poppins-SemiBold", 98, B_COR.anel, 0);
  var arco = B_GLOBO.rTexto * B_GLOBO.arcoGraus * Math.PI / 180;
  var w0 = an.sourceRectAtTime(0, false).width, nL = txB2.length, corpo = 98, trackPx = (arco - w0) / Math.max(1, nL - 1);
  if (trackPx < -3) { trackPx = -3; corpo = 98 * (arco + 3 * (nL - 1)) / w0; }
  if (trackPx > 16) trackPx = 16;
  var tdB2 = an.property("ADBE Text Properties").property("ADBE Text Document"); var dB2 = tdB2.value;
  dB2.fontSize = corpo; dB2.tracking = Math.round(1000 * trackPx / corpo); tdB2.setValue(dB2);
  var mk = an.property("ADBE Mask Parade").addProperty("ADBE Mask Atom");
  mk.property("ADBE Mask Shape").setValue(B_circulo(B_GLOBO.c[0], B_GLOBO.c[1], B_GLOBO.rTexto, B_GLOBO.inicioGraus));
  mk.maskMode = MaskMode.NONE;
  var po = an.property("ADBE Text Properties").property("ADBE Text Path Options");
  po.property("ADBE Text Path").setValue(1);
  po.property("ADBE Text First Margin").setValue(0);
  U_tr(an).property("ADBE Anchor Point").setValue(B_GLOBO.c); U_tr(an).property("ADBE Position").setValue(B_GLOBO.c);
  var gr = [[104, -228], [105, -205], [106, -184], [107, -159], [108, -129], [109, -100], [110, -75], [111, -56], [112, -41],
            [113, -29.5], [114, -20], [115, -12], [116, -5.5], [117, 0], [118, 4.5], [119, 9], [120, 12.5], [122, 17], [125, 19.5], [128, 20.5]]; // depois de 4,92 s desacelera e para (cena C mostra o anel quase parado)
  var lg = []; for (i = 0; i < gr.length; i++) lg.push([f(gr[i][0]), gr[i][1]]);
  U_chaves(U_tr(an).property("ADBE Rotate Z"), lg);
  an.inPoint = f(104);

  // ---------- moldura (o furo cresce: aparece o cinza em volta da janela) ----------
  var mo = U_forma(comp, "MOLDURA", cam);
  var gm = mo.property("ADBE Root Vectors Group").addProperty("ADBE Vector Group"); gm.name = "cinza";
  var cc = mo.property("ADBE Root Vectors Group").property("cinza").property("ADBE Vectors Group");
  var big = cc.addProperty("ADBE Vector Shape - Rect");
  big.property("ADBE Vector Rect Size").setValue([12000, 12000]); big.property("ADBE Vector Rect Position").setValue([540, 540]);
  cc = mo.property("ADBE Root Vectors Group").property("cinza").property("ADBE Vectors Group");
  var furo = cc.addProperty("ADBE Vector Shape - Rect"); furo.name = "furo";
  cc = mo.property("ADBE Root Vectors Group").property("cinza").property("ADBE Vectors Group");
  var mg = cc.addProperty("ADBE Vector Filter - Merge"); mg.property("ADBE Vector Merge Type").setValue(3); // subtrair
  cc = mo.property("ADBE Root Vectors Group").property("cinza").property("ADBE Vectors Group");
  var fi = cc.addProperty("ADBE Vector Graphic - Fill"); fi.property("ADBE Vector Fill Color").setValue(U_cor(B_COR.moldura));
  // bordas do furo por quadro (mundo): [quadro, esquerda, topo, direita, baixo]
  var bd = [[104, -2000, -100, 400, 600], [106, -1600, -20, 545, 680], [107, -1400, 10, 620, 721], [108, -1200, 30, 690, 762],
            [109, -1000, 42, 745, 810], [110, -800, 50, 794, 854], [111, -600, 55, 838, 894], [112, -400, 56, 878, 929],
            [113, -200, 56, 914, 959], [114, -60, 56, 947, 982], [115, 11, 56, 976, 1000], [116, 10, 56, 1002, 1013],
            [117, 7, 55, 1026, 1022], [118, 2, 55, 1050, 1025]]; // depois de 4,92 s segura (a cena C assume)
  var ls = [], lpp = [];
  for (i = 0; i < bd.length; i++) {
    var q = bd[i]; ls.push([f(q[0]), [q[3] - q[1], q[4] - q[2]]]); lpp.push([f(q[0]), [(q[1] + q[3]) / 2, (q[2] + q[4]) / 2]]);
  }
  var fp = mo.property("ADBE Root Vectors Group").property("cinza").property("ADBE Vectors Group").property("furo");
  U_chaves(fp.property("ADBE Vector Rect Size"), ls); U_chaves(fp.property("ADBE Vector Rect Position"), lpp);
  fp.property("ADBE Vector Rect Roundness").setValue(12);
  // filete preto na borda do furo
  var gb = mo.property("ADBE Root Vectors Group").addProperty("ADBE Vector Group"); gb.name = "filete";
  var cb = mo.property("ADBE Root Vectors Group").property("filete").property("ADBE Vectors Group");
  var f2 = cb.addProperty("ADBE Vector Shape - Rect"); f2.name = "furo2";
  cb = mo.property("ADBE Root Vectors Group").property("filete").property("ADBE Vectors Group");
  var st = cb.addProperty("ADBE Vector Graphic - Stroke"); st.property("ADBE Vector Stroke Color").setValue([0, 0, 0]); st.property("ADBE Vector Stroke Width").setValue(6);
  var fp2 = mo.property("ADBE Root Vectors Group").property("filete").property("ADBE Vectors Group").property("furo2");
  fp2.property("ADBE Vector Rect Size").expression = 'content("cinza").content("furo").size';
  fp2.property("ADBE Vector Rect Position").expression = 'content("cinza").content("furo").position';
  fp2.property("ADBE Vector Rect Roundness").setValue(12);
  mo.inPoint = f(104);
  var lgd = U_texto(comp, "LEGENDA", "Google Chrome - Google Chrome", cam, [-8, 19.5], "SegoeUI", 38, B_COR.legenda, 0);
  U_chaves(U_tr(lgd).property("ADBE Position"), [[f(116), [-9, 12]], [f(117), [-8, 19.5]], [f(118), [-7.9, 21.8]]]);
  lgd.inPoint = f(116);

  cam.moveToBeginning();
  return { ok: true, comp: comp.name, camadas: comp.numLayers };
}
